diff options
-rw-r--r-- | src/compiler/scala/tools/nsc/backend/icode/Linearizers.scala | 7 |
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 = |