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);
|
||||
}
|
||||
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");
|
||||
}
|
||||
v.swap();
|
||||
coerceTo(type, v);
|
||||
}
|
||||
else {
|
||||
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);
|
||||
}
|
||||
|
||||
@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")
|
||||
public void testPrimitive() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/safeCall/primitive.kt");
|
||||
|
||||
Reference in New Issue
Block a user