// MODULE: lib // FILE: lib.kt // KT-43831 var result = "FAIL" class Change : IsChange { override fun qux(select: RPPG1): IsChange? { result = "" return null } override fun foo(select: RPPG1, sss: RPPG1): Change? { result += "O" return null } override fun bar(a: RPPG2>, b: RPPG3, out AC3>): Change? { result += "K" return null } } interface IsChange { fun qux(select: RPPG1): IsChange? fun foo(select: RPPG1, sss: RPPG1): IsChange? fun bar(a: RPPG2>, b: RPPG3, out AC3>): IsChange? } abstract class AC1 : BAC1() abstract class AC2 : BAC2() abstract class AC3 : BAC3() interface I1 interface I2 interface I3 abstract class BAC1 : I1 abstract class BAC2 : I2 abstract class BAC3 : I3 class RPPG1 class RPPG2 class RPPG3 // MODULE: main(lib) // FILE: main.kt fun box(): String { val c = Change() c.qux(RPPG1()) c.foo(RPPG1(), RPPG1()) c.bar(RPPG2(), RPPG3()) return result }