mirror of git://gcc.gnu.org/git/gcc.git
re PR middle-end/30509 (ice for legal code with -O3)
PR middle-end/30509 * tree-inline.c (copy_bb): Produce exact copy of EH info when copying for inlining. From-SVN: r122314
This commit is contained in:
parent
bd8d4d1917
commit
2a025b54f6
|
@ -1,3 +1,8 @@
|
|||
2007-02-24 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
PR middle-end/30509
|
||||
* tree-inline.c (copy_bb): Produce exact copy of EH info when copying for inlining.
|
||||
|
||||
2007-02-24 Uros Bizjak <ubizjak@gmail.com>
|
||||
Jan Hubicka <jh@suse.cz>
|
||||
|
||||
|
|
|
@ -873,7 +873,20 @@ copy_bb (copy_body_data *id, basic_block bb, int frequency_scale, int count_scal
|
|||
gcc_assert (lookup_stmt_eh_region_fn (id->src_cfun, orig_stmt)
|
||||
!= 0);
|
||||
|
||||
if (tree_could_throw_p (stmt))
|
||||
if (tree_could_throw_p (stmt)
|
||||
/* When we are cloning for inlining, we are supposed to
|
||||
construct a clone that calls precisely the same functions
|
||||
as original. However IPA optimizers might've proved
|
||||
earlier some function calls as non-trapping that might
|
||||
render some basic blocks dead that might become
|
||||
unreachable.
|
||||
|
||||
We can't update SSA with unreachable blocks in CFG and thus
|
||||
we prevent the scenario by preserving even the "dead" eh
|
||||
edges until the point they are later removed by
|
||||
fixup_cfg pass. */
|
||||
|| (id->transform_call_graph_edges == CB_CGE_MOVE_CLONES
|
||||
&& lookup_stmt_eh_region_fn (id->src_cfun, orig_stmt) > 0))
|
||||
{
|
||||
int region = lookup_stmt_eh_region_fn (id->src_cfun, orig_stmt);
|
||||
/* Add an entry for the copied tree in the EH hashtable.
|
||||
|
|
Loading…
Reference in New Issue