]> git.pld-linux.org Git - packages/gcc4.git/blob - gcc4-pr19505.patch
- one more todo
[packages/gcc4.git] / gcc4-pr19505.patch
1 The problem here is that have two basic block forwarders which go to the
2 same basic block but destination of two different eh regions.  We cannot
3 forward both of these basic blocks to that other basic block.
4
5 The way I fixed the issue is to make sure that if we removing
6 a forwarder block which is coming in from a EH edge, make sure
7 that the destination basic block have only one single predecessor.
8 Yes this is too strong but there is no simple way to check if a basic
9 block is the destination of a different eh region.
10
11 --- gcc/gcc/tree-cfgcleanup.c   19 Aug 2005 18:52:55 -0000      2.7
12 +++ gcc/gcc/tree-cfgcleanup.c   24 Sep 2005 23:30:54 -0000
13 @@ -392,7 +392,18 @@ remove_forwarder_block (basic_block bb, 
14             return false;
15         }
16      }
17 -
18 +  /* Check to make sure that we can remove a forwarder block for eh edges.  */
19 +  FOR_EACH_EDGE (e, ei, bb->preds)
20 +    {
21 +      /* This check is too strong, we should also be checking eh regions
22 +         but this is much harder.  */
23 +      if (e->flags & EDGE_EH)
24 +        {
25 +         if (!single_pred_p (dest))
26 +           return false;
27 +       }
28 +    }
29 +  
30    /* Redirect the edges.  */
31    for (ei = ei_start (bb->preds); (e = ei_safe_edge (ei)); )
32      {
This page took 0.05515 seconds and 3 git commands to generate.