[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