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
This commit is contained in:
parent
0c2b20400c
commit
a6f30e668a
@ -1,3 +1,10 @@
|
||||
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.
|
||||
|
||||
2013-04-29 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR middle-end/57103
|
||||
|
@ -1,3 +1,8 @@
|
||||
2013-04-29 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR middle-end/57075
|
||||
* gcc.dg/torture/pr57075.c: New testcase.
|
||||
|
||||
2013-04-29 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR middle-end/57103
|
||||
|
15
gcc/testsuite/gcc.dg/torture/pr57075.c
Normal file
15
gcc/testsuite/gcc.dg/torture/pr57075.c
Normal file
@ -0,0 +1,15 @@
|
||||
/* { dg-do compile } */
|
||||
|
||||
extern int baz (void) __attribute__ ((returns_twice));
|
||||
int __attribute__ ((__leaf__))
|
||||
foo (void)
|
||||
{
|
||||
return __builtin_printf ("$");
|
||||
}
|
||||
|
||||
void
|
||||
bar ()
|
||||
{
|
||||
foo ();
|
||||
baz ();
|
||||
}
|
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user