RFR: 8361445: javac crashes on unresolvable constant in @SuppressWarnings [v2]

ExE Boss duke at openjdk.org
Mon Jul 7 22:02:43 UTC 2025


On Mon, 7 Jul 2025 12:31:53 GMT, Jan Lahoda <jlahoda at openjdk.org> wrote:

>> Consider this code:
>> 
>> @SuppressWarnings(CONST)
>> public class Ann {
>>     public static final String CONST = "";
>> }
>> 
>> 
>> javac will crash attempting to compile it:
>> 
>> $ javac -XDdev /tmp/Ann.java
>> /tmp/Ann.java:1: error: cannot find symbol
>> @SuppressWarnings(CONST)
>>                   ^
>>   symbol: variable CONST
>> 1 error
>> An exception has occurred in the compiler (26-internal). Please file a bug against the Java compiler via the Java bug reporting page (https://bugreport.java.com/) after checking the Bug Database (https://bugs.java.com/) for duplicates. Include your program, the following diagnostic, and the parameters passed to the Java compiler in your report. Thank you.
>> java.lang.ClassCastException: class com.sun.tools.javac.code.Attribute$Error cannot be cast to class com.sun.tools.javac.code.Attribute$Constant (com.sun.tools.javac.code.Attribute$Error and com.sun.tools.javac.code.Attribute$Constant are in module jdk.compiler of loader 'app')
>>         at jdk.compiler/com.sun.tools.javac.code.Lint.suppressionsFrom(Lint.java:533)
>> ...
>> 
>> 
>> The reason is that the unresolvable constant will be `Attribute.Error`, not `Attribute.Constant`, and there's an unguarded cast. The proposal herein is to improve error recovery by ignoring non-constant annotation attributes in `Lint.suppressionsFrom`. Such erroneous cases should have already been reported as compile-time errors anyway.
>
> Jan Lahoda has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Adding a more complex test ensuring incompatible types don't cause javac crashes.

test/langtools/tools/javac/recovery/AnnotationRecovery.java line 178:

> 176:             "Test.CHAR",
> 177:             "Test.class",
> 178:             "@Deprecated"

Missing enum constant test case:
Suggestion:

            "E.A",
            "@Deprecated",

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/26142#discussion_r2191070936


More information about the compiler-dev mailing list