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

javac fails with an exception when looking for diamond creation

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P4 P4
    • 26
    • 25, 26
    • tools
    • None
    • b11

      The javac's diamond analyzer may crash for erroneous types.

      To reproduce:
      ```
      $ cat /tmp/Test.java
      public class Test {
          void t() {
              L<Object> l = new L<Test>();
          }
          static class L<T> {}
      }
      $ javac -XDfind=diamond -XDshould-stop.at=FLOW -XDdev /tmp/Test.java
      /tmp/Test.java:3: error: incompatible types: L<Test> cannot be converted to L<Object>
              L<Object> l = new L<Test>();
                            ^
      1 error
      An exception has occurred in the compiler (25-internal). Please file a bug against the Java compiler via the Java bug reporting page (https://bugreport.java.com) after checking the Bug Database (https://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: Analyzer error when processing: L<Object> l = new L<Test>():java.lang.NullPointerException: Cannot invoke "com.sun.tools.javac.code.Type.isPartial()" because "s" is null
      jdk.compiler/com.sun.tools.javac.code.Types$5.visitClassType(Types.java:1399)
      jdk.compiler/com.sun.tools.javac.code.Types$5.visitClassType(Types.java:1351)
      jdk.compiler/com.sun.tools.javac.code.Type$ClassType.accept(Type.java:1052)
      jdk.compiler/com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4936)
      jdk.compiler/com.sun.tools.javac.code.Types.isSameType(Types.java:1343)
      jdk.compiler/com.sun.tools.javac.comp.Analyzer$DiamondInitializer.process(Analyzer.java:268)
      jdk.compiler/com.sun.tools.javac.comp.Analyzer$DiamondInitializer.process(Analyzer.java:228)
      jdk.compiler/com.sun.tools.javac.comp.Analyzer.doAnalysis(Analyzer.java:577)
      jdk.compiler/com.sun.tools.javac.comp.Analyzer$2.flush(Analyzer.java:547)
      jdk.compiler/com.sun.tools.javac.comp.Analyzer.flush(Analyzer.java:591)
      jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1412)
      jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1380)
      jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:968)
      jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:319)
      jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:178)
      jdk.compiler/com.sun.tools.javac.Main.compile(Main.java:66)
      jdk.compiler/com.sun.tools.javac.Main.main(Main.java:52)
              at jdk.compiler/com.sun.tools.javac.util.Assert.error(Assert.java:162)
              at jdk.compiler/com.sun.tools.javac.comp.Analyzer.doAnalysis(Analyzer.java:579)
              at jdk.compiler/com.sun.tools.javac.comp.Analyzer$2.flush(Analyzer.java:547)
              at jdk.compiler/com.sun.tools.javac.comp.Analyzer.flush(Analyzer.java:591)
              at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1412)
              at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1380)
              at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:968)
              at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:319)
              at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:178)
              at jdk.compiler/com.sun.tools.javac.Main.compile(Main.java:66)
              at jdk.compiler/com.sun.tools.javac.Main.main(Main.java:52)
      printing javac parameters to: /tmp/javac.20250807_090036.args
      ```

      Based on:
      https://github.com/apache/netbeans/issues/4470

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

              Created:
              Updated:
              Resolved: