| // WITH_STDLIB | |
| import kotlin.test.* | |
| // vtable call + interface call | |
| interface Z { | |
| fun foo(): Any | |
| } | |
| interface Y { | |
| fun foo(): Int | |
| } | |
| open class A { | |
| open fun foo(): Any = "A" | |
| } | |
| open class C : A() { | |
| override fun foo(): Int = 42 | |
| } | |
| open class D: C(), Y, Z | |
| fun box(): String { | |
| val d = D() | |
| val y: Y = d | |
| val z: Z = d | |
| val c: C = d | |
| val a: A = d | |
| if (d.foo().toString() != "42") return "FAIL 1" | |
| if (y.foo().toString() != "42") return "FAIL 2" | |
| if (z.foo().toString() != "42") return "FAIL 3" | |
| if (c.foo().toString() != "42") return "FAIL 4" | |
| if (a.foo().toString() != "42") return "FAIL 5" | |
| return "OK" | |
| } |