KT-2457 Verify error when comparing not null value with null in when

backend-side changes
This commit is contained in:
Alexander Udalov
2012-07-20 14:40:30 +04:00
parent fa7ad96a4e
commit 2ac70ee35f
4 changed files with 28 additions and 1 deletions
@@ -2848,7 +2848,7 @@ The "returned" value of try expression with no finally is either the last expres
}
else if (pattern instanceof JetExpressionPattern) {
if (expressionToMatch != null) {
final Type subjectType = expressionToMatch.type;
Type subjectType = expressionToMatch.type;
expressionToMatch.dupReceiver(v);
expressionToMatch.put(subjectType, v);
JetExpression condExpression = ((JetExpressionPattern) pattern).getExpression();
@@ -2857,6 +2857,10 @@ The "returned" value of try expression with no finally is either the last expres
Type condType;
if (isNumberPrimitive(subjectType) || subjectType.getSort() == Type.BOOLEAN) {
condType = asmType(condJetType);
if (!(isNumberPrimitive(condType) || condType.getSort() == Type.BOOLEAN)) {
subjectType = JetTypeMapper.boxType(subjectType);
expressionToMatch.coerce(subjectType, v);
}
}
else {
condType = TYPE_OBJECT;
@@ -0,0 +1,7 @@
fun foo(i: Int, j: Int?): String =
when (i) {
j -> "OK"
else -> "Fail"
}
fun box(): String = foo(0, 0)
@@ -0,0 +1,8 @@
fun foo(i: Int) : Int =
when (i) {
1 -> 1
null -> 1
else -> 1
}
fun box() : String = if (foo(1) == 1) "OK" else "fail"
@@ -162,4 +162,12 @@ public class PatternMatchingTest extends CodegenTestCase {
public void testKt2466() throws Exception {
blackBoxFile("patternMatching/kt2466.kt");
}
public void testMatchNotNullAgainstNullable() throws Exception {
blackBoxFile("patternMatching/matchNotNullAgainstNullable.kt");
}
public void testKt2457() throws Exception {
blackBoxFile("regressions/kt2457.kt");
}
}