diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/AbstractSuspendFunctionsLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/AbstractSuspendFunctionsLowering.kt index 5b361901332..988e7aaae44 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/AbstractSuspendFunctionsLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/AbstractSuspendFunctionsLowering.kt @@ -100,7 +100,12 @@ abstract class AbstractSuspendFunctionsLowering(val co // This happens a lot in practice because of suspend functions with default arguments. // TODO: use TailRecursionCallsCollector. val lastCall = when (val lastStatement = (body as IrBlockBody).statements.lastOrNull()) { - is IrCall -> lastStatement + is IrCall -> + // Delegation to call without return can only be performed to Unit-returning function call from Unit-returning function + if (lastStatement.type == context.irBuiltIns.unitType && function.returnType == context.irBuiltIns.unitType) + lastStatement + else + null is IrReturn -> { var value: IrElement = lastStatement /* diff --git a/compiler/testData/codegen/box/callableReference/adaptedReferences/suspendUnitConversion.kt b/compiler/testData/codegen/box/callableReference/adaptedReferences/suspendUnitConversion.kt index 78da8c3892a..47e501a08d7 100644 --- a/compiler/testData/codegen/box/callableReference/adaptedReferences/suspendUnitConversion.kt +++ b/compiler/testData/codegen/box/callableReference/adaptedReferences/suspendUnitConversion.kt @@ -12,8 +12,6 @@ suspend fun bar(): Int = suspendCoroutineUninterceptedOrReturn { } fun box(): String { - return "OK" // KT-60700 Test is hardmuted due to WASM failures on Win&Mac, but not on Linux. So, `// IGNORE_BACKEND: WASM` does not help - var result = "" suspend { foo(::bar)