RFR: 8337976: Insufficient error recovery in parser for switch inside class body [v2]

Jan Lahoda jlahoda at openjdk.org
Mon Aug 12 12:06:15 UTC 2024


> Consider this code:
> 
> public class T9999999 {
>     switch (0) { default: }
> }
> 
> 
> When trying to compile this, javac crashes:
> 
> 
> $ .../jdk-22/bin/javac -XDdev /tmp/T9999999.java
> /tmp/T9999999.java:2: error: switch expression does not have any result expressions
>     switch (0) { default: } f;
>     ^
> 1 error
> An exception has occurred in the compiler (22.0.1-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.AssertionError: Unexpected tree: switch (0) {
> default:
> 
> } with kind: SWITCH_EXPRESSION within: switch (0) {
> default:
> 
> } with kind: SWITCH_EXPRESSION
>         at jdk.compiler/com.sun.tools.javac.util.Assert.error(Assert.java:162)
>         at jdk.compiler/com.sun.tools.javac.comp.Attr$TypeAnnotationsValidator.validateAnnotatedType(Attr.java:5881)
>         at jdk.compiler/com.sun.tools.javac.comp.Attr$TypeAnnotationsValidator.visitVarDef(Attr.java:5727)
>         at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:1022)
>         at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:50)
>         at jdk.compiler/com.sun.tools.javac.comp.Attr$TypeAnnotationsValidator.visitClassDef(Attr.java:5780)
>         at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:814)
>         at jdk.compiler/com.sun.tools.javac.comp.Attr.validateTypeAnnotations(Attr.java:5677)
>         at jdk.compiler/com.sun.tools.javac.code.TypeAnnotations.lambda$validateTypeAnnotationsSignatures$1(TypeAnnotations.java:144)
>         at jdk.compiler/com.sun.tools.javac.comp.Annotate.flush(Annotate.java:200)
>         at jdk.compiler/com.sun.tools.javac.comp.Annotate.unblockAnnotations(Annotate.java:144)
>         at jdk.compiler/com.sun.tools.javac.comp.Annotate.enterDone(Annotate.java:157)
>         at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.enterDone(JavaCompiler.java:1827)
>         at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.enterTrees(JavaCompiler.java:1081)
>         at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:947)
>         at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:319)
>         at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:178)
>         at jdk.compiler/com.sun.tools.javac.Main.compile(...

Jan Lahoda has updated the pull request incrementally with one additional commit since the last revision:

  Adding a comment for the isDefiniteStatementStartToken.

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/20526/files
  - new: https://git.openjdk.org/jdk/pull/20526/files/c4ba6845..88e28ca2

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=20526&range=01
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=20526&range=00-01

  Stats: 4 lines in 1 file changed: 4 ins; 0 del; 0 mod
  Patch: https://git.openjdk.org/jdk/pull/20526.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/20526/head:pull/20526

PR: https://git.openjdk.org/jdk/pull/20526


More information about the compiler-dev mailing list