<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:DengXian;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:DengXian;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        text-align:justify;
        text-justify:inter-ideograph;
        font-size:10.5pt;
        font-family:DengXian;}
.MsoChpDefault
        {mso-style-type:export-only;}
/* Page Definitions */
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style></head><body lang=ZH-CN style='word-wrap:break-word'><div class=WordSection1><p class=MsoNormal><span lang=EN-US>Hello! I found a severe bug when pattern-matching switches are nested.</span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>My Java version:</span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>openjdk 19 2022-09-20</span></p><p class=MsoNormal><span lang=EN-US>OpenJDK Runtime Environment (build 19+37)</span></p><p class=MsoNormal><span lang=EN-US>OpenJDK 64-Bit Server VM (build 19+37, mixed mode, sharing)</span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>The code that triggers ICE (just a ordinary unification algorithm):</span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>public class Bug {</span></p><p class=MsoNormal><span lang=EN-US>  sealed interface Term {</span></p><p class=MsoNormal><span lang=EN-US>    record Mula(Formula formula) implements Term {}</span></p><p class=MsoNormal><span lang=EN-US>    record I() implements Term {}</span></p><p class=MsoNormal><span lang=EN-US>    record U() implements Term {}</span></p><p class=MsoNormal><span lang=EN-US>  }</span></p><p class=MsoNormal><span lang=EN-US>  sealed interface Formula {</span></p><p class=MsoNormal><span lang=EN-US>    record Lit(boolean left) implements Formula {}</span></p><p class=MsoNormal><span lang=EN-US>    record Inv(Term i) implements Formula {}</span></p><p class=MsoNormal><span lang=EN-US>  }</span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>  public static Term compare(Term preLhs, Term preRhs) {</span></p><p class=MsoNormal><span lang=EN-US>    return switch (preLhs) {</span></p><p class=MsoNormal><span lang=EN-US>      case Term.I i -> new Term.U();</span></p><p class=MsoNormal><span lang=EN-US>      case Term.U u -> new Term.U();</span></p><p class=MsoNormal><span lang=EN-US>      case Term.Mula lhs -> {</span></p><p class=MsoNormal><span lang=EN-US>        if (!(preRhs instanceof Term.Mula rhs)) yield null;</span></p><p class=MsoNormal><span lang=EN-US>        var happy = switch (lhs.formula()) {</span></p><p class=MsoNormal><span lang=EN-US>          case Formula.Lit ll when rhs.formula() instanceof Formula.Lit rr -> ll.left() == rr.left();</span></p><p class=MsoNormal><span lang=EN-US>          case Formula.Inv ll when rhs.formula() instanceof Formula.Inv rr -></span></p><p class=MsoNormal><span lang=EN-US>            compare(ll.i(), rr.i()) != null;</span></p><p class=MsoNormal><span lang=EN-US>          default -> false;</span></p><p class=MsoNormal><span lang=EN-US>        };</span></p><p class=MsoNormal><span lang=EN-US>        yield happy ? new Term.I() : null;</span></p><p class=MsoNormal><span lang=EN-US>      }</span></p><p class=MsoNormal><span lang=EN-US>    };</span></p><p class=MsoNormal><span lang=EN-US>  }</span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>  public static void main(String[] args) {</span></p><p class=MsoNormal><span lang=EN-US>    System.out.println(System.getProperty("java.version"));</span></p><p class=MsoNormal><span lang=EN-US>  }</span></p><p class=MsoNormal><span lang=EN-US>}</span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:12.0pt;font-family:SimSun'>Throws this error randomly:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:12.0pt;font-family:SimSun'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:12.0pt;font-family:SimSun'>An exception has occurred in the compiler (19). 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.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:12.0pt;font-family:SimSun'>java.lang.AssertionError<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:12.0pt;font-family:SimSun'>   at jdk.compiler/com.sun.tools.javac.util.Assert.error(Assert.java:155)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:12.0pt;font-family:SimSun'>   at jdk.compiler/com.sun.tools.javac.util.Assert.check(Assert.java:46)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:12.0pt;font-family:SimSun'>   at jdk.compiler/com.sun.tools.javac.code.Scope$ScopeImpl.leave(Scope.java:386)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:12.0pt;font-family:SimSun'>   at jdk.compiler/com.sun.tools.javac.comp.Attr.visitBlock(Attr.java:1465)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:12.0pt;font-family:SimSun'>   at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1082)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:12.0pt;font-family:SimSun'>   at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:687)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:12.0pt;font-family:SimSun'>   at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStat(Attr.java:761)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:12.0pt;font-family:SimSun'>   at jdk.compiler/com.sun.tools.javac.comp.Attr.visitMethodDef(Attr.java:1253)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:12.0pt;font-family:SimSun'>   at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:912)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:12.0pt;font-family:SimSun'>   at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:687)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:12.0pt;font-family:SimSun'>   at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStat(Attr.java:761)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:12.0pt;font-family:SimSun'>   at jdk.compiler/com.sun.tools.javac.comp.Attr.attribClassBody(Attr.java:5601)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:12.0pt;font-family:SimSun'>   at jdk.compiler/com.sun.tools.javac.comp.Attr.attribClass(Attr.java:5492)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:12.0pt;font-family:SimSun'>   at jdk.compiler/com.sun.tools.javac.comp.Attr.attribClass(Attr.java:5316)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:12.0pt;font-family:SimSun'>  at jdk.compiler/com.sun.tools.javac.comp.Attr.attrib(Attr.java:5255)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:12.0pt;font-family:SimSun'>   at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.attribute(JavaCompiler.java:1317)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:12.0pt;font-family:SimSun'>   at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:946)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:12.0pt;font-family:SimSun'>   at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:104)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:12.0pt;font-family:SimSun'>   at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.invocationHelper(JavacTaskImpl.java:152)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:12.0pt;font-family:SimSun'>   at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:100)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:12.0pt;font-family:SimSun'>   at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:94)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:12.0pt;font-family:SimSun'>   at org.gradle.internal.compiler.java.IncrementalCompileTask.call(IncrementalCompileTask.java:89)<o:p></o:p></span></p></div></body></html>