Skip to content

Commit c704685

Browse files
ddolovovSpace Team
authored andcommitted
IR inliner, Native: Don't inline external inline funs
^KT-80660 Fixed
1 parent c2ae819 commit c704685

File tree

4 files changed

+14
-1
lines changed

4 files changed

+14
-1
lines changed

compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/LoweringContext.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ package org.jetbrains.kotlin.backend.common
1818

1919
import org.jetbrains.kotlin.backend.common.ir.PreSerializationSymbols
2020
import org.jetbrains.kotlin.backend.common.ir.SharedVariablesManager
21-
import org.jetbrains.kotlin.backend.common.ir.Symbols
2221
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
2322
import org.jetbrains.kotlin.config.CompilerConfiguration
2423
import org.jetbrains.kotlin.config.LoggingContext
@@ -39,6 +38,13 @@ interface LoweringContext : LoggingContext, ErrorReportingContext {
3938
val irFactory: IrFactory
4039
val sharedVariablesManager: SharedVariablesManager
4140

41+
/**
42+
* Whether inlining of `external inline fun`s is allowed.
43+
* By default, it is allowed everywhere.
44+
*/
45+
val allowInliningOfExternalFunctions: Boolean
46+
get() = true
47+
4248
override val messageCollector: MessageCollector
4349
get() = configuration.messageCollector
4450

compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/NativePreSerializationLoweringContext.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,7 @@ class NativePreSerializationLoweringContext(
2020
override val symbols: PreSerializationNativeSymbols = PreSerializationNativeSymbols.Impl(irBuiltIns)
2121

2222
override val sharedVariablesManager = KlibSharedVariablesManager(symbols)
23+
24+
override val allowInliningOfExternalFunctions: Boolean
25+
get() = false
2326
}

compiler/ir/ir.inline/src/org/jetbrains/kotlin/ir/inline/InlineFunctionResolver.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ abstract class InlineFunctionResolverReplacingCoroutineIntrinsics<Ctx : Lowering
5252
if (!symbol.isBound) return null
5353
val realOwner = symbol.owner.resolveFakeOverrideOrSelf()
5454
if (!realOwner.isInline) return null
55+
if (realOwner.isExternal && !context.allowInliningOfExternalFunctions) return null
5556
val result = when {
5657
realOwner.isBuiltInSuspendCoroutineUninterceptedOrReturn() -> context.symbols.suspendCoroutineUninterceptedOrReturn.owner
5758
realOwner.symbol == context.symbols.coroutineContextGetter -> context.symbols.coroutineGetContext.owner

kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanBackendContext.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ internal abstract class KonanBackendContext(config: KonanConfig) : BasicPhaseCon
2525
KlibSharedVariablesManager(symbols)
2626
}
2727

28+
override val allowInliningOfExternalFunctions: Boolean
29+
get() = false
30+
2831
override val irFactory: IrFactory = IrFactoryImpl
2932

3033
override val messageCollector: MessageCollector

0 commit comments

Comments
 (0)