+++ /dev/null
-The problem here is that have two basic block forwarders which go to the
-same basic block but destination of two different eh regions. We cannot
-forward both of these basic blocks to that other basic block.
-
-The way I fixed the issue is to make sure that if we removing
-a forwarder block which is coming in from a EH edge, make sure
-that the destination basic block have only one single predecessor.
-Yes this is too strong but there is no simple way to check if a basic
-block is the destination of a different eh region.
-
---- gcc/gcc/tree-cfgcleanup.c 19 Aug 2005 18:52:55 -0000 2.7
-+++ gcc/gcc/tree-cfgcleanup.c 24 Sep 2005 23:30:54 -0000
-@@ -392,7 +392,18 @@ remove_forwarder_block (basic_block bb,
- return false;
- }
- }
--
-+ /* Check to make sure that we can remove a forwarder block for eh edges. */
-+ FOR_EACH_EDGE (e, ei, bb->preds)
-+ {
-+ /* This check is too strong, we should also be checking eh regions
-+ but this is much harder. */
-+ if (e->flags & EDGE_EH)
-+ {
-+ if (!single_pred_p (dest))
-+ return false;
-+ }
-+ }
-+
- /* Redirect the edges. */
- for (ei = ei_start (bb->preds); (e = ei_safe_edge (ei)); )
- {