IC: call JvmDefault method of inline class using boxed receiver

#KT-43698 Fixed
This commit is contained in:
Ilmir Usmanov
2020-12-07 15:13:54 +01:00
parent d6330337a9
commit 0dc5f3ac00
19 changed files with 227 additions and 78 deletions
@@ -1,7 +1,4 @@
// TARGET_BACKEND: JVM
// IGNORE_LIGHT_ANALYSIS
// IGNORE_BACKEND: JVM
// ^ KT-43698, fixed in JVM_IR
// JVM_TARGET: 1.8
// FILE: javaDefaultMethod.kt
inline class K(val k: String) : J {
@@ -1,7 +1,4 @@
// TARGET_BACKEND: JVM
// IGNORE_LIGHT_ANALYSIS
// IGNORE_BACKEND: JVM
// ^ KT-43698, fixed in JVM_IR
// JVM_TARGET: 1.8
// FILE: javaDefaultMethod.kt
interface K2 : J {
@@ -1,8 +1,5 @@
// !JVM_DEFAULT_MODE: all
// TARGET_BACKEND: JVM
// IGNORE_LIGHT_ANALYSIS
// IGNORE_BACKEND: JVM
// ^ KT-43698, fixed in JVM_IR
// WITH_RUNTIME
// JVM_TARGET: 1.8
// FILE: jvmDefaultAll.kt
@@ -1,8 +1,5 @@
// !JVM_DEFAULT_MODE: all
// TARGET_BACKEND: JVM
// IGNORE_LIGHT_ANALYSIS
// IGNORE_BACKEND: JVM
// ^ KT-43698, fixed in JVM_IR
// WITH_RUNTIME
// JVM_TARGET: 1.8
// FILE: jvmDefaultAll.kt
@@ -1,8 +1,5 @@
// !JVM_DEFAULT_MODE: all
// TARGET_BACKEND: JVM
// IGNORE_LIGHT_ANALYSIS
// IGNORE_BACKEND: JVM
// ^ KT-43698, fixed in JVM_IR
// WITH_RUNTIME
// JVM_TARGET: 1.8
// FILE: jvmDefaultAll.kt
@@ -1,8 +1,5 @@
// !JVM_DEFAULT_MODE: enable
// TARGET_BACKEND: JVM
// IGNORE_LIGHT_ANALYSIS
// IGNORE_BACKEND: JVM
// ^ KT-43698, fixed in JVM_IR
// WITH_RUNTIME
// JVM_TARGET: 1.8
// FILE: jvmDefaultEnable.kt
@@ -1,8 +1,5 @@
// !JVM_DEFAULT_MODE: enable
// TARGET_BACKEND: JVM
// IGNORE_LIGHT_ANALYSIS
// IGNORE_BACKEND: JVM
// ^ KT-43698, fixed in JVM_IR
// WITH_RUNTIME
// JVM_TARGET: 1.8
// FILE: jvmDefaultEnable.kt
@@ -1,8 +1,5 @@
// !JVM_DEFAULT_MODE: enable
// TARGET_BACKEND: JVM
// IGNORE_LIGHT_ANALYSIS
// IGNORE_BACKEND: JVM
// ^ KT-43698, fixed in JVM_IR
// WITH_RUNTIME
// JVM_TARGET: 1.8
// FILE: jvmDefaultEnable.kt
@@ -0,0 +1,16 @@
// !JVM_DEFAULT_MODE: all
// TARGET_BACKEND: JVM
// WITH_RUNTIME
// JVM_TARGET: 1.8
class Cell<T>(val x: T)
interface IOk {
fun ok(): String = "OK"
}
inline class InlineClass(val s: String) : IOk
fun test(cell: Cell<InlineClass>): String = cell.x.ok()
fun box() = test(Cell(InlineClass("FAIL")))
@@ -0,0 +1,14 @@
// !JVM_DEFAULT_MODE: all
// TARGET_BACKEND: JVM
// WITH_RUNTIME
// JVM_TARGET: 1.8
interface IOk {
fun ok(): String = "OK"
}
inline class InlineClass(val s: String) : IOk
fun test(x: InlineClass?) = x?.ok() ?: "Failed"
fun box() = test(InlineClass(""))
@@ -0,0 +1,16 @@
// !JVM_DEFAULT_MODE: all
// TARGET_BACKEND: JVM
// WITH_RUNTIME
// JVM_TARGET: 1.8
interface IOk {
fun ok(): String = "OK"
}
inline class InlineClass(val s: String) : IOk
fun test(x: Any): String {
return if (x is InlineClass) x.ok() else "FAIL"
}
fun box() = test(InlineClass("Dummy"))
@@ -0,0 +1,28 @@
// !JVM_DEFAULT_MODE: all
// TARGET_BACKEND: JVM
// WITH_RUNTIME
// JVM_TARGET: 1.8
import kotlin.coroutines.*
interface IOk {
fun ok(): String = "OK"
}
inline class InlineClass(val s: String) : IOk
suspend fun returnsUnboxed() = InlineClass("")
suspend fun test(): String = returnsUnboxed().ok()
fun builder(c: suspend () -> Unit) {
c.startCoroutine(Continuation(EmptyCoroutineContext) {})
}
fun box(): String {
var res = "FAIL"
builder {
res = test()
}
return res
}