From 7af564c9f2001b13a1883ef8305bf72e8c2e285c Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Tue, 29 Sep 2020 11:57:39 -0700 Subject: [PATCH] FIR: fix vararg remapping that merged named vararg --- .../transformers/body/resolve/BodyResolveUtils.kt | 12 ++++++------ .../box/vararg/assigningArrayToVarargInAnnotation.kt | 1 - 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/BodyResolveUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/BodyResolveUtils.kt index 2e4e1115ace..d30bd31d831 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/BodyResolveUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/BodyResolveUtils.kt @@ -9,10 +9,7 @@ import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind -import org.jetbrains.kotlin.fir.expressions.FirArgumentList -import org.jetbrains.kotlin.fir.expressions.FirBlock -import org.jetbrains.kotlin.fir.expressions.FirExpression -import org.jetbrains.kotlin.fir.expressions.FirReturnExpression +import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.builder.buildVarargArgumentsExpression import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.types.* @@ -52,8 +49,11 @@ internal fun remapArgumentsWithVararg( this.typeRef = varargParameterTypeRef.withReplacedConeType(varargArrayType) for ((i, arg) in argumentList.withIndex()) { val valueParameter = argumentMapping.getValue(arg) - if (valueParameter.isVararg) { - // `arg` is a vararg argument. + // Collect arguments if `arg` is a vararg argument of interest or other vararg arguments. + if (valueParameter == varargParameter || + // NB: don't pull out of named arguments. + (valueParameter.isVararg && arg !is FirNamedArgumentExpression) + ) { arguments += arg } else if (arguments.isEmpty()) { // `arg` is BEFORE the vararg arguments. diff --git a/compiler/testData/codegen/box/vararg/assigningArrayToVarargInAnnotation.kt b/compiler/testData/codegen/box/vararg/assigningArrayToVarargInAnnotation.kt index 52e8becc47d..d8519bbb06a 100644 --- a/compiler/testData/codegen/box/vararg/assigningArrayToVarargInAnnotation.kt +++ b/compiler/testData/codegen/box/vararg/assigningArrayToVarargInAnnotation.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // WITH_REFLECT // TARGET_BACKEND: JVM