Java Solaris Communities Sun Store Join SDN My Profile Why Join?
 
Bug Database
Bug Detail
Quick Lists
Top 25 Bugs
Top 25 RFE's
Recently Closed Bugs
Printable Page Printable Page


Bug Database
Bug ID: 6682380
Votes 0
Synopsis Foreach loop with generics inside finally block crashes javac with -target 1.5
Category java:compiler
Reported Against b22
Release Fixed 7(b27)
State 10-Fix Delivered, bug
Priority: 2-High
Related Bugs 6679509
Submit Date 31-MAR-2008
Description
Can't compile the code provided below with JDK 1.5 and with "-target 1.5" in case of Java 6.

Output error for Java 6 (similar for JDK 1.5 without options):

% javac -target 1.5 Crash.java
An exception has occurred in the compiler (1.6.0). 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: com.sun.tools.javac.jvm.Gen$1ComplexityScanner
        at com.sun.tools.javac.jvm.Gen$1ComplexityScanner.visitWildcard(Gen.java:1538)
        at com.sun.tools.javac.tree.JCTree$JCWildcard.accept(JCTree.java:1746)
        at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:35)
        at com.sun.tools.javac.jvm.Gen$1ComplexityScanner.scan(Gen.java:1468)
        at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:43)
        at com.sun.tools.javac.tree.TreeScanner.visitTypeApply(TreeScanner.java:254)
        at com.sun.tools.javac.tree.JCTree$JCTypeApply.accept(JCTree.java:1697)
        at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:35)
        at com.sun.tools.javac.jvm.Gen$1ComplexityScanner.scan(Gen.java:1468)
        at com.sun.tools.javac.tree.TreeScanner.visitVarDef(TreeScanner.java:80)        at com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:691)
        at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:35)
        at com.sun.tools.javac.jvm.Gen$1ComplexityScanner.scan(Gen.java:1468)
        at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:43)
        at com.sun.tools.javac.tree.TreeScanner.visitBlock(TreeScanner.java:88)
        at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:739)
        at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:35)
        at com.sun.tools.javac.jvm.Gen$1ComplexityScanner.scan(Gen.java:1468)
        at com.sun.tools.javac.tree.TreeScanner.visitForLoop(TreeScanner.java:105)
        at com.sun.tools.javac.jvm.Gen$1ComplexityScanner.visitForLoop(Gen.java:1476)
        at com.sun.tools.javac.tree.JCTree$JCForLoop.accept(JCTree.java:818)
        at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:35)
        at com.sun.tools.javac.jvm.Gen$1ComplexityScanner.scan(Gen.java:1468)
        at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:43)
        at com.sun.tools.javac.tree.TreeScanner.visitBlock(TreeScanner.java:88)
        at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:739)
        at com.sun.tools.javac.jvm.Gen.estimateCodeComplexity(Gen.java:1542)
        at com.sun.tools.javac.jvm.Gen.visitTry(Gen.java:1268)
        at com.sun.tools.javac.tree.JCTree$JCTry.accept(JCTree.java:967)
        at com.sun.tools.javac.jvm.Gen.genDef(Gen.java:660)
        at com.sun.tools.javac.jvm.Gen.genStat(Gen.java:695)
        at com.sun.tools.javac.jvm.Gen.genStat(Gen.java:681)
        at com.sun.tools.javac.jvm.Gen.genStats(Gen.java:732)
        at com.sun.tools.javac.jvm.Gen.visitBlock(Gen.java:985)
        at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:739)
        at com.sun.tools.javac.jvm.Gen.genDef(Gen.java:660)
        at com.sun.tools.javac.jvm.Gen.genStat(Gen.java:695)
        at com.sun.tools.javac.jvm.Gen.genMethod(Gen.java:918)
        at com.sun.tools.javac.jvm.Gen.visitMethodDef(Gen.java:854)
        at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:639)
        at com.sun.tools.javac.jvm.Gen.genDef(Gen.java:660)
        at com.sun.tools.javac.jvm.Gen.genClass(Gen.java:2163)
        at com.sun.tools.javac.main.JavaCompiler.genCode(JavaCompiler.java:617)
        at com.sun.tools.javac.main.JavaCompiler.generate(JavaCompiler.java:1289)
        at com.sun.tools.javac.main.JavaCompiler.generate(JavaCompiler.java:1259)
        at com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:765)        at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:730)
        at com.sun.tools.javac.main.Main.compile(Main.java:353)
        at com.sun.tools.javac.main.Main.compile(Main.java:279)
        at com.sun.tools.javac.main.Main.compile(Main.java:270)
        at com.sun.tools.javac.Main.compile(Main.java:69)
        at com.sun.tools.javac.Main.main(Main.java:54)

The code:

-------------------------
public class Crash {

        public static void main(String[] argv){
                TreeSet<Father> sons = new TreeSet<Father>();

                try{
                }
                catch(Throwable t){
                }
                finally{
                        for(Father<?> son : sons)
                        {
                                son.clear();
                        }
                }
        }
}

abstract class Father<T extends Father>
{
        public void clear(){

        }
}

class Son extends Father<Son>
{
}
---------------------------------------------
Posted Date : 2008-03-31 21:51:51.0
Work Around
N/A
Evaluation
Bug confirmed in 1.6.0_05, using -target 5.

----------------------------------
  xxxxx@xxxxx  :/w/jjg/work/6682380-crash$ /opt/jdk/jdk1.6.0_05/bin/javac Crash.java
  xxxxx@xxxxx  :/w/jjg/work/6682380-crash$ /opt/jdk/jdk1.6.0_05/bin/javac -target 5 Crash.java
An exception has occurred in the compiler (1.6.0_05). 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: com.sun.tools.javac.jvm.Gen$1ComplexityScanner
        at com.sun.tools.javac.jvm.Gen$1ComplexityScanner.visitWildcard(Gen.java:1573)
        at com.sun.tools.javac.tree.JCTree$JCWildcard.accept(JCTree.java:1746)
-----------------------------------
Posted Date : 2008-03-31 22:50:24.0

For the evaluation of this bug, please refer to the related CR 6679509
Posted Date : 2008-04-18 10:18:26.0
Comments
  
  Include a link with my name & email   

Submitted On 14-JAN-2010
mauromol
This also occurs with Java5 javac. It's so severe that I was wondering why the fix hasn't ever been backported to Java5 and Java6...


Submitted On 14-JAN-2010
mauromol
If you remove the <?> in the foreach block, code compiles fine. But, if you then add a SuppressWarnings("unchecked"), the crash occurs again:
[...]
finally
{
   for(@SuppressWarnings("unchecked") Father son : sons)
   {
     son.clear();
   }
}
[...]
The above code makes the compiler crash again.



PLEASE NOTE: JDK6 is formerly known as Project Mustang