Box values of inline class types when passing to function as varargs
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
// !LANGUAGE: +InlineClasses
|
||||
|
||||
inline class UInt(val value: Int)
|
||||
|
||||
fun <T> takeVarargs(vararg e: T): T {
|
||||
return e[e.size - 1]
|
||||
}
|
||||
|
||||
fun test(u1: UInt, u2: UInt, u3: UInt?): Int {
|
||||
val a = takeVarargs(u1, u2)
|
||||
val b = takeVarargs(u3) ?: UInt(-1)
|
||||
val c = takeVarargs(u1, u3) ?: UInt(-1)
|
||||
|
||||
return a.value + b.value + c.value
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val u1 = UInt(0)
|
||||
val u2 = UInt(1)
|
||||
val u3 = UInt(2)
|
||||
if (test(u1, u2, u3) != 1 + 2 + 2) return "fail"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
// !LANGUAGE: +InlineClasses
|
||||
|
||||
inline class UInt(val u: Int)
|
||||
|
||||
fun <T> takeVarargs(vararg e: T) {}
|
||||
|
||||
fun test(u1: UInt, u2: UInt, u3: UInt?) {
|
||||
takeVarargs(u1, u2) // 2 box
|
||||
takeVarargs(u3)
|
||||
takeVarargs(u1, u3) // box
|
||||
}
|
||||
|
||||
// 3 INVOKESTATIC UInt\$Erased.box
|
||||
// 0 INVOKEVIRTUAL UInt.unbox
|
||||
|
||||
// 0 valueOf
|
||||
// 0 intValue
|
||||
Reference in New Issue
Block a user