https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85248
--- Comment #2 from Martin Liška <marxin at gcc dot gnu.org> --- (In reply to Andrew Pinski from comment #1) > I suspect this is because error is marked as noreturn in the header file and > not a gcc issue. No, it's not. It's properly distinguished: extern void __error_alias (int __status, int __errnum, const char *__format, ...) __asm__ ("" "error") __attribute__ ((__format__ (__printf__, 3, 4))); extern void __error_noreturn (int __status, int __errnum, const char *__format, ...) __asm__ ("" "error") __attribute__ ((__noreturn__, __format__ (__printf__, 3, 4))); extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) void error (int __status, int __errnum, const char *__format, ...) { if (__builtin_constant_p (__status) && __status != 0) __error_noreturn (__status, __errnum, __format, __builtin_va_arg_pack ()); else __error_alias (__status, __errnum, __format, __builtin_va_arg_pack ()); }