Compiler bug with nested lambdas and anonymous inner classes?

Martin Buchholz martinrb at google.com
Mon May 8 20:26:58 UTC 2017


[compiler-dev instead]

On Mon, May 8, 2017 at 1:21 PM, Keith Amling <keith.amling at gmail.com> wrote:

> > $ cat Bug.java
> > public class Bug {
> >     public static void foo() {
> >         Runnable r1 = () -> {
> >             new Object() {
> >                 Runnable r2 = () -> new Object() { };
> >             };
> >         };
> >     }
> > }
> > $
>
> "Compiles", but bytecode is nonsense (generates aload_0 in static method
> with
> no args) and fails verification:
>
> > $ javac Bug.java
> > $ javap -private -c -verbose Bug | grep 'foo()' -A 12
> >   public static void foo();
> >     descriptor: ()V
> >     flags: ACC_PUBLIC, ACC_STATIC
> >     Code:
> >       stack=1, locals=1, args_size=0
> >          0: aload_0
> >          1: invokedynamic #2,  0              // InvokeDynamic
> #0:run:(LBug;)Ljava/lang/Runnable;
> >          6: astore_0
> >          7: return
> >       LineNumberTable:
> >         line 3: 0
> >         line 8: 7
> >
> > $ java Bug
> > Error: A JNI error has occurred, please check your installation and try
> again
> > Exception in thread "main" java.lang.VerifyError: Bad local variable type
> > Exception Details:
> >   Location:
> >     Bug.foo()V @0: aload_0
> >   Reason:
> >     Type top (current frame, locals[0]) is not assignable to reference
> type
> >   Current Frame:
> >     bci: @0
> >     flags: { }
> >     locals: { }
> >     stack: { }
> >   Bytecode:
> >     0x0000000: 2aba 0002 0000 4bb1
> >
> >       at java.lang.Class.getDeclaredMethods0(Native Method)
> >       at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
> >       at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
> >       at java.lang.Class.getMethod0(Class.java:3018)
> >       at java.lang.Class.getMethod(Class.java:1784)
> >       at sun.launcher.LauncherHelper.validateMainClass(
> LauncherHelper.java:544)
> >       at sun.launcher.LauncherHelper.checkAndLoadMain(
> LauncherHelper.java:526)
> > $
>
> This with:
>
> > $ uname -a
> > Linux trtoje 4.9.0-2-amd64 #1 SMP Debian 4.9.10-1 (2017-02-17) x86_64
> GNU/Linux
> > $ java -version
> > openjdk version "1.8.0_131"
> > OpenJDK Runtime Environment (build 1.8.0_131-8u131-b11-1-b11)
> > OpenJDK 64-Bit Server VM (build 25.131-b11, mixed mode)
> > $
>
> Keith
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20170508/bafd0e36/attachment.html>


More information about the compiler-dev mailing list