diff options
author | theraven <theraven@FreeBSD.org> | 2011-12-07 15:25:48 +0000 |
---|---|---|
committer | theraven <theraven@FreeBSD.org> | 2011-12-07 15:25:48 +0000 |
commit | ded93cd9e74a8cb2766f3a3f2ecaab59747c59e4 (patch) | |
tree | 8a6278cec83d284c97957bb6df5b9f2afcd30e17 /sys/sys/cdefs.h | |
parent | c9b9c0a5a33422e64173fec02b4e0a586b146f11 (diff) | |
download | FreeBSD-src-ded93cd9e74a8cb2766f3a3f2ecaab59747c59e4.zip FreeBSD-src-ded93cd9e74a8cb2766f3a3f2ecaab59747c59e4.tar.gz |
Implement quick_exit() / at_quick_exit() from C++11 / C1x. Also add a
__noreturn macro and modify the other exiting functions to use it.
The __noreturn macro, unlike __dead2, must be used BEFORE the function.
This is in line with the C and C++ specifications that place _Noreturn (c1x)
and [[noreturn]] (C++11) in front of the functions. As with __dead2, this
macro falls back to using the GCC attribute.
Unfortunately, clang currently sets the same value for the C version macro
in C99 and C1x modes, so these functions are hidden by default. At some
point before 10.0, I need to go through the headers and clean up the C1x /
C++11 visibility.
Reviewed by: brooks (mentor)
Diffstat (limited to 'sys/sys/cdefs.h')
-rw-r--r-- | sys/sys/cdefs.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/sys/sys/cdefs.h b/sys/sys/cdefs.h index 495daf2..ca485b3 100644 --- a/sys/sys/cdefs.h +++ b/sys/sys/cdefs.h @@ -218,6 +218,17 @@ #endif #endif + +#if defined(__cplusplus) && __cplusplus >= 201103L +#define __noreturn [[noreturn]] +#elif defined(__STDC_VERSION__) && __STDC_VERSION__ > 201000L +#define __noreturn _Noreturn +#elif defined(__GNUC__) +#define __noreturn __attribute__((__noreturn__)) +#else +#define __noreturn +#endif + #if __GNUC_PREREQ__(2, 96) #define __malloc_like __attribute__((__malloc__)) #define __pure __attribute__((__pure__)) |