webrev for type-annotations, repeating type-annotations test

Steve Sides steve.sides at oracle.com
Wed Jan 9 15:27:16 PST 2013


I see the bug shows up in bugs.sun.com but the attached test case does 
not. :( However, I think I already sent a test case to Werner.

static fields are probably not necessary.  I was just following other 
test helpers. :)

I will get an example posted. If a test case fails, it leaves behind the 
test code, so it's actually easier to see what happens when something 
fails then when it all passes.

I found another one. A type annotation on the 2nd type in a union type 
of a multicatch crashes javac.
I attached a test case to this mail.  Basically, something like

    catch(@A E1 | @A E2 e) {}

causes javac to crash. The stack trace from the test is below.
If I put it on the first one it is okay, but anything on the 2nd crashes.
It will eventually show up as 8005959 on bugs.sun.com.

-steve

stacktrace:

An exception has occurred in the compiler (1.8.0-ea). 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.
java.lang.AssertionError: Unresolved frame: E1 | @C() E2 of kind: 
UNION_TYPE
     Looking for tree: @C() E2
         at com.sun.tools.javac.util.Assert.error(Assert.java:133)
         at 
com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.resolveFrame(TypeAnnotations.java:582)
         at 
com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.resolveFrame(TypeAnnotations.java:551)
         at 
com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.findPosition(TypeAnnotations.java:763)
         at 
com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.visitAnnotatedType(TypeAnnotations.java:701)
         at 
com.sun.tools.javac.tree.JCTree$JCAnnotatedType.accept(JCTree.java:2281)
         at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
         at 
com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.scan(TypeAnnotations.java:92)
         at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:57)
         at 
com.sun.tools.javac.tree.TreeScanner.visitTypeUnion(TreeScanner.java:290)
         at 
com.sun.tools.javac.tree.JCTree$JCTypeUnion.accept(JCTree.java:2072)
         at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
         at 
com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.scan(TypeAnnotations.java:92)
         at 
com.sun.tools.javac.tree.TreeScanner.visitVarDef(TreeScanner.java:96)
         at 
com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.visitVarDef(TypeAnnotations.java:694)
         at 
com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:792)
         at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
         at 
com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.scan(TypeAnnotations.java:92)
         at 
com.sun.tools.javac.tree.TreeScanner.visitCatch(TreeScanner.java:157)
         at 
com.sun.tools.javac.tree.JCTree$JCCatch.accept(JCTree.java:1145)
         at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
         at 
com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.scan(TypeAnnotations.java:92)
         at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:57)
         at 
com.sun.tools.javac.tree.TreeScanner.visitTry(TreeScanner.java:152)
         at com.sun.tools.javac.tree.JCTree$JCTry.accept(JCTree.java:1112)
         at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
         at 
com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.scan(TypeAnnotations.java:92)
         at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:57)
         at 
com.sun.tools.javac.tree.TreeScanner.visitBlock(TreeScanner.java:104)
         at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:848)
         at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
         at 
com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.scan(TypeAnnotations.java:92)
         at 
com.sun.tools.javac.tree.TreeScanner.visitMethodDef(TreeScanner.java:91)
         at 
com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.visitMethodDef(TypeAnnotations.java:655)
         at 
com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:735)
         at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
         at 
com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.scan(TypeAnnotations.java:92)
         at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:57)
         at 
com.sun.tools.javac.tree.TreeScanner.visitClassDef(TreeScanner.java:80)
         at 
com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:650)
         at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
         at 
com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.scan(TypeAnnotations.java:92)
         at 
com.sun.tools.javac.code.TypeAnnotations.organizeTypeAnnotations(TypeAnnotations.java:63)
         at com.sun.tools.javac.comp.Attr.attribClassBody(Attr.java:4036)
         at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:3902)
         at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:3836)
         at com.sun.tools.javac.comp.Attr.attrib(Attr.java:3810)
         at 
com.sun.tools.javac.main.JavaCompiler.attribute(JavaCompiler.java:1254)
         at 
com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:907)
         at 
com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:866)
         at com.sun.tools.javac.main.Main.compile(Main.java:506)
         at com.sun.tools.javac.main.Main.compile(Main.java:365)
         at com.sun.tools.javac.main.Main.compile(Main.java:354)
         at com.sun.tools.javac.main.Main.compile(Main.java:345)
         at com.sun.tools.javac.Main.compile(Main.java:94)
         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
         at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
         at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
         at java.lang.reflect.Method.invoke(Method.java:477)
         at 
com.sun.javatest.regtest.RegressionCompileCommand.run(RegressionCompileCommand.java:247)
         at 
com.sun.javatest.regtest.CompileAction.runCompile(CompileAction.java:556)
         at 
com.sun.javatest.regtest.CompileAction.runSameJVM(CompileAction.java:395)
         at 
com.sun.javatest.regtest.CompileAction.run(CompileAction.java:250)
         at 
com.sun.javatest.regtest.RegressionScript.run(RegressionScript.java:146)
         at com.sun.javatest.Script.run(Script.java:228)
         at 
com.sun.javatest.DefaultTestRunner.runTest(DefaultTestRunner.java:174)
         at 
com.sun.javatest.DefaultTestRunner.access$100(DefaultTestRunner.java:43)
         at 
com.sun.javatest.DefaultTestRunner$1.run(DefaultTestRunner.java:66)

On 1/9/2013 12:32 PM, Alex Buckley wrote:
> Hi Steve,
>
> Thanks for publishing this webrev. (And congrats on becoming an Author 
> in this project!)
>
> CombinationsTargetTest is pretty complicated. Could you please give a 
> description and examples of the combinations it generates?
>
> DeadCode, NewTypeArguments, TypeCasts, and Wildcards all use static 
> fields in their superclass (ClassfileTestHelper) to communicate 
> expected results to ClassfileTestHelper.countAnnotations(). Is it 
> necessary to use static fields for this purpose?
>
> 8005681 is interesting. You're saying that "new @Foo @Foo @Bar @Bar 
> C()" causes all four annotations to be dropped? Werner cannot access 
> JBS, so it would be helpful if you could send test cases to this list.
>
> Alex
>
> On 1/8/2013 3:45 PM, Steve Sides wrote:
>> This test supercedes the test in the previous review request (which was
>> via mail).
>> http://cr.openjdk.java.net/~ssides/8005085/
>>
>> In writing a test for repeating type annotations I found it could cover
>> several scenarios in one test, so this coverage
>> mixed target types on type usages and type parameters as well as
>> repeating type annotations in those usages.
>>
>> Due to http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8005681 a few
>> scenarios are commented out.
>> In addition to any other changes or suggestions, we may want for that to
>> be fixed so the whole test can be considered.
>>
>> This also include the previous refactoring of the classfile tests into a
>> helper, ClassfileTestHelper.java.
>> This makes the tests much simpler looking and easier to add new tests.
>>
>> I'd appreciate any comments or suggestions.
>>
>> -steve

-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: TypeAnnoOnUnion.java
Url: http://mail.openjdk.java.net/pipermail/type-annotations-dev/attachments/20130109/f887c27e/TypeAnnoOnUnion.java 


More information about the type-annotations-dev mailing list