https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109914
Paul Eggert <eggert at cs dot ucla.edu> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |eggert at cs dot ucla.edu --- Comment #4 from Paul Eggert <eggert at cs dot ucla.edu> --- (In reply to Jan Hubicka from comment #2) > The reason why gcc warns is that it is unable to prove that the function is > always finite. I don't see why finiteness matters. If a pure function returns the first time it's called, and if there's no change to visible state after that, it should return the second time with the same value. And if the pure function didn't return the first time evaluation won't even get to the second time. So common subexpression elimination (which is the point of 'pure') will work even if a pure function does not return. C23 has standardized this stuff with the [[reproducible]] attribute, and as far as I can see (the wording is admittedly murky) C23 does not impose a finiteness constraint on reproducible functions. If my reading of C23 is correct, GCC should not impose finiteness constraints on reproducible functions when it gets around to implementing [[reproducible]], and if [[reproducible]] and __attribute__((pure)) are supposed to be the same thing then GCC should drop the finiteness constraint on pure functions as well. I agree with Bruno's main point that none of this stuff should matter for static functions. --suggest-attribute=* warnings are useless chatter for static functions. (I ran into this GCC bug when building recent versions of the TZDB code, which is why I found this bug report.)