From f40f9611c34ff8971137c13eab02b9327edd7f2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steven=20Sch=C3=A4fer?= Date: Fri, 20 Sep 2019 13:30:26 +0200 Subject: [PATCH] JVM IR: Fix spread operator on unsigned array type --- .../src/org/jetbrains/kotlin/backend/jvm/ir/IrArrayBuilder.kt | 4 ++-- .../codegen/box/unsignedTypes/varargsOfUnsignedTypes.kt | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) 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