FIR2IR: insert spread for named argument against primitive vararg

#KT-60312 Fixed
This commit is contained in:
Mikhail Glukhikh
2023-11-10 16:39:46 +01:00
committed by Space Team
parent 4abce54748
commit 4913c38e98
6 changed files with 3 additions and 28 deletions
@@ -45,6 +45,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.*
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.name.Name
import org.jetbrains.kotlin.resolve.calls.NewCommonSuperTypeCalculator.commonSuperType
import org.jetbrains.kotlin.types.Variance
@@ -1075,7 +1076,7 @@ class CallAndReferenceGenerator(
if (irVarargElement !is IrSpreadElement &&
argument.arguments[i] is FirNamedArgumentExpression &&
irVarargElement is IrExpression &&
irVarargElement.type.isArray()
(irVarargElement.type.isArray() || irVarargElement.type.isPrimitiveArray())
) {
elements[i] = IrSpreadElementImpl(irVarargElement.startOffset, irVarargElement.endOffset, irVarargElement)
}
-3
View File
@@ -1,6 +1,3 @@
// IGNORE_BACKEND_K2: JS_IR, JS_IR_ES6
// IGNORE_BACKEND_K2: WASM
// Partial copy of js/js.translator/testData/box/native/vararg.kt
// With some additions for concrete number types, strings and function references
@@ -1,16 +0,0 @@
FILE fqName:<root> fileName:/IntArrayAsVararg.kt
FUN name:main visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY
CALL 'public final fun consumeVarargs (vararg arr: kotlin.Int): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null
arr: VARARG type=kotlin.IntArray varargElementType=kotlin.Int
CONST Int type=kotlin.Int value=1
CONST Int type=kotlin.Int value=2
CALL 'public final fun consumeVarargs (vararg arr: kotlin.Int): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null
arr: VARARG type=kotlin.IntArray varargElementType=kotlin.Int
CALL 'public final fun intArrayOf (vararg elements: kotlin.Int): kotlin.IntArray declared in kotlin' type=kotlin.IntArray origin=null
elements: VARARG type=kotlin.IntArray varargElementType=kotlin.Int
CONST Int type=kotlin.Int value=41
CONST Int type=kotlin.Int value=42
FUN name:consumeVarargs visibility:public modality:FINAL <> (arr:kotlin.IntArray) returnType:kotlin.Unit
VALUE_PARAMETER name:arr index:0 type:kotlin.IntArray varargElementType:kotlin.Int [vararg]
BLOCK_BODY
@@ -1,7 +0,0 @@
fun main() {
consumeVarargs(arr = [1, 2])
consumeVarargs(arr = [intArrayOf(elements = [41, 42])])
}
fun consumeVarargs(vararg arr: Int) {
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// WITH_STDLIB
// ISSUE: KT-60312
// SKIP_SIGNATURE_DUMP
-1
View File
@@ -1,5 +1,4 @@
// IGNORE_BACKEND: WASM
// IGNORE_BACKEND_K2: JS_IR, JS_IR_ES6
// EXPECTED_REACHABLE_NODES: 1314
package foo