// !DIAGNOSTICS: -DEBUG_INFO_SMARTCAST fun foo(f: () -> R): R = f() fun some(v: T?, b: T): T { return foo { if (v != null) { v } else { b } } } fun some1(v: T?, b: T): T { return foo { if (v != null) v else b } } fun box() = when { some(1, 2) != 1 -> "fail 1" some(null, 2) != 2 -> "fail 2" some1(1, 2) != 1 -> "fail 3" else -> "OK" }