aboutsummaryrefslogtreecommitdiff
path: root/libcpp/system.h
diff options
context:
space:
mode:
authorMikhail Maltsev <maltsevm@gmail.com>2015-10-21 21:16:31 +0000
committerJeff Law <law@gcc.gnu.org>2015-10-21 15:16:31 -0600
commit7ec491c07be298679b27d5939accc30de01d62d0 (patch)
tree0e7336163388dbd3f57d87088d5662843ae8a6fd /libcpp/system.h
parent74bb77094f3b512e146f61c2e218c842f4a8d53b (diff)
downloadgcc-7ec491c07be298679b27d5939accc30de01d62d0.zip
gcc-7ec491c07be298679b27d5939accc30de01d62d0.tar.gz
gcc-7ec491c07be298679b27d5939accc30de01d62d0.tar.bz2
[PATCH 1/9] ENABLE_CHECKING refactoring
gcc/ * config.in: Regenerate. * configure: Regenerate. * configure.ac (CHECKING_P): Define. * system.h: Use CHECKING_P. libcpp/ * config.in: Regenerate. * configure: Regenerate. * configure.ac (CHECKING_P): Define. * system.h (fancy_abort): Declare. (abort): Define. (gcc_assert): Define. Use CHECKING_P. From-SVN: r229149
Diffstat (limited to 'libcpp/system.h')
-rw-r--r--libcpp/system.h21
1 files changed, 18 insertions, 3 deletions
diff --git a/libcpp/system.h b/libcpp/system.h
index 20f07bb..2250f10 100644
--- a/libcpp/system.h
+++ b/libcpp/system.h
@@ -391,13 +391,28 @@ extern void abort (void);
#define __builtin_expect(a, b) (a)
#endif
-#ifdef ENABLE_CHECKING
+/* Redefine abort to report an internal error w/o coredump, and
+ reporting the location of the error in the source file. */
+extern void fancy_abort (const char *, int, const char *) ATTRIBUTE_NORETURN;
+#define abort() fancy_abort (__FILE__, __LINE__, __FUNCTION__)
+
+/* Use gcc_assert(EXPR) to test invariants. */
+#if ENABLE_ASSERT_CHECKING
+#define gcc_assert(EXPR) \
+ ((void)(!(EXPR) ? fancy_abort (__FILE__, __LINE__, __FUNCTION__), 0 : 0))
+#elif (GCC_VERSION >= 4005)
+#define gcc_assert(EXPR) \
+ ((void)(__builtin_expect (!(EXPR), 0) ? __builtin_unreachable (), 0 : 0))
+#else
+/* Include EXPR, so that unused variable warnings do not occur. */
+#define gcc_assert(EXPR) ((void)(0 && (EXPR)))
+#endif
+
+#if CHECKING_P
#define gcc_checking_assert(EXPR) gcc_assert (EXPR)
-#define CHECKING_P 1
#else
/* N.B.: in release build EXPR is not evaluated. */
#define gcc_checking_assert(EXPR) ((void)(0 && (EXPR)))
-#define CHECKING_P 1
#endif
/* Provide a fake boolean type. We make no attempt to use the