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

Jonathan Gibbons jonathan.gibbons at oracle.com
Wed Mar 21 04:51:18 UTC 2018


Sorry to be picky, but you appear to have copied the legal header from a 
source file (in the src/ directory) and not from a nearby test (in the 
test/ directory). The difference is that source files are designated as 
subject to the "Classpath exception".  Test files are not.

Generally, the rules are ...

  * New source files, in the src/ directory, use GPLv2 + Classpath
    Exception.
  * New tests, in the test/ directory, use GPLv2 .... except for files
    using @compile/fail/ref=
  * New tests, in the test/ directory, use /* nodynamiccopyright */  if
    the test uses golden files containing line numbers

Generally, I recommend copying exactly the text from a nearby file, 
assuming the text looks "normal".  The only edit should be to initialize 
the year in the copyright line.   I do not recommend editing anything 
else; we do occasionally run scripts to "audit the legal headers" and 
every so often, that turns up anomalies!

-- Jon


On 3/20/18 9:39 PM, ShinyaYoshida wrote:
> Hi Jonathan,
> Thank you for the review.
>
> I was not sure the meaning of nodynamiccopyright in tests.
> Thank you for the pointing that.
>
> I've updated the webrev:
> http://cr.openjdk.java.net/~shinyafox/8199910/webrev.01/ 
> <http://cr.openjdk.java.net/%7Eshinyafox/8199910/webrev.01/>
>
> Regards,
> shinyafox(Shinya Yoshida)
>
> 2018-03-21 13:31 GMT+09:00 Jonathan Gibbons 
> <jonathan.gibbons at oracle.com <mailto:jonathan.gibbons at oracle.com>>:
>
>     Shinya,
>
>     Tests like the one you provided should normally have the full
>     legal header, including the standard GPL license text.
>
>     We only use the "/nodynamiccopyright/" version when the test is a
>     negative test with a golden file that contains line numbers, such
>     as a test using "@compile/fail/ref=file.out ....".   This is to
>     prevent the test from undergoing any automated processing should
>     the license text ever change.
>
>     -- Jon
>
>
>     On 3/20/18 7:53 PM, 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
>>     <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/20180320/7e4fcc58/attachment-0001.html>


More information about the compiler-dev mailing list