|
| 1 | +// Test that headers are not tripped up by the surrounding code defining various |
| 2 | +// alphabetic macros. Also ensure that we don't swallow the definition of user |
| 3 | +// provided macros (in other words, ensure that we push/pop correctly everywhere). |
| 4 | +// |
| 5 | +// The contents of this header is a lightly trimmed version of |
| 6 | +// libcxx/test/libcxx/system_reserved_names.gen.py; additions to that testcase |
| 7 | +// can be synced into this header as well. |
| 8 | + |
| 9 | +#define SYSTEM_RESERVED_NAME This name should not be used in Clang headers |
| 10 | + |
| 11 | +// libc++ does not use single-letter names as a matter of principle. |
| 12 | +// But Windows' own <wchar.h>, <math.h>, and <exception> use many of these |
| 13 | +// (at least C,E,F,I,M,N,P,S,X,Y,Z) as uglified function parameter names, |
| 14 | +// so don't define these on Windows. |
| 15 | +// |
| 16 | +#ifndef _WIN32 |
| 17 | +#define _A SYSTEM_RESERVED_NAME |
| 18 | +#define _B SYSTEM_RESERVED_NAME |
| 19 | +#define _C SYSTEM_RESERVED_NAME |
| 20 | +#define _D SYSTEM_RESERVED_NAME |
| 21 | +#define _E SYSTEM_RESERVED_NAME |
| 22 | +#define _F SYSTEM_RESERVED_NAME |
| 23 | +#define _G SYSTEM_RESERVED_NAME |
| 24 | +#define _H SYSTEM_RESERVED_NAME |
| 25 | +#define _I SYSTEM_RESERVED_NAME |
| 26 | +#define _J SYSTEM_RESERVED_NAME |
| 27 | +#define _K SYSTEM_RESERVED_NAME |
| 28 | +#define _L SYSTEM_RESERVED_NAME |
| 29 | +#define _M SYSTEM_RESERVED_NAME |
| 30 | +#define _N SYSTEM_RESERVED_NAME |
| 31 | +#define _O SYSTEM_RESERVED_NAME |
| 32 | +#define _P SYSTEM_RESERVED_NAME |
| 33 | +#define _Q SYSTEM_RESERVED_NAME |
| 34 | +#define _R SYSTEM_RESERVED_NAME |
| 35 | +#define _S SYSTEM_RESERVED_NAME |
| 36 | +#define _T SYSTEM_RESERVED_NAME |
| 37 | +#define _U SYSTEM_RESERVED_NAME |
| 38 | +#define _V SYSTEM_RESERVED_NAME |
| 39 | +#define _W SYSTEM_RESERVED_NAME |
| 40 | +#define _X SYSTEM_RESERVED_NAME |
| 41 | +#define _Y SYSTEM_RESERVED_NAME |
| 42 | +#define _Z SYSTEM_RESERVED_NAME |
| 43 | +#endif |
| 44 | + |
| 45 | +// FreeBSD's <sys/types.h> uses _M |
| 46 | +// |
| 47 | +#ifdef __FreeBSD__ |
| 48 | +# undef _M |
| 49 | +#endif |
| 50 | + |
| 51 | +// Test that libc++ doesn't use names that collide with FreeBSD system macros. |
| 52 | +// newlib and picolibc also define these macros |
| 53 | +#if !defined(__FreeBSD__) && !defined(_NEWLIB_VERSION) |
| 54 | +# define __null_sentinel SYSTEM_RESERVED_NAME |
| 55 | +# define __generic SYSTEM_RESERVED_NAME |
| 56 | +#endif |
| 57 | + |
| 58 | +// tchar.h defines these macros on Windows |
| 59 | +#ifndef _WIN32 |
| 60 | +# define _UI SYSTEM_RESERVED_NAME |
| 61 | +# define _PUC SYSTEM_RESERVED_NAME |
| 62 | +# define _CPUC SYSTEM_RESERVED_NAME |
| 63 | +# define _PC SYSTEM_RESERVED_NAME |
| 64 | +# define _CRPC SYSTEM_RESERVED_NAME |
| 65 | +# define _CPC SYSTEM_RESERVED_NAME |
| 66 | +#endif |
| 67 | + |
| 68 | +// yvals.h on MINGW defines this macro |
| 69 | +#ifndef _WIN32 |
| 70 | +# define _C2 SYSTEM_RESERVED_NAME |
| 71 | +#endif |
| 72 | + |
| 73 | +// Test that libc++ doesn't use names that collide with Win32 API macros. |
| 74 | +// Obviously we can only define these on non-Windows platforms. |
| 75 | +#ifndef _WIN32 |
| 76 | +# define __allocator SYSTEM_RESERVED_NAME |
| 77 | +# define __bound SYSTEM_RESERVED_NAME |
| 78 | +# define __deallocate SYSTEM_RESERVED_NAME |
| 79 | +# define __deref SYSTEM_RESERVED_NAME |
| 80 | +# define __format_string SYSTEM_RESERVED_NAME |
| 81 | +# define __full SYSTEM_RESERVED_NAME |
| 82 | +# define __in SYSTEM_RESERVED_NAME |
| 83 | +# define __inout SYSTEM_RESERVED_NAME |
| 84 | +# define __nz SYSTEM_RESERVED_NAME |
| 85 | +# define __out SYSTEM_RESERVED_NAME |
| 86 | +# define __part SYSTEM_RESERVED_NAME |
| 87 | +# define __post SYSTEM_RESERVED_NAME |
| 88 | +# define __pre SYSTEM_RESERVED_NAME |
| 89 | +#endif |
| 90 | + |
| 91 | +// Newlib & picolibc use __input as a parameter name of a64l & l64a |
| 92 | +#ifndef _NEWLIB_VERSION |
| 93 | +# define __input SYSTEM_RESERVED_NAME |
| 94 | +#endif |
| 95 | +#define __output SYSTEM_RESERVED_NAME |
| 96 | + |
| 97 | +#define __acquire SYSTEM_RESERVED_NAME |
| 98 | +#define __release SYSTEM_RESERVED_NAME |
| 99 | + |
| 100 | +// Android and FreeBSD use this for __attribute__((__unused__)) |
| 101 | +#if !defined(__FreeBSD__) && !defined(__ANDROID__) |
| 102 | +#define __unused SYSTEM_RESERVED_NAME |
| 103 | +#endif |
| 104 | + |
| 105 | +// These names are not reserved, so the user can macro-define them. |
| 106 | +// These are intended to find improperly _Uglified template parameters. |
| 107 | +#define A SYSTEM_RESERVED_NAME |
| 108 | +#define Arg SYSTEM_RESERVED_NAME |
| 109 | +#define Args SYSTEM_RESERVED_NAME |
| 110 | +#define As SYSTEM_RESERVED_NAME |
| 111 | +#define B SYSTEM_RESERVED_NAME |
| 112 | +#define Bs SYSTEM_RESERVED_NAME |
| 113 | +#define C SYSTEM_RESERVED_NAME |
| 114 | +#define Cp SYSTEM_RESERVED_NAME |
| 115 | +#define Cs SYSTEM_RESERVED_NAME |
| 116 | +// Windows setjmp.h contains a struct member named 'D' on ARM/AArch64. |
| 117 | +#ifndef _WIN32 |
| 118 | +# define D SYSTEM_RESERVED_NAME |
| 119 | +#endif |
| 120 | +#define Dp SYSTEM_RESERVED_NAME |
| 121 | +#define Ds SYSTEM_RESERVED_NAME |
| 122 | +#define E SYSTEM_RESERVED_NAME |
| 123 | +#define Ep SYSTEM_RESERVED_NAME |
| 124 | +#define Es SYSTEM_RESERVED_NAME |
| 125 | +#define N SYSTEM_RESERVED_NAME |
| 126 | +#define Np SYSTEM_RESERVED_NAME |
| 127 | +#define Ns SYSTEM_RESERVED_NAME |
| 128 | +#define R SYSTEM_RESERVED_NAME |
| 129 | +#define Rp SYSTEM_RESERVED_NAME |
| 130 | +#define Rs SYSTEM_RESERVED_NAME |
| 131 | +#define T SYSTEM_RESERVED_NAME |
| 132 | +#define Tp SYSTEM_RESERVED_NAME |
| 133 | +#define Ts SYSTEM_RESERVED_NAME |
| 134 | +#define Type SYSTEM_RESERVED_NAME |
| 135 | +#define Types SYSTEM_RESERVED_NAME |
| 136 | +#define U SYSTEM_RESERVED_NAME |
| 137 | +#define Up SYSTEM_RESERVED_NAME |
| 138 | +#define Us SYSTEM_RESERVED_NAME |
| 139 | +#define V SYSTEM_RESERVED_NAME |
| 140 | +#define Vp SYSTEM_RESERVED_NAME |
| 141 | +#define Vs SYSTEM_RESERVED_NAME |
| 142 | +#define X SYSTEM_RESERVED_NAME |
| 143 | +#define Xp SYSTEM_RESERVED_NAME |
| 144 | +#define Xs SYSTEM_RESERVED_NAME |
| 145 | + |
| 146 | +// The classic Windows min/max macros |
| 147 | +#define min SYSTEM_RESERVED_NAME |
| 148 | +#define max SYSTEM_RESERVED_NAME |
| 149 | + |
| 150 | +// Test to make sure curses has no conflicting macros with the standard library |
| 151 | +#define move SYSTEM_RESERVED_NAME |
| 152 | +#define erase SYSTEM_RESERVED_NAME |
| 153 | +#define refresh SYSTEM_RESERVED_NAME |
| 154 | + |
| 155 | +// Dinkumware libc ctype.h uses these definitions |
| 156 | +#define _XA SYSTEM_RESERVED_NAME |
| 157 | +#define _XS SYSTEM_RESERVED_NAME |
| 158 | +#define _BB SYSTEM_RESERVED_NAME |
| 159 | +#define _CN SYSTEM_RESERVED_NAME |
| 160 | +#define _DI SYSTEM_RESERVED_NAME |
| 161 | +#define _LO SYSTEM_RESERVED_NAME |
| 162 | +#define _PU SYSTEM_RESERVED_NAME |
| 163 | +#define _SP SYSTEM_RESERVED_NAME |
| 164 | +#define _UP SYSTEM_RESERVED_NAME |
| 165 | +#define _XD SYSTEM_RESERVED_NAME |
0 commit comments