Do not generate CHECKCAST after 'null' literal
#KT-15411 Fixed
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user