1 | // RUN: %clang_cc1 %s -E -verify -fms-extensions |
2 | // expected-no-diagnostics |
3 | |
4 | #pragma clang diagnostic ignored "-Wkeyword-macro" |
5 | |
6 | bool 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 | |