86af01439c
^KT-56696 Fixed ^KT-56408
72 lines
1.6 KiB
Kotlin
Vendored
72 lines
1.6 KiB
Kotlin
Vendored
// DIAGNOSTICS: -UNUSED_PARAMETER
|
|
// WITH_STDLIB
|
|
|
|
import kotlin.contracts.*
|
|
|
|
fun capture(block: () -> Unit): String = ""
|
|
|
|
@OptIn(ExperimentalContracts::class)
|
|
inline fun inPlace(block: () -> Unit): String {
|
|
contract {
|
|
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
|
}
|
|
block()
|
|
return ""
|
|
}
|
|
|
|
fun consume(x: Any?) {}
|
|
|
|
class A {
|
|
val a = capture { consume(x) }
|
|
|
|
val b = inPlace {
|
|
consume(<!UNINITIALIZED_VARIABLE!>x<!>) // error
|
|
capture { consume(x) } // ok
|
|
inPlace {
|
|
consume(<!UNINITIALIZED_VARIABLE!>x<!>) // error
|
|
capture { consume(x) } // ok
|
|
}
|
|
}
|
|
|
|
val c = object {
|
|
fun foo() {
|
|
consume(x) // ok
|
|
capture { consume(x) } // ok
|
|
inPlace {
|
|
consume(x) // ok
|
|
capture { consume(x) } // ok
|
|
}
|
|
}
|
|
|
|
init {
|
|
consume(<!UNINITIALIZED_VARIABLE!>x<!>) // error
|
|
capture { consume(x) } // ok
|
|
inPlace {
|
|
consume(<!UNINITIALIZED_VARIABLE!>x<!>) // error
|
|
capture { consume(x) } // ok
|
|
}
|
|
}
|
|
|
|
val objectProp = inPlace {
|
|
consume(<!UNINITIALIZED_VARIABLE!>x<!>) // error
|
|
capture { consume(x) } // ok
|
|
inPlace {
|
|
consume(<!UNINITIALIZED_VARIABLE!>x<!>) // error
|
|
capture { consume(x) } // ok
|
|
}
|
|
}
|
|
}
|
|
|
|
val d = inPlace {
|
|
fun localFun() {
|
|
consume(x) // ok
|
|
}
|
|
|
|
capture {
|
|
localFun()
|
|
}
|
|
}
|
|
|
|
val x = 10
|
|
}
|