From 1ff4906880b6253586a8327277c3cfa93b7469ea Mon Sep 17 00:00:00 2001 From: "Evgeniy.Zhelenskiy" Date: Thu, 2 Mar 2023 01:45:55 +0100 Subject: [PATCH] [IR] Fix NVargs Function lowering when working with MFVC Signed-off-by: Evgeniy.Zhelenskiy #KT-1179 --- .../backend/jvm/lower/FunctionNVarargBridgeLowering.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/FunctionNVarargBridgeLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/FunctionNVarargBridgeLowering.kt index d587ec46de2..66372b82a94 100644 --- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/FunctionNVarargBridgeLowering.kt +++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/FunctionNVarargBridgeLowering.kt @@ -13,7 +13,9 @@ import org.jetbrains.kotlin.backend.common.lower.irIfThen import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase import org.jetbrains.kotlin.backend.jvm.JvmBackendContext import org.jetbrains.kotlin.backend.jvm.ir.createJvmIrBuilder +import org.jetbrains.kotlin.backend.jvm.ir.erasedUpperBound import org.jetbrains.kotlin.backend.jvm.ir.irArray +import org.jetbrains.kotlin.backend.jvm.needsMfvcFlattening import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.builtins.functions.BuiltInFunctionArity import org.jetbrains.kotlin.descriptors.DescriptorVisibilities @@ -93,7 +95,10 @@ private class FunctionNVarargBridgeLowering(val context: JvmBackendContext) : val overridesInvoke = function.overriddenSymbols.any { symbol -> symbol.owner.name.asString() == "invoke" } - overridesInvoke && function.valueParameters.size == superType.arguments.size - if (function.isSuspend) 0 else 1 + overridesInvoke && function.valueParameters.size == superType.arguments.sumOf { + if (it.typeOrNull?.needsMfvcFlattening() != true) 1 + else context.multiFieldValueClassReplacements.getRootMfvcNode(it.typeOrNull!!.erasedUpperBound).leavesCount + } - if (function.isSuspend) 0 else 1 } invokeFunction.overriddenSymbols = emptyList() declaration.addBridge(invokeFunction, functionNInvokeFun.owner)