JDK-6500207 : REGRESSION: Compiler Crash with java.lang.AssertionError assertion
  • Type: Bug
  • Component: tools
  • Sub-Component: javac
  • Affected Version: 6
  • Priority: P2
  • Status: Closed
  • Resolution: Cannot Reproduce
  • OS: windows_xp
  • CPU: x86
  • Submitted: 2006-12-04
  • Updated: 2011-02-16
  • Resolved: 2008-10-31
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 6 JDK 7 Other
6u4Fixed 7Resolved OpenJDK6Fixed
Related Reports
Relates :  
Relates :  
Relates :  
Description
FULL PRODUCT VERSION :
java version "1.6.0-rc"
Java(TM) SE Runtime Environment (build 1.6.0-rc-b104)
Java HotSpot(TM) Client VM (build 1.6.0-rc-b104, mixed mode)

javac 1.6.0-rc

ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows XP [Version 5.1.2600]

A DESCRIPTION OF THE PROBLEM :
Compiler crash when compiling.

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Compile the code below.


ERROR MESSAGES/STACK TRACES THAT OCCUR :
Information:An exception has occurred in the compiler (1.6.0-rc). 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.
Information:java.lang.AssertionError: ()?
Information:	at com.sun.tools.javac.comp.Attr.visitApply(Attr.java:1247)
Information:	at com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1210)
Information:	at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:360)
Information:	at com.sun.tools.javac.comp.Attr.attribExpr(Attr.java:377)
Information:	at com.sun.tools.javac.comp.Attr.visitVarDef(Attr.java:683)
Information:	at com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:691)
Information:	at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:397)
Information:	at com.sun.tools.javac.comp.Attr.attribStats(Attr.java:413)
Information:	at com.sun.tools.javac.comp.Attr.visitBlock(Attr.java:715)
Information:	at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:739)
Information:	at com.sun.tools.javac.comp.Attr.visitMethodDef(Attr.java:634)
Information:	at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:639)
Information:	at com.sun.tools.javac.comp.Attr.attribClassBody(Attr.java:2688)
Information:	at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:2619)
Information:	at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:2555)
Information:	at com.sun.tools.javac.main.JavaCompiler.attribute(JavaCompiler.java:1036)
Information:	at com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:765)
Information:	at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:730)
Information:	at com.sun.tools.javac.main.Main.compile(Main.java:353)
Information:	at com.sun.tools.javac.main.Main.compile(Main.java:279)
Information:	at com.sun.tools.javac.main.Main.compile(Main.java:270)
Information:	at com.sun.tools.javac.Main.compile(Main.java:69)
Information:	at com.sun.tools.javac.Main.main(Main.java:54)
Information:	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
Information:	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
Information:	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
Information:	at java.lang.reflect.Method.invoke(Method.java:597)
Information:	at com.intellij.rt.compiler.JavacRunner.main(JavacRunner.java:56)
Information:Compilation completed with 1 error and 0 warnings
Information:1 error
Information:0 warnings
Error:Compiler internal error. Process terminated with exit code 4

REPRODUCIBILITY :
This bug can be reproduced always.

---------- BEGIN SOURCE ----------
interface MyEnum<T, E extends Enum<E> & MyEnum<T, E> > {
    T getValueForNull();
}

public class Test1 {

     public static <E extends Enum<E> & MyEnum<?, E>> void test(Class<E> etype) {

        E[] all = etype.getEnumConstants();

        Object codeForNull = all[0].getValueForNull();
    }
}
---------- END SOURCE ----------

Release Regression From : mustang
The above release value was the last known release where this 
bug was not reproducible. Since then there has been a regression.
[ Unrelated information deleted, see bug 6500343 ]

Comments
EVALUATION This bug is essentially a duplicate of 6738538. In fact we have that the method getValueForNull() is invoked on an object whose type is: Enum<E> & MyEnum<?, E>. During method lookup, javac realizes that getValueForNull() is a member of MyEnum<?, E> and it replaces actual type parameters into the formal signature of the method. The resulting signature is the following: ? getValueForNull Which is clearly wrong as the return type is a bare wildcard. The fix for 6738538 also fix this issue since it forces the compiler to go through a capture conversion before accessing a member of an intersection type (as supertypes of an intersection types might contain some wildcards). Using the fix the method gets rewritten as follows: #2 getValueForNull, where #2 is a captured type variable whose upper bound is Object
31-10-2008

EVALUATION No longer seems reproducible in 7; test program fails to compile T6500207.java:39: type para meter E is not within its bound public static <E extends Enum<E> & MyEnum<?, E>> void test(Class<E> etype) { ^ 1 error
29-08-2008

EVALUATION Regression tracked down to build 73.
27-06-2007