diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/checker/TypeCheckingProcedure.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/checker/TypeCheckingProcedure.java index c76bbe8d939..ca99f9d0a9e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/checker/TypeCheckingProcedure.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/checker/TypeCheckingProcedure.java @@ -197,7 +197,9 @@ public class TypeCheckingProcedure { JetType superIn = getInType(parameter, superArgument); JetType superOut = getOutType(parameter, superArgument); - if (parameter.getVariance() == INVARIANT && subArgument.getProjectionKind() == INVARIANT && superArgument.getProjectionKind() == INVARIANT) { + boolean argumentIsErrorType = ErrorUtils.isErrorType(subArgument.getType()) || ErrorUtils.isErrorType(superArgument.getType()); + if (!argumentIsErrorType && parameter.getVariance() == INVARIANT + && subArgument.getProjectionKind() == INVARIANT && superArgument.getProjectionKind() == INVARIANT) { if (!constraints.assertEqualTypes(subArgument.getType(), superArgument.getType(), this)) return false; } else { diff --git a/compiler/testData/diagnostics/tests/inference/reportingImprovements/subtypeForInvariantWithErrorGenerics.kt b/compiler/testData/diagnostics/tests/inference/reportingImprovements/subtypeForInvariantWithErrorGenerics.kt new file mode 100644 index 00000000000..8d0f5807659 --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/reportingImprovements/subtypeForInvariantWithErrorGenerics.kt @@ -0,0 +1,12 @@ +package a + +fun foo (f: ()->R, r: MutableList) = r.add(f()) +fun bar (r: MutableList, f: ()->R) = r.add(f()) + +fun test() { + val a = foo({1}, arrayListOf("")) //no type inference error on 'arrayListOf' + val b = bar(arrayListOf(""), {1}) +} + +// from standard library +fun arrayListOf(vararg values: T) : MutableList {} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index b43fb17981b..ec43d4b1b34 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -2315,6 +2315,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage doTest("compiler/testData/diagnostics/tests/inference/reportingImprovements/NoAmbiguityForDifferentFunctionTypes.kt"); } + @TestMetadata("subtypeForInvariantWithErrorGenerics.kt") + public void testSubtypeForInvariantWithErrorGenerics() throws Exception { + doTest("compiler/testData/diagnostics/tests/inference/reportingImprovements/subtypeForInvariantWithErrorGenerics.kt"); + } + } @TestMetadata("compiler/testData/diagnostics/tests/inference/varargs")