diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/FixStackAnalyzer.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/FixStackAnalyzer.kt index 6cd24cbb5d0..5041a6a5adf 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/FixStackAnalyzer.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/FixStackAnalyzer.kt @@ -26,7 +26,6 @@ import org.jetbrains.org.objectweb.asm.tree.AbstractInsnNode import org.jetbrains.org.objectweb.asm.tree.JumpInsnNode import org.jetbrains.org.objectweb.asm.tree.LabelNode import org.jetbrains.org.objectweb.asm.tree.MethodNode -import org.jetbrains.org.objectweb.asm.tree.analysis.AnalyzerException import org.jetbrains.org.objectweb.asm.tree.analysis.Frame import org.jetbrains.org.objectweb.asm.tree.analysis.Interpreter import kotlin.math.max @@ -142,15 +141,14 @@ internal class FixStackAnalyzer( fun getStackContent(): List { val savedStack = ArrayList() - IntRange(0, super.getStackSize() - 1).mapTo(savedStack) { super.getStack(it) } + for (i in 0 until super.getStackSize()) { + savedStack.add(super.getStack(i)) + } savedStack.addAll(extraStack) return savedStack } override fun push(value: FixStackValue) { - if (value == FixStackValue.UNINITIALIZED) { - throw AnalyzerException(null, "Uninitialized value on stack") - } if (super.getStackSize() < maxStackSize) { super.push(value) } else { diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/LocalVariablesManager.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/LocalVariablesManager.kt index 5501ed46220..9e48ab473e2 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/LocalVariablesManager.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/LocalVariablesManager.kt @@ -51,6 +51,10 @@ internal class LocalVariablesManager(val context: FixStackContext, val methodNod saveStackMarker: AbstractInsnNode, savedStackValues: List ): SavedStackDescriptor { + if (savedStackValues.any { it == FixStackValue.UNINITIALIZED }) { + throw AssertionError("Uninitialized value on stack at ${methodNode.instructions.indexOf(saveStackMarker)}: $savedStackValues") + } + val firstUnusedLocalVarIndex = getFirstUnusedLocalVariableIndex() val savedStackDescriptor = SavedStackDescriptor(savedStackValues, firstUnusedLocalVarIndex) updateMaxLocals(savedStackDescriptor.firstUnusedLocalVarIndex)