Use explicit/allParametersCount in cases the parameters list isn't needed (#4414)

(cherry picked from commit e4f0586568383a1e4225a70d959c417873faa402)
This commit is contained in:
LepilkinaElena
2020-10-01 21:20:18 +03:00
committed by Vasily Levchenko
parent db65e8d2c3
commit fa853592e3
3 changed files with 10 additions and 8 deletions
@@ -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<IrE
private fun getContinuation(): LLVMValueRef {
val caller = functionGenerationContext.irFunction!!
return if (caller.isSuspend)
codegen.param(caller, caller.allParameters.size) // The last argument.
codegen.param(caller, caller.allParametersCount) // The last argument.
else {
// Suspend call from non-suspend function - must be [invokeSuspend].
assert ((caller as IrSimpleFunction).overrides(context.ir.symbols.invokeSuspendFunction.owner),
@@ -2033,10 +2034,10 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map<IrE
val result = expression.getArgumentsWithIr().map { (_, argExpr) ->
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
}
@@ -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,
@@ -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()