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