diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/RedundantGotoMethodTransformer.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/RedundantGotoMethodTransformer.kt index 64b66397124..813693b1ac2 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/RedundantGotoMethodTransformer.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/RedundantGotoMethodTransformer.kt @@ -43,9 +43,9 @@ class RedundantGotoMethodTransformer : MethodTransformer() { */ override fun transform(internalClassName: String, methodNode: MethodNode) { val insns = methodNode.instructions.toArray().apply { reverse() } - var insnsToRemove = arrayListOf() + val insnsToRemove = arrayListOf() val currentLabels = hashSetOf() - var labelsToReplace = hashMapOf() + val labelsToReplace = hashMapOf() var pendingGoto: JumpInsnNode? = null for (insn in insns) { @@ -72,7 +72,7 @@ class RedundantGotoMethodTransformer : MethodTransformer() { // Rewrite branch instructions. if (!labelsToReplace.isEmpty()) { - insns.filter { it is JumpInsnNode }.forEach { rewriteLabelIfNeeded(it as JumpInsnNode, labelsToReplace) } + insns.filterIsInstance().forEach { rewriteLabelIfNeeded(it, labelsToReplace) } } for (insnToRemove in insnsToRemove) { @@ -84,9 +84,10 @@ class RedundantGotoMethodTransformer : MethodTransformer() { jumpInsn: JumpInsnNode, labelsToReplace: HashMap ) { - getLastTargetJumpInsn(jumpInsn, labelsToReplace).takeIf { it.label != jumpInsn.label }?.let { + val lastTargetLabel = getLastTargetJumpInsn(jumpInsn, labelsToReplace).label + if (lastTargetLabel != jumpInsn.label) { // Do not remove the old label because it can be used to define a local variable range. - jumpInsn.label = it.label + jumpInsn.label = lastTargetLabel } }