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