brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.3 KiB · 1a53f4f Raw
166 lines · c
1// Test that headers are not tripped up by the surrounding code defining various2// alphabetic macros. Also ensure that we don't swallow the definition of user3// provided macros (in other words, ensure that we push/pop correctly everywhere).4//5// The contents of this header is a lightly trimmed version of6// libcxx/test/libcxx/system_reserved_names.gen.py; additions to that testcase7// can be synced into this header as well.8 9#define SYSTEM_RESERVED_NAME This name should not be used in Clang headers10 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 these13// (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 _WIN3217#define _A SYSTEM_RESERVED_NAME18#define _B SYSTEM_RESERVED_NAME19#define _C SYSTEM_RESERVED_NAME20#define _D SYSTEM_RESERVED_NAME21#define _E SYSTEM_RESERVED_NAME22#define _F SYSTEM_RESERVED_NAME23#define _G SYSTEM_RESERVED_NAME24#define _H SYSTEM_RESERVED_NAME25#define _I SYSTEM_RESERVED_NAME26#define _J SYSTEM_RESERVED_NAME27#define _K SYSTEM_RESERVED_NAME28#define _L SYSTEM_RESERVED_NAME29#define _M SYSTEM_RESERVED_NAME30#define _N SYSTEM_RESERVED_NAME31#define _O SYSTEM_RESERVED_NAME32#define _P SYSTEM_RESERVED_NAME33#define _Q SYSTEM_RESERVED_NAME34#define _R SYSTEM_RESERVED_NAME35#define _S SYSTEM_RESERVED_NAME36#define _T SYSTEM_RESERVED_NAME37#define _U SYSTEM_RESERVED_NAME38#define _V SYSTEM_RESERVED_NAME39#define _W SYSTEM_RESERVED_NAME40#define _X SYSTEM_RESERVED_NAME41#define _Y SYSTEM_RESERVED_NAME42#define _Z SYSTEM_RESERVED_NAME43#endif44 45// FreeBSD's <sys/types.h> uses _M46//47#ifdef __FreeBSD__48# undef _M49#endif50 51// Test that libc++ doesn't use names that collide with FreeBSD system macros.52// newlib and picolibc also define these macros53#if !defined(__FreeBSD__) && !defined(_NEWLIB_VERSION)54#  define __null_sentinel SYSTEM_RESERVED_NAME55#  define __generic SYSTEM_RESERVED_NAME56#endif57 58// tchar.h defines these macros on Windows59#ifndef _WIN3260# define _UI   SYSTEM_RESERVED_NAME61# define _PUC  SYSTEM_RESERVED_NAME62# define _CPUC SYSTEM_RESERVED_NAME63# define _PC   SYSTEM_RESERVED_NAME64# define _CRPC SYSTEM_RESERVED_NAME65# define _CPC  SYSTEM_RESERVED_NAME66#endif67 68// yvals.h on MINGW defines this macro69#ifndef _WIN3270# define _C2 SYSTEM_RESERVED_NAME71#endif72 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 _WIN3276# define __allocator SYSTEM_RESERVED_NAME77# define __bound SYSTEM_RESERVED_NAME78# define __deallocate SYSTEM_RESERVED_NAME79# define __deref SYSTEM_RESERVED_NAME80# define __format_string SYSTEM_RESERVED_NAME81# define __full SYSTEM_RESERVED_NAME82# define __in SYSTEM_RESERVED_NAME83# define __inout SYSTEM_RESERVED_NAME84# define __nz SYSTEM_RESERVED_NAME85# define __out SYSTEM_RESERVED_NAME86# define __part SYSTEM_RESERVED_NAME87# define __post SYSTEM_RESERVED_NAME88# define __pre SYSTEM_RESERVED_NAME89#endif90 91// Newlib & picolibc use __input as a parameter name of a64l & l64a92#ifndef _NEWLIB_VERSION93# define __input SYSTEM_RESERVED_NAME94#endif95#define __output SYSTEM_RESERVED_NAME96 97#define __acquire SYSTEM_RESERVED_NAME98#define __release SYSTEM_RESERVED_NAME99 100// Android and FreeBSD use this for __attribute__((__unused__))101#if !defined(__FreeBSD__)  && !defined(__ANDROID__)102#define __unused SYSTEM_RESERVED_NAME103#endif104 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_NAME108#define Arg SYSTEM_RESERVED_NAME109#define Args SYSTEM_RESERVED_NAME110#define As SYSTEM_RESERVED_NAME111#define B SYSTEM_RESERVED_NAME112#define Bs SYSTEM_RESERVED_NAME113#define C SYSTEM_RESERVED_NAME114#define Cp SYSTEM_RESERVED_NAME115#define Cs SYSTEM_RESERVED_NAME116// Windows setjmp.h contains a struct member named 'D' on ARM/AArch64.117#ifndef _WIN32118# define D SYSTEM_RESERVED_NAME119#endif120#define Dp SYSTEM_RESERVED_NAME121#define Ds SYSTEM_RESERVED_NAME122#define E SYSTEM_RESERVED_NAME123#define Ep SYSTEM_RESERVED_NAME124#define Es SYSTEM_RESERVED_NAME125#define N SYSTEM_RESERVED_NAME126#define Np SYSTEM_RESERVED_NAME127#define Ns SYSTEM_RESERVED_NAME128#define R SYSTEM_RESERVED_NAME129#define Rp SYSTEM_RESERVED_NAME130#define Rs SYSTEM_RESERVED_NAME131#define T SYSTEM_RESERVED_NAME132#define Tp SYSTEM_RESERVED_NAME133#define Ts SYSTEM_RESERVED_NAME134#define Type SYSTEM_RESERVED_NAME135#define Types SYSTEM_RESERVED_NAME136#define U SYSTEM_RESERVED_NAME137#define Up SYSTEM_RESERVED_NAME138#define Us SYSTEM_RESERVED_NAME139#define V SYSTEM_RESERVED_NAME140#define Vp SYSTEM_RESERVED_NAME141#define Vs SYSTEM_RESERVED_NAME142#define X SYSTEM_RESERVED_NAME143#define Xp SYSTEM_RESERVED_NAME144#define Xs SYSTEM_RESERVED_NAME145 146// The classic Windows min/max macros147#define min SYSTEM_RESERVED_NAME148#define max SYSTEM_RESERVED_NAME149 150// Test to make sure curses has no conflicting macros with the standard library151#define move SYSTEM_RESERVED_NAME152#define erase SYSTEM_RESERVED_NAME153#define refresh SYSTEM_RESERVED_NAME154 155// Dinkumware libc ctype.h uses these definitions156#define _XA SYSTEM_RESERVED_NAME157#define _XS SYSTEM_RESERVED_NAME158#define _BB SYSTEM_RESERVED_NAME159#define _CN SYSTEM_RESERVED_NAME160#define _DI SYSTEM_RESERVED_NAME161#define _LO SYSTEM_RESERVED_NAME162#define _PU SYSTEM_RESERVED_NAME163#define _SP SYSTEM_RESERVED_NAME164#define _UP SYSTEM_RESERVED_NAME165#define _XD SYSTEM_RESERVED_NAME166