1*67e74705SXin Li // RUN: %clang_cc1 -std=c++03 -fsyntax-only %s 2*67e74705SXin Li // RUN: %clang_cc1 -std=c++11 -DCXX11 -fsyntax-only %s 3*67e74705SXin Li // RUN: %clang_cc1 -std=c++14 -fconcepts-ts -DCXX11 -DCONCEPTS -fsyntax-only %s 4*67e74705SXin Li // RUN: %clang_cc1 -std=c++03 -fdeclspec -DDECLSPEC -fsyntax-only %s 5*67e74705SXin Li // RUN: %clang_cc1 -std=c++03 -fms-extensions -DDECLSPEC -fsyntax-only %s 6*67e74705SXin Li // RUN: %clang_cc1 -std=c++03 -fborland-extensions -DDECLSPEC -fsyntax-only %s 7*67e74705SXin Li // RUN: %clang_cc1 -std=c++03 -fms-extensions -fno-declspec -fsyntax-only %s 8*67e74705SXin Li // RUN: %clang_cc1 -std=c++03 -fborland-extensions -fno-declspec -fsyntax-only %s 9*67e74705SXin Li // RUN: %clang_cc1 -std=c++03 -fno-declspec -fdeclspec -DDECLSPEC -fsyntax-only %s 10*67e74705SXin Li // RUN: %clang_cc1 -std=c++03 -fdeclspec -fno-declspec -fsyntax-only %s 11*67e74705SXin Li // RUN: %clang_cc1 -std=c++03 -fms-extensions -fno-declspec -fdeclspec -DDECLSPEC -fsyntax-only %s 12*67e74705SXin Li // RUN: %clang_cc1 -std=c++03 -fms-extensions -fdeclspec -fno-declspec -fsyntax-only %s 13*67e74705SXin Li // RUN: %clang -std=c++03 -target i686-windows-msvc -DDECLSPEC -fsyntax-only %s 14*67e74705SXin Li // RUN: %clang -std=c++03 -target x86_64-scei-ps4 -DDECLSPEC -fsyntax-only %s 15*67e74705SXin Li // RUN: %clang -std=c++03 -target i686-windows-msvc -fno-declspec -fsyntax-only %s 16*67e74705SXin Li // RUN: %clang -std=c++03 -target x86_64-scei-ps4 -fno-declspec -fsyntax-only %s 17*67e74705SXin Li 18*67e74705SXin Li #define IS_KEYWORD(NAME) _Static_assert(!__is_identifier(NAME), #NAME) 19*67e74705SXin Li #define NOT_KEYWORD(NAME) _Static_assert(__is_identifier(NAME), #NAME) 20*67e74705SXin Li #define IS_TYPE(NAME) void is_##NAME##_type() { int f(NAME); } 21*67e74705SXin Li 22*67e74705SXin Li #ifdef CONCEPTS 23*67e74705SXin Li #define CONCEPTS_KEYWORD(NAME) IS_KEYWORD(NAME) 24*67e74705SXin Li #else 25*67e74705SXin Li #define CONCEPTS_KEYWORD(NAME) NOT_KEYWORD(NAME) 26*67e74705SXin Li #endif 27*67e74705SXin Li 28*67e74705SXin Li #ifdef DECLSPEC 29*67e74705SXin Li #define DECLSPEC_KEYWORD(NAME) IS_KEYWORD(NAME) 30*67e74705SXin Li #else 31*67e74705SXin Li #define DECLSPEC_KEYWORD(NAME) NOT_KEYWORD(NAME) 32*67e74705SXin Li #endif 33*67e74705SXin Li 34*67e74705SXin Li #ifdef CXX11 35*67e74705SXin Li #define CXX11_KEYWORD(NAME) IS_KEYWORD(NAME) 36*67e74705SXin Li #define CXX11_TYPE(NAME) IS_TYPE(NAME) 37*67e74705SXin Li #else 38*67e74705SXin Li #define CXX11_KEYWORD(NAME) NOT_KEYWORD(NAME) 39*67e74705SXin Li #define CXX11_TYPE(NAME) 40*67e74705SXin Li #endif 41*67e74705SXin Li 42*67e74705SXin Li // C++11 keywords 43*67e74705SXin Li CXX11_KEYWORD(nullptr); 44*67e74705SXin Li CXX11_KEYWORD(decltype); 45*67e74705SXin Li CXX11_KEYWORD(alignof); 46*67e74705SXin Li CXX11_KEYWORD(alignas); 47*67e74705SXin Li CXX11_KEYWORD(char16_t); 48*67e74705SXin Li CXX11_TYPE(char16_t); 49*67e74705SXin Li CXX11_KEYWORD(char32_t); 50*67e74705SXin Li CXX11_TYPE(char32_t); 51*67e74705SXin Li CXX11_KEYWORD(constexpr); 52*67e74705SXin Li CXX11_KEYWORD(noexcept); 53*67e74705SXin Li CXX11_KEYWORD(static_assert); 54*67e74705SXin Li CXX11_KEYWORD(thread_local); 55*67e74705SXin Li 56*67e74705SXin Li // Concepts TS keywords 57*67e74705SXin Li CONCEPTS_KEYWORD(concept); 58*67e74705SXin Li CONCEPTS_KEYWORD(requires); 59*67e74705SXin Li 60*67e74705SXin Li // __declspec extension 61*67e74705SXin Li DECLSPEC_KEYWORD(__declspec); 62*67e74705SXin Li 63*67e74705SXin Li // Clang extension 64*67e74705SXin Li IS_KEYWORD(__char16_t); 65*67e74705SXin Li IS_TYPE(__char16_t); 66*67e74705SXin Li IS_KEYWORD(__char32_t); 67*67e74705SXin Li IS_TYPE(__char32_t); 68