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.