| // RUN_PIPELINE_TILL: CODEGEN | |
| // ISSUE: KT-56744 | |
| fun <T> T.myApply(block: T.() -> Unit): T = this | |
| fun bar(): Int = 1 | |
| interface A : C | |
| interface B : C | |
| interface C { | |
| fun baz() | |
| } | |
| fun Any.foo() = myApply { | |
| when (this) { | |
| is A -> ::bar | |
| is B -> ::bar | |
| else -> throw RuntimeException() | |
| } | |
| baz() // Smart cast should work | |
| } | |
| /* GENERATED_FIR_TAGS: callableReference, funWithExtensionReceiver, functionDeclaration, functionalType, integerLiteral, | |
| interfaceDeclaration, isExpression, lambdaLiteral, nullableType, smartcast, thisExpression, typeParameter, | |
| typeWithExtension, whenExpression, whenWithSubject */ |