5b3816cce5
treat it as a general one, introduce *_K1 and *_K2 variants for more specific ignoring
58 lines
819 B
Kotlin
Vendored
58 lines
819 B
Kotlin
Vendored
// TARGET_BACKEND: JVM_IR
|
|
// IGNORE_BACKEND_K1: JVM_IR
|
|
|
|
var cnt = 0
|
|
|
|
class A
|
|
|
|
var A?.b: A?
|
|
get() {
|
|
return this
|
|
}
|
|
set(v) {
|
|
cnt++
|
|
}
|
|
|
|
var A?.c: A?
|
|
get() {
|
|
return this
|
|
}
|
|
set(v) {
|
|
cnt++
|
|
}
|
|
|
|
operator fun A?.get(i: Int): A? = this
|
|
operator fun A?.set(i: Int, v: A?): A? {
|
|
cnt++
|
|
return this
|
|
}
|
|
|
|
operator fun A?.inc(): A? {
|
|
return this
|
|
}
|
|
|
|
fun test(a: A?) {
|
|
++a?.b
|
|
++a?.b?.c
|
|
++a?.b.c // ".c" will be called anyway
|
|
|
|
++a?.b[0]
|
|
++a?.b?.c[0]
|
|
++a?.b.c[0] // ".c" will be called anyway
|
|
|
|
++a?.b[0][0]
|
|
++a?.b?.c[0][0]
|
|
++a?.b.c[0][0] // ".c" will be called anyway
|
|
}
|
|
|
|
fun box(): String {
|
|
test(null)
|
|
if (cnt != 3) return "fail 1: $cnt"
|
|
|
|
cnt = 0
|
|
test(A())
|
|
if (cnt != 9) return "fail 2: $cnt"
|
|
|
|
return "OK"
|
|
}
|