javac fails with an exception when a class is missing while evaluating conditional expression

XMLWordPrintable

    • Type: Bug
    • Resolution: Unresolved
    • Priority: P3
    • tbd
    • Affects Version/s: 25, 26
    • Component/s: tools
    • None

      Consider this testcase:
      ---
      $ cat reproduce.sh
      rm -rf src lib classes
      mkdir -p lib/test
      cat >lib/test/Intermediate.java <<EOF
      package test;
      public class Intermediate extends Base {}
      EOF
      cat >lib/test/Base.java <<EOF
      package test;
      public class Base {}
      EOF
      javac -d classes lib/test/Intermediate.java lib/test/Base.java
      rm classes/test/Base.class
      mkdir -p src/test
      cat >src/test/Test.java <<EOF
      package test;
      public class Test {
          private void test(Intermediate i) {
              int j = i != null ? i.get() : -1;
          }
      }
      EOF
      javac -cp classes -XDdev src/test/Test.java
      ---

      When compiled (with JDK 25):
      ---
      $ bash reproduce.sh
      src/test/Test.java:4: error: cannot access Base
              int j = i != null ? i.get() : -1;
                                   ^
        class file for test.Base not found
      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.NullPointerException: Cannot invoke "com.sun.tools.javac.code.Symbol.flags()" because "sym" is null
              at jdk.compiler/com.sun.tools.javac.code.Types.memberType(Types.java:2304)
              at jdk.compiler/com.sun.tools.javac.comp.Attr.isBooleanOrNumeric(Attr.java:2143)
              at jdk.compiler/com.sun.tools.javac.comp.Attr.isBooleanOrNumeric(Attr.java:2132)
              at jdk.compiler/com.sun.tools.javac.comp.Attr.visitConditional(Attr.java:2070)
              at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCConditional.accept(JCTree.java:1580)
              at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:677)
              at jdk.compiler/com.sun.tools.javac.comp.Attr.attribExpr(Attr.java:723)
              at jdk.compiler/com.sun.tools.javac.comp.Attr.visitVarDef(Attr.java:1315)
              at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:1066)
              at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:677)
              at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStat(Attr.java:751)
              at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStats(Attr.java:770)
              at jdk.compiler/com.sun.tools.javac.comp.Attr.visitBlock(Attr.java:1460)
              at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1136)
              at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:677)
              at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStat(Attr.java:751)
              at jdk.compiler/com.sun.tools.javac.comp.Attr.visitMethodDef(Attr.java:1242)
              at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:960)
              at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:677)
              at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStat(Attr.java:751)
              at jdk.compiler/com.sun.tools.javac.comp.Attr.attribClassBody(Attr.java:5653)
              at jdk.compiler/com.sun.tools.javac.comp.Attr.attribClass(Attr.java:5541)
              at jdk.compiler/com.sun.tools.javac.comp.Attr.attribClass(Attr.java:5361)
              at jdk.compiler/com.sun.tools.javac.comp.Attr.attrib(Attr.java:5298)
              at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.attribute(JavaCompiler.java:1346)
              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.20251121_120610.args
      ---

            Assignee:
            Jan Lahoda
            Reporter:
            Jan Lahoda
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated: