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

javac throws NPE when printing diagnostics for Lambda expressions

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P3 P3
    • 9
    • 8u51
    • tools
    • b94
    • x86_64
    • windows_7
    • Verified

      FULL PRODUCT VERSION :
      java version "1.8.0_51"
      Java(TM) SE Runtime Environment (build 1.8.0_51-b16)
      Java HotSpot(TM) 64-Bit Server VM (build 25.51-b03, mixed mode)

      ADDITIONAL OS VERSION INFORMATION :
      Microsoft Windows [Version 6.1.7601]

      A DESCRIPTION OF THE PROBLEM :
      Exception when compiling a class with -XDdumpLambdaToMethodStats -Xdiags:verbose:

      $ javac -XDdumpLambdaToMethodStats -Xdiags:verbose Test.java

      An exception has occurred in the compiler (1.8.0_51). Please file a bug at the Java Developer Connection (http://java.sun.com/webapps/bugreport) after checking the Bug Parade for duplicates. Include your program and the following diagnostic in your report. Thank you.
      java.lang.NullPointerException
      at com.sun.tools.javac.code.Symbol$MethodSymbol.getKind(Symbol.java:1602)
      at com.sun.tools.javac.code.Symbol$MethodSymbol.isStaticOrInstanceInit(Symbol.java:1613)
      at com.sun.tools.javac.util.RichDiagnosticFormatter$RichPrinter.visitMethodSymbol(RichDiagnosticFormatter.java:422)
      at com.sun.tools.javac.util.RichDiagnosticFormatter$RichPrinter.visitMethodSymbol(RichDiagnosticFormatter.java:335)
      at
      ...

      REGRESSION. Last worked in version 8u51

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Exception when compiling a class:

      $ javac -XDdumpLambdaToMethodStats -Xdiags:verbose Test.java



      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      Compilation successful, no exception
      ACTUAL -
      See the exception in Error Messages section

      ERROR MESSAGES/STACK TRACES THAT OCCUR :
      An exception has occurred in the compiler (1.8.0_51). Please file a bug at the Java Developer Connection (http://java.sun.com/webapps/bugreport) after checking the Bug Parade for duplicates. Include your program and the following diagnostic in your report. Thank you.
      java.lang.NullPointerException
      at com.sun.tools.javac.code.Symbol$MethodSymbol.getKind(Symbol.java:1602)
      at com.sun.tools.javac.code.Symbol$MethodSymbol.isStaticOrInstanceInit(Symbol.java:1613)
      at com.sun.tools.javac.util.RichDiagnosticFormatter$RichPrinter.visitMethodSymbol(RichDiagnosticFormatter.java:422)
      at com.sun.tools.javac.util.RichDiagnosticFormatter$RichPrinter.visitMethodSymbol(RichDiagnosticFormatter.java:335)
      at com.sun.tools.javac.code.Symbol$MethodSymbol.accept(Symbol.java:1638)
      at com.sun.tools.javac.code.Printer.visit(Printer.java:147)
      at com.sun.tools.javac.util.AbstractDiagnosticFormatter.formatArgument(AbstractDiagnosticFormatter.java:196)
      at com.sun.tools.javac.util.AbstractDiagnosticFormatter.formatArguments(AbstractDiagnosticFormatter.java:161)
      at com.sun.tools.javac.util.BasicDiagnosticFormatter.formatMessage(BasicDiagnosticFormatter.java:111)
      at com.sun.tools.javac.util.BasicDiagnosticFormatter.formatMeta(BasicDiagnosticFormatter.java:184)
      at com.sun.tools.javac.util.BasicDiagnosticFormatter.formatDiagnostic(BasicDiagnosticFormatter.java:100)
      at com.sun.tools.javac.util.AbstractDiagnosticFormatter.format(AbstractDiagnosticFormatter.java:117)
      at com.sun.tools.javac.util.RichDiagnosticFormatter.format(RichDiagnosticFormatter.java:113)
      at com.sun.tools.javac.util.RichDiagnosticFormatter.format(RichDiagnosticFormatter.java:68)
      at com.sun.tools.javac.util.Log.writeDiagnostic(Log.java:622)
      at com.sun.tools.javac.util.Log$DefaultDiagnosticHandler.report(Log.java:584)
      at com.sun.tools.javac.util.Log.report(Log.java:562)
      at com.sun.tools.javac.util.AbstractLog.note(AbstractLog.java:215)
      at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.analyzeLambda(LambdaToMethod.java:1277)
      at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.visitLambda(LambdaToMethod.java:1260)
      at com.sun.tools.javac.tree.JCTree$JCLambda.accept(JCTree.java:1624)
      at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
      at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:70)
      at com.sun.tools.javac.tree.TreeTranslator.visitApply(TreeTranslator.java:275)
      at com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1465)
      at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
      at com.sun.tools.javac.tree.TreeTranslator.visitExec(TreeTranslator.java:245)
      at com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.java:1296)
      at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
      at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:70)
      at com.sun.tools.javac.tree.TreeTranslator.visitBlock(TreeTranslator.java:162)
      at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.visitBlock(LambdaToMethod.java:1172)
      at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:909)
      at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
      at com.sun.tools.javac.tree.TreeTranslator.visitMethodDef(TreeTranslator.java:145)
      at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.visitMethodDef(LambdaToMethod.java:1299)
      at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:778)
      at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
      at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:70)
      at com.sun.tools.javac.tree.TreeTranslator.visitClassDef(TreeTranslator.java:134)
      at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.visitClassDef(LambdaToMethod.java:1209)
      at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:693)
      at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
      at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.analyzeAndPreprocessClass(LambdaToMethod.java:1162)
      at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.access$300(LambdaToMethod.java:1119)
      at com.sun.tools.javac.comp.LambdaToMethod.visitClassDef(LambdaToMethod.java:232)
      at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:693)
      at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
      at com.sun.tools.javac.comp.LambdaToMethod.translate(LambdaToMethod.java:197)
      at com.sun.tools.javac.comp.LambdaToMethod.translate(LambdaToMethod.java:190)
      at com.sun.tools.javac.comp.LambdaToMethod.translateTopLevelClass(LambdaToMethod.java:217)
      at com.sun.tools.javac.main.JavaCompiler.desugar(JavaCompiler.java:1493)
      at com.sun.tools.javac.main.JavaCompiler.desugar(JavaCompiler.java:1356)
      at com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:901)
      at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:860)
      at com.sun.tools.javac.main.Main.compile(Main.java:523)
      at com.sun.tools.javac.main.Main.compile(Main.java:381)
      at com.sun.tools.javac.main.Main.compile(Main.java:370)
      at com.sun.tools.javac.main.Main.compile(Main.java:361)
      at com.sun.tools.javac.Main.compile(Main.java:56)
      at com.sun.tools.javac.Main.main(Main.java:42)


      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      class Test {
          public static void main(String... a) {
              new Test().run();
              new Test().run();
          }

          public void run() {
              printHash(this::m);
              printHash(Test::sm);
              printHash(() -> { o = new Object(); });
              printHash(() -> { s = new Object(); });
          }

          private void printHash(Runnable function)
          {
              System.out.println(function + "; hash=" + function.hashCode());
          }

          private static void sm() {
          }

          private void m() {
          }
          
          private Object o;
          private static Object s;
      }

      ---------- END SOURCE ----------

            sadayapalam Srikanth Adayapalam (Inactive)
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            7 Start watching this issue

              Created:
              Updated:
              Resolved: