16bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// RUN: %clang_cc1 -std=c++03 -fsyntax-only %s 26bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// RUN: %clang_cc1 -std=c++11 -DCXX11 -fsyntax-only %s 3b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// RUN: %clang_cc1 -std=c++14 -fconcepts-ts -DCXX11 -DCONCEPTS -fsyntax-only %s 4a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// RUN: %clang_cc1 -std=c++03 -fdeclspec -DDECLSPEC -fsyntax-only %s 5a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// RUN: %clang_cc1 -std=c++03 -fms-extensions -DDECLSPEC -fsyntax-only %s 6a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// RUN: %clang_cc1 -std=c++03 -fborland-extensions -DDECLSPEC -fsyntax-only %s 7a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// RUN: %clang_cc1 -std=c++03 -fms-extensions -fno-declspec -fsyntax-only %s 8a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// RUN: %clang_cc1 -std=c++03 -fborland-extensions -fno-declspec -fsyntax-only %s 9a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// RUN: %clang_cc1 -std=c++03 -fno-declspec -fdeclspec -DDECLSPEC -fsyntax-only %s 10a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// RUN: %clang_cc1 -std=c++03 -fdeclspec -fno-declspec -fsyntax-only %s 11a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// RUN: %clang_cc1 -std=c++03 -fms-extensions -fno-declspec -fdeclspec -DDECLSPEC -fsyntax-only %s 12a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// RUN: %clang_cc1 -std=c++03 -fms-extensions -fdeclspec -fno-declspec -fsyntax-only %s 13a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// RUN: %clang -std=c++03 -target i686-windows-msvc -DDECLSPEC -fsyntax-only %s 14a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// RUN: %clang -std=c++03 -target x86_64-scei-ps4 -DDECLSPEC -fsyntax-only %s 15a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// RUN: %clang -std=c++03 -target i686-windows-msvc -fno-declspec -fsyntax-only %s 16a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// RUN: %clang -std=c++03 -target x86_64-scei-ps4 -fno-declspec -fsyntax-only %s 176bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 186bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#define IS_KEYWORD(NAME) _Static_assert(!__is_identifier(NAME), #NAME) 196bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#define NOT_KEYWORD(NAME) _Static_assert(__is_identifier(NAME), #NAME) 206bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#define IS_TYPE(NAME) void is_##NAME##_type() { int f(NAME); } 216bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 22b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar#ifdef CONCEPTS 23b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar#define CONCEPTS_KEYWORD(NAME) IS_KEYWORD(NAME) 24b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar#else 25b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar#define CONCEPTS_KEYWORD(NAME) NOT_KEYWORD(NAME) 26b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar#endif 27b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar 28a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar#ifdef DECLSPEC 29a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar#define DECLSPEC_KEYWORD(NAME) IS_KEYWORD(NAME) 30a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar#else 31a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar#define DECLSPEC_KEYWORD(NAME) NOT_KEYWORD(NAME) 32a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar#endif 33a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar 346bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#ifdef CXX11 356bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#define CXX11_KEYWORD(NAME) IS_KEYWORD(NAME) 366bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#define CXX11_TYPE(NAME) IS_TYPE(NAME) 376bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#else 386bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#define CXX11_KEYWORD(NAME) NOT_KEYWORD(NAME) 396bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#define CXX11_TYPE(NAME) 406bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#endif 416bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 426bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// C++11 keywords 436bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesCXX11_KEYWORD(nullptr); 446bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesCXX11_KEYWORD(decltype); 456bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesCXX11_KEYWORD(alignof); 466bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesCXX11_KEYWORD(alignas); 476bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesCXX11_KEYWORD(char16_t); 486bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesCXX11_TYPE(char16_t); 496bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesCXX11_KEYWORD(char32_t); 506bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesCXX11_TYPE(char32_t); 516bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesCXX11_KEYWORD(constexpr); 526bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesCXX11_KEYWORD(noexcept); 536bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesCXX11_KEYWORD(static_assert); 546bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesCXX11_KEYWORD(thread_local); 556bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 56b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// Concepts TS keywords 57b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga NainarCONCEPTS_KEYWORD(concept); 58b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga NainarCONCEPTS_KEYWORD(requires); 59b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar 60a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// __declspec extension 61a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga NainarDECLSPEC_KEYWORD(__declspec); 62a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar 636bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// Clang extension 646bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesIS_KEYWORD(__char16_t); 656bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesIS_TYPE(__char16_t); 666bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesIS_KEYWORD(__char32_t); 676bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesIS_TYPE(__char32_t); 68