From 6c2d93bb8b418515e2cb0159456336619b3555ec Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Wed, 14 Jul 2021 06:18:40 +0300 Subject: [PATCH] JVM traverse nodes in reverse order in 'findSafelyReachableReturns' --- .../kotlin/codegen/coroutines/TailCallOptimization.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/TailCallOptimization.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/TailCallOptimization.kt index c1b6276751e..bfd67d279ce 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/TailCallOptimization.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/TailCallOptimization.kt @@ -159,8 +159,8 @@ internal class MethodNodeExaminer( * @return indices of safely reachable returns for each instruction in the method node */ private fun findSafelyReachableReturns(): Array?> { - val insns = methodNode.instructions - val reachableReturnsIndices = Array(insns.size()) init@{ index -> + val insns = methodNode.instructions.toArray() + val reachableReturnsIndices = Array(insns.size) init@{ index -> val insn = insns[index] if (insn.opcode == Opcodes.ARETURN && !insn.isAreturnAfterSafeUnitInstance()) { @@ -182,7 +182,7 @@ internal class MethodNodeExaminer( var changed: Boolean do { changed = false - for (index in 0 until insns.size()) { + for (index in insns.indices.reversed()) { if (insns[index].opcode == Opcodes.ARETURN) continue @Suppress("RemoveExplicitTypeArguments")