1 // RUN: %clang_cc1 %s -E -verify -fms-extensions 2 // expected-no-diagnostics 3 4 #pragma clang diagnostic ignored "-Wkeyword-macro" 5 f()6bool f() { 7 // Check that operators still work before redefining them. 8 #if compl 0 bitand 1 9 return true and false; 10 #endif 11 } 12 13 #ifdef and 14 #endif 15 16 // The second 'and' is a valid C++ operator name for '&&'. 17 #if defined and and defined(and) 18 #endif 19 20 // All c++ keywords should be #define-able in ms mode. 21 // (operators like "and" aren't normally, the rest always is.) 22 #define and 23 #define and_eq 24 #define alignas 25 #define alignof 26 #define asm 27 #define auto 28 #define bitand 29 #define bitor 30 #define bool 31 #define break 32 #define case 33 #define catch 34 #define char 35 #define char16_t 36 #define char32_t 37 #define class 38 #define compl 39 #define const 40 #define constexpr 41 #define const_cast 42 #define continue 43 #define decltype 44 #define default 45 #define delete 46 #define double 47 #define dynamic_cast 48 #define else 49 #define enum 50 #define explicit 51 #define export 52 #define extern 53 #define false 54 #define float 55 #define for 56 #define friend 57 #define goto 58 #define if 59 #define inline 60 #define int 61 #define long 62 #define mutable 63 #define namespace 64 #define new 65 #define noexcept 66 #define not 67 #define not_eq 68 #define nullptr 69 #define operator 70 #define or 71 #define or_eq 72 #define private 73 #define protected 74 #define public 75 #define register 76 #define reinterpret_cast 77 #define return 78 #define short 79 #define signed 80 #define sizeof 81 #define static 82 #define static_assert 83 #define static_cast 84 #define struct 85 #define switch 86 #define template 87 #define this 88 #define thread_local 89 #define throw 90 #define true 91 #define try 92 #define typedef 93 #define typeid 94 #define typename 95 #define union 96 #define unsigned 97 #define using 98 #define virtual 99 #define void 100 #define volatile 101 #define wchar_t 102 #define while 103 #define xor 104 #define xor_eq 105 106 // Check this is all properly defined away. 107 and 108 and_eq 109 alignas 110 alignof 111 asm 112 auto 113 bitand 114 bitor 115 bool 116 break 117 case 118 catch 119 char 120 char16_t 121 char32_t 122 class 123 compl 124 const 125 constexpr 126 const_cast 127 continue 128 decltype 129 default 130 delete 131 double 132 dynamic_cast 133 else 134 enum 135 explicit 136 export 137 extern 138 false 139 float 140 for 141 friend 142 goto 143 if 144 inline 145 int 146 long 147 mutable 148 namespace 149 new 150 noexcept 151 not 152 not_eq 153 nullptr 154 operator 155 or 156 or_eq 157 private 158 protected 159 public 160 register 161 reinterpret_cast 162 return 163 short 164 signed 165 sizeof 166 static 167 static_assert 168 static_cast 169 struct 170 switch 171 template 172 this 173 thread_local 174 throw 175 true 176 try 177 typedef 178 typeid 179 typename 180 union 181 unsigned 182 using 183 virtual 184 void 185 volatile 186 wchar_t 187 while 188 xor 189 xor_eq 190