From 0258927d331c9059990e18ffac0d49e49be6207c Mon Sep 17 00:00:00 2001 From: Ivan Kylchik Date: Wed, 7 Feb 2024 19:15:42 +0100 Subject: [PATCH] [IR] Forbid to use `shouldExcludeFunctionFromInlining` as public API #KT-64807 --- .../src/org/jetbrains/kotlin/ir/inline/FunctionInlining.kt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) 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 96654c813ff..8882d90b004 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 @@ -40,10 +40,11 @@ import org.jetbrains.kotlin.util.OperatorNameConventions abstract class InlineFunctionResolver { open fun getFunctionDeclaration(symbol: IrFunctionSymbol): IrFunction? { + if (shouldExcludeFunctionFromInlining(symbol)) return null return symbol.owner } - open fun shouldExcludeFunctionFromInlining(symbol: IrFunctionSymbol): Boolean { + protected open fun shouldExcludeFunctionFromInlining(symbol: IrFunctionSymbol): Boolean { return Symbols.isLateinitIsInitializedPropertyGetter(symbol) || Symbols.isTypeOfIntrinsic(symbol) } @@ -60,7 +61,7 @@ fun IrFunction.isBuiltInSuspendCoroutineUninterceptedOrReturn(): Boolean = open class InlineFunctionResolverReplacingCoroutineIntrinsics(open val context: CommonBackendContext) : InlineFunctionResolver() { override fun getFunctionDeclaration(symbol: IrFunctionSymbol): IrFunction? { - val function = symbol.owner + val function = super.getFunctionDeclaration(symbol) ?: return null // TODO: Remove these hacks when coroutine intrinsics are fixed. return when { function.isBuiltInSuspendCoroutineUninterceptedOrReturn() -> @@ -104,7 +105,7 @@ class FunctionInlining( is IrConstructorCall -> expression.symbol.owner else -> return expression } - if (!callee.needsInlining || inlineFunctionResolver.shouldExcludeFunctionFromInlining(callee.symbol)) + if (!callee.needsInlining) return expression val target = (callee as? IrSimpleFunction)?.resolveFakeOverride() ?: callee