// EXPECTED_REACHABLE_NODES: 1297 package foo import kotlin.reflect.KProperty interface Getter { fun get(): T } class Delegate(val getter: Getter) { var t: T? = null operator fun getValue(obj: Any, property: KProperty<*>): T { if (t != null) { return t!! } return getter.get() } operator fun setValue(obj: Any, property: KProperty<*>, value: T) { t = value } } class A : Getter { var value = 0 override fun get(): Int { return value } val delegate = Delegate(this) val a by delegate var b by delegate } fun box(): String { val a = A() if (a.a != 0) return "a.a != 0" if (a.b != 0) return "a.b != 0" a.b = 4 if (a.a != 4) return "a.a != 4" if (a.b != 4) return "a.b != 4" return "OK" }