aboutsummaryrefslogtreecommitdiff
path: root/sys/sys/cdefs.h
diff options
context:
space:
mode:
authorDavid Chisnall <theraven@FreeBSD.org>2011-12-07 15:25:48 +0000
committerDavid Chisnall <theraven@FreeBSD.org>2011-12-07 15:25:48 +0000
commit0a31efe016d28d5f3bee6c24591831149d760650 (patch)
tree8a6278cec83d284c97957bb6df5b9f2afcd30e17 /sys/sys/cdefs.h
parent6d18ea8ff9db34263bf3447e06d1438e284d7540 (diff)
downloadsrc-0a31efe016d28d5f3bee6c24591831149d760650.tar.gz
src-0a31efe016d28d5f3bee6c24591831149d760650.zip
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)
Notes
Notes: svn path=/head/; revision=228322
Diffstat (limited to 'sys/sys/cdefs.h')
-rw-r--r--sys/sys/cdefs.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/sys/sys/cdefs.h b/sys/sys/cdefs.h
index 495daf28e52e..ca485b3dcb91 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__))