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