[IR] Remove intrinsics hack for `coroutineContext`

^KT-77111 Fixed
diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/Symbols.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/Symbols.kt
index 7f81291..a31ce58 100644
--- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/Symbols.kt
+++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/Symbols.kt
@@ -218,10 +218,6 @@
 
     abstract val continuationClass: IrClassSymbol
 
-    abstract val coroutineContextGetter: IrSimpleFunctionSymbol
-
-    abstract val coroutineGetContext: IrSimpleFunctionSymbol
-
     abstract val returnIfSuspended: IrSimpleFunctionSymbol
 
     abstract val functionAdapter: IrClassSymbol
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsCommonBackendContext.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsCommonBackendContext.kt
index c2c3514..f3ac0c2 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsCommonBackendContext.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsCommonBackendContext.kt
@@ -7,23 +7,26 @@
 
 import org.jetbrains.kotlin.backend.common.CommonBackendContext
 import org.jetbrains.kotlin.backend.common.InlineClassesUtils
-import org.jetbrains.kotlin.utils.atMostOne
 import org.jetbrains.kotlin.descriptors.ClassDescriptor
 import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor
 import org.jetbrains.kotlin.incremental.components.NoLookupLocation
 import org.jetbrains.kotlin.ir.InternalSymbolFinderAPI
-import org.jetbrains.kotlin.ir.SymbolFinder
 import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
+import org.jetbrains.kotlin.ir.SymbolFinder
 import org.jetbrains.kotlin.ir.backend.js.utils.isDispatchReceiver
 import org.jetbrains.kotlin.ir.declarations.*
 import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
 import org.jetbrains.kotlin.ir.symbols.IrFileSymbol
 import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
 import org.jetbrains.kotlin.ir.types.IrType
-import org.jetbrains.kotlin.ir.util.*
+import org.jetbrains.kotlin.ir.util.SymbolTable
+import org.jetbrains.kotlin.ir.util.getPropertyGetter
+import org.jetbrains.kotlin.ir.util.getPropertySetter
+import org.jetbrains.kotlin.ir.util.isOverridableOrOverrides
 import org.jetbrains.kotlin.name.FqName
 import org.jetbrains.kotlin.name.Name
 import org.jetbrains.kotlin.resolve.scopes.MemberScope
+import org.jetbrains.kotlin.utils.atMostOne
 
 interface JsCommonBackendContext : CommonBackendContext {
     val internalPackageFqn: FqName
@@ -85,13 +88,9 @@
             return contextGetter.symbol
         }
 
-    val coroutineContextGetter =
-        symbolFinder.findTopLevelPropertyGetter(COROUTINE_PACKAGE_FQNAME, COROUTINE_CONTEXT_NAME.asString())
-
     companion object {
         private val INTRINSICS_PACKAGE_NAME = Name.identifier("intrinsics")
         private val COROUTINE_SUSPENDED_NAME = Name.identifier("COROUTINE_SUSPENDED")
-        private val COROUTINE_CONTEXT_NAME = Name.identifier("coroutineContext")
         private val COROUTINE_IMPL_NAME = Name.identifier("CoroutineImpl")
         private val CONTINUATION_NAME = Name.identifier("Continuation")
         private val CONTINUATION_CONTEXT_GETTER_NAME = Name.special("<get-context>")
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsSymbols.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsSymbols.kt
index 4548f8d..4a095be 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsSymbols.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsSymbols.kt
@@ -85,10 +85,6 @@
 
     override val continuationClass = coroutineSymbols.continuationClass
 
-    override val coroutineContextGetter = coroutineSymbols.coroutineContextGetter
-
-    override val coroutineGetContext = symbolFinder.topLevelFunction(BASE_JS_PACKAGE, GET_COROUTINE_CONTEXT_NAME)
-
     override val returnIfSuspended = symbolFinder.topLevelFunction(BASE_JS_PACKAGE, "returnIfSuspended")
 
     override val functionAdapter = symbolFinder.topLevelClass(BASE_JS_PACKAGE, "FunctionAdapter")
@@ -145,8 +141,4 @@
                 call.symbol == intrinsics.arrayConcat ||
                 call.symbol == intrinsics.jsBoxIntrinsic ||
                 call.symbol == intrinsics.jsUnboxIntrinsic
-
-    companion object {
-        private const val GET_COROUTINE_CONTEXT_NAME = "getCoroutineContext"
-    }
 }
diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt
index 2beb3ed..d2a74f4 100644
--- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt
+++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt
@@ -268,12 +268,6 @@
     override val getContinuation: IrSimpleFunctionSymbol
         get() = error("not implemented")
 
-    override val coroutineContextGetter: IrSimpleFunctionSymbol
-        get() = error("not implemented")
-
-    override val coroutineGetContext: IrSimpleFunctionSymbol
-        get() = error("not implemented")
-
     override val returnIfSuspended: IrSimpleFunctionSymbol
         get() = error("not implemented")
 
diff --git a/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/Ir.kt b/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/Ir.kt
index 2cc5799..f7cf2b5 100644
--- a/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/Ir.kt
+++ b/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/Ir.kt
@@ -178,7 +178,6 @@
     val isSubtype = "isSubtype".internalCallableId
     val getContinuation = "getContinuation".internalCallableId
     val returnIfSuspended = "returnIfSuspended".internalCallableId
-    val getCoroutineContext = "getCoroutineContext".internalCallableId
     val saveCoroutineState = "saveCoroutineState".internalCallableId
     val restoreCoroutineState = "restoreCoroutineState".internalCallableId
     val getObjectTypeInfo = "getObjectTypeInfo".internalCallableId
@@ -238,7 +237,6 @@
     val println = CallableId(FqName("kotlin.io"), Name.identifier("println"))
     val executeImpl = CallableId(KonanFqNames.packageName.child(Name.identifier("concurrent")), Name.identifier("executeImpl"))
     val createCleaner = CallableId(KonanFqNames.packageName.child(Name.identifier("ref")), Name.identifier("createCleaner"))
-    val coroutineContext = CallableId(StandardNames.COROUTINES_PACKAGE_FQ_NAME, Name.identifier("coroutineContext"))
     val coroutineSuspended = CallableId(StandardNames.COROUTINES_INTRINSICS_PACKAGE_FQ_NAME, StandardNames.COROUTINE_SUSPENDED_NAME)
     val invokeSuspend = CallableId(ClassIds.baseContinuationImpl, Name.identifier("invokeSuspend"))
     val anyEquals = CallableId(StandardClassIds.Any, StandardNames.EQUALS_NAME)
@@ -604,10 +602,6 @@
 
     override val returnIfSuspended = CallableIds.returnIfSuspended.functionSymbol()
 
-    override val coroutineContextGetter by CallableIds.coroutineContext.getterSymbol()
-
-    override val coroutineGetContext = CallableIds.getCoroutineContext.functionSymbol()
-
     override val coroutineImpl get() = TODO()
 
     val baseContinuationImpl = ClassIds.baseContinuationImpl.classSymbol()
diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/WasmSymbols.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/WasmSymbols.kt
index 169fb98..0f328ba 100644
--- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/WasmSymbols.kt
+++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/WasmSymbols.kt
@@ -103,10 +103,6 @@
         getInternalFunction("getContinuation")
     override val continuationClass =
         coroutineSymbols.continuationClass
-    override val coroutineContextGetter =
-        coroutineSymbols.coroutineContextGetter
-    override val coroutineGetContext =
-        getInternalFunction("getCoroutineContext")
     override val returnIfSuspended =
         getInternalFunction("returnIfSuspended")
 
diff --git a/compiler/ir/ir.inline/src/org/jetbrains/kotlin/ir/inline/InlineFunctionResolver.kt b/compiler/ir/ir.inline/src/org/jetbrains/kotlin/ir/inline/InlineFunctionResolver.kt
index 5c92d07..d7e4cf3 100644
--- a/compiler/ir/ir.inline/src/org/jetbrains/kotlin/ir/inline/InlineFunctionResolver.kt
+++ b/compiler/ir/ir.inline/src/org/jetbrains/kotlin/ir/inline/InlineFunctionResolver.kt
@@ -91,7 +91,6 @@
         if (!realOwner.isInline) return null
         // TODO: drop special cases KT-77111
         val result = when {
-            realOwner.symbol == context.symbols.coroutineContextGetter -> context.symbols.coroutineGetContext.owner
             else -> realOwner
         }
         if (inlineMode == InlineMode.PRIVATE_INLINE_FUNCTIONS && !result.isEffectivelyPrivate()) return null
diff --git a/kotlin-native/runtime/src/main/kotlin/kotlin/coroutines/ContinuationNative.kt b/kotlin-native/runtime/src/main/kotlin/kotlin/coroutines/ContinuationNative.kt
new file mode 100644
index 0000000..d94ac72
--- /dev/null
+++ b/kotlin-native/runtime/src/main/kotlin/kotlin/coroutines/ContinuationNative.kt
@@ -0,0 +1,15 @@
+/*
+ * Copyright 2010-2025 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+
+package kotlin.coroutines
+
+import kotlin.internal.InlineOnly
+import kotlin.native.internal.getContinuation
+
+@SinceKotlin(version = "1.3")
+@Suppress("WRONG_MODIFIER_TARGET")
+@InlineOnly
+public actual suspend inline val coroutineContext: CoroutineContext
+    get() = getContinuation<Any?>().context
diff --git a/kotlin-native/runtime/src/main/kotlin/kotlin/native/internal/Coroutines.kt b/kotlin-native/runtime/src/main/kotlin/kotlin/native/internal/Coroutines.kt
index d862594..7248f5a 100644
--- a/kotlin-native/runtime/src/main/kotlin/kotlin/native/internal/Coroutines.kt
+++ b/kotlin-native/runtime/src/main/kotlin/kotlin/native/internal/Coroutines.kt
@@ -6,17 +6,11 @@
 package kotlin.native.internal
 
 import kotlin.coroutines.Continuation
-import kotlin.coroutines.CoroutineContext
 
 @TypedIntrinsic(IntrinsicType.GET_CONTINUATION)
 @PublishedApi
 internal external fun <T> getContinuation(): Continuation<T>
 
-@kotlin.internal.InlineOnly
-@PublishedApi
-internal inline suspend fun getCoroutineContext(): CoroutineContext =
-        getContinuation<Any?>().context
-
 @TypedIntrinsic(IntrinsicType.RETURN_IF_SUSPENDED)
 @PublishedApi
 internal external suspend fun <T> returnIfSuspended(@Suppress("UNUSED_PARAMETER") argument: Any?): T
diff --git a/libraries/stdlib/js/runtime/coroutineInternalJS.kt b/libraries/stdlib/js/runtime/coroutineInternalJS.kt
index 94cad69..6d18ef9 100644
--- a/libraries/stdlib/js/runtime/coroutineInternalJS.kt
+++ b/libraries/stdlib/js/runtime/coroutineInternalJS.kt
@@ -26,8 +26,3 @@
     context: CoroutineContext,
     continuation: Continuation<T>
 ): Continuation<T> = context[ContinuationInterceptor]?.interceptContinuation(continuation) ?: continuation
-
-
-@SinceKotlin("1.2")
-@PublishedApi
-internal inline suspend fun getCoroutineContext(): CoroutineContext = getContinuation<Any?>().context
diff --git a/libraries/stdlib/js/src/kotlin/coroutines/ContinuationJs.kt b/libraries/stdlib/js/src/kotlin/coroutines/ContinuationJs.kt
new file mode 100644
index 0000000..cf17ebe
--- /dev/null
+++ b/libraries/stdlib/js/src/kotlin/coroutines/ContinuationJs.kt
@@ -0,0 +1,14 @@
+/*
+ * Copyright 2010-2025 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+
+package kotlin.coroutines
+
+import kotlin.internal.InlineOnly
+
+@SinceKotlin(version = "1.3")
+@Suppress("WRONG_MODIFIER_TARGET")
+@InlineOnly
+public actual suspend inline val coroutineContext: CoroutineContext
+    get() = getContinuation<Any?>().context
\ No newline at end of file
diff --git a/libraries/stdlib/jvm/src/kotlin/coroutines/ContinuationJvm.kt b/libraries/stdlib/jvm/src/kotlin/coroutines/ContinuationJvm.kt
new file mode 100644
index 0000000..d60e55e
--- /dev/null
+++ b/libraries/stdlib/jvm/src/kotlin/coroutines/ContinuationJvm.kt
@@ -0,0 +1,14 @@
+/*
+ * Copyright 2010-2025 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+
+package kotlin.coroutines
+
+import kotlin.internal.InlineOnly
+
+@SinceKotlin(version = "1.3")
+@Suppress("WRONG_MODIFIER_TARGET")
+@InlineOnly
+public actual suspend inline val coroutineContext: CoroutineContext
+    get() = error("not implemented")
diff --git a/libraries/stdlib/src/kotlin/coroutines/Continuation.kt b/libraries/stdlib/src/kotlin/coroutines/Continuation.kt
index 5aa325d..f219ca1 100644
--- a/libraries/stdlib/src/kotlin/coroutines/Continuation.kt
+++ b/libraries/stdlib/src/kotlin/coroutines/Continuation.kt
@@ -159,7 +159,4 @@
 @SinceKotlin("1.3")
 @Suppress("WRONG_MODIFIER_TARGET")
 @InlineOnly
-public suspend inline val coroutineContext: CoroutineContext
-    get() {
-        throw NotImplementedError("Implemented as intrinsic")
-    }
+public expect suspend inline val coroutineContext: CoroutineContext
diff --git a/libraries/stdlib/wasm/internal/kotlin/wasm/internal/Coroutines.kt b/libraries/stdlib/wasm/internal/kotlin/wasm/internal/Coroutines.kt
index 1871ff1..858a9bd 100644
--- a/libraries/stdlib/wasm/internal/kotlin/wasm/internal/Coroutines.kt
+++ b/libraries/stdlib/wasm/internal/kotlin/wasm/internal/Coroutines.kt
@@ -25,10 +25,6 @@
     continuation: Continuation<T>
 ): Continuation<T> = context[ContinuationInterceptor]?.interceptContinuation(continuation) ?: continuation
 
-
-@PublishedApi
-internal inline suspend fun getCoroutineContext(): CoroutineContext = getContinuation<Any?>().context
-
 @Suppress("UNUSED_PARAMETER")
 @ExcludedFromCodegen
 @PublishedApi
diff --git a/libraries/stdlib/wasm/src/kotlin/coroutines/ContinuationWasm.kt b/libraries/stdlib/wasm/src/kotlin/coroutines/ContinuationWasm.kt
new file mode 100644
index 0000000..e22f005
--- /dev/null
+++ b/libraries/stdlib/wasm/src/kotlin/coroutines/ContinuationWasm.kt
@@ -0,0 +1,15 @@
+/*
+ * Copyright 2010-2025 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+
+package kotlin.coroutines
+
+import kotlin.internal.InlineOnly
+import kotlin.wasm.internal.getContinuation
+
+@SinceKotlin(version = "1.3")
+@Suppress("WRONG_MODIFIER_TARGET")
+@InlineOnly
+public actual suspend inline val coroutineContext: CoroutineContext
+    get() = getContinuation<Any?>().context