diff --git a/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt b/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt index 7884f2e5f06..e8a9ceddedf 100644 --- a/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt +++ b/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.backend.common.ir.getNonDefaultAdditionalStatementsF import org.jetbrains.kotlin.backend.common.ir.getOriginalStatementsFromInlinedBlock import org.jetbrains.kotlin.backend.common.lower.BOUND_RECEIVER_PARAMETER import org.jetbrains.kotlin.backend.common.lower.LoweredStatementOrigins +import org.jetbrains.kotlin.backend.common.lower.inline.isBuiltInSuspendCoroutineUninterceptedOrReturn import org.jetbrains.kotlin.backend.jvm.* import org.jetbrains.kotlin.backend.jvm.intrinsics.IntrinsicMethod import org.jetbrains.kotlin.backend.jvm.intrinsics.JavaClassProperty @@ -686,9 +687,7 @@ class ExpressionCodegen( SuspensionPointKind.NEVER // Copy-pasted bytecode blocks are not suspension points. symbol.owner.isInline -> - if (symbol.owner.name.asString() == "suspendCoroutineUninterceptedOrReturn" && - symbol.owner.getPackageFragment().packageFqName == FqName("kotlin.coroutines.intrinsics") - ) + if (symbol.owner.isBuiltInSuspendCoroutineUninterceptedOrReturn()) SuspensionPointKind.ALWAYS else SuspensionPointKind.NEVER diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/IrInlineReferenceLocator.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/IrInlineReferenceLocator.kt index 5d873ce144e..e40b3adf911 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/IrInlineReferenceLocator.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/IrInlineReferenceLocator.kt @@ -5,6 +5,8 @@ package org.jetbrains.kotlin.backend.jvm.ir +import org.jetbrains.kotlin.backend.common.lower.inline.isBuiltInSuspendCoroutineUninterceptedOrReturn +import org.jetbrains.kotlin.backend.common.lower.inline.isBuiltInSuspendCoroutine import org.jetbrains.kotlin.ir.util.inlineDeclaration import org.jetbrains.kotlin.ir.util.isFunctionInlining import org.jetbrains.kotlin.backend.jvm.JvmBackendContext @@ -76,8 +78,7 @@ class IrInlineScopeResolver(context: JvmBackendContext) : IrInlineReferenceLocat get() = isInline && DescriptorVisibilities.isPrivate(visibility) private fun IrFunction.isCoroutineIntrinsic(): Boolean = - (name.asString() == "suspendCoroutine" && getPackageFragment().packageFqName == FqName("kotlin.coroutines")) || - (name.asString() == "suspendCoroutineUninterceptedOrReturn" && getPackageFragment().packageFqName == FqName("kotlin.coroutines.intrinsics")) + isBuiltInSuspendCoroutine() || isBuiltInSuspendCoroutineUninterceptedOrReturn() fun findContainer(scope: IrElement): IrDeclarationContainer? = findContainer(scope, approximateToPackage = false) 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 94c46571e71..9f5bc085516 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 @@ -60,6 +60,9 @@ abstract class InlineFunctionResolver { } } +fun IrFunction.isBuiltInSuspendCoroutine(): Boolean = + isTopLevelInPackage("suspendCoroutine", StandardNames.COROUTINES_PACKAGE_FQ_NAME) + fun IrFunction.isBuiltInSuspendCoroutineUninterceptedOrReturn(): Boolean = isTopLevelInPackage( "suspendCoroutineUninterceptedOrReturn",