diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Analyzer.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Analyzer.java index 1aea9f77a20..f45e8500000 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Analyzer.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Analyzer.java @@ -240,7 +240,7 @@ public class Analyzer { @Override List rewrite(JCNewClass oldTree) { - if (oldTree.clazz.hasTag(TYPEAPPLY)) { + if (oldTree.clazz.hasTag(TYPEAPPLY) && !oldTree.type.isErroneous()) { JCNewClass nc = copier.copy(oldTree); ((JCTypeApply)nc.clazz).arguments = List.nil(); return List.of(nc); diff --git a/test/langtools/tools/javac/analyzer/Diamond.java b/test/langtools/tools/javac/analyzer/Diamond.java index cee8d096cbd..5f77745beaf 100644 --- a/test/langtools/tools/javac/analyzer/Diamond.java +++ b/test/langtools/tools/javac/analyzer/Diamond.java @@ -23,7 +23,7 @@ /** * @test - * @bug 8349132 + * @bug 8349132 8364987 * @summary Check behavior of the diamond analyzer * @library /tools/lib * @modules jdk.compiler/com.sun.tools.javac.api @@ -139,4 +139,43 @@ public class Diamond extends TestRunner { } } + @Test //JDK-8364987: + public void testNoCrashErroneousTypes(Path base) throws Exception { + Path current = base.resolve("."); + Path src = current.resolve("src"); + Path classes = current.resolve("classes"); + tb.writeJavaFiles(src, + """ + public class Test { + void t() { + L l = new L(); + } + static class L { } + } + """); + + Files.createDirectories(classes); + + var out = new JavacTask(tb) + .options("-XDfind=diamond", + "-XDshould-stop.at=FLOW", + "-XDrawDiagnostics") + .outdir(classes) + .files(tb.findJavaFiles(src)) + .run(Task.Expect.FAIL) + .writeAll() + .getOutputLines(Task.OutputKind.DIRECT); + + var expectedOut = List.of( + "Test.java:3:23: compiler.err.prob.found.req: (compiler.misc.inconvertible.types: Test.L, Test.L)", + "1 error" + ); + + if (!Objects.equals(expectedOut, out)) { + throw new AssertionError("Incorrect Output, expected: " + expectedOut + + ", actual: " + out); + + } + } + }