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:
Michael Bogdanov
2014-10-06 13:47:11 +04:00
parent 8cafea9f5a
commit e6c98078b3
4 changed files with 47 additions and 1 deletions
@@ -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");