| // ISSUE: KT-78321 |
| // IGNORE_BACKEND: JS_IR, JS_IR_ES6 |
| // ^^^ Wrong box result: C C make make |
| // IGNORE_BACKEND: WASM_JS, WASM_WASI |
| // ^^^ Wrong box result: C C make make |
| |
| // LANGUAGE: +IrIntraModuleInlinerBeforeKlibSerialization +IrCrossModuleInlinerBeforeKlibSerialization |
| // after fixing everything here and in overrideResolution.kt, |
| // please delete this test and delete `LANGUAGE: -IrIntraModuleInlinerBeforeKlibSerialization -IrCrossModuleInlinerBeforeKlibSerialization` from `overrideResolutionWithInlinedFunInKlib.kt` |
| |
| // IGNORE_BACKEND: NATIVE |
| // ^^^ Test failed with: C C make make |
| // IGNORE_IR_DESERIALIZATION_TEST: JS_IR, NATIVE |
| // ^^^ after deserialization, for anonfuns within makeA and makeB: not only A.foo is listed in overridden symbols, but B.foo as well |
| |
| fun box(): String { |
| var result = "" |
| result += (C as A<Int>).foo(42) |
| result += " " |
| result += (C as B).foo(42) |
| result += " " |
| result += makeA<Int>().foo(42) |
| result += " " |
| result += makeB<Int>().foo(42) |
| if (result != "C C make B") return result |
| return "OK" |
| } |
| |
| interface A<T> { |
| fun foo(t: T) = "A" |
| } |
| |
| interface B { |
| fun foo(t: Int) = "B" |
| } |
| |
| interface AB : A<Int>, B { |
| override fun foo(t: Int) = "C" |
| } |
| |
| object C : AB |
| |
| private inline fun <reified T> makeA(): A<T> = object : A<T>, B { |
| override fun foo(t: T) = "make" |
| } |
| |
| private inline fun <reified T> makeB(): B = object : A<T>, B { |
| override fun foo(t: T) = "make" |
| } |