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