JVM_IR KT-50277 skip temporary var elimination on inline suspend lambda
This commit is contained in:
@@ -637,6 +637,9 @@ internal fun isBeforeFakeContinuationConstructorCallMarker(insn: AbstractInsnNod
|
||||
internal fun isAfterFakeContinuationConstructorCallMarker(insn: AbstractInsnNode) =
|
||||
isSuspendMarker(insn, INLINE_MARKER_AFTER_FAKE_CONTINUATION_CONSTRUCTOR_CALL)
|
||||
|
||||
internal fun isSuspendInlineMarker(insn: AbstractInsnNode) =
|
||||
isInlineMarker(insn, "mark")
|
||||
|
||||
private fun isSuspendMarker(insn: AbstractInsnNode, id: Int) =
|
||||
isInlineMarker(insn, "mark") && insn.previous.intConstant == id
|
||||
|
||||
|
||||
+4
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.codegen.optimization.temporaryVals
|
||||
|
||||
import org.jetbrains.kotlin.codegen.inline.isSuspendInlineMarker
|
||||
import org.jetbrains.kotlin.codegen.optimization.common.InsnSequence
|
||||
import org.jetbrains.kotlin.codegen.optimization.common.isMeaningful
|
||||
import org.jetbrains.kotlin.codegen.optimization.common.removeUnusedLocalVariables
|
||||
@@ -23,6 +24,9 @@ class TemporaryVariablesEliminationTransformer(private val state: GenerationStat
|
||||
override fun transform(internalClassName: String, methodNode: MethodNode) {
|
||||
if (!state.isIrBackend) return
|
||||
|
||||
// If there are any suspend inline markers, don't touch anything now.
|
||||
if (methodNode.instructions.any { isSuspendInlineMarker(it) }) return
|
||||
|
||||
simplifyTrivialInstructions(methodNode)
|
||||
|
||||
val cfg = ControlFlowGraph(methodNode)
|
||||
|
||||
Reference in New Issue
Block a user