// 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
}

fun test(a: A?) {
    a?.b = null
    a?.b?.c = null
    a?.b.c = null // ".c" will be called anyway

    a?.b[0] = null
    a?.b?.c[0] = null
    a?.b.c[0] = null // ".c" will be called anyway

    a?.b[0][0] = null
    a?.b?.c[0][0] = null
    a?.b.c[0][0] = null // ".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"
}
