// 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?.plusAssign(a: A?) {
    cnt++
}

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