https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108855
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jakub at gcc dot gnu.org
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
So early CD-DCE figures that there's no longjmp in this function(?) but then
late modref/pure-const discovers bar() is actually noreturn and fixup-CFG
turns foo into
int foo ()
{
int D.2764;
int _1(D);
<bb 2> [local count: 1073741824]:
bar ();
}
because the call is said to be not control altering. But then the next DCE
chokes on this because now it _is_ control altering (fixup-CFG made it so
in fixup noreturn calls).
So this is again returns_twice + noreturn, but it also shows the per-stmt
control-altering overloading all control-altering attributes isn't fine
grained enough(?).
Note we're not setting ctrl-altering initially here, returns-twice doesn't
alter control flow but instead it receives control from elsewhere. In
that light the previous fix for PR108691 was probably wrong.