[FIR] Generate spread element for unsigned arrays
Previously when unsigned arrays were passed as vararg in a named form the necessary spread element wasn't generated, which resulted in a compilation error. ^KT-63514 fixed
This commit is contained in:
committed by
Space Cloud
parent
dbca7358af
commit
251fdb21c9
+6
@@ -55076,6 +55076,12 @@ public class LLFirBlackBoxCodegenBasedTestGenerated extends AbstractLLFirBlackBo
|
||||
runTest("compiler/testData/codegen/box/vararg/evaluationOrder.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineClassArraysAsNamedArgumentInVararg.kt")
|
||||
public void testInlineClassArraysAsNamedArgumentInVararg() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/vararg/inlineClassArraysAsNamedArgumentInVararg.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt10926.kt")
|
||||
public void testKt10926() throws Exception {
|
||||
|
||||
+6
@@ -55076,6 +55076,12 @@ public class LLFirReversedBlackBoxCodegenBasedTestGenerated extends AbstractLLFi
|
||||
runTest("compiler/testData/codegen/box/vararg/evaluationOrder.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineClassArraysAsNamedArgumentInVararg.kt")
|
||||
public void testInlineClassArraysAsNamedArgumentInVararg() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/vararg/inlineClassArraysAsNamedArgumentInVararg.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt10926.kt")
|
||||
public void testKt10926() throws Exception {
|
||||
|
||||
+2
-1
@@ -46,6 +46,7 @@ import org.jetbrains.kotlin.ir.symbols.*
|
||||
import org.jetbrains.kotlin.ir.types.*
|
||||
import org.jetbrains.kotlin.ir.util.dump
|
||||
import org.jetbrains.kotlin.ir.util.isPrimitiveArray
|
||||
import org.jetbrains.kotlin.ir.util.isUnsignedArray
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.resolve.calls.NewCommonSuperTypeCalculator.commonSuperType
|
||||
import org.jetbrains.kotlin.types.Variance
|
||||
@@ -1091,7 +1092,7 @@ class CallAndReferenceGenerator(
|
||||
if (argument.arguments[0] is FirNamedArgumentExpression &&
|
||||
// IrVarargElement can be either IrSpreadElement (then nothing to do) or IrExpression
|
||||
irVarargElement is IrExpression &&
|
||||
(irVarargElement.type.isArray() || irVarargElement.type.isPrimitiveArray())
|
||||
(irVarargElement.type.isArray() || irVarargElement.type.isPrimitiveArray() || irVarargElement.type.isUnsignedArray())
|
||||
) {
|
||||
elements[0] = IrSpreadElementImpl(irVarargElement.startOffset, irVarargElement.endOffset, irVarargElement)
|
||||
}
|
||||
|
||||
+6
@@ -54477,6 +54477,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr
|
||||
runTest("compiler/testData/codegen/box/vararg/evaluationOrder.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineClassArraysAsNamedArgumentInVararg.kt")
|
||||
public void testInlineClassArraysAsNamedArgumentInVararg() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/vararg/inlineClassArraysAsNamedArgumentInVararg.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt10926.kt")
|
||||
public void testKt10926() throws Exception {
|
||||
|
||||
+6
@@ -54477,6 +54477,12 @@ public class FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated
|
||||
runTest("compiler/testData/codegen/box/vararg/evaluationOrder.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineClassArraysAsNamedArgumentInVararg.kt")
|
||||
public void testInlineClassArraysAsNamedArgumentInVararg() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/vararg/inlineClassArraysAsNamedArgumentInVararg.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt10926.kt")
|
||||
public void testKt10926() throws Exception {
|
||||
|
||||
+6
@@ -54477,6 +54477,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo
|
||||
runTest("compiler/testData/codegen/box/vararg/evaluationOrder.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineClassArraysAsNamedArgumentInVararg.kt")
|
||||
public void testInlineClassArraysAsNamedArgumentInVararg() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/vararg/inlineClassArraysAsNamedArgumentInVararg.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt10926.kt")
|
||||
public void testKt10926() throws Exception {
|
||||
|
||||
@@ -34,7 +34,9 @@ import org.jetbrains.kotlin.resolve.calls.model.*
|
||||
import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind
|
||||
import org.jetbrains.kotlin.resolve.calls.tasks.OldResolutionCandidate
|
||||
import org.jetbrains.kotlin.resolve.calls.tower.*
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.inlineClassRepresentation
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.isParameterOfAnnotation
|
||||
import org.jetbrains.kotlin.resolve.isInlineClassType
|
||||
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
|
||||
import org.jetbrains.kotlin.resolve.scopes.SyntheticScopes
|
||||
import org.jetbrains.kotlin.resolve.scopes.collectSyntheticConstructors
|
||||
@@ -279,7 +281,7 @@ fun isArrayOrArrayLiteral(argument: ValueArgument, trace: BindingTrace): Boolean
|
||||
if (argumentExpression is KtCollectionLiteralExpression) return true
|
||||
|
||||
val type = trace.getType(argumentExpression) ?: return false
|
||||
return KotlinBuiltIns.isArrayOrPrimitiveArray(type)
|
||||
return KotlinBuiltIns.isArrayOrPrimitiveArray(type) || KotlinBuiltIns.isUnsignedArrayType(type)
|
||||
}
|
||||
|
||||
fun createResolutionCandidatesForConstructors(
|
||||
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
// !LANGUAGE: +AllowAssigningArrayElementsToVarargsInNamedFormForFunctions
|
||||
// ISSUE: KT-63514
|
||||
// WITH_STDLIB
|
||||
|
||||
fun foo(vararg arr: Int): Int {
|
||||
return arr.sum()
|
||||
}
|
||||
|
||||
fun bar(vararg arr: UInt): UInt {
|
||||
return arr.sum()
|
||||
}
|
||||
|
||||
fun baz(vararg arr: ULong): ULong {
|
||||
return arr.sum()
|
||||
}
|
||||
|
||||
fun quas(vararg arr: UShort): UInt {
|
||||
return arr.sum()
|
||||
}
|
||||
|
||||
fun wex(vararg arr: UByte): UInt {
|
||||
return arr.sum()
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val x = foo(arr = intArrayOf(1, 2, 3))
|
||||
val y = bar(arr = uintArrayOf(1u, 2u, 3u))
|
||||
val z = baz(arr = ulongArrayOf(1uL, 2uL, 3uL))
|
||||
val q = quas(arr = ushortArrayOf(1u, 2u, 3u))
|
||||
val w = wex(arr = ubyteArrayOf(1u, 2u, 3u))
|
||||
if (x + y.toInt() + z.toInt() + q.toInt() + w.toInt() == 30) {
|
||||
return "OK"
|
||||
}
|
||||
return "Fail"
|
||||
}
|
||||
+6
@@ -51159,6 +51159,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
||||
runTest("compiler/testData/codegen/box/vararg/evaluationOrder.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineClassArraysAsNamedArgumentInVararg.kt")
|
||||
public void testInlineClassArraysAsNamedArgumentInVararg() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/vararg/inlineClassArraysAsNamedArgumentInVararg.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt10926.kt")
|
||||
public void testKt10926() throws Exception {
|
||||
|
||||
+6
@@ -54477,6 +54477,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
||||
runTest("compiler/testData/codegen/box/vararg/evaluationOrder.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineClassArraysAsNamedArgumentInVararg.kt")
|
||||
public void testInlineClassArraysAsNamedArgumentInVararg() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/vararg/inlineClassArraysAsNamedArgumentInVararg.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt10926.kt")
|
||||
public void testKt10926() throws Exception {
|
||||
|
||||
+6
@@ -54477,6 +54477,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack
|
||||
runTest("compiler/testData/codegen/box/vararg/evaluationOrder.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineClassArraysAsNamedArgumentInVararg.kt")
|
||||
public void testInlineClassArraysAsNamedArgumentInVararg() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/vararg/inlineClassArraysAsNamedArgumentInVararg.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt10926.kt")
|
||||
public void testKt10926() throws Exception {
|
||||
|
||||
+5
@@ -44094,6 +44094,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
||||
runTest("compiler/testData/codegen/box/vararg/evaluationOrder.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineClassArraysAsNamedArgumentInVararg.kt")
|
||||
public void testInlineClassArraysAsNamedArgumentInVararg() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/vararg/inlineClassArraysAsNamedArgumentInVararg.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt10926.kt")
|
||||
public void testKt10926() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/vararg/kt10926.kt");
|
||||
|
||||
+6
@@ -37839,6 +37839,12 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest {
|
||||
runTest("compiler/testData/codegen/box/vararg/evaluationOrder.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineClassArraysAsNamedArgumentInVararg.kt")
|
||||
public void testInlineClassArraysAsNamedArgumentInVararg() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/vararg/inlineClassArraysAsNamedArgumentInVararg.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt10926.kt")
|
||||
public void testKt10926() throws Exception {
|
||||
|
||||
Generated
+6
@@ -37839,6 +37839,12 @@ public class FirJsES6CodegenBoxTestGenerated extends AbstractFirJsES6CodegenBoxT
|
||||
runTest("compiler/testData/codegen/box/vararg/evaluationOrder.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineClassArraysAsNamedArgumentInVararg.kt")
|
||||
public void testInlineClassArraysAsNamedArgumentInVararg() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/vararg/inlineClassArraysAsNamedArgumentInVararg.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt10926.kt")
|
||||
public void testKt10926() throws Exception {
|
||||
|
||||
+6
@@ -37839,6 +37839,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
||||
runTest("compiler/testData/codegen/box/vararg/evaluationOrder.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineClassArraysAsNamedArgumentInVararg.kt")
|
||||
public void testInlineClassArraysAsNamedArgumentInVararg() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/vararg/inlineClassArraysAsNamedArgumentInVararg.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt10926.kt")
|
||||
public void testKt10926() throws Exception {
|
||||
|
||||
+6
@@ -37839,6 +37839,12 @@ public class IrJsES6CodegenBoxTestGenerated extends AbstractIrJsES6CodegenBoxTes
|
||||
runTest("compiler/testData/codegen/box/vararg/evaluationOrder.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineClassArraysAsNamedArgumentInVararg.kt")
|
||||
public void testInlineClassArraysAsNamedArgumentInVararg() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/vararg/inlineClassArraysAsNamedArgumentInVararg.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt10926.kt")
|
||||
public void testKt10926() throws Exception {
|
||||
|
||||
+6
@@ -41612,6 +41612,12 @@ public class FirNativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTe
|
||||
runTest("compiler/testData/codegen/box/vararg/evaluationOrder.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineClassArraysAsNamedArgumentInVararg.kt")
|
||||
public void testInlineClassArraysAsNamedArgumentInVararg() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/vararg/inlineClassArraysAsNamedArgumentInVararg.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt10926.kt")
|
||||
public void testKt10926() throws Exception {
|
||||
|
||||
+6
@@ -42676,6 +42676,12 @@ public class FirNativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenB
|
||||
runTest("compiler/testData/codegen/box/vararg/evaluationOrder.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineClassArraysAsNamedArgumentInVararg.kt")
|
||||
public void testInlineClassArraysAsNamedArgumentInVararg() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/vararg/inlineClassArraysAsNamedArgumentInVararg.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt10926.kt")
|
||||
public void testKt10926() throws Exception {
|
||||
|
||||
+6
@@ -40548,6 +40548,12 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest
|
||||
runTest("compiler/testData/codegen/box/vararg/evaluationOrder.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineClassArraysAsNamedArgumentInVararg.kt")
|
||||
public void testInlineClassArraysAsNamedArgumentInVararg() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/vararg/inlineClassArraysAsNamedArgumentInVararg.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt10926.kt")
|
||||
public void testKt10926() throws Exception {
|
||||
|
||||
+6
@@ -41613,6 +41613,12 @@ public class NativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenBoxT
|
||||
runTest("compiler/testData/codegen/box/vararg/evaluationOrder.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineClassArraysAsNamedArgumentInVararg.kt")
|
||||
public void testInlineClassArraysAsNamedArgumentInVararg() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/vararg/inlineClassArraysAsNamedArgumentInVararg.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt10926.kt")
|
||||
public void testKt10926() throws Exception {
|
||||
|
||||
Generated
+6
@@ -37731,6 +37731,12 @@ public class FirWasmCodegenBoxTestGenerated extends AbstractFirWasmCodegenBoxTes
|
||||
runTest("compiler/testData/codegen/box/vararg/evaluationOrder.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineClassArraysAsNamedArgumentInVararg.kt")
|
||||
public void testInlineClassArraysAsNamedArgumentInVararg() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/vararg/inlineClassArraysAsNamedArgumentInVararg.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt10926.kt")
|
||||
public void testKt10926() throws Exception {
|
||||
|
||||
Generated
+6
@@ -37731,6 +37731,12 @@ public class K1WasmCodegenBoxTestGenerated extends AbstractK1WasmCodegenBoxTest
|
||||
runTest("compiler/testData/codegen/box/vararg/evaluationOrder.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineClassArraysAsNamedArgumentInVararg.kt")
|
||||
public void testInlineClassArraysAsNamedArgumentInVararg() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/vararg/inlineClassArraysAsNamedArgumentInVararg.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt10926.kt")
|
||||
public void testKt10926() throws Exception {
|
||||
|
||||
Reference in New Issue
Block a user