diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/IntrinsicArrayConstructors.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/IntrinsicArrayConstructors.kt index dae87104416..e1bed856f27 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/IntrinsicArrayConstructors.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/intrinsics/IntrinsicArrayConstructors.kt @@ -40,7 +40,7 @@ private inline fun arrayOf(vararg elements: T): Array = elements private inline fun Array(size: Int, init: (Int) -> T): Array { val result = arrayOfNulls(size) - for (i in 0..size - 1) { + for (i in result.indices) { result[i] = init(i) } return result as Array @@ -48,7 +48,7 @@ private inline fun Array(size: Int, init: (Int) -> T): Array { private inline fun DoubleArray(size: Int, init: (Int) -> Double): DoubleArray { val result = DoubleArray(size) - for (i in 0..size - 1) { + for (i in result.indices) { result[i] = init(i) } return result @@ -56,7 +56,7 @@ private inline fun DoubleArray(size: Int, init: (Int) -> Double): DoubleArray { private inline fun FloatArray(size: Int, init: (Int) -> Float): FloatArray { val result = FloatArray(size) - for (i in 0..size - 1) { + for (i in result.indices) { result[i] = init(i) } return result @@ -64,7 +64,7 @@ private inline fun FloatArray(size: Int, init: (Int) -> Float): FloatArray { private inline fun LongArray(size: Int, init: (Int) -> Long): LongArray { val result = LongArray(size) - for (i in 0..size - 1) { + for (i in result.indices) { result[i] = init(i) } return result @@ -72,7 +72,7 @@ private inline fun LongArray(size: Int, init: (Int) -> Long): LongArray { private inline fun IntArray(size: Int, init: (Int) -> Int): IntArray { val result = IntArray(size) - for (i in 0..size - 1) { + for (i in result.indices) { result[i] = init(i) } return result @@ -80,7 +80,7 @@ private inline fun IntArray(size: Int, init: (Int) -> Int): IntArray { private inline fun CharArray(size: Int, init: (Int) -> Char): CharArray { val result = CharArray(size) - for (i in 0..size - 1) { + for (i in result.indices) { result[i] = init(i) } return result @@ -88,7 +88,7 @@ private inline fun CharArray(size: Int, init: (Int) -> Char): CharArray { private inline fun ShortArray(size: Int, init: (Int) -> Short): ShortArray { val result = ShortArray(size) - for (i in 0..size - 1) { + for (i in result.indices) { result[i] = init(i) } return result @@ -96,7 +96,7 @@ private inline fun ShortArray(size: Int, init: (Int) -> Short): ShortArray { private inline fun ByteArray(size: Int, init: (Int) -> Byte): ByteArray { val result = ByteArray(size) - for (i in 0..size - 1) { + for (i in result.indices) { result[i] = init(i) } return result @@ -104,7 +104,7 @@ private inline fun ByteArray(size: Int, init: (Int) -> Byte): ByteArray { private inline fun BooleanArray(size: Int, init: (Int) -> Boolean): BooleanArray { val result = BooleanArray(size) - for (i in 0..size - 1) { + for (i in result.indices) { result[i] = init(i) } return result diff --git a/compiler/testData/codegen/bytecodeText/forLoop/intrinsicArrayConstructorsUseCounterLoop.kt b/compiler/testData/codegen/bytecodeText/forLoop/intrinsicArrayConstructorsUseCounterLoop.kt new file mode 100644 index 00000000000..6d456264668 --- /dev/null +++ b/compiler/testData/codegen/bytecodeText/forLoop/intrinsicArrayConstructorsUseCounterLoop.kt @@ -0,0 +1,29 @@ +fun Int.toTrue() = true + +fun testBooleanArray(n: Int) = + BooleanArray(n) { it.toTrue() } + +fun testByteArray(n: Int) = + ByteArray(n) { it.toByte() } + +fun testShortArray(n: Int) = + ShortArray(n) { it.toShort() } + +fun testIntArray(n: Int) = + IntArray(n) { it } + +fun testLongArray(n: Int) = + LongArray(n) { it.toLong() } + +fun testFloatArray(n: Int) = + FloatArray(n) { it.toFloat() } + +fun testDoubleArray(n: Int) = + DoubleArray(n) { it.toDouble() } + +fun testObjectArray(n: Int) = + Array(n) { it as Any } + +// 0 IF_ICMPGT +// 0 IF_CMPEQ +// 8 IF_ICMPGE \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java index 78b9671d221..463179ed93a 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java @@ -1256,6 +1256,12 @@ public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest { doTest(fileName); } + @TestMetadata("intrinsicArrayConstructorsUseCounterLoop.kt") + public void testIntrinsicArrayConstructorsUseCounterLoop() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/forLoop/intrinsicArrayConstructorsUseCounterLoop.kt"); + doTest(fileName); + } + @TestMetadata("loopVarInterval.kt") public void testLoopVarInterval() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/forLoop/loopVarInterval.kt");