Compiler bug with nested lambdas and anonymous inner classes?
David Holmes
david.holmes at oracle.com
Tue May 9 01:05:16 UTC 2017
Hi Keith,
Thanks - bug reports can be made at http://bugreport.java.com/
Or you could discuss this issue with javac folk via
compiler-dev at openjdk.java.net (cc'd).
This issue is fixed in JDK 9 but still present in JDK 8u.
Please drop the discuss list from any replies.
Thanks,
David
On 9/05/2017 6:21 AM, Keith Amling 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
>
More information about the compiler-dev
mailing list