Summary: | java.lang.VerifyError in generated code | ||||||
---|---|---|---|---|---|---|---|
Product: | [Tools] AspectJ | Reporter: | Macneil Shonle <mshonle> | ||||
Component: | Compiler | Assignee: | Jim Hugunin <jim-aj> | ||||
Status: | RESOLVED FIXED | QA Contact: | |||||
Severity: | critical | ||||||
Priority: | P1 | ||||||
Version: | 1.1.1 | ||||||
Target Milestone: | 1.1.1 | ||||||
Hardware: | PC | ||||||
OS: | Windows XP | ||||||
Whiteboard: | |||||||
Attachments: |
|
Description
Macneil Shonle
2003-09-16 23:21:32 EDT
Created attachment 6124 [details]
9 source files, plus a Makefile for cygwin
The makefile isn't necessary, you just need to do a "ajc *.java" with the files
unjarred in a new directory. Then, run java as in the report.
Erik and I pair fixed this in the tree. The bug was caused by ReferencePointcut.concretize mutating state rather than behaving properly functionally. After removing the layers of after advice and cflow entry/exits, the minimal test case is below. The multiple levels of indirection, as well as the concretization with a typename in the first advice followed by concretization with a parameter name in the second are all required to cause the bug. class C { public void m1() {} public void m2() {} } aspect A { pointcut exec1(C c): this(c) && execution(void m1()); pointcut execs(C c): exec1(c); before (): execs(*) {} before (C c): execs(c) {} } |