// IGNORE_BACKEND: JS // FILE: 1.kt // WITH_RUNTIME package test class A class B inline fun Any?.foo(): T = this as T inline fun Any?.foo2(): Y? = foo() inline fun Any?.foo3(): Z? = foo2() // FILE: 2.kt import test.* fun box(): String { if (null.foo3() != null) return "fail 1" if (null.foo3() != null) return "fail 2" if (null.foo3() != null) return "fail 3" if (null.foo3() != null) return "fail 4" val a = A() if (a.foo3() != a) return "fail 5" if (a.foo3() != a) return "fail 6" if (a.foo3() != a) return "fail 7" if (a.foo3() != a) return "fail 8" val b = B() failClassCast { b.foo3(); return "failTypeCast 9" } failClassCast { b.foo3(); return "failTypeCast 10" } return "OK" } inline fun failClassCast(s: () -> Unit) { try { s() } catch (e: ClassCastException) { } }