diff options
| author | Roland McGrath <mcgrathr@google.com> | 2021-01-13 17:22:45 -0800 |
|---|---|---|
| committer | Roland McGrath <mcgrathr@google.com> | 2021-01-14 13:25:05 -0800 |
| commit | e7228062b2bb87abf762abcb77668452a1ed35d4 (patch) | |
| tree | f5e1b6bcf871cb35b80932e31d3a596c71d74bb9 /llvm/lib/Support/Program.cpp | |
| parent | 0975604cc013b51ef2435199bd74a6d635b11150 (diff) | |
| download | llvm-e7228062b2bb87abf762abcb77668452a1ed35d4.zip llvm-e7228062b2bb87abf762abcb77668452a1ed35d4.tar.gz llvm-e7228062b2bb87abf762abcb77668452a1ed35d4.tar.bz2 | |
[libc] Use #undef isascii in specific header
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
Diffstat (limited to 'llvm/lib/Support/Program.cpp')
0 files changed, 0 insertions, 0 deletions
