diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java index 0882a148711..63303aa6331 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java @@ -2683,24 +2683,14 @@ public class ExpressionCodegen extends JetVisitor implem } if (hasSpread) { - boolean arrayOfReferences = KotlinBuiltIns.isArray(outType); if (size == 1) { - // Arrays.copyOf(array, newLength) - ValueArgument argument = arguments.get(0); - Type arrayType = arrayOfReferences ? Type.getType("[Ljava/lang/Object;") - : Type.getType("[" + elementType.getDescriptor()); - gen(argument.getArgumentExpression(), type); - v.dup(); - v.arraylength(); - v.invokestatic("java/util/Arrays", "copyOf", Type.getMethodDescriptor(arrayType, arrayType, Type.INT_TYPE), false); - if (arrayOfReferences) { - v.checkcast(type); - } + gen(arguments.get(0).getArgumentExpression(), type); } else { String owner; String addDescriptor; String toArrayDescriptor; + boolean arrayOfReferences = KotlinBuiltIns.isArray(outType); if (arrayOfReferences) { owner = "kotlin/jvm/internal/SpreadBuilder"; addDescriptor = "(Ljava/lang/Object;)V"; diff --git a/compiler/testData/codegen/boxWithStdlib/vararg/spreadCopiesArray.kt b/compiler/testData/codegen/boxWithStdlib/vararg/spreadCopiesArray.kt deleted file mode 100644 index 674e652e23a..00000000000 --- a/compiler/testData/codegen/boxWithStdlib/vararg/spreadCopiesArray.kt +++ /dev/null @@ -1,27 +0,0 @@ -import kotlin.test.* - -fun copyArray(vararg data: T): Array = data - -inline fun reifiedCopyArray(vararg data: T): Array = data - -fun copyIntArray(vararg data: Int): IntArray = data - -fun box(): String { - val sarr = arrayOf("OK") - val sarr2 = copyArray(*sarr) - sarr[0] = "Array was not copied" - assertEquals(sarr2[0], "OK", "Failed: Array") - - var rsarr = arrayOf("OK") - var rsarr2 = reifiedCopyArray(*rsarr) - rsarr[0] = "Array was not copied" - assertEquals(rsarr2[0], "OK", "Failed: Array, reified copy") - - val iarr = IntArray(1) - iarr[0] = 1 - val iarr2 = copyIntArray(*iarr) - iarr[0] = 42 - assertEquals(iarr2[0], 1, "Failed: IntArray") - - return "OK" -} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/VarArgTest.java b/compiler/tests/org/jetbrains/kotlin/codegen/VarArgTest.java index 38fd2481ce0..4f2223f8be6 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/VarArgTest.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/VarArgTest.java @@ -91,8 +91,7 @@ public class VarArgTest extends CodegenTestCase { Method main = generateFunction("test"); String[] args = {"mama", "papa"}; String[] result = (String []) main.invoke(null, new Object[] {args}); - assertTrue(args != result); - assertTrue(Arrays.equals(args, result)); + assertTrue(args == result); } public void testArrayAsVararg2() throws InvocationTargetException, IllegalAccessException { diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java index 8575c95b222..a566ebbe515 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java @@ -4591,12 +4591,6 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/boxWithStdlib/vararg"), Pattern.compile("^(.+)\\.kt$"), true); } - @TestMetadata("spreadCopiesArray.kt") - public void testSpreadCopiesArray() throws Exception { - String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/vararg/spreadCopiesArray.kt"); - doTestWithStdlib(fileName); - } - @TestMetadata("varargInFunParam.kt") public void testVarargInFunParam() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/vararg/varargInFunParam.kt");