On Mac OS X 10.12 (with gcc -> clang), with CPPFLAGS=-Wall, I get this warning:
obstack.c:351:31: warning: incompatible pointer types initializing 'void (*)(void) __attribute__((noreturn))' with an expression of type 'void (void)' [-Wincompatible-pointer-types] __attribute_noreturn__ void (*obstack_alloc_failed_handler) (void) ^ This patch gets rid of the warning: diff --git a/lib/obstack.c b/lib/obstack.c index 1c7e069..49a846c 100644 --- a/lib/obstack.c +++ b/lib/obstack.c @@ -326,7 +326,7 @@ int obstack_exit_failure = EXIT_FAILURE; # include <libio/iolibio.h> # endif -static _Noreturn void +static __attribute_noreturn__ void print_and_abort (void) { /* Don't change any of these strings. Yes, it would be possible to add But I'm wondering: What is the semantic difference between _Noreturn and __attribute_noreturn__? In the "gcc -E" output, I can see that _Noreturn is present, i.e. is a keyword, and __attribute_noreturn__ expands to __attribute__ ((__noreturn__)). Bruno