Fixes for KT-4733 UnsupportedOperationException: don't know how to move type J to top of stack; KT-3430 VerifyError on a safe call to a primitive value
#KT-4733 Fixed #KT-3430 Fixed
This commit is contained in:
@@ -413,10 +413,11 @@ public abstract class StackValue {
|
|||||||
put(type, v);
|
put(type, v);
|
||||||
}
|
}
|
||||||
else if (depth == 1) {
|
else if (depth == 1) {
|
||||||
if (type.getSize() != 1) {
|
if (this.type.getSize() != 1) {
|
||||||
throw new UnsupportedOperationException("don't know how to move type " + type + " to top of stack");
|
throw new UnsupportedOperationException("don't know how to move type " + type + " to top of stack");
|
||||||
}
|
}
|
||||||
v.swap();
|
v.swap();
|
||||||
|
coerceTo(type, v);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
throw new UnsupportedOperationException("unsupported move-to-top depth " + depth);
|
throw new UnsupportedOperationException("unsupported move-to-top depth " + depth);
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
fun f(b : Int.(Int)->Int) = 1?.b(1)
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
val x = f { this + it }
|
||||||
|
return "OK"
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
class Test {
|
||||||
|
val Long.foo: Long
|
||||||
|
get() = this + 1
|
||||||
|
|
||||||
|
val Int.foo: Int
|
||||||
|
get() = this + 1
|
||||||
|
|
||||||
|
fun testLong(): Long? {
|
||||||
|
var s: Long? = 10;
|
||||||
|
return s?.foo
|
||||||
|
}
|
||||||
|
|
||||||
|
fun testInt(): Int? {
|
||||||
|
var s: Int? = 11;
|
||||||
|
return s?.foo
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
val s = Test()
|
||||||
|
|
||||||
|
if (s.testLong() != 11.toLong()) return "fail 1"
|
||||||
|
|
||||||
|
if (s.testInt() != 12) return "fail 1"
|
||||||
|
|
||||||
|
return "OK"
|
||||||
|
}
|
||||||
@@ -5790,6 +5790,18 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("kt3430.kt")
|
||||||
|
public void testKt3430() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/safeCall/kt3430.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("kt4733.kt")
|
||||||
|
public void testKt4733() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/safeCall/kt4733.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("primitive.kt")
|
@TestMetadata("primitive.kt")
|
||||||
public void testPrimitive() throws Exception {
|
public void testPrimitive() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/safeCall/primitive.kt");
|
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/safeCall/primitive.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user