]> git.pld-linux.org Git - packages/gcc4.git/blame - gcc4-pr19505.patch
- one more todo
[packages/gcc4.git] / gcc4-pr19505.patch
CommitLineData
d97c6a13
PS
1The problem here is that have two basic block forwarders which go to the
2same basic block but destination of two different eh regions. We cannot
3forward both of these basic blocks to that other basic block.
4
5The way I fixed the issue is to make sure that if we removing
6a forwarder block which is coming in from a EH edge, make sure
7that the destination basic block have only one single predecessor.
8Yes this is too strong but there is no simple way to check if a basic
9block 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.058216 seconds and 4 git commands to generate.