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