8148213: Regression: nested unchecked call does not trigger erasure of return type
authormcimadamore
Thu, 28 Jan 2016 14:06:27 +0000
changeset 35423 36c7b4ec7a8b
parent 35422 1f1990a69517
child 35424 96661d1df628
8148213: Regression: nested unchecked call does not trigger erasure of return type Summary: FreeTypeListener was deferred too much and caused loss of unchecked warning while in the middle of overload Reviewed-by: vromero
langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java
langtools/test/tools/javac/generics/inference/8148213/T8148213.java
langtools/test/tools/javac/generics/inference/8148213/T8148213.out
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java	Thu Jan 28 17:41:52 2016 +0530
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java	Thu Jan 28 14:06:27 2016 +0000
@@ -239,7 +239,7 @@
             //this means we are dealing with a partially inferred poly expression
             owntype = shouldCheck ? resultInfo.pt : found;
             if (resultInfo.checkMode.installPostInferenceHook()) {
-                inferenceContext.addFreeTypeListener(List.of(found, resultInfo.pt),
+                inferenceContext.addFreeTypeListener(List.of(found),
                         instantiatedContext -> {
                             ResultInfo pendingResult =
                                     resultInfo.dup(inferenceContext.asInstType(resultInfo.pt));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/generics/inference/8148213/T8148213.java	Thu Jan 28 14:06:27 2016 +0000
@@ -0,0 +1,30 @@
+/*
+ * @test /nodynamiccopyright/
+ * @bug 8148213
+ * @summary Regression: nested unchecked call does not trigger erasure of return type
+ *
+ * @compile/fail/ref=T8148213.out -Werror -Xlint:unchecked -XDrawDiagnostics T8148213.java
+ */
+
+abstract class T8148213 {
+
+    interface R<E> { }
+
+    interface Q<T> { }
+
+    interface T {
+        <E> Q<E> n(R<E> r);
+    }
+
+    abstract <T> T isA(Class<T> t);
+
+    abstract <T> S<T> w(T t);
+
+    interface S<T> {
+        S<T> t(T value);
+    }
+
+    void f(T t, Q<String> q) {
+        w(t.n(isA(R.class))).t(q);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/generics/inference/8148213/T8148213.out	Thu Jan 28 14:06:27 2016 +0000
@@ -0,0 +1,5 @@
+T8148213.java:28:14: compiler.warn.unchecked.meth.invocation.applied: kindname.method, n, T8148213.R<E>, T8148213.R, kindname.interface, T8148213.T
+T8148213.java:28:18: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), T8148213.R, T8148213.R<E>
+- compiler.err.warnings.and.werror
+1 error
+2 warnings