[RFC][PATCH v3] Initial support for C11 Annex K Bounds checking functions
Paul Eggert
eggert@cs.ucla.edu
Fri Jun 14 16:10:00 GMT 2013
On 06/14/2013 03:45 AM, Ulrich Bayer wrote:
> we should not try to check for inconsistent definitions of
> __STDC_WANT_LIB_EXT1__ but check whether Annex K functionality is included consistently
> or not inside a preprocessor translation unit.
Sure, that's fine and is arguably a better interpretation anyway.
The implementation you gave is a bit long, though -- here's something
simpler:
/* Check that C11 Annex K declarations are consistently either included
or excluded for all standard headers. */
#if defined __STDC_WANT_LIB_EXT1__ && __STDC_WANT_LIB_EXT1__ == 1
# define __GLIBC_USE_LIB_EXT1 1
#else
# define __GLIBC_USE_LIB_EXT1 0
#endif
(Heh. This is probably what the standard-writers had in mind, if
they thought about the problem at all....)
The rest of the .h file can use "#if __GLIBC_USE_LIB_EXT1" to decide
whether to include _s declarations.
> For example, the draft implementation will not catch the following inconsistent definition:
> #define __STDC_WANT_LIB_EXT1__ 2
> #include "string.h">
> #define __STDC_WANT_LIB_EXT1__ 0
> #include "stdlib.h"
That's OK in my book, since #defining __STDC_WANT_LIB_EXT1__
to a value other than 0 or 1 has undefined behavior. Admittedly
there is some ambiguity here, since it's not clear whether the
"is defined differently" rule trumps the undefined-behavior rule;
but as we can easily implement the check if we only have to worry about
0 or 1 or not-#defined, let's do that, and we can save for later
the fine points of whether C-standard pedanticism requires GCC extensions.
More information about the Libc-alpha
mailing list