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

IllegalStateException in RichDiagnosticFormatter after JDK-8355065

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: P2 P2
    • 25
    • 25
    • tools
    • None

      JDK-8355065 fixed an issue in RichDiagnosticFormatter where unhandled recursion was causing a ConcurrentModificationException, by avoiding the recursion and adding explicit checks to ensure that the logic doesn't recurse.

      I'm seeing a failure in those checks compiling some other code, with a stack trace like the one below.

      The fix is likely to make RichDiagnosticFormatter handle recursion, by keeping state for recursive calls in a stack. This is a regression with JDK-8355065 because the compiler is now crashing, but it didn't handle this state before, it would reset instance state on recursive calls and fail to restore it so it would have silently done the wrong thing.

      I'm working on a minimal repro and a fix.

      java.lang.IllegalStateException
      at jdk.compiler/com.sun.tools.javac.util.RichDiagnosticFormatter.enter(RichDiagnosticFormatter.java:107)
      at jdk.compiler/com.sun.tools.javac.util.RichDiagnosticFormatter.format(RichDiagnosticFormatter.java:139)
      at jdk.compiler/com.sun.tools.javac.util.RichDiagnosticFormatter.format(RichDiagnosticFormatter.java:72)
      at com.google.devtools.build.buildjar.javac.FormattedDiagnostic$Listener.report(FormattedDiagnostic.java:158)
      at jdk.compiler/com.sun.tools.javac.util.Log.writeDiagnostic(Log.java:763)
      at jdk.compiler/com.sun.tools.javac.util.Log$DefaultDiagnosticHandler.report(Log.java:732)
      at jdk.compiler/com.sun.tools.javac.util.Log.report(Log.java:683)
      at jdk.compiler/com.sun.tools.javac.util.AbstractLog.warning(AbstractLog.java:164)
      at jdk.compiler/com.sun.tools.javac.jvm.ClassReader$AnnotationDeproxy.visitEnumAttributeProxy(ClassReader.java:2160)
      at jdk.compiler/com.sun.tools.javac.jvm.ClassReader$EnumAttributeProxy.accept(ClassReader.java:1958)
      at jdk.compiler/com.sun.tools.javac.jvm.ClassReader$AnnotationDeproxy.deproxy(ClassReader.java:2102)
      at jdk.compiler/com.sun.tools.javac.jvm.ClassReader$AnnotationDeproxy.visitArrayAttributeProxy(ClassReader.java:2183)
      at jdk.compiler/com.sun.tools.javac.jvm.ClassReader$ArrayAttributeProxy.accept(ClassReader.java:1984)
      at jdk.compiler/com.sun.tools.javac.jvm.ClassReader$AnnotationDeproxy.deproxy(ClassReader.java:2102)
      at jdk.compiler/com.sun.tools.javac.jvm.ClassReader$AnnotationDeproxy.deproxyCompound(ClassReader.java:2057)
      at jdk.compiler/com.sun.tools.javac.jvm.ClassReader$AnnotationDeproxy.deproxyCompoundList(ClassReader.java:2045)
      at jdk.compiler/com.sun.tools.javac.jvm.ClassReader$AnnotationCompleter.run(ClassReader.java:2262)
      at jdk.compiler/com.sun.tools.javac.comp.Annotate.flush(Annotate.java:195)
      at jdk.compiler/com.sun.tools.javac.code.ClassFinder.complete(ClassFinder.java:322)
      at jdk.compiler/com.sun.tools.javac.code.Symbol.complete(Symbol.java:703)
      at jdk.compiler/com.sun.tools.javac.code.Symbol$ClassSymbol.complete(Symbol.java:1471)
      at jdk.compiler/com.sun.tools.javac.code.Symbol.apiComplete(Symbol.java:709)
      at jdk.compiler/com.sun.tools.javac.code.Type$ClassType.className(Type.java:1122)
      at jdk.compiler/com.sun.tools.javac.code.Type$ClassType.toString(Type.java:1086)
      at java.base/java.lang.String.valueOf(String.java:4546)
      at java.base/java.lang.StringBuilder.append(StringBuilder.java:173)
      at jdk.compiler/com.sun.tools.javac.code.Attribute$Compound.toString(Attribute.java:242)
      at java.base/java.lang.String.valueOf(String.java:4546)
      at java.base/java.lang.StringBuilder.append(StringBuilder.java:173)
      at jdk.compiler/com.sun.tools.javac.code.Printer.printAnnotations(Printer.java:203)
      at jdk.compiler/com.sun.tools.javac.code.Printer.printAnnotations(Printer.java:194)
      at jdk.compiler/com.sun.tools.javac.code.Printer.visitClassType(Printer.java:236)
      at jdk.compiler/com.sun.tools.javac.util.RichDiagnosticFormatter$RichPrinter.visitClassType(RichDiagnosticFormatter.java:417)
      at jdk.compiler/com.sun.tools.javac.util.RichDiagnosticFormatter$RichPrinter.visitClassType(RichDiagnosticFormatter.java:377)
      at jdk.compiler/com.sun.tools.javac.code.Type$ClassType.accept(Type.java:1052)
      at jdk.compiler/com.sun.tools.javac.code.Printer.visit(Printer.java:136)
      at jdk.compiler/com.sun.tools.javac.code.Printer.visitTypes(Printer.java:108)
      at jdk.compiler/com.sun.tools.javac.code.Printer.printMethodArgs(Printer.java:341)
      at jdk.compiler/com.sun.tools.javac.util.RichDiagnosticFormatter$RichPrinter.visitMethodSymbol(RichDiagnosticFormatter.java:474)
      at jdk.compiler/com.sun.tools.javac.util.RichDiagnosticFormatter$RichPrinter.visitMethodSymbol(RichDiagnosticFormatter.java:377)
      at jdk.compiler/com.sun.tools.javac.code.Symbol$MethodSymbol.accept(Symbol.java:2314)
      at jdk.compiler/com.sun.tools.javac.code.Printer.visit(Printer.java:147)
      at jdk.compiler/com.sun.tools.javac.util.AbstractDiagnosticFormatter.formatArgument(AbstractDiagnosticFormatter.java:209)
      at jdk.compiler/com.sun.tools.javac.util.AbstractDiagnosticFormatter.formatArguments(AbstractDiagnosticFormatter.java:167)
      at jdk.compiler/com.sun.tools.javac.util.BasicDiagnosticFormatter.formatMessage(BasicDiagnosticFormatter.java:111)
      at jdk.compiler/com.sun.tools.javac.util.BasicDiagnosticFormatter.formatMeta(BasicDiagnosticFormatter.java:186)
      at jdk.compiler/com.sun.tools.javac.util.BasicDiagnosticFormatter.formatDiagnostic(BasicDiagnosticFormatter.java:100)
      at jdk.compiler/com.sun.tools.javac.util.AbstractDiagnosticFormatter.format(AbstractDiagnosticFormatter.java:123)
      at jdk.compiler/com.sun.tools.javac.util.RichDiagnosticFormatter.format(RichDiagnosticFormatter.java:143)
      at jdk.compiler/com.sun.tools.javac.util.RichDiagnosticFormatter.format(RichDiagnosticFormatter.java:72)

            cushon Liam Miller-Cushon
            cushon Liam Miller-Cushon
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated: