diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrInlineUtils.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrInlineUtils.kt index 2d42769145f..ed12e716e85 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrInlineUtils.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrInlineUtils.kt @@ -127,6 +127,7 @@ fun IrInlinable.inline(target: IrDeclarationParent, arguments: List { return this.statements .filterIsInstance() @@ -146,6 +147,7 @@ fun IrInlinedFunctionBlock.getDefaultAdditionalStatementsFromInlinedBlock(): Lis .singleOrNull { it.origin == INLINED_FUNCTION_DEFAULT_ARGUMENTS }?.statements ?: emptyList() } +// `IrInlinedFunctionBlock`.statements == `getAdditionalStatementsFromInlinedBlock` + `getOriginalStatementsFromInlinedBlock` fun IrInlinedFunctionBlock.getOriginalStatementsFromInlinedBlock(): List { return this.statements .filter { it !is IrComposite || !(it.origin == INLINED_FUNCTION_ARGUMENTS || it.origin == INLINED_FUNCTION_DEFAULT_ARGUMENTS) } diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/FunctionInlining.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/FunctionInlining.kt index c812084cf7c..fa3ada70226 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/FunctionInlining.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/FunctionInlining.kt @@ -84,7 +84,6 @@ class FunctionInlining( private val innerClassesSupport: InnerClassesSupport? = null, private val insertAdditionalImplicitCasts: Boolean = false, private val alwaysCreateTemporaryVariablesForArguments: Boolean = false, - private val inlinePureArguments: Boolean = true, private val regenerateInlinedAnonymousObjects: Boolean = false, private val inlineArgumentsWithTheirOriginalTypeAndOffset: Boolean = false, private val allowExternalInlining: Boolean = false, @@ -845,8 +844,7 @@ class FunctionInlining( } private fun ParameterToArgument.shouldBeSubstitutedViaTemporaryVariable(): Boolean = - !(isImmutableVariableLoad && parameter.index >= 0) && - !(argumentExpression.isPure(false, context = context) && inlinePureArguments) + !(isImmutableVariableLoad && parameter.index >= 0) && !argumentExpression.isPure(false, context = context) private fun createTemporaryVariable( parameter: IrValueParameter, @@ -873,7 +871,7 @@ class FunctionInlining( ) if (alwaysCreateTemporaryVariablesForArguments) { - variable.name = parameter.name + variable.name = Name.identifier(parameter.name.asStringStripSpecialMarkers()) } return variable diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/JvmLower.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/JvmLower.kt index 94b3bdf9539..ecfc16104b7 100644 --- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/JvmLower.kt +++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/JvmLower.kt @@ -305,7 +305,7 @@ internal val functionInliningPhase = makeIrModulePhase( FunctionInlining( context, JvmInlineFunctionResolver(), context.innerClassesSupport, - inlinePureArguments = false, + alwaysCreateTemporaryVariablesForArguments = true, regenerateInlinedAnonymousObjects = true, inlineArgumentsWithTheirOriginalTypeAndOffset = true )