Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8291657

Javac assertion when compiling a method call with switch expression as argument

    XMLWordPrintable

Details

    • Bug
    • Resolution: Fixed
    • P3
    • 20
    • 17, 18, 19, 20
    • tools
    • None
    • b15

    Description

      Code:
      public class SwitchBug {
          interface A { }
          interface B { }
          static void f(final B b) { }

          public static void main(final String... args) {
              f((B) switch (new Object()) {
                  case Object obj -> new A() {};
              });
          }
      }

      Fails compilation, with e.g. `javac --enable-preview -source 17 SwitchBug.java`

      java.lang.AssertionError
              at jdk.compiler/com.sun.tools.javac.util.Assert.error(Assert.java:155)
              at jdk.compiler/com.sun.tools.javac.util.Assert.check(Assert.java:46)
              at jdk.compiler/com.sun.tools.javac.jvm.Code$State.forceStackTop(Code.java:1776)
              at jdk.compiler/com.sun.tools.javac.jvm.Gen.visitYield(Gen.java:1802)
              at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCYield.accept(JCTree.java:1658)
              at jdk.compiler/com.sun.tools.javac.jvm.Gen.genDef(Gen.java:610)
              at jdk.compiler/com.sun.tools.javac.jvm.Gen.genStat(Gen.java:645)
              at jdk.compiler/com.sun.tools.javac.jvm.Gen.genStat(Gen.java:631)
              at jdk.compiler/com.sun.tools.javac.jvm.Gen.genStats(Gen.java:682)
              at jdk.compiler/com.sun.tools.javac.jvm.Gen.genStats(Gen.java:666)
              at jdk.compiler/com.sun.tools.javac.jvm.Gen.handleSwitch(Gen.java:1373)
              at jdk.compiler/com.sun.tools.javac.jvm.Gen.doHandleSwitchExpression(Gen.java:1238)
              at jdk.compiler/com.sun.tools.javac.jvm.Gen.visitSwitchExpression(Gen.java:1202)
              at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCSwitchExpression.accept(JCTree.java:1380)
              at jdk.compiler/com.sun.tools.javac.jvm.Gen.genExpr(Gen.java:877)
              at jdk.compiler/com.sun.tools.javac.jvm.Gen.visitLetExpr(Gen.java:2381)
              at jdk.compiler/com.sun.tools.javac.tree.JCTree$LetExpr.accept(JCTree.java:3287)
              at jdk.compiler/com.sun.tools.javac.jvm.Gen.genExpr(Gen.java:877)
              at jdk.compiler/com.sun.tools.javac.jvm.Gen.visitTypeCast(Gen.java:2228)
              at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCTypeCast.accept(JCTree.java:2185)
              at jdk.compiler/com.sun.tools.javac.jvm.Gen.genExpr(Gen.java:877)
              at jdk.compiler/com.sun.tools.javac.jvm.Gen.genArgs(Gen.java:902)
              at jdk.compiler/com.sun.tools.javac.jvm.Gen.visitApply(Gen.java:1880)
              at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1797)
              at jdk.compiler/com.sun.tools.javac.jvm.Gen.genExpr(Gen.java:877)
              at jdk.compiler/com.sun.tools.javac.jvm.Gen.visitExec(Gen.java:1748)
              at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.java:1584)
              at jdk.compiler/com.sun.tools.javac.jvm.Gen.genDef(Gen.java:610)
              at jdk.compiler/com.sun.tools.javac.jvm.Gen.genStat(Gen.java:645)
              at jdk.compiler/com.sun.tools.javac.jvm.Gen.genStat(Gen.java:631)
              at jdk.compiler/com.sun.tools.javac.jvm.Gen.genStats(Gen.java:682)
              at jdk.compiler/com.sun.tools.javac.jvm.Gen.visitBlock(Gen.java:1097)
              at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1091)
              at jdk.compiler/com.sun.tools.javac.jvm.Gen.genDef(Gen.java:610)
              at jdk.compiler/com.sun.tools.javac.jvm.Gen.genStat(Gen.java:645)
              at jdk.compiler/com.sun.tools.javac.jvm.Gen.genMethod(Gen.java:967)
              at jdk.compiler/com.sun.tools.javac.jvm.Gen.visitMethodDef(Gen.java:930)
              at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:921)
              at jdk.compiler/com.sun.tools.javac.jvm.Gen.genDef(Gen.java:610)
              at jdk.compiler/com.sun.tools.javac.jvm.Gen.genClass(Gen.java:2420)
              at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.genCode(JavaCompiler.java:737)
              at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.generate(JavaCompiler.java:1617)
              at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.generate(JavaCompiler.java:1585)
              at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:946)
              at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:317)
              at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:176)
              at jdk.compiler/com.sun.tools.javac.Main.compile(Main.java:64)
              at jdk.compiler/com.sun.tools.javac.Main.main(Main.java:50)

      Reproduced with javac of 17.0.4, 18.0.2, 19 and current head (jdk20+8).

      Attachments

        Issue Links

          Activity

            People

              abimpoudis Angelos Bimpoudis
              clanger Christoph Langer
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: