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