diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2015-02-05 15:52:20 -0800 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2015-02-07 14:43:27 -0800 |
commit | 3999d26ead93990b244ada078073fb58fb8bb5be (patch) | |
tree | fb49ba47c9d88204c23135ef44ac4adf7919120e | |
parent | f96ec27aa9f8fe871973b898ee407fe17681b6a7 (diff) | |
download | glibc-3999d26ead93990b244ada078073fb58fb8bb5be.tar.gz glibc-3999d26ead93990b244ada078073fb58fb8bb5be.tar.xz glibc-3999d26ead93990b244ada078073fb58fb8bb5be.zip |
Add ersatz _Static_assert on older C hosts
* misc/sys/cdefs.h (_Static_assert): Define a substitute, if on a pre-C11 C platform that is not known to support _Static_assert.
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | assert/assert.h | 1 | ||||
-rw-r--r-- | misc/sys/cdefs.h | 8 |
3 files changed, 14 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog index ade23843ac..4584975f3e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2015-02-07 Paul Eggert <eggert@cs.ucla.edu> + + Add ersatz _Static_assert on older C hosts + * misc/sys/cdefs.h (_Static_assert): Define a substitute, if on a + pre-C11 C platform that is not known to support _Static_assert. + 2015-02-07 Richard Braun <rbraun@sceen.net> * hurd/hurd/signal.h (_hurd_critical_section_lock): Don't unlock diff --git a/assert/assert.h b/assert/assert.h index ae777931c5..d04c58cc8a 100644 --- a/assert/assert.h +++ b/assert/assert.h @@ -113,7 +113,6 @@ __END_DECLS #if defined __USE_ISOC11 && !defined __cplusplus -/* Static assertion. Requires support in the compiler. */ # undef static_assert # define static_assert _Static_assert #endif diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h index 09ee352e1f..99e94cce86 100644 --- a/misc/sys/cdefs.h +++ b/misc/sys/cdefs.h @@ -399,6 +399,14 @@ # endif #endif +#if (!defined _Static_assert && !defined __cplusplus \ + && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \ + && (!__GNUC_PREREQ (4, 6) || defined __STRICT_ANSI__)) +# define _Static_assert(expr, diagnostic) \ + extern int (*__Static_assert_function (void)) \ + [!!sizeof (struct { int __error_if_negative: (expr) ? 2 : -1; })] +#endif + #include <bits/wordsize.h> #if defined __LONG_DOUBLE_MATH_OPTIONAL && defined __NO_LONG_DOUBLE_MATH |