From fa853592e3936ab513b6c1b8f5503fc697f74d35 Mon Sep 17 00:00:00 2001 From: LepilkinaElena Date: Thu, 1 Oct 2020 21:20:18 +0300 Subject: [PATCH] Use explicit/allParametersCount in cases the parameters list isn't needed (#4414) (cherry picked from commit e4f0586568383a1e4225a70d959c417873faa402) --- .../jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt | 9 +++++---- .../konan/llvm/objcexport/ObjCExportCodeGenerator.kt | 3 ++- .../backend/konan/optimizations/Devirtualization.kt | 6 +++--- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt index b0a179edebc..e58d37903a5 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt @@ -9,6 +9,7 @@ import kotlinx.cinterop.* import llvm.* import org.jetbrains.kotlin.backend.common.ir.ir2string import org.jetbrains.kotlin.backend.common.ir.allParameters +import org.jetbrains.kotlin.backend.common.ir.allParametersCount import org.jetbrains.kotlin.backend.common.lower.inline.InlinerExpressionLocationHint import org.jetbrains.kotlin.backend.konan.* import org.jetbrains.kotlin.backend.konan.descriptors.* @@ -2013,7 +2014,7 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map evaluateExpression(argExpr) } - val explicitParametersSize = expression.symbol.owner.explicitParameters.size - if (result.size != explicitParametersSize) { + val explicitParametersCount = expression.symbol.owner.explicitParametersCount + if (result.size != explicitParametersCount) { error("Number of arguments explicitly represented in the IR ${result.size} differs from expected " + - "$explicitParametersSize in ${ir2string(expression)}") + "$explicitParametersCount in ${ir2string(expression)}") } return result } diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/objcexport/ObjCExportCodeGenerator.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/objcexport/ObjCExportCodeGenerator.kt index 86c1313f82f..e6dc602de5f 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/objcexport/ObjCExportCodeGenerator.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/objcexport/ObjCExportCodeGenerator.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.backend.konan.llvm.objcexport import llvm.* import org.jetbrains.kotlin.backend.common.ir.allParameters +import org.jetbrains.kotlin.backend.common.ir.allParametersCount import org.jetbrains.kotlin.backend.common.ir.simpleFunctions import org.jetbrains.kotlin.backend.konan.* import org.jetbrains.kotlin.backend.konan.descriptors.* @@ -982,7 +983,7 @@ private fun ObjCExportCodeGenerator.generateKotlinToObjCBridge( } MethodBridgeValueParameter.SuspendCompletion -> { - val continuation = param(irFunction.allParameters.size) // The last argument. + val continuation = param(irFunction.allParametersCount) // The last argument. // TODO: consider placing interception into the converter to reduce code size. val intercepted = callFromBridge( context.ir.symbols.objCExportInterceptedContinuation.owner.llvmFunction, diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/Devirtualization.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/Devirtualization.kt index 9274ffc0917..f1451d6e086 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/Devirtualization.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/Devirtualization.kt @@ -1401,12 +1401,12 @@ internal object Devirtualization { callSite.origin, actualCallee.parentAsClass.symbol ) - if (actualCallee.explicitParameters.size == arguments.size) { + if (actualCallee.explicitParametersCount == arguments.size) { arguments.forEachIndexed { index, argument -> call.putArgument(index, argument) } return call } - assert(actualCallee.isSuspend && actualCallee.explicitParameters.size == arguments.size - 1) { - "Incorrect number of arguments: expected [${actualCallee.explicitParameters.size}] but was [${arguments.size - 1}]\n" + + assert(actualCallee.isSuspend && actualCallee.explicitParametersCount == arguments.size - 1) { + "Incorrect number of arguments: expected [${actualCallee.explicitParametersCount}] but was [${arguments.size - 1}]\n" + actualCallee.dump() } val continuation = arguments.last()