From c278853f101c24ecc92cfdf22814bc25277e13aa Mon Sep 17 00:00:00 2001 From: Konstantin Anisimov Date: Fri, 24 Mar 2017 11:34:30 +0700 Subject: [PATCH] Bug fix for crash connected with "value-parameters" --- .../kotlin/backend/konan/lower/FunctionInlining.kt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/FunctionInlining.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/FunctionInlining.kt index 7ad35123ccb..c4f1d2ec81b 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/FunctionInlining.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/FunctionInlining.kt @@ -145,6 +145,7 @@ internal class FunctionInlining(val context: Context): IrElementTransformerVoid( } //-------------------------------------------------------------------------// + fun inlineFunction(irCall: IrCall): IrExpression { val functionDescriptor = irCall.descriptor as FunctionDescriptor val originalDescriptor = functionDescriptor.original @@ -401,8 +402,10 @@ internal class FunctionInlining(val context: Context): IrElementTransformerVoid( val evaluationStatements = mutableListOf() val parameterToArgument = evaluateParameters(parametersOld, evaluationStatements) - val lambdaStatements = (lambdaFunction.body as IrBlockBody).statements - val lambdaReturnType = lambdaFunction.descriptor.returnType!! + val copyLambdaFunction = lambdaFunction.accept(InlineCopyIr(), // Create copy of the function. + null) as IrFunction + val lambdaStatements = (copyLambdaFunction.body as IrBlockBody).statements + val lambdaReturnType = copyLambdaFunction.descriptor.returnType!! val inlineBody = IrInlineFunctionBody(0, 0, lambdaReturnType, null, lambdaStatements) val transformer = ParametersTransformer(parameterToArgument, null, lambdaStatements)