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

ShinyaYoshida bitterfoxc at gmail.com
Wed Mar 21 02:53:27 UTC 2018


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/

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>:

> 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.Serializable&java.lang.Comparable<? extends java.lang.Object&
> 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/78672400/attachment-0001.html>


More information about the compiler-dev mailing list