Files
kotlin-fork/compiler/testData/codegen/box/reified/anonymousObjectNoPropagate.kt
T
vladislav.grechko cfcdc6f0ae [JVM_IR] Box primitive types in class literals of reified type arguments
Bytecode inliner boxes primitive types in class literals of reified type
arguments. This is by design, and we should backport this behaviour to
IR inliner.

^KT-60144: Fixed
2023-08-02 10:48:22 +00:00

40 lines
1.1 KiB
Kotlin
Vendored

// TARGET_BACKEND: JVM
// WITH_STDLIB
import kotlin.test.assertEquals
interface A {
fun f1(): String
fun f2(): String
fun f3(): String
}
fun doWork(block: () -> String) = block()
inline fun doWorkInline(block: () -> String) = block()
fun box(): String {
val x = object {
inline fun <reified T : Any> bar1(): A = object : A {
override fun f1(): String = T::class.java.getName()
override fun f2(): String = doWork { T::class.java.getName() }
override fun f3(): String = doWorkInline { T::class.java.getName() }
}
inline fun <reified T : Any> bar2() = T::class.java.getName()
inline fun <reified T : Any> bar3() = doWork { T::class.java.getName() }
inline fun <reified T : Any> bar4() = doWorkInline { T::class.java.getName() }
}
val y: A = x.bar1<String>()
assertEquals("java.lang.String", y.f1())
assertEquals("java.lang.String", y.f2())
assertEquals("java.lang.String", y.f3())
assertEquals("java.lang.Integer", x.bar2<Int>())
assertEquals("java.lang.Double", x.bar3<Double>())
assertEquals("java.lang.Long", x.bar4<Long>())
return "OK"
}