diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/TypeUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/TypeUtils.java index 82e4416c056..33a4211e2af 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/TypeUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/TypeUtils.java @@ -343,6 +343,11 @@ public class TypeUtils { private static void fillInDeepSubstitutor(@NotNull JetType context, @NotNull TypeSubstitutor substitutor, @NotNull Map substitution, @Nullable Multimap fullSubstitution) { List parameters = context.getConstructor().getParameters(); List arguments = context.getArguments(); + + if (parameters.size() != arguments.size()) { + throw new IllegalStateException(); + } + for (int i = 0; i < arguments.size(); i++) { TypeProjection argument = arguments.get(i); TypeParameterDescriptor typeParameterDescriptor = parameters.get(i); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java index 475acc8f65e..7b64af7a06b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java @@ -266,6 +266,11 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { return false; } + // do not crash on error types + if (ErrorUtils.isErrorType(actualType) || ErrorUtils.isErrorType(targetType)) { + return false; + } + { Multimap typeSubstitutionMap = TypeUtils.buildDeepSubstitutionMultimap(targetType); diff --git a/compiler/testData/diagnostics/tests/cast/IsErasedAllow.jet b/compiler/testData/diagnostics/tests/cast/IsErasedAllowSameClassParameter.jet similarity index 100% rename from compiler/testData/diagnostics/tests/cast/IsErasedAllow.jet rename to compiler/testData/diagnostics/tests/cast/IsErasedAllowSameClassParameter.jet diff --git a/compiler/testData/diagnostics/tests/cast/IsErasedAllowSameParameterParameter.jet b/compiler/testData/diagnostics/tests/cast/IsErasedAllowSameParameterParameter.jet new file mode 100644 index 00000000000..6d6e453858b --- /dev/null +++ b/compiler/testData/diagnostics/tests/cast/IsErasedAllowSameParameterParameter.jet @@ -0,0 +1,7 @@ +// +JDK + +import java.util.Collection; +import java.util.List; + +fun ff(l: Collection) = l is List +