xref: /aosp_15_r20/external/clang/test/Lexer/keywords_test.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
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