aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-inline.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2013-04-29 15:06:18 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2013-04-29 15:06:18 +0000
commita6f30e668a9d5284c0537aeba7d89190ddb9c3e9 (patch)
tree8fa64396d8612faca4a9ec12d61d19510a367efc /gcc/tree-inline.c
parent0c2b20400cbe35ee7ffd3688b921dfc92fe263ed (diff)
downloadgcc-a6f30e668a9d5284c0537aeba7d89190ddb9c3e9.zip
gcc-a6f30e668a9d5284c0537aeba7d89190ddb9c3e9.tar.gz
gcc-a6f30e668a9d5284c0537aeba7d89190ddb9c3e9.tar.bz2
re PR tree-optimization/57075 (verify_flow_info failed: control flow in the middle of basic block)
2013-04-29 Richard Biener <rguenther@suse.de> PR middle-end/57075 * tree-inline.c (copy_edges_for_bb): Still split the bbs, even if not adding abnormal edges for calls that can make abnormal gotos. * gcc.dg/torture/pr57075.c: New testcase. From-SVN: r198423
Diffstat (limited to 'gcc/tree-inline.c')
-rw-r--r--gcc/tree-inline.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c
index 69455ce..35cdb78 100644
--- a/gcc/tree-inline.c
+++ b/gcc/tree-inline.c
@@ -1923,11 +1923,7 @@ copy_edges_for_bb (basic_block bb, gcov_type count_scale, basic_block ret_bb,
into a COMPONENT_REF which doesn't. If the copy
can throw, the original could also throw. */
can_throw = stmt_can_throw_internal (copy_stmt);
- /* If the call we inline cannot make abnormal goto do not add
- additional abnormal edges but only retain those already present
- in the original function body. */
- nonlocal_goto
- = can_make_abnormal_goto && stmt_can_make_abnormal_goto (copy_stmt);
+ nonlocal_goto = stmt_can_make_abnormal_goto (copy_stmt);
if (can_throw || nonlocal_goto)
{
@@ -1955,6 +1951,10 @@ copy_edges_for_bb (basic_block bb, gcov_type count_scale, basic_block ret_bb,
else if (can_throw)
make_eh_edges (copy_stmt);
+ /* If the call we inline cannot make abnormal goto do not add
+ additional abnormal edges but only retain those already present
+ in the original function body. */
+ nonlocal_goto &= can_make_abnormal_goto;
if (nonlocal_goto)
make_abnormal_goto_edges (gimple_bb (copy_stmt), true);