https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68721

--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Oops, sorry, started already with r231108.
During fnsplit, we have split_bbs { 6 }, return_bb is 7, 6 is the only
predecessor of 7, and has successor edges to itself and to 7.
The effect of the r231108 change is:
 Removing basic block 8
+Removing basic block 7
 Removing basic block 9
-Merging blocks 6 and 7
...
   <bb 6>:
   fn1.part.0 ();
-  return &a;
+  return;

which is wrong; after fnsplit, the fn1 function doesn't return (has just some
abort) unless it calls fn1.part.0 (), but if that function returns (it does in
the testcase), then it should return the correct value.
fn1.part.0 is conditional endless loop, otherwise return.

Reply via email to