IR Inliner: More precise checks for KT-69457 & KT-69457
^KT-69700
diff --git a/compiler/ir/ir.inline/src/org/jetbrains/kotlin/ir/inline/InlineCallableReferenceToLambda.kt b/compiler/ir/ir.inline/src/org/jetbrains/kotlin/ir/inline/InlineCallableReferenceToLambda.kt
index 1c14f66..eca2a4d 100644
--- a/compiler/ir/ir.inline/src/org/jetbrains/kotlin/ir/inline/InlineCallableReferenceToLambda.kt
+++ b/compiler/ir/ir.inline/src/org/jetbrains/kotlin/ir/inline/InlineCallableReferenceToLambda.kt
@@ -29,7 +29,7 @@
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.name.Name
-const val STUB_FOR_INLINING = "stub_for_inlining"
+val STUB_FOR_INLINING = Name.identifier("stub_for_inlining")
// This lowering transforms CR passed to inline function to lambda which would be inlined
//
@@ -98,7 +98,7 @@
context.irFactory.buildFun {
setSourceRange(this@wrapField)
origin = LoweredDeclarationOrigins.INLINE_LAMBDA
- name = Name.identifier(STUB_FOR_INLINING)
+ name = STUB_FOR_INLINING
visibility = DescriptorVisibilities.LOCAL
returnType = field.type
isInline = true
@@ -121,7 +121,7 @@
context.irFactory.buildFun {
setSourceRange(this@wrapFunction)
origin = LoweredDeclarationOrigins.INLINE_LAMBDA
- name = Name.identifier(STUB_FOR_INLINING)
+ name = STUB_FOR_INLINING
visibility = DescriptorVisibilities.LOCAL
returnType = ((type as IrSimpleType).arguments.last() as IrTypeProjection).type
isSuspend = referencedFunction.isSuspend
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/phases/NativeLoweringPhases.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/phases/NativeLoweringPhases.kt
index 84457a8..9ed12e2 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/phases/NativeLoweringPhases.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/phases/NativeLoweringPhases.kt
@@ -25,7 +25,6 @@
import org.jetbrains.kotlin.backend.konan.lower.InitializersLowering
import org.jetbrains.kotlin.backend.konan.optimizations.NativeForLoopsLowering
import org.jetbrains.kotlin.config.KlibConfigurationKeys
-import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
import org.jetbrains.kotlin.ir.declarations.IrFile
@@ -34,6 +33,7 @@
import org.jetbrains.kotlin.ir.expressions.IrBody
import org.jetbrains.kotlin.ir.expressions.IrFunctionReference
import org.jetbrains.kotlin.ir.expressions.IrSuspensionPoint
+import org.jetbrains.kotlin.ir.inline.STUB_FOR_INLINING
import org.jetbrains.kotlin.ir.inline.SyntheticAccessorLowering
import org.jetbrains.kotlin.ir.inline.isConsideredAsPrivateForInlining
import org.jetbrains.kotlin.ir.interpreter.IrInterpreterConfiguration
@@ -80,7 +80,7 @@
when {
// TODO: remove this condition after the fix of KT-69470:
inlineFunctionUseSite is IrFunctionReference &&
- inlineFunction.visibility == DescriptorVisibilities.LOCAL -> true // temporarily permitted
+ inlineFunction.name == STUB_FOR_INLINING -> true // temporarily permitted
inlineFunction.isConsideredAsPrivateForInlining() -> false // forbidden
@@ -105,7 +105,9 @@
inlineFunction.isExternal -> true // temporarily permitted
// TODO: remove this condition after the fix of KT-69457:
- inlineFunctionUseSite is IrFunctionReference && !inlineFunction.isReifiable() -> true // temporarily permitted
+ inlineFunctionUseSite is IrFunctionReference &&
+ inlineFunction.name != STUB_FOR_INLINING &&
+ !inlineFunction.isReifiable() -> true // temporarily permitted
else -> false // forbidden
}