Fix default value generation after suspension point

Replace coercion from VOID with call 'pushDefaultValueOnStack'

It's necessary because coercion of VOID to java/lang/Object ends with Unit instance on stack
that makes variables spilling algorithm thinking that variable is Unit

 #KT-13409 Fixed
This commit is contained in:
Denis Zharkov
2016-08-31 16:15:36 +03:00
parent 1226d8fc2c
commit cebe67d90c
3 changed files with 31 additions and 1 deletions
@@ -0,0 +1,24 @@
class Controller {
suspend fun <T> suspendHere(v: T, x: Continuation<T>) {
x.resume(v)
}
}
fun builder(coroutine c: Controller.() -> Continuation<Unit>) {
c(Controller()).resume(Unit)
}
var result: Any = ""
fun <T : Any> foo(v: T) {
builder {
val r = suspendHere(v)
suspendHere("")
result = r
}
}
fun box(): String {
foo("OK")
return result as String
}