re PR tree-optimization/19505 (java bytecode to native ICE in remove_unreachable_regions)

2006-07-13  Andrew Haley  <aph@redhat.com>

        PR tree-optimization/19505
        * tree-cfgcleanup.c (tree_forwarder_block_p): If we have an EH
        edge leaving this block, make sure that the destination of this
        block has only one predecessor.

From-SVN: r115518
This commit is contained in:
Andrew Haley 2006-07-17 13:14:38 +00:00 committed by Andrew Haley
parent 2b65dae54e
commit 9d335249c9
2 changed files with 26 additions and 0 deletions

View File

@ -1,3 +1,10 @@
2006-07-13 Andrew Haley <aph@redhat.com>
PR tree-optimization/19505
* tree-cfgcleanup.c (tree_forwarder_block_p): If we have an EH
edge leaving this block, make sure that the destination of this
block has only one predecessor.
2006-07-17 Richard Guenther <rguenther@suse.de>
PR tree-optimization/28238

View File

@ -239,6 +239,9 @@ static bool
tree_forwarder_block_p (basic_block bb, bool phi_wanted)
{
block_stmt_iterator bsi;
edge_iterator ei;
edge e, succ;
basic_block dest;
/* BB must have a single outgoing edge. */
if (single_succ_p (bb) != 1
@ -290,6 +293,22 @@ tree_forwarder_block_p (basic_block bb, bool phi_wanted)
return false;
}
/* If we have an EH edge leaving this block, make sure that the
destination of this block has only one predecessor. This ensures
that we don't get into the situation where we try to remove two
forwarders that go to the same basic block but are handlers for
different EH regions. */
succ = single_succ_edge (bb);
dest = succ->dest;
FOR_EACH_EDGE (e, ei, bb->preds)
{
if (e->flags & EDGE_EH)
{
if (!single_pred_p (dest))
return false;
}
}
return true;
}