diff --git a/libcxx/test/libcxx/nasty_macros.gen.py b/libcxx/test/libcxx/nasty_macros.gen.py deleted file mode 100644 --- a/libcxx/test/libcxx/nasty_macros.gen.py +++ /dev/null @@ -1,158 +0,0 @@ -#===----------------------------------------------------------------------===## -# -# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -# See https://llvm.org/LICENSE.txt for license information. -# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -# -#===----------------------------------------------------------------------===## - -# Test that headers are not tripped up by the surrounding code defining various -# alphabetic macros. - -# RUN: %{python} %s %{libcxx}/utils - -import sys -sys.path.append(sys.argv[1]) -from libcxx.test.header_information import lit_header_restrictions, public_headers - -for header in public_headers: - print(f"""\ -//--- {header}.compile.pass.cpp -{lit_header_restrictions.get(header, '')} - -#define NASTY_MACRO This should not be expanded!!! - -// libc++ does not use single-letter names as a matter of principle. -// But Windows' own , , and use many of these -// (at least C,E,F,I,M,N,P,S,X,Y,Z) as uglified function parameter names, -// so don't define these on Windows. -// -#ifndef _WIN32 -#define _A NASTY_MACRO -#define _B NASTY_MACRO -#define _C NASTY_MACRO -#define _D NASTY_MACRO -#define _E NASTY_MACRO -#define _F NASTY_MACRO -#define _G NASTY_MACRO -#define _H NASTY_MACRO -#define _I NASTY_MACRO -#define _J NASTY_MACRO -#define _K NASTY_MACRO -#define _L NASTY_MACRO -#define _M NASTY_MACRO -#define _N NASTY_MACRO -#define _O NASTY_MACRO -#define _P NASTY_MACRO -#define _Q NASTY_MACRO -#define _R NASTY_MACRO -#define _S NASTY_MACRO -#define _T NASTY_MACRO -#define _U NASTY_MACRO -#define _V NASTY_MACRO -#define _W NASTY_MACRO -#define _X NASTY_MACRO -#define _Y NASTY_MACRO -#define _Z NASTY_MACRO -#endif - -// FreeBSD's uses _M -// -#ifdef __FreeBSD__ -# undef _M -#endif - -// Test that libc++ doesn't use names that collide with FreeBSD system macros. -#ifndef __FreeBSD__ -# define __null_sentinel NASTY_MACRO -# define __generic -#endif - -// tchar.h defines these macros on Windows -#ifndef _WIN32 -# define _UI NASTY_MACRO -# define _PUC NASTY_MACRO -# define _CPUC NASTY_MACRO -# define _PC NASTY_MACRO -# define _CRPC NASTY_MACRO -# define _CPC NASTY_MACRO -#endif - -// yvals.h on MINGW defines this macro -#ifndef _WIN32 -# define _C2 NASTY_MACRO -#endif - -// Test that libc++ doesn't use names that collide with Win32 API macros. -// Obviously we can only define these on non-Windows platforms. -#ifndef _WIN32 -# define __allocator NASTY_MACRO -# define __bound NASTY_MACRO -# define __deallocate NASTY_MACRO -# define __deref NASTY_MACRO -# define __format_string NASTY_MACRO -# define __full NASTY_MACRO -# define __in NASTY_MACRO -# define __inout NASTY_MACRO -# define __nz NASTY_MACRO -# define __out NASTY_MACRO -# define __part NASTY_MACRO -# define __post NASTY_MACRO -# define __pre NASTY_MACRO -#endif - -#define __input NASTY_MACRO -#define __output NASTY_MACRO - -#define __acquire NASTY_MACRO -#define __release NASTY_MACRO - -// These names are not reserved, so the user can macro-define them. -// These are intended to find improperly _Uglified template parameters. -#define A NASTY_MACRO -#define Arg NASTY_MACRO -#define Args NASTY_MACRO -#define As NASTY_MACRO -#define B NASTY_MACRO -#define Bs NASTY_MACRO -#define C NASTY_MACRO -#define Cp NASTY_MACRO -#define Cs NASTY_MACRO -// Windows setjmp.h contains a struct member named 'D' on ARM/AArch64. -#ifndef _WIN32 -# define D NASTY_MACRO -#endif -#define Dp NASTY_MACRO -#define Ds NASTY_MACRO -#define E NASTY_MACRO -#define Ep NASTY_MACRO -#define Es NASTY_MACRO -#define R NASTY_MACRO -#define Rp NASTY_MACRO -#define Rs NASTY_MACRO -#define T NASTY_MACRO -#define Tp NASTY_MACRO -#define Ts NASTY_MACRO -#define Type NASTY_MACRO -#define Types NASTY_MACRO -#define U NASTY_MACRO -#define Up NASTY_MACRO -#define Us NASTY_MACRO -#define V NASTY_MACRO -#define Vp NASTY_MACRO -#define Vs NASTY_MACRO -#define X NASTY_MACRO -#define Xp NASTY_MACRO -#define Xs NASTY_MACRO - -// The classic Windows min/max macros -#define min NASTY_MACRO -#define max NASTY_MACRO - -// Test to make sure curses has no conflicting macros with the standard library -#define move NASTY_MACRO -#define erase NASTY_MACRO -#define refresh NASTY_MACRO - -#include <{header}> -""") diff --git a/libcxx/test/libcxx/reserved_macro_names.gen.py b/libcxx/test/libcxx/reserved_macro_names.gen.py new file mode 100644 --- /dev/null +++ b/libcxx/test/libcxx/reserved_macro_names.gen.py @@ -0,0 +1,158 @@ +#===----------------------------------------------------------------------===## +# +# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +# See https://llvm.org/LICENSE.txt for license information. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +# +#===----------------------------------------------------------------------===## + +# Test that headers are not tripped up by the surrounding code defining various +# alphabetic macros. + +# RUN: %{python} %s %{libcxx}/utils + +import sys +sys.path.append(sys.argv[1]) +from libcxx.test.header_information import lit_header_restrictions, public_headers + +for header in public_headers: + print(f"""\ +//--- {header}.compile.pass.cpp +{lit_header_restrictions.get(header, '')} + +#define RESERVED_MACRO_NAME This name should not be used in libc++ + +// libc++ does not use single-letter names as a matter of principle. +// But Windows' own , , and use many of these +// (at least C,E,F,I,M,N,P,S,X,Y,Z) as uglified function parameter names, +// so don't define these on Windows. +// +#ifndef _WIN32 +#define _A RESERVED_MACRO_NAME +#define _B RESERVED_MACRO_NAME +#define _C RESERVED_MACRO_NAME +#define _D RESERVED_MACRO_NAME +#define _E RESERVED_MACRO_NAME +#define _F RESERVED_MACRO_NAME +#define _G RESERVED_MACRO_NAME +#define _H RESERVED_MACRO_NAME +#define _I RESERVED_MACRO_NAME +#define _J RESERVED_MACRO_NAME +#define _K RESERVED_MACRO_NAME +#define _L RESERVED_MACRO_NAME +#define _M RESERVED_MACRO_NAME +#define _N RESERVED_MACRO_NAME +#define _O RESERVED_MACRO_NAME +#define _P RESERVED_MACRO_NAME +#define _Q RESERVED_MACRO_NAME +#define _R RESERVED_MACRO_NAME +#define _S RESERVED_MACRO_NAME +#define _T RESERVED_MACRO_NAME +#define _U RESERVED_MACRO_NAME +#define _V RESERVED_MACRO_NAME +#define _W RESERVED_MACRO_NAME +#define _X RESERVED_MACRO_NAME +#define _Y RESERVED_MACRO_NAME +#define _Z RESERVED_MACRO_NAME +#endif + +// FreeBSD's uses _M +// +#ifdef __FreeBSD__ +# undef _M +#endif + +// Test that libc++ doesn't use names that collide with FreeBSD system macros. +#ifndef __FreeBSD__ +# define __null_sentinel RESERVED_MACRO_NAME +# define __generic RESERVED_MACRO_NAME +#endif + +// tchar.h defines these macros on Windows +#ifndef _WIN32 +# define _UI RESERVED_MACRO_NAME +# define _PUC RESERVED_MACRO_NAME +# define _CPUC RESERVED_MACRO_NAME +# define _PC RESERVED_MACRO_NAME +# define _CRPC RESERVED_MACRO_NAME +# define _CPC RESERVED_MACRO_NAME +#endif + +// yvals.h on MINGW defines this macro +#ifndef _WIN32 +# define _C2 RESERVED_MACRO_NAME +#endif + +// Test that libc++ doesn't use names that collide with Win32 API macros. +// Obviously we can only define these on non-Windows platforms. +#ifndef _WIN32 +# define __allocator RESERVED_MACRO_NAME +# define __bound RESERVED_MACRO_NAME +# define __deallocate RESERVED_MACRO_NAME +# define __deref RESERVED_MACRO_NAME +# define __format_string RESERVED_MACRO_NAME +# define __full RESERVED_MACRO_NAME +# define __in RESERVED_MACRO_NAME +# define __inout RESERVED_MACRO_NAME +# define __nz RESERVED_MACRO_NAME +# define __out RESERVED_MACRO_NAME +# define __part RESERVED_MACRO_NAME +# define __post RESERVED_MACRO_NAME +# define __pre RESERVED_MACRO_NAME +#endif + +#define __input RESERVED_MACRO_NAME +#define __output RESERVED_MACRO_NAME + +#define __acquire RESERVED_MACRO_NAME +#define __release RESERVED_MACRO_NAME + +// These names are not reserved, so the user can macro-define them. +// These are intended to find improperly _Uglified template parameters. +#define A RESERVED_MACRO_NAME +#define Arg RESERVED_MACRO_NAME +#define Args RESERVED_MACRO_NAME +#define As RESERVED_MACRO_NAME +#define B RESERVED_MACRO_NAME +#define Bs RESERVED_MACRO_NAME +#define C RESERVED_MACRO_NAME +#define Cp RESERVED_MACRO_NAME +#define Cs RESERVED_MACRO_NAME +// Windows setjmp.h contains a struct member named 'D' on ARM/AArch64. +#ifndef _WIN32 +# define D RESERVED_MACRO_NAME +#endif +#define Dp RESERVED_MACRO_NAME +#define Ds RESERVED_MACRO_NAME +#define E RESERVED_MACRO_NAME +#define Ep RESERVED_MACRO_NAME +#define Es RESERVED_MACRO_NAME +#define R RESERVED_MACRO_NAME +#define Rp RESERVED_MACRO_NAME +#define Rs RESERVED_MACRO_NAME +#define T RESERVED_MACRO_NAME +#define Tp RESERVED_MACRO_NAME +#define Ts RESERVED_MACRO_NAME +#define Type RESERVED_MACRO_NAME +#define Types RESERVED_MACRO_NAME +#define U RESERVED_MACRO_NAME +#define Up RESERVED_MACRO_NAME +#define Us RESERVED_MACRO_NAME +#define V RESERVED_MACRO_NAME +#define Vp RESERVED_MACRO_NAME +#define Vs RESERVED_MACRO_NAME +#define X RESERVED_MACRO_NAME +#define Xp RESERVED_MACRO_NAME +#define Xs RESERVED_MACRO_NAME + +// The classic Windows min/max macros +#define min RESERVED_MACRO_NAME +#define max RESERVED_MACRO_NAME + +// Test to make sure curses has no conflicting macros with the standard library +#define move RESERVED_MACRO_NAME +#define erase RESERVED_MACRO_NAME +#define refresh RESERVED_MACRO_NAME + +#include <{header}> +""")