diff options
author | Richard Biener <rguenther@suse.de> | 2013-04-29 15:06:18 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2013-04-29 15:06:18 +0000 |
commit | a6f30e668a9d5284c0537aeba7d89190ddb9c3e9 (patch) | |
tree | 8fa64396d8612faca4a9ec12d61d19510a367efc /gcc/tree-inline.c | |
parent | 0c2b20400cbe35ee7ffd3688b921dfc92fe263ed (diff) | |
download | gcc-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.c | 10 |
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); |