re PR ipa/68721 (wrong code at -Os and above on x86_64-linux-gnu)
2015-12-10 Richard Biener <rguenther@suse.de> PR ipa/68721 * ipa-split.c (split_function): Record return value properly when the split part doesn't set it. * gcc.dg/torture/pr68721.c: New testcase. From-SVN: r231494
This commit is contained in:
parent
77ad31753c
commit
d4f4e71c84
@ -1,3 +1,9 @@
|
||||
2015-12-10 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR ipa/68721
|
||||
* ipa-split.c (split_function): Record return value properly
|
||||
when the split part doesn't set it.
|
||||
|
||||
2015-12-10 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/68806
|
||||
|
@ -1281,7 +1281,7 @@ split_function (basic_block return_bb, struct split_point *split_point,
|
||||
to return void instead of just outputting function with undefined return
|
||||
value. For structures this affects quality of codegen. */
|
||||
else if (!split_point->split_part_set_retval
|
||||
&& find_retval (return_bb))
|
||||
&& (retval = find_retval (return_bb)))
|
||||
{
|
||||
bool redirected = true;
|
||||
basic_block new_return_bb = create_basic_block (NULL, 0, return_bb);
|
||||
@ -1305,6 +1305,7 @@ split_function (basic_block return_bb, struct split_point *split_point,
|
||||
e->count = new_return_bb->count;
|
||||
add_bb_to_loop (new_return_bb, current_loops->tree_root);
|
||||
bitmap_set_bit (split_point->split_bbs, new_return_bb->index);
|
||||
retbnd = find_retbnd (return_bb);
|
||||
}
|
||||
/* When we pass around the value, use existing return block. */
|
||||
else
|
||||
|
@ -1,3 +1,8 @@
|
||||
2015-12-10 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR ipa/68721
|
||||
* gcc.dg/torture/pr68721.c: New testcase.
|
||||
|
||||
2015-12-10 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/68806
|
||||
|
31
gcc/testsuite/gcc.dg/torture/pr68721.c
Normal file
31
gcc/testsuite/gcc.dg/torture/pr68721.c
Normal file
@ -0,0 +1,31 @@
|
||||
/* { dg-do run } */
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
int a, b, c, *d, **e = &d;
|
||||
|
||||
int *
|
||||
fn1 ()
|
||||
{
|
||||
for (;;)
|
||||
{
|
||||
for (; a;)
|
||||
if (b)
|
||||
abort ();
|
||||
break;
|
||||
}
|
||||
for (; c;)
|
||||
;
|
||||
return &a;
|
||||
}
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
*e = fn1 ();
|
||||
|
||||
if (!d)
|
||||
abort ();
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user