diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/AbstractSuspendFunctionsLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/AbstractSuspendFunctionsLowering.kt index 7f519204215..5c9f6e8b246 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/AbstractSuspendFunctionsLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/AbstractSuspendFunctionsLowering.kt @@ -34,7 +34,7 @@ abstract class AbstractSuspendFunctionsLowering(val co protected abstract fun getCoroutineBaseClass(function: IrFunction): IrClassSymbol protected abstract fun nameForCoroutineClass(function: IrFunction): Name protected abstract fun IrBuilderWithScope.launchSuspendFunctionWithGivenContinuation( - symbol: IrSimpleFunctionSymbol, dispatchReceiver: IrExpression, + symbol: IrSimpleFunctionSymbol, superQualifierSymbol: IrClassSymbol?, dispatchReceiver: IrExpression, arguments: List, continuation: IrExpression) : IrExpression protected abstract fun buildStateMachine( @@ -146,6 +146,7 @@ abstract class AbstractSuspendFunctionsLowering(val co +irReturn( launchSuspendFunctionWithGivenContinuation( invokeFunction.symbol, + superQualifierSymbol = invokeFunction.parentAsClass.symbol, // Call non-virtually. irGet(thisReceiver), valueParameters.dropLast(1).map { irGet(it) }, irGet(valueParameters.last()) diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IntrinsicGenerator.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IntrinsicGenerator.kt index 21f6560962e..447b2cf4d91 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IntrinsicGenerator.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IntrinsicGenerator.kt @@ -192,7 +192,7 @@ internal class IntrinsicGenerator(private val environment: IntrinsicGeneratorEnv environment.evaluateCall(suspendFunction, environment.evaluateExplicitArgs(suspendFunctionCall) + listOf(continuation), environment.calculateLifetime(suspendFunctionCall), - suspendFunction.parent as? IrClass, // Call non-virtually. + suspendFunctionCall.superQualifierSymbol?.owner, resultSlot, ) } diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/NativeSuspendFunctionLowering.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/NativeSuspendFunctionLowering.kt index 7ec3758933b..baa12248383 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/NativeSuspendFunctionLowering.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/NativeSuspendFunctionLowering.kt @@ -60,10 +60,10 @@ internal class NativeSuspendFunctionsLowering(ctx: Context): AbstractSuspendFunc override fun IrBuilderWithScope.launchSuspendFunctionWithGivenContinuation( - symbol: IrSimpleFunctionSymbol, dispatchReceiver: IrExpression, + symbol: IrSimpleFunctionSymbol, superQualifierSymbol: IrClassSymbol?, dispatchReceiver: IrExpression, arguments: List, continuation: IrExpression ) = irCall(this@NativeSuspendFunctionsLowering.context.ir.symbols.coroutineLaunchpad).apply { - putValueArgument(0, irCall(symbol).apply { + putValueArgument(0, irCall(symbol.owner, superQualifierSymbol = superQualifierSymbol).apply { this.dispatchReceiver = dispatchReceiver arguments.forEachIndexed { index, irExpression -> putValueArgument(index, irExpression)