summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler/scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis.scala')
-rw-r--r--src/compiler/scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis.scala8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis.scala b/src/compiler/scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis.scala
index 962c47f443..e791936470 100644
--- a/src/compiler/scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis.scala
+++ b/src/compiler/scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis.scala
@@ -736,7 +736,13 @@ abstract class TypeFlowAnalysis {
val succs = point.successors filter relevantBBs
succs foreach { p =>
assert((p.predecessors filter isOnPerimeter).isEmpty)
- val updated = lattice.lub(List(output, in(p)), p.exceptionHandlerStart)
+ val existing = in(p)
+ // TODO move the following assertion to typeFlowLattice.lub2 for wider applicability (ie MethodTFA in addition to MTFAGrowable).
+ assert(existing == lattice.bottom ||
+ p.exceptionHandlerStart ||
+ (output.stack.length == existing.stack.length),
+ "Trying to merge non-bottom type-stacks with different stack heights. For a possible cause see SI-6157.")
+ val updated = lattice.lub(List(output, existing), p.exceptionHandlerStart)
if(updated != in(p)) {
in(p) = updated
enqueue(p)