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

Crash when guards contain boolean expression

XMLWordPrintable

    • b27

        Consider code like:
        ---
        class Test {

            public void testMethod(Object o) {
                String r;

                switch (o) {
                    case String s && s.length() > 0 && s.charAt(0) != ' ' -> r = s;
                    default -> r = null;
                }
            }

        }
        ---

        This crashes javac:
        ---
        $ javac --enable-preview -source 17 Test.java
        Note: Test.java uses preview features of Java SE 17.
        Note: Recompile with -Xlint:preview for details.
        An exception has occurred in the compiler (17-internal). Please file a bug against the Java compiler via the Java bug reporting page (http://bugreport.java.com) after checking the Bug Database (http://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
                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.util.Bits.isMember(Bits.java:231)
                at jdk.compiler/com.sun.tools.javac.comp.Flow$AssignAnalyzer.checkInit(Flow.java:1896)
                at jdk.compiler/com.sun.tools.javac.comp.Flow$AssignAnalyzer.checkInit(Flow.java:1890)
                at jdk.compiler/com.sun.tools.javac.comp.Flow$AssignAnalyzer.visitIdent(Flow.java:2776)
                at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCIdent.accept(JCTree.java:2584)
                at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
                at jdk.compiler/com.sun.tools.javac.comp.Flow$BaseAnalyzer.scan(Flow.java:445)
                at jdk.compiler/com.sun.tools.javac.comp.Flow$AssignAnalyzer.scan(Flow.java:1682)
                at jdk.compiler/com.sun.tools.javac.comp.Flow$AssignAnalyzer.scanExpr(Flow.java:1939)
                at jdk.compiler/com.sun.tools.javac.comp.Flow$AssignAnalyzer.visitAssign(Flow.java:2705)
                at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCAssign.accept(JCTree.java:2041)
                at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
                at jdk.compiler/com.sun.tools.javac.comp.Flow$BaseAnalyzer.scan(Flow.java:445)
                at jdk.compiler/com.sun.tools.javac.comp.Flow$AssignAnalyzer.scan(Flow.java:1682)
                at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.visitExec(TreeScanner.java:219)
                at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.java:1584)
                at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
                at jdk.compiler/com.sun.tools.javac.comp.Flow$BaseAnalyzer.scan(Flow.java:445)
                at jdk.compiler/com.sun.tools.javac.comp.Flow$AssignAnalyzer.scan(Flow.java:1682)
                at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:57)
                at jdk.compiler/com.sun.tools.javac.comp.Flow$AssignAnalyzer.handleSwitch(Flow.java:2409)
                at jdk.compiler/com.sun.tools.javac.comp.Flow$AssignAnalyzer.visitSwitch(Flow.java:2374)
        [snip]
        ---

              jlahoda Jan Lahoda
              jlahoda Jan Lahoda
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

                Created:
                Updated:
                Resolved: