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.

Reply via email to