blob: f3bb9a6ed4efe51764361d7e7e16120419834e42 [file]
// JVM_DEFAULT_MODE: disable
// TARGET_BACKEND: JVM
// FULL_JDK
package test
interface Test {
fun call(): List<String> {
val stackTrace = Thread.currentThread().getStackTrace()
// On Android, first frame is [dalvik.system.VMStack.getThreadStackTrace]
if (stackTrace[0].methodName == "getThreadStackTrace") return stackTrace.drop(1).map { it.className + "." + it.methodName }
return stackTrace.map { it.className + "." + it.methodName }
}
}
interface A : Test
interface B : Test
interface C: B, A
class Foo : C
class Foo2 : A, B, C
fun box(): String {
var result = Foo().call()
if (result[1] != "test.Test\$DefaultImpls.call") return "fail 1: ${result[1]}, ${result}"
if (result[2] != "test.B\$DefaultImpls.call") return "fail 2: ${result[2]}, ${result}"
if (result[3] != "test.C\$DefaultImpls.call") return "fail 3: ${result[3]}, ${result}"
if (result[4] != "test.Foo.call") return "fail 4: ${result[4]}, ${result}"
if (result[5] != "test.DefaultImplCallKt.box") return "fail 6: ${result[5]}, ${result}"
result = Foo2().call()
if (result[1] != "test.Test\$DefaultImpls.call") return "fail 7: ${result[1]}, ${result}"
if (result[2] != "test.A\$DefaultImpls.call") return "fail 8: ${result[2]}, ${result}"
if (result[3] != "test.Foo2.call") return "fail 9: ${result[3]}, ${result}"
if (result[4] != "test.DefaultImplCallKt.box") return "fail 10: ${result[4]}, ${result}"
return "OK"
}