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);
|
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")
|
@TestMetadata("compiler/testData/codegen/bytecodeText/coercionToUnitOptimization")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
@RunWith(JUnit3RunnerWithInners.class)
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
|
|||||||
Reference in New Issue
Block a user