// FIR_IDENTICAL interface Base { fun baseFun() } interface Derived : Base { fun derivedFun() } abstract class A { protected val a: T = null!! fun fest_1(other: A<*>) { other.a.baseFun() // OK if (other is B) { other.a.baseFun() other.a.derivedFun() } if (other is C) { other.a.baseFun() other.a.derivedFun() } if (other is D) { other.a.baseFun() other.a.derivedFun() } } open class B : A() { class Nested { fun fest_3(other: A<*>) { other.a.baseFun() // OK if (other is B) { other.a.baseFun() other.a.derivedFun() } if (other is C) { other.a.baseFun() other.a.derivedFun() } if (other is D) { other.a.baseFun() other.a.derivedFun() } } } } class C : B() { fun fest_4(other: A<*>) { other.a.baseFun() // OK if (other is B) { other.a.baseFun() other.a.derivedFun() } if (other is C) { other.a.baseFun() other.a.derivedFun() } if (other is D) { other.a.baseFun() other.a.derivedFun() } } } class D : A() { fun fest_5(other: A<*>) { other.a.baseFun() // OK if (other is B) { other.a.baseFun() other.a.derivedFun() } if (other is C) { other.a.baseFun() other.a.derivedFun() } if (other is D) { other.a.baseFun() other.a.derivedFun() } } } }