| // RUN: %clang_cc1 %s -E -verify -fms-extensions |
| // expected-no-diagnostics |
| |
| #pragma clang diagnostic ignored "-Wkeyword-macro" |
| |
| bool f() { |
| // Check that operators still work before redefining them. |
| #if compl 0 bitand 1 |
| return true and false; |
| #endif |
| } |
| |
| #ifdef and |
| #endif |
| |
| // The second 'and' is a valid C++ operator name for '&&'. |
| #if defined and and defined(and) |
| #endif |
| |
| // All c++ keywords should be #define-able in ms mode. |
| // (operators like "and" aren't normally, the rest always is.) |
| #define and |
| #define and_eq |
| #define alignas |
| #define alignof |
| #define asm |
| #define auto |
| #define bitand |
| #define bitor |
| #define bool |
| #define break |
| #define case |
| #define catch |
| #define char |
| #define char16_t |
| #define char32_t |
| #define class |
| #define compl |
| #define const |
| #define constexpr |
| #define const_cast |
| #define continue |
| #define decltype |
| #define default |
| #define delete |
| #define double |
| #define dynamic_cast |
| #define else |
| #define enum |
| #define explicit |
| #define export |
| #define extern |
| #define false |
| #define float |
| #define for |
| #define friend |
| #define goto |
| #define if |
| #define inline |
| #define int |
| #define long |
| #define mutable |
| #define namespace |
| #define new |
| #define noexcept |
| #define not |
| #define not_eq |
| #define nullptr |
| #define operator |
| #define or |
| #define or_eq |
| #define private |
| #define protected |
| #define public |
| #define register |
| #define reinterpret_cast |
| #define return |
| #define short |
| #define signed |
| #define sizeof |
| #define static |
| #define static_assert |
| #define static_cast |
| #define struct |
| #define switch |
| #define template |
| #define this |
| #define thread_local |
| #define throw |
| #define true |
| #define try |
| #define typedef |
| #define typeid |
| #define typename |
| #define union |
| #define unsigned |
| #define using |
| #define virtual |
| #define void |
| #define volatile |
| #define wchar_t |
| #define while |
| #define xor |
| #define xor_eq |
| |
| // Check this is all properly defined away. |
| and |
| and_eq |
| alignas |
| alignof |
| asm |
| auto |
| bitand |
| bitor |
| bool |
| break |
| case |
| catch |
| char |
| char16_t |
| char32_t |
| class |
| compl |
| const |
| constexpr |
| const_cast |
| continue |
| decltype |
| default |
| delete |
| double |
| dynamic_cast |
| else |
| enum |
| explicit |
| export |
| extern |
| false |
| float |
| for |
| friend |
| goto |
| if |
| inline |
| int |
| long |
| mutable |
| namespace |
| new |
| noexcept |
| not |
| not_eq |
| nullptr |
| operator |
| or |
| or_eq |
| private |
| protected |
| public |
| register |
| reinterpret_cast |
| return |
| short |
| signed |
| sizeof |
| static |
| static_assert |
| static_cast |
| struct |
| switch |
| template |
| this |
| thread_local |
| throw |
| true |
| try |
| typedef |
| typeid |
| typename |
| union |
| unsigned |
| using |
| virtual |
| void |
| volatile |
| wchar_t |
| while |
| xor |
| xor_eq |