blob: 2ed900113c679066355923b1731e0c4d9b3a8b90 [file]
// RUN_PIPELINE_TILL: FRONTEND
// WITH_STDLIB
// ISSUE: KT-59669
import kotlin.contracts.*
@OptIn(ExperimentalContracts::class)
inline fun <T> run2(x: () -> T, y: () -> T) {
contract {
callsInPlace(x, InvocationKind.EXACTLY_ONCE)
callsInPlace(y, InvocationKind.EXACTLY_ONCE)
}
x()
y()
}
fun test1() {
val x: Int
run2({ <!CAPTURED_VAL_INITIALIZATION!>x<!> = 1 }, { <!CAPTURED_VAL_INITIALIZATION!>x<!> = 2 })
x.inc()
}
fun test2() {
val x: Int
run2({ x = 1 }, {})
run2({}, { <!VAL_REASSIGNMENT!>x<!> = 2 })
x.inc()
}
fun test3(p: Boolean) {
val x: Int
run2(
{
if (p) {
<!CAPTURED_VAL_INITIALIZATION!>x<!> = 1
} else {
<!CAPTURED_VAL_INITIALIZATION!>x<!> = 2
}
},
{ <!CAPTURED_VAL_INITIALIZATION!>x<!> = 3 }
)
x.inc()
}
class C {
val x: Int
init {
C().apply {
run2({ <!VAL_REASSIGNMENT!>x<!> = 1 }, { <!VAL_REASSIGNMENT!>x<!> = 1 })
}
run2({ <!CAPTURED_MEMBER_VAL_INITIALIZATION!>x<!> = 1 }, { <!CAPTURED_MEMBER_VAL_INITIALIZATION!>x<!> = 2 })
x.inc()
}
}
/* GENERATED_FIR_TAGS: assignment, classDeclaration, classReference, contractCallsEffect, contracts, functionDeclaration,
functionalType, ifExpression, init, inline, integerLiteral, lambdaLiteral, localProperty, nullableType,
propertyDeclaration, typeParameter */