Commit 596aa3f0 by Jakub Jelinek Committed by Jakub Jelinek

re PR middle-end/45458 (ICE: in add_labels_and_missing_jumps, at…

re PR middle-end/45458 (ICE: in add_labels_and_missing_jumps, at bb-reorder.c:1306 with-fnon-call-exceptions -freorder-blocks-and-partition -fprofile-use)

	PR middle-end/45458
	* bb-reorder.c (add_labels_and_missing_jumps): Treat
	bbs ending with throwing insns like blocks ending with a call.
	(fix_up_fall_thru_edges): Likewise.

	* g++.dg/tree-prof/partition2.C: New test.

From-SVN: r163743
parent cd34bbe8
2010-09-01 Jakub Jelinek <jakub@redhat.com>
PR middle-end/45458
* bb-reorder.c (add_labels_and_missing_jumps): Treat
bbs ending with throwing insns like blocks ending with a call.
(fix_up_fall_thru_edges): Likewise.
2010-09-01 Nathan Froyd <froydnj@codesourcery.com>
* config/m32c/m32c-protos.h (m32c_function_arg): Delete.
......
......@@ -1299,7 +1299,9 @@ add_labels_and_missing_jumps (edge *crossing_edges, int n_crossing_edges)
if (src && (src != ENTRY_BLOCK_PTR))
{
if (!JUMP_P (BB_END (src)) && !block_ends_with_call_p (src))
if (!JUMP_P (BB_END (src))
&& !block_ends_with_call_p (src)
&& !can_throw_internal (BB_END (src)))
/* bb just falls through. */
{
/* make sure there's only one successor */
......@@ -1316,9 +1318,9 @@ add_labels_and_missing_jumps (edge *crossing_edges, int n_crossing_edges)
src->il.rtl->footer = unlink_insn_chain (barrier, barrier);
/* Mark edge as non-fallthru. */
crossing_edges[i]->flags &= ~EDGE_FALLTHRU;
} /* end: 'if (GET_CODE ... ' */
} /* end: 'if (src && src->index...' */
} /* end: 'if (dest && dest->index...' */
} /* end: 'if (!JUMP_P ... ' */
} /* end: 'if (src && src !=...' */
} /* end: 'if (dest && dest !=...' */
} /* end: 'if (crossing_edges[i]...' */
} /* end for loop */
}
......@@ -1375,19 +1377,21 @@ fix_up_fall_thru_edges (void)
fall_thru = succ2;
cond_jump = succ1;
}
else if (!fall_thru && succ1 && block_ends_with_call_p (cur_bb))
{
edge e;
edge_iterator ei;
/* Find EDGE_CAN_FALLTHRU edge. */
FOR_EACH_EDGE (e, ei, cur_bb->succs)
if (e->flags & EDGE_CAN_FALLTHRU)
{
fall_thru = e;
break;
}
}
else if (succ1
&& (block_ends_with_call_p (cur_bb)
|| can_throw_internal (BB_END (cur_bb))))
{
edge e;
edge_iterator ei;
/* Find EDGE_CAN_FALLTHRU edge. */
FOR_EACH_EDGE (e, ei, cur_bb->succs)
if (e->flags & EDGE_CAN_FALLTHRU)
{
fall_thru = e;
break;
}
}
if (fall_thru && (fall_thru->dest != EXIT_BLOCK_PTR))
{
......
2010-09-01 Jakub Jelinek <jakub@redhat.com>
PR middle-end/45458
* g++.dg/tree-prof/partition2.C: New test.
2010-09-01 Richard Guenther <rguenther@suse.de>
* gcc.dg/vect/vect-outer-fir.c: Adjust.
......
// PR middle-end/45458
// { dg-require-effective-target freorder }
// { dg-options "-fnon-call-exceptions -freorder-blocks-and-partition" }
int
main ()
{
try
{
throw 6;
}
catch (...)
{
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment