diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/IrArrayBuilder.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/IrArrayBuilder.kt index 9d46bae2a01..c22de76e1f4 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/IrArrayBuilder.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/IrArrayBuilder.kt @@ -106,7 +106,7 @@ class IrArrayBuilder(val builder: JvmIrBuilder, val arrayType: IrType) { fun getSize() = irCall(size).apply { dispatchReceiver = irGet(spreadVar) } val result = irTemporary(newArray(getSize())) +irCall(builder.irSymbols.systemArraycopy).apply { - putValueArgument(0, irGet(spreadVar)) + putValueArgument(0, coerce(irGet(spreadVar), unwrappedArrayType)) putValueArgument(1, irInt(0)) putValueArgument(2, irGet(result)) putValueArgument(3, irInt(0)) @@ -135,7 +135,7 @@ class IrArrayBuilder(val builder: JvmIrBuilder, val arrayType: IrType) { for (element in elements) { +irCall(if (element.isSpread) addSpread else addElement).apply { dispatchReceiver = irGet(spreadBuilderVar) - putValueArgument(0, if (element.isSpread) element.expression else coerce(element.expression, elementType)) + putValueArgument(0, coerce(element.expression, if (element.isSpread) unwrappedArrayType else elementType)) } } diff --git a/compiler/testData/codegen/box/unsignedTypes/varargsOfUnsignedTypes.kt b/compiler/testData/codegen/box/unsignedTypes/varargsOfUnsignedTypes.kt index 8d31eece2e8..93b631ec9ae 100644 --- a/compiler/testData/codegen/box/unsignedTypes/varargsOfUnsignedTypes.kt +++ b/compiler/testData/codegen/box/unsignedTypes/varargsOfUnsignedTypes.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND: JVM_IR // WITH_RUNTIME // KJS_WITH_FULL_RUNTIME