abstract class Bar { constructor() /* primary */ { super/*Any*/() /* () */ } abstract fun bar() } interface Foo { abstract fun foo() } fun Bar.extBar() { } fun Foo.extFoo() { } fun materialize(): K { return CHECK_NOT_NULL(arg0 = null) } fun test_1(x: Any) { x as Bar /*~> Unit */ x as Foo /*~> Unit */ x /*as Foo */.foo() x /*as Bar */.bar() x /*as Foo */.extFoo() x /*as Bar */.extBar() } fun test_2(x: Any) { x as Bar? /*~> Unit */ x as Foo? /*~> Unit */ CHECK_NOT_NULL(arg0 = x) /*as Foo */.foo() CHECK_NOT_NULL(arg0 = x) /*as Bar */.bar() CHECK_NOT_NULL(arg0 = x) /*as Foo */.extFoo() CHECK_NOT_NULL(arg0 = x) /*as Bar */.extBar() } fun test_3(x: Any) { x as Bar? /*~> Unit */ x as Foo? /*~> Unit */ { // BLOCK val tmp_0: Any = x when { EQEQ(arg0 = tmp_0, arg1 = null) -> materialize() else -> tmp_0 } } /*as Foo */.foo() { // BLOCK val tmp_1: Any = x when { EQEQ(arg0 = tmp_1, arg1 = null) -> materialize() else -> tmp_1 } } /*as Bar */.bar() { // BLOCK val tmp_2: Any = x when { EQEQ(arg0 = tmp_2, arg1 = null) -> materialize() else -> tmp_2 } } /*as Foo */.extFoo() { // BLOCK val tmp_3: Any = x when { EQEQ(arg0 = tmp_3, arg1 = null) -> materialize() else -> tmp_3 } } /*as Bar */.extBar() }