https://gcc.gnu.org/bugzilla/show_bug.cgi?id=38534
--- Comment #14 from Lukas Grätz <lukas.gra...@tu-darmstadt.de> --- Never mind my above comments. I just realized that attribute nothrow has no effect in C, unless -fexceptions. So nothrow is not needed (only -fno-exceptions). Furthermore, most noreturn functions throw in C++, so there would be little potential optimization when exceptions are enabled. What puzzles me, is that functions like exit() have different signatures in C and C++. With "gcc -E -fexceptions somefile.cc" I get extern void exit (int __status) throw () __attribute__ ((__noreturn__)); in C++ and in C I get with "gcc -E -fexceptions somefile.c" extern void exit (int __status) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__)); , although exceptions are explicitly enabled in both cases. But I guess this is a problem in Glibc, not GCC. I will really shut up now, promise!