forked from OSchip/llvm-project
e7228062b2
Standard C allows all standard headers to declare macros for all their functions. So after possibly including any standard header like <ctype.h>, it's perfectly normal for any and all of the functions it declares to be defined as macros. Standard C requires explicit `#undef` before using that identifier in a way that is not compatible with function-like macro definitions. The C standard's rules for this are extended to POSIX as well for the interfaces it defines, and it's the expected norm for nonstandard extensions declared by standard C library headers too. So far the only place this has come up for llvm-libc's code is with the isascii function in Fuchsia's libc. But other cases can arise for any standard (or common extension) function names that source code in llvm-libc is using in nonstandard ways, i.e. as C++ identifiers. The only correct and robust way to handle the possible inclusion of standard C library headers when building llvm-libc source code is to use `#undef` explicitly for each identifier before using it. The easy and obvious place to do that is in the per-function header. This requires that all code, such as test code, that might include any standard C library headers, e.g. via utils/UnitTest/Test.h, make sure to include those *first* before the per-function header. This change does that for isascii and its test. But it should be done uniformly for all the code and documented as a consistent convention so new implementation files are sure to get this right. Reviewed By: sivachandra Differential Revision: https://reviews.llvm.org/D94642 |
||
---|---|---|
.. | ||
CMakeLists.txt | ||
ctype_utils.h | ||
isalnum.cpp | ||
isalnum.h | ||
isalpha.cpp | ||
isalpha.h | ||
isascii.cpp | ||
isascii.h | ||
isblank.cpp | ||
isblank.h | ||
iscntrl.cpp | ||
iscntrl.h | ||
isdigit.cpp | ||
isdigit.h | ||
isgraph.cpp | ||
isgraph.h | ||
islower.cpp | ||
islower.h | ||
isprint.cpp | ||
isprint.h | ||
ispunct.cpp | ||
ispunct.h | ||
isspace.cpp | ||
isspace.h | ||
isupper.cpp | ||
isupper.h | ||
isxdigit.cpp | ||
isxdigit.h | ||
toascii.cpp | ||
toascii.h | ||
tolower.cpp | ||
tolower.h | ||
toupper.cpp | ||
toupper.h |