RFR 8199910: Compiler crashes with -g option and variables of intersection type inferred by `var`

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Wed Mar 21 16:09:51 UTC 2018


Hi Shinya,
thanks for the fix; unfortunately, I believe it is not correct. An 
intersection type should be erased by the time we get here; we had a 
similar issue in the past with multicatch:

https://bugs.openjdk.java.net/browse/JDK-6999635

https://bugs.openjdk.java.net/browse/JDK-7005371

I will take a closer look as to find out exactly what's going on; the 
fix for multicatch should have taken care for this one too...

Maurizio


On 21/03/18 02:53, ShinyaYoshida wrote:
> Hi all and Kishida,
>
> Thank you for reporting the issue.
>
> I've filed and created a patch:
> Bugs: https://bugs.openjdk.java.net/browse/JDK-8199910
> Webrev: http://cr.openjdk.java.net/~shinyafox/8199910/webrev/ 
> <http://cr.openjdk.java.net/%7Eshinyafox/8199910/webrev/>
>
> Could someone review this?
>
> If it's fine, I'll commit to jdk repo and I'd like to backport to 
> jdk10 after backport approval.
>
> Regards,
> shinyafox(Shinya Yoshida)
>
> 2018-03-21 10:54 GMT+09:00 kishida naoki <naokikishida at gmail.com 
> <mailto:naokikishida at gmail.com>>:
>
>     Hi all!
>
>     I'm glad that JDK 10 is released.
>     But I've faced a compiler bug with `var`.
>     I'm using the build 46.
>
>     This code crashes the compiler with `-g` option.
>     ```
>     public class Main {
>         void m() {
>             var s = java.util.List.of("a", 1);
>         }
>     }
>     ```
>
>     $ javac Main.java -g
>     C:\src>javac Main.java -g
>     java.lang.AssertionError: Unexpected intersection type:
>     java.lang.Object&java.io
>     <http://java.io>.Serializable&java.lang.Comparable<? extends
>     java.lang.Object&java.io
>     <http://java.io>.Serializable&java.lang.Comparable<?>>
>             at
>     jdk.compiler/com.sun.tools.javac.jvm.ClassWriter.enterInner(ClassWriter.java:1043)
>             at
>     jdk.compiler/com.sun.tools.javac.jvm.ClassWriter$CWSignatureGenerator.classReference(ClassWriter.java:312)
>             at
>     jdk.compiler/com.sun.tools.javac.code.Types$SignatureGenerator.assembleClassSig(Types.java:5182)
>             at
>     jdk.compiler/com.sun.tools.javac.code.Types$SignatureGenerator.assembleSig(Types.java:5114)
>             at
>     jdk.compiler/com.sun.tools.javac.jvm.ClassWriter$CWSignatureGenerator.assembleSig(ClassWriter.java:291)
>             at
>     jdk.compiler/com.sun.tools.javac.code.Types$SignatureGenerator.assembleSig(Types.java:5225)
>             at
>     jdk.compiler/com.sun.tools.javac.code.Types$SignatureGenerator.assembleClassSig(Types.java:5201)
>             at
>     jdk.compiler/com.sun.tools.javac.code.Types$SignatureGenerator.assembleSig(Types.java:5114)
>             at
>     jdk.compiler/com.sun.tools.javac.jvm.ClassWriter$CWSignatureGenerator.assembleSig(ClassWriter.java:291)
>             at
>     jdk.compiler/com.sun.tools.javac.jvm.ClassWriter.typeSig(ClassWriter.java:334)
>             at
>     jdk.compiler/com.sun.tools.javac.jvm.ClassWriter.writeCode(ClassWriter.java:1271)
>             at
>     jdk.compiler/com.sun.tools.javac.jvm.ClassWriter.writeMethod(ClassWriter.java:1158)
>             at
>     jdk.compiler/com.sun.tools.javac.jvm.ClassWriter.writeMethods(ClassWriter.java:1653)
>             at
>     jdk.compiler/com.sun.tools.javac.jvm.ClassWriter.writeClassFile(ClassWriter.java:1761)
>             at
>     jdk.compiler/com.sun.tools.javac.jvm.ClassWriter.writeClass(ClassWriter.java:1679)
>             at
>     jdk.compiler/com.sun.tools.javac.main.JavaCompiler.genCode(JavaCompiler.java:749)
>             at
>     jdk.compiler/com.sun.tools.javac.main.JavaCompiler.generate(JavaCompiler.java:1627)
>             at
>     jdk.compiler/com.sun.tools.javac.main.JavaCompiler.generate(JavaCompiler.java:1595)
>             at
>     jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:965)
>             at
>     jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:306)
>             at
>     jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:165)
>             at jdk.compiler/com.sun.tools.javac.Main.compile(Main.java:57)
>             at jdk.compiler/com.sun.tools.javac.Main.main(Main.java:43)
>
>     The cause is about intersection. The variable type that is infered
>     becomes as a type with intersection, and will crash the compiler
>     when generating a debug info.
>     These are no problem.
>       var s=List.of("a");
>       var s=List.of("a", 1, Optional.empty());
>       var s=List.of("a", 1, List.of());
>
>     Best regards.
>
>     -- 
>     Naoki Kishida
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20180321/9bfa6bc7/attachment-0001.html>


More information about the compiler-dev mailing list