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 llvm.*
import org.jetbrains.kotlin.backend.common.ir.ir2string import org.jetbrains.kotlin.backend.common.ir.ir2string
import org.jetbrains.kotlin.backend.common.ir.allParameters 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.common.lower.inline.InlinerExpressionLocationHint
import org.jetbrains.kotlin.backend.konan.* import org.jetbrains.kotlin.backend.konan.*
import org.jetbrains.kotlin.backend.konan.descriptors.* 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 { private fun getContinuation(): LLVMValueRef {
val caller = functionGenerationContext.irFunction!! val caller = functionGenerationContext.irFunction!!
return if (caller.isSuspend) return if (caller.isSuspend)
codegen.param(caller, caller.allParameters.size) // The last argument. codegen.param(caller, caller.allParametersCount) // The last argument.
else { else {
// Suspend call from non-suspend function - must be [invokeSuspend]. // Suspend call from non-suspend function - must be [invokeSuspend].
assert ((caller as IrSimpleFunction).overrides(context.ir.symbols.invokeSuspendFunction.owner), 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) -> val result = expression.getArgumentsWithIr().map { (_, argExpr) ->
evaluateExpression(argExpr) evaluateExpression(argExpr)
} }
val explicitParametersSize = expression.symbol.owner.explicitParameters.size val explicitParametersCount = expression.symbol.owner.explicitParametersCount
if (result.size != explicitParametersSize) { if (result.size != explicitParametersCount) {
error("Number of arguments explicitly represented in the IR ${result.size} differs from expected " + error("Number of arguments explicitly represented in the IR ${result.size} differs from expected " +
"$explicitParametersSize in ${ir2string(expression)}") "$explicitParametersCount in ${ir2string(expression)}")
} }
return result return result
} }
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.backend.konan.llvm.objcexport
import llvm.* import llvm.*
import org.jetbrains.kotlin.backend.common.ir.allParameters 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.common.ir.simpleFunctions
import org.jetbrains.kotlin.backend.konan.* import org.jetbrains.kotlin.backend.konan.*
import org.jetbrains.kotlin.backend.konan.descriptors.* import org.jetbrains.kotlin.backend.konan.descriptors.*
@@ -982,7 +983,7 @@ private fun ObjCExportCodeGenerator.generateKotlinToObjCBridge(
} }
MethodBridgeValueParameter.SuspendCompletion -> { 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. // TODO: consider placing interception into the converter to reduce code size.
val intercepted = callFromBridge( val intercepted = callFromBridge(
context.ir.symbols.objCExportInterceptedContinuation.owner.llvmFunction, context.ir.symbols.objCExportInterceptedContinuation.owner.llvmFunction,
@@ -1401,12 +1401,12 @@ internal object Devirtualization {
callSite.origin, callSite.origin,
actualCallee.parentAsClass.symbol actualCallee.parentAsClass.symbol
) )
if (actualCallee.explicitParameters.size == arguments.size) { if (actualCallee.explicitParametersCount == arguments.size) {
arguments.forEachIndexed { index, argument -> call.putArgument(index, argument) } arguments.forEachIndexed { index, argument -> call.putArgument(index, argument) }
return call return call
} }
assert(actualCallee.isSuspend && actualCallee.explicitParameters.size == arguments.size - 1) { assert(actualCallee.isSuspend && actualCallee.explicitParametersCount == arguments.size - 1) {
"Incorrect number of arguments: expected [${actualCallee.explicitParameters.size}] but was [${arguments.size - 1}]\n" + "Incorrect number of arguments: expected [${actualCallee.explicitParametersCount}] but was [${arguments.size - 1}]\n" +
actualCallee.dump() actualCallee.dump()
} }
val continuation = arguments.last() val continuation = arguments.last()