mirror of
https://github.com/jlengrand/kotlin.git
synced 2026-05-08 08:31:26 +00:00
Lateinit local vars are guaranteed to be non-null after store. So we mark such stores as storing non-null value (could be useful for some other constructs, too), and optimize null checks accordingly.
26 lines
548 B
Kotlin
Vendored
26 lines
548 B
Kotlin
Vendored
// LANGUAGE_VERSION: 1.2
|
|
|
|
fun almostAlwaysTrue() = true
|
|
|
|
fun runNoInline(f: () -> Unit) = f()
|
|
|
|
fun test() {
|
|
lateinit var z: String
|
|
|
|
runNoInline {
|
|
// NB this code can be executed in a different thread multiple times, each time with different results.
|
|
// So, 'z' can be initialized at any moment, and should be checked on every read.
|
|
|
|
if (almostAlwaysTrue()) {
|
|
z = ""
|
|
}
|
|
}
|
|
|
|
println(z)
|
|
println(z)
|
|
println(z)
|
|
}
|
|
|
|
// 0 IFNULL
|
|
// 3 IFNONNULL
|
|
// 3 throwUninitializedPropertyAccessException |