From e72d24960d827ca3ad2a22abfc47099dbfe76748 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Tue, 20 Jul 2021 08:08:11 +0300 Subject: [PATCH] JVM we don't merge frames in stack normalization --- .../optimization/fixStack/FixStackAnalyzer.kt | 23 +------------------ .../HackedFixStackMethodAnalyzerBase.kt | 3 +++ 2 files changed, 4 insertions(+), 22 deletions(-) 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 85a45ce1261..6cd24cbb5d0 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 @@ -179,28 +179,7 @@ internal class FixStackAnalyzer( } override fun merge(frame: Frame, interpreter: Interpreter): Boolean { - val other = frame as FixStackFrame - if (stackSizeWithExtra != other.stackSizeWithExtra) { - throw AnalyzerException(null, "Incompatible stack heights") - } - var changed = false - for (i in 0 until stackSize) { - val v0 = super.getStack(i) - val vm = interpreter.merge(v0, other.getStack(i)) - if (vm != v0) { - super.setStack(i, vm) - changed = true - } - } - for (i in 0 until extraStack.size) { - val v0 = extraStack[i] - val vm = interpreter.merge(v0, other.extraStack[i]) - if (vm != v0) { - extraStack[i] = vm - changed = true - } - } - return changed + throw UnsupportedOperationException("Stack normalization should not merge frames") } } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/HackedFixStackMethodAnalyzerBase.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/HackedFixStackMethodAnalyzerBase.kt index 9b1aa1e0737..fc4e699c187 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/HackedFixStackMethodAnalyzerBase.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/HackedFixStackMethodAnalyzerBase.kt @@ -72,6 +72,9 @@ internal open class HackedFixStackMethodAnalyzerBase( fun analyze(): Array?> { if (nInsns == 0) return frames + // This is a very specific version of method bytecode analyzer that doesn't perform any DFA, + // but infers stack types for reachable instructions instead. + checkAssertions() computeExceptionEdges()