| // RUN_PIPELINE_TILL: FRONTEND | |
| fun foo(x: Int, y: Any?, z: Int) {} | |
| fun myRun(block: () -> Unit): Any? { | |
| return null | |
| } | |
| fun test_1() { | |
| var x: String? = null | |
| if (x != null) { | |
| foo( | |
| x.length, // stable smartcast | |
| run { x = "" }, | |
| <!SMARTCAST_IMPOSSIBLE!>x<!>.length // can be stable smartcast | |
| ) | |
| } | |
| } | |
| fun test_2() { | |
| var x: String? = null | |
| if (x != null) { | |
| foo( | |
| x.length, // stable smartcast | |
| myRun { x = "" }, | |
| <!SMARTCAST_IMPOSSIBLE!>x<!>.length // unstable smartcast | |
| ) | |
| } | |
| } | |
| fun test_3() { | |
| var x: String? = null | |
| if (x != null) { | |
| foo( | |
| x.length, // stable smartcast | |
| { x = "" }, | |
| x.length // stable smartcast | |
| ) | |
| } | |
| } | |
| fun test_4() { | |
| var x: String? = null | |
| if (x != null) { | |
| foo( | |
| x.length, // stable smartcast | |
| run { x = null }, | |
| <!SMARTCAST_IMPOSSIBLE!>x<!>.length // either unstable or not a smartcast | |
| ) | |
| } | |
| } | |
| /* GENERATED_FIR_TAGS: assignment, equalityExpression, functionDeclaration, functionalType, ifExpression, lambdaLiteral, | |
| localProperty, nullableType, propertyDeclaration, smartcast, stringLiteral */ |