6679509: AssertionError in com.sun.tools.javac.jvm.Gen$1ComplexityScanner

Jan Lahoda lahoda at gmail.com
Fri Apr 4 00:55:18 PDT 2008


http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6679509

Summary: An AssertionError is thrown while analyzing valid program. The
exception occurs when a foreach loop like:
for (java.util.List<?> t : l) {
}
is used in a finally block, and target is 1.5.

The problem's root cause is, IMO, that Gen is processing a tree with
generics (the generics should be stripped from the trees in TransTypes, if I
understand everything correctly).

In this case, the code above gets correctly TransType-d to:
for (java.util.List t : l) {
}

Then, during Lower, the foreach loop is expanded into an ordinary
Iterator-based loop:
for (java.util.Iterator i$ = l.iterator(); i$.hasNext(); ) {
    List<?> t = (List)i$.next();
    {
    }
}

which contains the tree with generics.

This is side-effect of using TreeMaker.VarDef(VarSymbol v, JCExpression
init), which uses v.type (which contains generics) to construct the tree for
the variable's type.

I have prepared a patch that constructs the tree for the variable using
erasure(v.type). The patch is attached.

Any opinions on the patch?

Thanks,
   Jan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20080404/39d6e8cc/attachment.html 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 6679509.diff
Type: text/x-patch
Size: 2771 bytes
Desc: not available
Url : http://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20080404/39d6e8cc/6679509.diff 


More information about the compiler-dev mailing list