mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-31 02:29:35 +08:00
Fix IA-64 libada build failure, abnormal call edges on non-call insns.
PR rtl-optimization/17356 * cfgrtl.c (purge_dead_edges): Check for EDGE_ABNORMAL_CALL before checking for EDGE_EH. From-SVN: r105533
This commit is contained in:
parent
55ae1d648c
commit
1b2914a086
@ -1,3 +1,9 @@
|
||||
2005-10-17 James E Wilson <wilson@specifix.com>
|
||||
|
||||
PR rtl-optimization/17356
|
||||
* cfgrtl.c (purge_dead_edges): Check for EDGE_ABNORMAL_CALL before
|
||||
checking for EDGE_EH.
|
||||
|
||||
2005-10-17 Eric Botcazou <ebotcazou@libertysurf.fr>
|
||||
|
||||
* config/sparc/sparc.c (function_arg_slotno): In 64-bit mode, align
|
||||
|
16
gcc/cfgrtl.c
16
gcc/cfgrtl.c
@ -2300,19 +2300,23 @@ purge_dead_edges (basic_block bb)
|
||||
/* Cleanup abnormal edges caused by exceptions or non-local gotos. */
|
||||
for (ei = ei_start (bb->succs); (e = ei_safe_edge (ei)); )
|
||||
{
|
||||
if (e->flags & EDGE_EH)
|
||||
/* We must check for the most restrictive condition first. Since
|
||||
an abnormal call edge is always an EH edge, but an EH edge is not
|
||||
always an abnormal call edge, we must check for an abnormal call
|
||||
edge first. */
|
||||
if (e->flags & EDGE_ABNORMAL_CALL)
|
||||
{
|
||||
if (can_throw_internal (BB_END (bb)))
|
||||
if (CALL_P (BB_END (bb))
|
||||
&& (! (note = find_reg_note (insn, REG_EH_REGION, NULL))
|
||||
|| INTVAL (XEXP (note, 0)) >= 0))
|
||||
{
|
||||
ei_next (&ei);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else if (e->flags & EDGE_ABNORMAL_CALL)
|
||||
else if (e->flags & EDGE_EH)
|
||||
{
|
||||
if (CALL_P (BB_END (bb))
|
||||
&& (! (note = find_reg_note (insn, REG_EH_REGION, NULL))
|
||||
|| INTVAL (XEXP (note, 0)) >= 0))
|
||||
if (can_throw_internal (BB_END (bb)))
|
||||
{
|
||||
ei_next (&ei);
|
||||
continue;
|
||||
|
Loading…
Reference in New Issue
Block a user