United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
Bug ID: 6500207 REGRESSION: Compiler Crash with java.lang.AssertionError assertion
6500207 : REGRESSION: Compiler Crash with java.lang.AssertionError assertion

Details
Type:
Bug
Submit Date:
2006-12-04
Status:
Closed
Updated Date:
2011-02-16
Project Name:
JDK
Resolved Date:
2008-10-31
Component:
tools
OS:
windows_xp
Sub-Component:
javac
CPU:
x86
Priority:
P2
Resolution:
Cannot Reproduce
Affected Versions:
6
Fixed Versions:
7

Related Reports
Backport:
Backport:
Relates:
Relates:
Relates:

Sub Tasks

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
                                     
2008-10-31
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
                                     
2008-08-29
EVALUATION

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



Hardware and Software, Engineered to Work Together