Possible LVT regression with labelled block statements

Liam Miller-Cushon cushon at google.com
Fri Nov 14 03:09:05 UTC 2014


I found a possible LVT bug in javac8 that affects labelled break
statements. It causes incorrect zero-length LVT entries to be emitted for
locals that have non-zero live ranges.

Here's a repro:

===
class Test {
  int m(boolean flag) {
    int myInt;
    label:
    {
      if (flag) {
        myInt = 1;
      } else {
        break label;
      }

      return myInt;
    }
    return -1;
  }
}
===

With javac8, the code compiles to:

===
  int m(boolean);
    descriptor: (Z)I
    flags:
    Code:
      stack=1, locals=3, args_size=2
         0: iload_1
         1: ifeq          8
         4: iconst_1
         5: istore_2
         6: iload_2
         7: ireturn
         8: iconst_m1
         9: ireturn
      LineNumberTable:
        line 6: 0
        line 7: 4
        line 12: 6
        line 14: 8
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            6       0     2 myInt   I
            0      10     0  this   LTest;
            0      10     1  flag   Z
===

My understanding is that the zero-length LVT entry for 'myInt' is
incorrect. With earlier versions of javac (and also ecj) the entry's length
is 2.

The behaviour started occurring after the change that fixed JDK-8012868
[1][2], so this affects javac8 and 9. It reproduces with the latest version
of javac9 (I tested @c286272a81dd).

The issue was originally discovered because it affects joda time,
specifically the local variable 'expectSeparators' in
DateTimeFormatterBuilder [3].

[1] http://hg.openjdk.java.net/jdk9/dev/langtools/rev/4932bb04c4b8
[2] https://bugs.openjdk.java.net/browse/JDK-8012868
[3]
https://github.com/JodaOrg/joda-time/blob/1379098f681f0d4d6f0a3403ab6727dc3437b6df/src/main/java/org/joda/time/format/DateTimeFormatterBuilder.java#L2132

Thanks,
Liam
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20141113/465603ca/attachment-0001.html>


More information about the compiler-dev mailing list