JDK-6297416 : @SuppressWarnings before single variable declaration crashes compiler
  • Type: Bug
  • Component: tools
  • Sub-Component: javac
  • Affected Version: 5.0
  • Priority: P4
  • Status: Closed
  • Resolution: Duplicate
  • OS: linux,windows_xp
  • CPU: x86
  • Submitted: 2005-07-15
  • Updated: 2010-04-02
  • Resolved: 2005-07-26
Related Reports
Duplicate :  
Description
FULL PRODUCT VERSION :
java version "1.5.0_03"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_03-b07)
Java HotSpot(TM) Client VM (build 1.5.0_03-b07, mixed mode, sharing)

ADDITIONAL OS VERSION INFORMATION :
 2.6.10-1-686-smp #1 SMP Fri Mar 11 01:49:45 EST 2005 i686 GNU/Linux

A DESCRIPTION OF THE PROBLEM :
The following method:

    public static int testCompiler() {
        int i = 0;
        for (@SuppressWarnings("unused") String s : new String[] {"A", "B", "C"}) {
            i++;
        }
        return i;
    }

will produce:

Buildfile: build.xml

init:

compile:
    [javac] Compiling 2 source files to /home/aploese/workspace/AtledViewer/target/classes
    [javac] An exception has occurred in the compiler (1.5.0_03). 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.
    [javac] java.lang.AssertionError: {unused}
    [javac]     at com.sun.tools.javac.tree.TreeMaker$AnnotationBuilder.visitArray(TreeMaker.java:634)
    [javac]     at com.sun.tools.javac.code.Attribute$Array.accept(Attribute.java:126)
    [javac]     at com.sun.tools.javac.tree.TreeMaker$AnnotationBuilder.translate(TreeMaker.java:637)
    [javac]     at com.sun.tools.javac.tree.TreeMaker$AnnotationBuilder.visitCompoundInternal(TreeMaker.java:628)
    [javac]     at com.sun.tools.javac.tree.TreeMaker$AnnotationBuilder.translate(TreeMaker.java:641)
    [javac]     at com.sun.tools.javac.tree.TreeMaker.Annotation(TreeMaker.java:649)
    [javac]     at com.sun.tools.javac.tree.TreeMaker.Annotations(TreeMaker.java:570)
    [javac]     at com.sun.tools.javac.tree.TreeMaker.VarDef(TreeMaker.java:554)
    [javac]     at com.sun.tools.javac.comp.Lower.visitArrayForeachLoop(Lower.java:2824)
    [javac]     at com.sun.tools.javac.comp.Lower.visitForeachLoop(Lower.java:2770)
    [javac]     at com.sun.tools.javac.tree.Tree$ForeachLoop.accept(Tree.java:602)
    [javac]     at com.sun.tools.javac.comp.Lower.translate(Lower.java:1895)
    [javac]     at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:54)
    [javac]     at com.sun.tools.javac.tree.TreeTranslator.visitBlock(TreeTranslator.java:145)
    [javac]     at com.sun.tools.javac.comp.Lower.visitBlock(Lower.java:2944)
    [javac]     at com.sun.tools.javac.tree.Tree$Block.accept(Tree.java:540)
    [javac]     at com.sun.tools.javac.comp.Lower.translate(Lower.java:1895)
    [javac]     at com.sun.tools.javac.tree.TreeTranslator.visitMethodDef(TreeTranslator.java:129)
    [javac]     at com.sun.tools.javac.comp.Lower.visitMethodDefInternal(Lower.java:2281)
    [javac]     at com.sun.tools.javac.comp.Lower.visitMethodDef(Lower.java:2200)
    [javac]     at com.sun.tools.javac.tree.Tree$MethodDef.accept(Tree.java:482)
    [javac]     at com.sun.tools.javac.comp.Lower.translate(Lower.java:1895)
    [javac]     at com.sun.tools.javac.comp.Lower.visitClassDef(Lower.java:2003)
    [javac]     at com.sun.tools.javac.tree.Tree$ClassDef.accept(Tree.java:438)
    [javac]     at com.sun.tools.javac.comp.Lower.translate(Lower.java:1895)
    [javac]     at com.sun.tools.javac.comp.Lower.translate(Lower.java:1915)
    [javac]     at com.sun.tools.javac.comp.Lower.translateTopLevelClass(Lower.java:3081)
    [javac]     at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:496)
    [javac]     at com.sun.tools.javac.main.Main.compile(Main.java:592)
    [javac]     at com.sun.tools.javac.main.Main.compile(Main.java:544)
    [javac]     at com.sun.tools.javac.Main.compile(Main.java:67)
    [javac]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    [javac]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    [javac]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    [javac]     at java.lang.reflect.Method.invoke(Method.java:585)
    [javac]     at org.apache.tools.ant.taskdefs.compilers.Javac13.execute(Javac13.java:55)
    [javac]     at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:936)
    [javac]     at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:758)
    [javac]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
    [javac]     at org.apache.tools.ant.Task.perform(Task.java:364)
    [javac]     at org.apache.tools.ant.Target.execute(Target.java:341)
    [javac]     at org.apache.tools.ant.Target.performTasks(Target.java:369)
    [javac]     at org.apache.tools.ant.Project.executeTarget(Project.java:1214)
    [javac]     at org.apache.tools.ant.Project.executeTargets(Project.java:1062)
    [javac]     at org.apache.tools.ant.Main.runBuild(Main.java:673)
    [javac]     at org.apache.tools.ant.Main.startAnt(Main.java:188)
    [javac]     at org.apache.tools.ant.launch.Launcher.run(Launcher.java:196)
    [javac]     at org.apache.tools.ant.launch.Launcher.main(Launcher.java:55)

BUILD FAILED

The '@SuppressWarnings("unused")' was added by the Eclipse3.1_RC3 QuickFix Tool at this position.

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Create a sourcefile with the given method, a ant build-file.
Run ant ant the given output is shown.

EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
should compile without error as the eclipse-compiler does.
ACTUAL -
Buildfile: build.xml

init:

compile:
    [javac] Compiling 2 source files to /home/aploese/workspace/AtledViewer/target/classes
    [javac] An exception has occurred in the compiler (1.5.0_03). 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.
    [javac] java.lang.AssertionError: {unused}
    [javac]     at com.sun.tools.javac.tree.TreeMaker$AnnotationBuilder.visitArray(TreeMaker.java:634)
    [javac]     at com.sun.tools.javac.code.Attribute$Array.accept(Attribute.java:126)
    [javac]     at com.sun.tools.javac.tree.TreeMaker$AnnotationBuilder.translate(TreeMaker.java:637)
    [javac]     at com.sun.tools.javac.tree.TreeMaker$AnnotationBuilder.visitCompoundInternal(TreeMaker.java:628)
    [javac]     at com.sun.tools.javac.tree.TreeMaker$AnnotationBuilder.translate(TreeMaker.java:641)
    [javac]     at com.sun.tools.javac.tree.TreeMaker.Annotation(TreeMaker.java:649)
    [javac]     at com.sun.tools.javac.tree.TreeMaker.Annotations(TreeMaker.java:570)
    [javac]     at com.sun.tools.javac.tree.TreeMaker.VarDef(TreeMaker.java:554)
    [javac]     at com.sun.tools.javac.comp.Lower.visitArrayForeachLoop(Lower.java:2824)
    [javac]     at com.sun.tools.javac.comp.Lower.visitForeachLoop(Lower.java:2770)
    [javac]     at com.sun.tools.javac.tree.Tree$ForeachLoop.accept(Tree.java:602)
    [javac]     at com.sun.tools.javac.comp.Lower.translate(Lower.java:1895)
    [javac]     at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:54)
    [javac]     at com.sun.tools.javac.tree.TreeTranslator.visitBlock(TreeTranslator.java:145)
    [javac]     at com.sun.tools.javac.comp.Lower.visitBlock(Lower.java:2944)
    [javac]     at com.sun.tools.javac.tree.Tree$Block.accept(Tree.java:540)
    [javac]     at com.sun.tools.javac.comp.Lower.translate(Lower.java:1895)
    [javac]     at com.sun.tools.javac.tree.TreeTranslator.visitMethodDef(TreeTranslator.java:129)
    [javac]     at com.sun.tools.javac.comp.Lower.visitMethodDefInternal(Lower.java:2281)
    [javac]     at com.sun.tools.javac.comp.Lower.visitMethodDef(Lower.java:2200)
    [javac]     at com.sun.tools.javac.tree.Tree$MethodDef.accept(Tree.java:482)
    [javac]     at com.sun.tools.javac.comp.Lower.translate(Lower.java:1895)
    [javac]     at com.sun.tools.javac.comp.Lower.visitClassDef(Lower.java:2003)
    [javac]     at com.sun.tools.javac.tree.Tree$ClassDef.accept(Tree.java:438)
    [javac]     at com.sun.tools.javac.comp.Lower.translate(Lower.java:1895)
    [javac]     at com.sun.tools.javac.comp.Lower.translate(Lower.java:1915)
    [javac]     at com.sun.tools.javac.comp.Lower.translateTopLevelClass(Lower.java:3081)
    [javac]     at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:496)
    [javac]     at com.sun.tools.javac.main.Main.compile(Main.java:592)
    [javac]     at com.sun.tools.javac.main.Main.compile(Main.java:544)
    [javac]     at com.sun.tools.javac.Main.compile(Main.java:67)
    [javac]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    [javac]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    [javac]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    [javac]     at java.lang.reflect.Method.invoke(Method.java:585)
    [javac]     at org.apache.tools.ant.taskdefs.compilers.Javac13.execute(Javac13.java:55)
    [javac]     at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:936)
    [javac]     at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:758)
    [javac]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
    [javac]     at org.apache.tools.ant.Task.perform(Task.java:364)
    [javac]     at org.apache.tools.ant.Target.execute(Target.java:341)
    [javac]     at org.apache.tools.ant.Target.performTasks(Target.java:369)
    [javac]     at org.apache.tools.ant.Project.executeTarget(Project.java:1214)
    [javac]     at org.apache.tools.ant.Project.executeTargets(Project.java:1062)
    [javac]     at org.apache.tools.ant.Main.runBuild(Main.java:673)
    [javac]     at org.apache.tools.ant.Main.startAnt(Main.java:188)
    [javac]     at org.apache.tools.ant.launch.Launcher.run(Launcher.java:196)
    [javac]     at org.apache.tools.ant.launch.Launcher.main(Launcher.java:55)

BUILD FAILED

ERROR MESSAGES/STACK TRACES THAT OCCUR :
An exception has occurred in the compiler (1.5.0_04). Please file a bug at the J
ava Developer Connection (http://java.sun.com/webapps/bugreport)  after checking
 the Bug Parade for duplicates. Include your program and the following diagnosti
c in your report.  Thank you.
java.lang.AssertionError: {unused}
        at com.sun.tools.javac.tree.TreeMaker$AnnotationBuilder.visitArray(TreeM
aker.java:634)
        at com.sun.tools.javac.code.Attribute$Array.accept(Attribute.java:124)
        at com.sun.tools.javac.tree.TreeMaker$AnnotationBuilder.translate(TreeMa
ker.java:637)
        at com.sun.tools.javac.tree.TreeMaker$AnnotationBuilder.visitCompoundInt
ernal(TreeMaker.java:628)
        at com.sun.tools.javac.tree.TreeMaker$AnnotationBuilder.translate(TreeMa
ker.java:641)
        at com.sun.tools.javac.tree.TreeMaker.Annotation(TreeMaker.java:649)
        at com.sun.tools.javac.tree.TreeMaker.Annotations(TreeMaker.java:570)
        at com.sun.tools.javac.tree.TreeMaker.VarDef(TreeMaker.java:554)
        at com.sun.tools.javac.comp.Lower.visitArrayForeachLoop(Lower.java:2808)

        at com.sun.tools.javac.comp.Lower.visitForeachLoop(Lower.java:2757)
        at com.sun.tools.javac.tree.Tree$ForeachLoop.accept(Tree.java:597)
        at com.sun.tools.javac.comp.Lower.translate(Lower.java:1881)
        at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java
:54)
        at com.sun.tools.javac.tree.TreeTranslator.visitBlock(TreeTranslator.jav
a:145)
        at com.sun.tools.javac.comp.Lower.visitBlock(Lower.java:2927)
        at com.sun.tools.javac.tree.Tree$Block.accept(Tree.java:535)
        at com.sun.tools.javac.comp.Lower.translate(Lower.java:1881)
        at com.sun.tools.javac.tree.TreeTranslator.visitMethodDef(TreeTranslator
.java:129)
        at com.sun.tools.javac.comp.Lower.visitMethodDefInternal(Lower.java:2267
)
        at com.sun.tools.javac.comp.Lower.visitMethodDef(Lower.java:2186)
        at com.sun.tools.javac.tree.Tree$MethodDef.accept(Tree.java:478)
        at com.sun.tools.javac.comp.Lower.translate(Lower.java:1881)
        at com.sun.tools.javac.comp.Lower.visitClassDef(Lower.java:1989)
        at com.sun.tools.javac.tree.Tree$ClassDef.accept(Tree.java:434)
        at com.sun.tools.javac.comp.Lower.translate(Lower.java:1881)
        at com.sun.tools.javac.comp.Lower.translate(Lower.java:1901)
        at com.sun.tools.javac.comp.Lower.translateTopLevelClass(Lower.java:3064
)
        at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:496)
        at com.sun.tools.javac.main.Main.compile(Main.java:592)
        at com.sun.tools.javac.main.Main.compile(Main.java:544)
        at com.sun.tools.javac.Main.compile(Main.java:67)
        at com.sun.tools.javac.Main.main(Main.java:52)




REPRODUCIBILITY :
This bug can be reproduced always.

---------- BEGIN SOURCE ----------
public class CompileError {

    public static int testCompiler() {
        int i = 0;
        for (@SuppressWarnings("unused") String s : new String[] {"A", "B", "C"}) {
            i++;
        }
        return i;
    }

}

---------- END SOURCE ----------

CUSTOMER SUBMITTED WORKAROUND :
public class CompileError {

    @SuppressWarnings("unused")
    public static int testCompiler() {
        int i = 0;
        for (String s : new String[] {"A", "B", "C"}) {
            i++;
        }
        return i;
    }

}
###@###.### 2005-07-15 15:25:32 GMT