// CHECK_CONTAINS_NO_CALLS: testDispatch except=Unit_getInstance
// CHECK_CONTAINS_NO_CALLS: testExtension except=Unit_getInstance
class Bar {
    inline operator fun invoke(f: () -> String) { f() }
}

class Baz
inline operator fun Baz.invoke(f: () -> String) { f() }

class Foo {
    val bar = Bar()
    val baz = Baz()
}

// CHECK_BREAKS_COUNT: function=testDispatch count=0
// CHECK_LABELS_COUNT: function=testDispatch name=$l$block count=0
fun testDispatch(foo: Foo): String {
    foo.bar { return "O" }
    return "FailDispatch;"
}

// CHECK_BREAKS_COUNT: function=testExtension count=0
// CHECK_LABELS_COUNT: function=testExtension name=$l$block count=0
fun testExtension(foo: Foo): String {
    foo.baz { return "K" }
    return "FailExtension;"
}

fun box(): String {
    val f = Foo()
    return testDispatch(f) + testExtension(f)
}