Home | History | Annotate | Download | only in Preprocessor
      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