I can ask for a better description of "pure" in the GCC manual. In any case, if a function doesn't return at all due to a function call marked with _Noreturn, it does not affect the observable state locally and GCC can avoid "emitting some calls in repeated invocations of the function with the same argument values". As I wrote before, this is an important observation as otherwise "assert" couldn't be used in "pure" functions.
Anyway, the function gl_linked_iterator_from_to in Gnulib should probably be fixed independently by adding the "pure" attribute so that the code is compilable with -Werror -Wall -Wextra. Am Sa., 10. Okt. 2020 um 15:50 Uhr schrieb Bruno Haible <br...@clisp.org>: > > Marc Nieper-Wißkirchen wrote: > > > And a function that may invoke abort () does "affect observable state". > > > > This description of the a pure function does not seem to be accurate. > > When a function calls another function like abort that is marked with > > _Noreturn in a pure context, for the compiler the function can still > > be pure (but not const). It can eliminate a second call to the > > function with the same parameters. I am pretty sure that the warning > > of GCC in line 938 is correct. > > The documentation of ATTRIBUTE_PURE in Gnulib is taken from the GCC > documentation [1][2], therefore if you think it needs to be fixed, it's > through a GCC bug report. > > Bruno > > [1] https://lists.gnu.org/archive/html/bug-gnulib/2020-05/msg00105.html > [2] > https://gcc.gnu.org/onlinedocs/gcc-10.2.0/gcc/Common-Function-Attributes.html >