mirror of
https://github.com/jlengrand/kotlin.git
synced 2026-05-09 00:21:47 +00:00
See KT-36812. Aside from the problem stated there, D8 will throw out the entire LVT if it sees a variable that has not been written to (and will generate incorrect SSA if the slot is reused with a different type). Note: this only fixes a FIR test because it's missing an `else -> throw` branch, and default initialization satisfies the verifier and masks the incorrect control flow.
23 lines
441 B
Kotlin
Vendored
23 lines
441 B
Kotlin
Vendored
import kotlin.contracts.ExperimentalContracts
|
|
import kotlin.contracts.InvocationKind
|
|
import kotlin.contracts.contract
|
|
|
|
@ExperimentalContracts
|
|
fun test(): Char {
|
|
val c: Char
|
|
doIt {
|
|
c = ' '
|
|
}
|
|
return c
|
|
}
|
|
|
|
@ExperimentalContracts
|
|
fun doIt(block: () -> Unit) {
|
|
contract {
|
|
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
|
}
|
|
block()
|
|
}
|
|
|
|
// 0 ISTORE 0
|
|
// 1 LOCALVARIABLE c Lkotlin/jvm/internal/Ref\$CharRef; |