Do not generate CHECKCAST after 'null' literal

#KT-15411 Fixed
This commit is contained in:
Alexander Udalov
2016-12-23 14:41:32 +03:00
parent 4c9bac084c
commit 3d9c264d63
3 changed files with 33 additions and 1 deletions
@@ -810,7 +810,9 @@ public abstract class StackValue {
v.aconst(value);
}
coerceTo(type, v);
if (value != null || AsmUtil.isPrimitive(type)) {
coerceTo(type, v);
}
}
}
@@ -0,0 +1,15 @@
// KT-15411 Unnecessary CHECKCAST bytecode when dealing with null
fun test1(): String? {
return null
}
fun test2(): BooleanArray? {
return null
}
fun test3(): Unit? {
return null
}
// 0 CHECKCAST
@@ -612,6 +612,21 @@ public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest {
}
}
@TestMetadata("compiler/testData/codegen/bytecodeText/checkcast")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class Checkcast extends AbstractBytecodeTextTest {
public void testAllFilesPresentInCheckcast() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/bytecodeText/checkcast"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true);
}
@TestMetadata("kt15411.kt")
public void testKt15411() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/checkcast/kt15411.kt");
doTest(fileName);
}
}
@TestMetadata("compiler/testData/codegen/bytecodeText/coercionToUnitOptimization")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)