summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compiler/scala/tools/nsc/backend/icode/Linearizers.scala7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/icode/Linearizers.scala b/src/compiler/scala/tools/nsc/backend/icode/Linearizers.scala
index ff4a2d4a0a..c25dc4aa3b 100644
--- a/src/compiler/scala/tools/nsc/backend/icode/Linearizers.scala
+++ b/src/compiler/scala/tools/nsc/backend/icode/Linearizers.scala
@@ -136,7 +136,12 @@ trait Linearizers requires ICodes {
m.exh foreach (b => rpo(b.startBlock));
rpo(m.code.startBlock);
- blocks
+ // if the start block has predecessors, it won't be the first one
+ // in the linearization, so we need to enforce it here
+ if (m.code.startBlock.predecessors eq Nil)
+ blocks
+ else
+ m.code.startBlock :: (blocks.remove(.==(m.code.startBlock)))
}
def rpo(b: BasicBlock): Unit =