summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>2005-09-05 16:57:40 +0000
committerJim Meyering <jim@meyering.net>2005-09-05 16:57:40 +0000
commitc862959a9d28a848d4766794cf02999aab172095 (patch)
tree26f2b6edcdc48af3d85cc368bb5b0b96714f48ca /lib
parent2b661b0366ed05abb303269780207a13c190ad18 (diff)
downloadcoreutils-c862959a9d28a848d4766794cf02999aab172095.tar.xz
(__builtin_constant_p) [__GNUC__ <= 2]: Define to 1.
(verify_type__) [verify_error_if_non_const__]: New member/test, to help detect when verify or verify_expr is mistakenly passed a non-constant argument within a function.
Diffstat (limited to 'lib')
-rw-r--r--lib/verify.h12
1 files changed, 11 insertions, 1 deletions
diff --git a/lib/verify.h b/lib/verify.h
index 4461f4e47..099d27061 100644
--- a/lib/verify.h
+++ b/lib/verify.h
@@ -24,13 +24,23 @@
# define GL_CONCAT0(x, y) x##y
# define GL_CONCAT(x, y) GL_CONCAT0 (x, y)
+/* If gcc predates 3.0, then disable the check below to ensure
+ that verify_type__'s argument is a constant expression. */
+# if __GNUC__ <= 2
+# defined __builtin_constant_p(R) 1
+# endif
+
/* A type that is valid if and only if R is nonzero.
R should be an integer constant expression.
verify_type__ and verify_error_if_negative_size__ are symbols that
are private to this header file. */
# define verify_type__(R) \
- struct { int verify_error_if_negative_size__[(R) ? 1 : -1]; }
+ struct { \
+ /* Provoke a compile-time failure if R is a non-constant expression. */ \
+ int verify_error_if_non_const__[__builtin_constant_p (R) ? 1 : -1]; \
+ /* Provoke a compile-time failure if R is nonzero. */ \
+ int verify_error_if_negative_size__[(R) ? 1 : -1]; }
/* Verify requirement R at compile-time, as a declaration.
R should be an integer constant expression.