From 6ec75a705e946c5c65e30465ac2578fe999b9e18 Mon Sep 17 00:00:00 2001 From: Ivan Kylchik Date: Fri, 23 Feb 2024 11:43:19 +0100 Subject: [PATCH] [IR] Store original function in the `IrInlinedBlock` In Native and JS, there is a special logic where the compiler saves a copy of inlined function (see `InlineFunctionsSupport`). This copy is used in the IR inliner. Because of that, we can't really compare inlined function with other functions directly. We need to get `originalFunction` first and save it. --- .../kotlin/ir/backend/js/dce/UsefulDeclarationProcessor.kt | 5 +---- .../src/org/jetbrains/kotlin/ir/inline/FunctionInlining.kt | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/dce/UsefulDeclarationProcessor.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/dce/UsefulDeclarationProcessor.kt index ec61c7aab19..48b6c584353 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/dce/UsefulDeclarationProcessor.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/dce/UsefulDeclarationProcessor.kt @@ -57,10 +57,7 @@ abstract class UsefulDeclarationProcessor( super.visitBlock(expression, data) if (expression is IrReturnableBlock) { - // We need to extract `originalFunction` here because saved `inlineFunction` - // is actually a copy made in `SaveInlineFunctionsBeforeInlining`. - // Without this, we are not going to find proper intersection in the `saveOnlyIntersectionOfNextDeclarationsFor` method. - expression.inlineFunction?.originalFunction?.addToUsefulPolyfilledDeclarations() + expression.inlineFunction?.addToUsefulPolyfilledDeclarations() } } diff --git a/compiler/ir/ir.inline/src/org/jetbrains/kotlin/ir/inline/FunctionInlining.kt b/compiler/ir/ir.inline/src/org/jetbrains/kotlin/ir/inline/FunctionInlining.kt index 17c2900bf45..936f43330df 100644 --- a/compiler/ir/ir.inline/src/org/jetbrains/kotlin/ir/inline/FunctionInlining.kt +++ b/compiler/ir/ir.inline/src/org/jetbrains/kotlin/ir/inline/FunctionInlining.kt @@ -162,7 +162,7 @@ class FunctionInlining( val substituteMap = mutableMapOf() - fun inline() = inlineFunction(callSite, callee, callee, true) + fun inline() = inlineFunction(callSite, callee, callee.originalFunction, true) private fun E.copy(): E { @Suppress("UNCHECKED_CAST")