lambda-8-b45: bug report

v.a.ammodytes at googlemail.com v.a.ammodytes at googlemail.com
Sun Jul 1 16:26:48 PDT 2012


Hi,

I tried out a few things with lambda-8-b45, using lambda-8-b45-windows-i586-
24_jun_2012.zip. The attached file "CardGameB.java" compiled without errors, while the 
attached file "CardGameC.java" produced the following output during compilation:


An exception has occurred in the compiler (1.8.0-ea). Please file a bug at the Java Developer 
Connection (http://java.sun.com/webapps/bugreport)  after checking the Bug Parade for 
duplicates. Include your program and the following diagnostic in your report.  Thank you.
java.lang.AssertionError
	at com.sun.tools.javac.util.Assert.error(Assert.java:126)
	at com.sun.tools.javac.util.Assert.check(Assert.java:45)
	at com.sun.tools.javac.comp.Lower.access(Lower.java:1061)
	at com.sun.tools.javac.comp.Lower.visitIdent(Lower.java:3174)
	at com.sun.tools.javac.tree.JCTree$JCIdent.accept(JCTree.java:1918)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.comp.Lower.translate(Lower.java:2201)
	at com.sun.tools.javac.comp.Lower.translate(Lower.java:2212)
	at com.sun.tools.javac.comp.Lower.visitBinary(Lower.java:3169)
	at com.sun.tools.javac.tree.JCTree$JCBinary.accept(JCTree.java:1698)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.comp.Lower.translate(Lower.java:2201)
	at com.sun.tools.javac.comp.Lower.translate(Lower.java:2212)
	at com.sun.tools.javac.comp.Lower.visitReturn(Lower.java:3385)
	at com.sun.tools.javac.tree.JCTree$JCReturn.accept(JCTree.java:1312)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.comp.Lower.translate(Lower.java:2201)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:70)
	at com.sun.tools.javac.tree.TreeTranslator.visitBlock(TreeTranslator.java:160)
	at com.sun.tools.javac.comp.Lower.visitBlock(Lower.java:3358)
	at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:837)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.comp.Lower.translate(Lower.java:2201)
	at com.sun.tools.javac.tree.TreeTranslator.visitMethodDef(TreeTranslator.java:144)
	at com.sun.tools.javac.comp.Lower.visitMethodDefInternal(Lower.java:2667)
	at com.sun.tools.javac.comp.Lower.visitMethodDef(Lower.java:2586)
	at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:721)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.comp.Lower.translate(Lower.java:2201)
	at com.sun.tools.javac.comp.Lower.visitClassDef(Lower.java:2331)
	at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:643)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.comp.Lower.translate(Lower.java:2201)
	at com.sun.tools.javac.comp.Lower.visitNewClass(Lower.java:2726)
	at com.sun.tools.javac.tree.JCTree$JCNewClass.accept(JCTree.java:1444)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.comp.Lower.translate(Lower.java:2201)
	at com.sun.tools.javac.comp.Lower.translate(Lower.java:2212)
	at com.sun.tools.javac.comp.Lower.visitReturn(Lower.java:3385)
	at com.sun.tools.javac.tree.JCTree$JCReturn.accept(JCTree.java:1312)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.comp.Lower.translate(Lower.java:2201)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:70)
	at com.sun.tools.javac.tree.TreeTranslator.visitBlock(TreeTranslator.java:160)
	at com.sun.tools.javac.comp.Lower.visitBlock(Lower.java:3358)
	at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:837)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.comp.Lower.translate(Lower.java:2201)
	at com.sun.tools.javac.tree.TreeTranslator.visitMethodDef(TreeTranslator.java:144)
	at com.sun.tools.javac.comp.Lower.visitMethodDefInternal(Lower.java:2667)
	at com.sun.tools.javac.comp.Lower.visitMethodDef(Lower.java:2586)
	at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:721)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.comp.Lower.translate(Lower.java:2201)
	at com.sun.tools.javac.comp.Lower.visitClassDef(Lower.java:2331)
	at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:643)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.comp.Lower.translate(Lower.java:2201)
	at com.sun.tools.javac.comp.Lower.visitNewClass(Lower.java:2726)
	at com.sun.tools.javac.tree.JCTree$JCNewClass.accept(JCTree.java:1444)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.comp.Lower.translate(Lower.java:2201)
	at com.sun.tools.javac.comp.Lower.translate(Lower.java:2212)
	at com.sun.tools.javac.comp.Lower.visitVarDef(Lower.java:3344)
	at com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:781)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.comp.Lower.translate(Lower.java:2201)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:70)
	at com.sun.tools.javac.tree.TreeTranslator.visitBlock(TreeTranslator.java:160)
	at com.sun.tools.javac.comp.Lower.visitBlock(Lower.java:3358)
	at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:837)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.comp.Lower.translate(Lower.java:2201)
	at com.sun.tools.javac.tree.TreeTranslator.visitMethodDef(TreeTranslator.java:144)
	at com.sun.tools.javac.comp.Lower.visitMethodDefInternal(Lower.java:2667)
	at com.sun.tools.javac.comp.Lower.visitMethodDef(Lower.java:2586)
	at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:721)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.comp.Lower.translate(Lower.java:2201)
	at com.sun.tools.javac.comp.Lower.visitClassDef(Lower.java:2331)
	at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:643)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.comp.Lower.translate(Lower.java:2201)
	at com.sun.tools.javac.comp.Lower.visitNewClass(Lower.java:2726)
	at com.sun.tools.javac.tree.JCTree$JCNewClass.accept(JCTree.java:1444)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.comp.Lower.translate(Lower.java:2201)
	at com.sun.tools.javac.comp.Lower.translate(Lower.java:2212)
	at com.sun.tools.javac.comp.Lower.visitVarDef(Lower.java:3344)
	at com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:781)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.comp.Lower.translate(Lower.java:2201)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:70)
	at com.sun.tools.javac.tree.TreeTranslator.visitBlock(TreeTranslator.java:160)
	at com.sun.tools.javac.comp.Lower.visitBlock(Lower.java:3358)
	at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:837)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.comp.Lower.translate(Lower.java:2201)
	at com.sun.tools.javac.tree.TreeTranslator.visitMethodDef(TreeTranslator.java:144)
	at com.sun.tools.javac.comp.Lower.visitMethodDefInternal(Lower.java:2667)
	at com.sun.tools.javac.comp.Lower.visitMethodDef(Lower.java:2586)
	at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:721)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.comp.Lower.translate(Lower.java:2201)
	at com.sun.tools.javac.comp.Lower.visitClassDef(Lower.java:2331)
	at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:643)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.comp.Lower.translate(Lower.java:2201)
	at com.sun.tools.javac.comp.Lower.translate(Lower.java:2220)
	at com.sun.tools.javac.comp.Lower.translateTopLevelClass(Lower.java:3709)
	at com.sun.tools.javac.main.JavaCompiler.desugar(JavaCompiler.java:1418)
	at com.sun.tools.javac.main.JavaCompiler.desugar(JavaCompiler.java:1295)
	at com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:892)
	at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:851)
	at com.sun.tools.javac.main.Main.compile(Main.java:441)
	at com.sun.tools.javac.main.Main.compile(Main.java:358)
	at com.sun.tools.javac.main.Main.compile(Main.java:347)
	at com.sun.tools.javac.main.Main.compile(Main.java:338)
	at com.sun.tools.javac.Main.compile(Main.java:76)
	at com.sun.tools.javac.Main.main(Main.java:61)

Process terminated with Exit Code 4


The only notable difference is that in the first program an Iterable is created and used 
immediately in a forEach call, while in the second program the Iterable is stored in a variable 
before applying forEach:
12a12
>             Iterable<Integer> zeroToN =
20,22c21,22
<             }.forEach( c -> {
<                 d.addCard(() -> c);
<             });
---
>                 };
>             zeroToN.forEach( c -> { d.addCard(() -> c); });

Inlining the lambda containing this part of the code makes the bug disappear, as in the 
attached file CardGameD.java.

Don't know if this is a known bug. I'm not sure if the message about filing the bug on 
http://java.sun.com/webapps/bugreport applies for lambda-dev builds.

Regards
Arne Siegel
-------------- next part --------------
The following section of this message contains a file attachment
prepared for transmission using the Internet MIME message format.
If you are using Pegasus Mail, or any other MIME-compliant system,
you should be able to save it or view it from within your mailer.
If you cannot, please ask your system administrator for assistance.

   ---- File information -----------
     File:  CardGameB.java
     Date:  2 Jul 2012, 0:36
     Size:  1978 bytes.
     Type:  Unknown
-------------- next part --------------
The following section of this message contains a file attachment
prepared for transmission using the Internet MIME message format.
If you are using Pegasus Mail, or any other MIME-compliant system,
you should be able to save it or view it from within your mailer.
If you cannot, please ask your system administrator for assistance.

   ---- File information -----------
     File:  CardGameC.java
     Date:  2 Jul 2012, 0:36
     Size:  2047 bytes.
     Type:  Unknown
-------------- next part --------------
The following section of this message contains a file attachment
prepared for transmission using the Internet MIME message format.
If you are using Pegasus Mail, or any other MIME-compliant system,
you should be able to save it or view it from within your mailer.
If you cannot, please ask your system administrator for assistance.

   ---- File information -----------
     File:  CardGameD.java
     Date:  2 Jul 2012, 1:06
     Size:  1938 bytes.
     Type:  Unknown


More information about the lambda-dev mailing list