Bug 206911

Summary: java.lang.VerifyError attempting to call super inside ITD method on extension of parameterized class
Product: [Tools] AspectJ Reporter: Joshua Caplan <jcaplan>
Component: CompilerAssignee: aspectj inbox <aspectj-inbox>
Status: RESOLVED FIXED QA Contact:
Severity: critical    
Priority: P3 CC: aclement
Version: DEVELOPMENT   
Target Milestone: 1.6.0 M2   
Hardware: PC   
OS: Windows XP   
Whiteboard:

Description Joshua Caplan CLA 2007-10-19 12:04:38 EDT
The following code will crash upon execution:

package bugs;

class GenericClass< K > {
          public void f() {}
}
class ExtendsGenericHasITD extends GenericClass< Object > {}

aspect VerifyError {
          public void ExtendsGenericHasITD.f() {
                   super.f();
          }
          public static void main( String[] args ) {
                   new ExtendsGenericHasITD();
          }
}

The error message is:

Exception in thread "main" java.lang.VerifyError: (class: bugs/ExtendsGenericHasITD, method: ajc$superDispatch$bugs_ExtendsGenericHasITD$f signature: ()V) Illegal use of nonvirtual function call
          at bugs.VerifyError.main(ExtendsGenericHasITD.aj:13)

Code runs without error if you change the class declaration to

class ExtendsGenericHasITD extends GenericClass {}
Comment 1 Andrew Clement CLA 2008-01-22 18:49:37 EST
fix committed - thanks for the testcase.  There may be some other bugs lurking in this area but the couple of testcases I've tried are OK...I'm thinking problems will appear when really using type variables in the methods that are being delegated to via super.

The problem here was generating bytecode targetting a parameterized type, when it should have targeted the real type that was being parameterized.

should be in a 1.6.0 dev build shortly.
Comment 2 Andrew Clement CLA 2008-02-20 18:38:12 EST
should of closed this - been fixed for a while!