Check that boxing instruction is simple call
like T.valueOf(unboxType(T)) #KT-6047 fixed
This commit is contained in:
committed by
Alexander Udalov
parent
34269e1a3e
commit
ec63394121
+6
-2
@@ -144,9 +144,13 @@ public class BoxingInterpreter extends OptimizationBasicInterpreter {
|
|||||||
private static boolean isBoxing(@NotNull AbstractInsnNode insn) {
|
private static boolean isBoxing(@NotNull AbstractInsnNode insn) {
|
||||||
if (insn.getOpcode() != Opcodes.INVOKESTATIC) return false;
|
if (insn.getOpcode() != Opcodes.INVOKESTATIC) return false;
|
||||||
|
|
||||||
MethodInsnNode methodInsnNode = (MethodInsnNode) insn;
|
MethodInsnNode node = (MethodInsnNode) insn;
|
||||||
|
|
||||||
return isWrapperClassName(methodInsnNode.owner) && "valueOf".equals(methodInsnNode.name);
|
return isWrapperClassName(node.owner) && "valueOf".equals(node.name) &&
|
||||||
|
Type.getMethodDescriptor(
|
||||||
|
Type.getObjectType(node.owner),
|
||||||
|
AsmUtil.unboxType(Type.getObjectType(node.owner))
|
||||||
|
).equals(node.desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isNextMethodCallOfProgressionIterator(
|
private static boolean isNextMethodCallOfProgressionIterator(
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
|
fun checkLongAB5E(x: Long) = assertEquals(0xAB5EL, x)
|
||||||
|
fun checkDouble1(y: Double) = assertEquals(1.0, y)
|
||||||
|
fun checkByte10(z: Byte) = assertEquals(10.toByte(), z)
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
val x = java.lang.Long.valueOf("AB5E", 16)
|
||||||
|
checkLongAB5E(x)
|
||||||
|
|
||||||
|
val y = java.lang.Double.valueOf("1.0")
|
||||||
|
checkDouble1(y)
|
||||||
|
|
||||||
|
val z = java.lang.Byte.valueOf("A", 16)
|
||||||
|
checkByte10(z)
|
||||||
|
|
||||||
|
return "OK"
|
||||||
|
}
|
||||||
+6
@@ -181,6 +181,12 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode
|
|||||||
doTestWithStdlib(fileName);
|
doTestWithStdlib(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("kt6047.kt")
|
||||||
|
public void testKt6047() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/boxingOptimization/kt6047.kt");
|
||||||
|
doTestWithStdlib(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("nullCheck.kt")
|
@TestMetadata("nullCheck.kt")
|
||||||
public void testNullCheck() throws Exception {
|
public void testNullCheck() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/boxingOptimization/nullCheck.kt");
|
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/boxingOptimization/nullCheck.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user