| // WITH_STDLIB | |
| import kotlin.random.Random | |
| fun fun1() { | |
| } | |
| fun fun2() { | |
| } | |
| fun takesLambda(lambda: () -> Unit) { | |
| lambda() | |
| } | |
| fun takesOtherLambda(lambda: () -> Unit) = lambda() | |
| fun foo() {} | |
| fun bar2(): Int = 1 | |
| fun <K> foo4(): K = 2 as K | |
| fun test1(): String { | |
| takesOtherLambda { | |
| val reference: () -> Unit = if (Random.nextBoolean()) { | |
| ::fun1 | |
| } else { | |
| ::fun2 | |
| } | |
| takesLambda(reference) | |
| } | |
| return "OK" | |
| } | |
| fun test2(): String { | |
| takesOtherLambda { | |
| val reference: () -> Unit = if (Random.nextBoolean()) | |
| ::fun1 | |
| else | |
| ::fun2 | |
| takesLambda(reference) | |
| } | |
| return "OK" | |
| } | |
| fun test3(): String { | |
| takesOtherLambda { | |
| val reference: () -> Unit = if (Random.nextBoolean()) { | |
| foo() | |
| ::fun1 | |
| } else { | |
| foo() | |
| ::fun2 | |
| } | |
| takesLambda(reference) | |
| } | |
| return "OK" | |
| } | |
| fun box(): String { | |
| return if (test1() == "OK" && test2() == "OK" && test3() == "OK") "OK" else "NOK" | |
| } |