class A {
    companion object {
        val s = "OK"
        var v = "NOT OK"
    }

    inline fun g(crossinline f: () -> Unit) {
        {
            f()
            s
            v = "OK"
        }.let { it() }
    }

    inline fun g2(crossinline f: () -> Unit) {
        object {
            fun run() {
                f()
                s
                v = "OK"
            }
        }.run()
    }

    inline fun use() {
        g {
            s
            g2 { s }
        }
        g {
            v = "OK"
            g2 {
                v = "OK"
            }
        }
    }

    fun useNonInline() {
        g {
            s
            g2 { s }
        }
        g {
            v = "OK"
            g2 {
                v = "OK"
            }
        }
    }
}

// One direct `A.s` access in the accessibility bridge `access$getS$cp`.
// 1 GETSTATIC A.s

// One direct `A.v` set in the accessibility bridge `access$setV$cp`.
// One direct `A.v` set in `A.<clinit>`
// 2 PUTSTATIC A.v

// Two accesses from the inline function code for `g` and `g2`.
// Four accesses from the code for `g` and `g2` inlined in `useInline`.
// Two accesses from the lambdas inlined in `useInline`.
// Four accesses from the code for `g` and `g2` inlined in `useNonInline`.
// 12 INVOKEVIRTUAL A\$Companion.getS

// Two accesses from the inline function code for `g` and `g2`.
// Four accesses from the code for `g` and `g2` inlined in `useInline`.
// Two accesses from the lambdas inlined in `useInline`.
// Four accesses from the code for `g` and `g2` inlined in `useNonInline`.
// 12 INVOKEVIRTUAL A\$Companion.setV

// One call to the accessibility bridge `access$setV$cp` from Companion.setV.
// Two uses of the direct accessor from the lambdas inlined in useNonInline.
// 3 INVOKESTATIC A.access\$setV\$cp

// One call to the accessibility bridge `access$getS$cp` from Companion.getS.
// Two uses of the direct accessor from the lambdas inlined in useNonInline.
// 3 INVOKESTATIC A.access\$getS\$cp
