16bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// RUN: %clang_cc1 -std=c++03 -fsyntax-only %s 26bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// RUN: %clang_cc1 -std=c++11 -DCXX11 -fsyntax-only %s 36bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 46bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#define IS_KEYWORD(NAME) _Static_assert(!__is_identifier(NAME), #NAME) 56bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#define NOT_KEYWORD(NAME) _Static_assert(__is_identifier(NAME), #NAME) 66bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#define IS_TYPE(NAME) void is_##NAME##_type() { int f(NAME); } 76bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 86bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#ifdef CXX11 96bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#define CXX11_KEYWORD(NAME) IS_KEYWORD(NAME) 106bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#define CXX11_TYPE(NAME) IS_TYPE(NAME) 116bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#else 126bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#define CXX11_KEYWORD(NAME) NOT_KEYWORD(NAME) 136bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#define CXX11_TYPE(NAME) 146bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#endif 156bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 166bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// C++11 keywords 176bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesCXX11_KEYWORD(nullptr); 186bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesCXX11_KEYWORD(decltype); 196bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesCXX11_KEYWORD(alignof); 206bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesCXX11_KEYWORD(alignas); 216bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesCXX11_KEYWORD(char16_t); 226bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesCXX11_TYPE(char16_t); 236bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesCXX11_KEYWORD(char32_t); 246bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesCXX11_TYPE(char32_t); 256bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesCXX11_KEYWORD(constexpr); 266bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesCXX11_KEYWORD(noexcept); 276bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesCXX11_KEYWORD(static_assert); 286bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesCXX11_KEYWORD(thread_local); 296bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 306bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// Clang extension 316bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesIS_KEYWORD(__char16_t); 326bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesIS_TYPE(__char16_t); 336bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesIS_KEYWORD(__char32_t); 346bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesIS_TYPE(__char32_t); 35