cxx_oper_keyword_ms_compat.cpp revision 6bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89
107a4b0488b03fc1590326ab7c812627a546feb14Nico Weber// RUN: %clang_cc1 %s -E -fms-compatibility 2f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber 3f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberbool f() { 4f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber // Check that operators still work before redefining them. 5f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#if compl 0 bitand 1 6f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber return true and false; 7f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#endif 8f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber} 9f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber 106bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#ifdef and 116bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#endif 126bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 136bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// The second 'and' is a valid C++ operator name for '&&'. 146bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#if defined and and defined(and) 156bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#endif 166bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 17f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber// All c++ keywords should be #define-able in ms mode. 18f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber// (operators like "and" aren't normally, the rest always is.) 19f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define and 20f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define and_eq 21f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define alignas 22f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define alignof 23f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define asm 24f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define auto 25f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define bitand 26f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define bitor 27f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define bool 28f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define break 29f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define case 30f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define catch 31f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define char 32f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define char16_t 33f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define char32_t 34f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define class 35f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define compl 36f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define const 37f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define constexpr 38f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define const_cast 39f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define continue 40f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define decltype 41f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define default 42f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define delete 43f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define double 44f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define dynamic_cast 45f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define else 46f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define enum 47f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define explicit 48f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define export 49f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define extern 50f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define false 51f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define float 52f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define for 53f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define friend 54f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define goto 55f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define if 56f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define inline 57f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define int 58f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define long 59f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define mutable 60f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define namespace 61f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define new 62f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define noexcept 63f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define not 64f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define not_eq 65f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define nullptr 66f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define operator 67f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define or 68f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define or_eq 69f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define private 70f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define protected 71f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define public 72f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define register 73f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define reinterpret_cast 74f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define return 75f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define short 76f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define signed 77f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define sizeof 78f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define static 79f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define static_assert 80f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define static_cast 81f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define struct 82f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define switch 83f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define template 84f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define this 85f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define thread_local 86f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define throw 87f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define true 88f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define try 89f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define typedef 90f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define typeid 91f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define typename 92f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define union 93f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define unsigned 94f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define using 95f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define virtual 96f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define void 97f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define volatile 98f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define wchar_t 99f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define while 100f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define xor 101f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define xor_eq 102f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber 103f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber// Check this is all properly defined away. 104f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberand 105f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberand_eq 106f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberalignas 107f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberalignof 108f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberasm 109f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberauto 110f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberbitand 111f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberbitor 112f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberbool 113f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberbreak 114f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webercase 115f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webercatch 116f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberchar 117f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberchar16_t 118f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberchar32_t 119f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberclass 120f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webercompl 121f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberconst 122f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberconstexpr 123f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberconst_cast 124f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webercontinue 125f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberdecltype 126f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberdefault 127f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberdelete 128f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberdouble 129f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberdynamic_cast 130f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberelse 131f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberenum 132f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberexplicit 133f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberexport 134f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberextern 135f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberfalse 136f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberfloat 137f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberfor 138f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberfriend 139f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webergoto 140f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberif 141f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberinline 142f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberint 143f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberlong 144f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webermutable 145f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webernamespace 146f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webernew 147f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webernoexcept 148f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webernot 149f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webernot_eq 150f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webernullptr 151f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberoperator 152f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberor 153f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberor_eq 154f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberprivate 155f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberprotected 156f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberpublic 157f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberregister 158f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberreinterpret_cast 159f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberreturn 160f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webershort 161f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webersigned 162f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webersizeof 163f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberstatic 164f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberstatic_assert 165f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberstatic_cast 166f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberstruct 167f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberswitch 168f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webertemplate 169f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberthis 170f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberthread_local 171f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberthrow 172f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webertrue 173f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webertry 174f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webertypedef 175f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webertypeid 176f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webertypename 177f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberunion 178f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberunsigned 179f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberusing 180f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webervirtual 181f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webervoid 182f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webervolatile 183f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberwchar_t 184f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberwhile 185f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberxor 186f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberxor_eq 187