Missing LineNumberTable entries with JDK8?
Vicente-Arturo Romero-Zaldivar
vicente.romero at oracle.com
Mon Aug 19 02:32:16 PDT 2013
Hi,
This bug has already been solved by Jan Lahoda.
Changeset: http://hg.openjdk.java.net/jdk8/tl/langtools/rev/8c4b2987edac
original bug id: http://bugs.sun.com/view_bug.do?bug_id=8020689
Thanks,
Vicente
On 19/08/13 09:50, Joel Borggren-Franck wrote:
> Hi Marc,
>
> Thanks for the report. Bug id 8023214.
>
> Should show up here: http://bugs.sun.com/view_bug.do?bug_id=8023214
>
> cheers
> /Joel
>
> In-Reply-To: <51E3B136.4030800 at mountainminds.com>
>
> On 2013-07-15, Marc R. Hoffmann wrote:
>> 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 */
>>
>> /**
>> * 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() {
>> }
>>
>> }
>
More information about the compiler-dev
mailing list