Missing LineNumberTable entries with JDK8?

Marc R. Hoffmann hoffmann at mountainminds.com
Mon Jul 15 01:22:06 PDT 2013


Hi,

I'm currently working on a Java 8 version of the code coverage tool 
JaCoCo. This tool relies on line number information within class files. 
Some of our integration tests fail with JDK8, probably due to incomplete 
line number information.

STEPS TO REPRODUCE

Compile the source file attached with the lates JDK8 build 
(1.8.0-ea-b97). Compiled class is also attached.

EXPECTED

The compiled class files has a LineNumberTable entry for the method 
invocation b() in line 10.

ACTUAL

There is no separate LineNumberTable entry for the invocation of b(). So 
b() appears to be invoked in line 8 instead of 10. See javap output below.

The problem seems to be specific to static methods. Line numbers are 
reported correctly if method b() is an instance method.

Best regards,
-marc


   static void m(boolean);
     descriptor: (Z)V
     flags: ACC_STATIC
     Code:
       stack=1, locals=1, args_size=1
          0: iload_0
          1: ifeq          10
          4: invokestatic  #2                  // Method a:()V
          7: goto          13
         10: invokestatic  #3                  // Method b:()V
         13: return
       LineNumberTable:
         line 7: 0
         line 8: 4
         line 12: 13
       StackMapTable: number_of_entries = 2
            frame_type = 10 /* same */
            frame_type = 2 /* same */

-------------- next part --------------
/**
 * Reproducer for Java 8 compiler issue where wrong line numbers are reported..
 */
public class Target01 {

	static void m(boolean flag) {
		if (flag) {
			a();
		} else {
			b(); // Wrong line number for this invocation (8 instead of 10)
		}
	}

	static void a() {
	}

	static void b() {
	}

}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Target01.class
Type: application/octet-stream
Size: 393 bytes
Desc: not available
Url : http://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20130715/7bc4b42d/Target01-0001.class 


More information about the compiler-dev mailing list