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