@@ -27,37 +27,117 @@ struct TestClangConfig {
27
27
// / The argument of the `-target` command line flag.
28
28
std::string Target;
29
29
30
- bool isC () const { return Language == Lang_C89 || Language == Lang_C99; }
31
-
32
- bool isC99OrLater () const { return Language == Lang_C99; }
33
-
34
- bool isCXX () const {
35
- return Language == Lang_CXX03 || Language == Lang_CXX11 ||
36
- Language == Lang_CXX14 || Language == Lang_CXX17 ||
37
- Language == Lang_CXX20 || Language == Lang_CXX23 ;
30
+ bool isC () const {
31
+ return false
32
+ # define TESTLANGUAGE
33
+ # define TESTLANGUAGE_C ( lang, version, std_flag, version_index ) \
34
+ || Language == Lang_##lang##version
35
+ # define TESTLANGUAGE_CXX ( lang, version, std_flag, version_index )
36
+ # include " clang/Testing/TestLanguage.def "
37
+ ;
38
38
}
39
39
40
- bool isCXX11OrLater () const {
41
- return Language == Lang_CXX11 || Language == Lang_CXX14 ||
42
- Language == Lang_CXX17 || Language == Lang_CXX20 ||
43
- Language == Lang_CXX23;
40
+ bool isCOrLater (int MinimumStdVersion) const {
41
+ const auto MinimumStdVersionIndex = 0
42
+ #define TESTLANGUAGE
43
+ #define TESTLANGUAGE_C (lang, version, std_flag, version_index ) \
44
+ +(MinimumStdVersion == version ? version_index : 0 )
45
+ #define TESTLANGUAGE_CXX (lang, version, std_flag, version_index )
46
+ #include " clang/Testing/TestLanguage.def"
47
+ ;
48
+ switch (Language) {
49
+ #define TESTLANGUAGE
50
+ #define TESTLANGUAGE_C (lang, version, std_flag, version_index ) \
51
+ case Lang_##lang##version: \
52
+ return MinimumStdVersionIndex <= version_index;
53
+ #define TESTLANGUAGE_CXX (lang, version, std_flag, version_index )
54
+ #include " clang/Testing/TestLanguage.def"
55
+ default :
56
+ return false ;
57
+ }
44
58
}
45
59
46
- bool isCXX14OrLater () const {
47
- return Language == Lang_CXX14 || Language == Lang_CXX17 ||
48
- Language == Lang_CXX20 || Language == Lang_CXX23;
60
+ bool isC99OrLater () const { return isCOrLater (99 ); }
61
+
62
+ bool isCOrEarlier (int MaximumStdVersion) const {
63
+ const auto MaximumStdVersionIndex = 0
64
+ #define TESTLANGUAGE
65
+ #define TESTLANGUAGE_C (lang, version, std_flag, version_index ) \
66
+ +(MaximumStdVersion == version ? version_index : 0 )
67
+ #define TESTLANGUAGE_CXX (lang, version, std_flag, version_index )
68
+ #include " clang/Testing/TestLanguage.def"
69
+ ;
70
+ switch (Language) {
71
+ #define TESTLANGUAGE
72
+ #define TESTLANGUAGE_C (lang, version, std_flag, version_index ) \
73
+ case Lang_##lang##version: \
74
+ return MaximumStdVersionIndex >= version_index;
75
+ #define TESTLANGUAGE_CXX (lang, version, std_flag, version_index )
76
+ #include " clang/Testing/TestLanguage.def"
77
+ default :
78
+ return false ;
79
+ }
49
80
}
50
81
51
- bool isCXX17OrLater () const {
52
- return Language == Lang_CXX17 || Language == Lang_CXX20 ||
53
- Language == Lang_CXX23;
82
+ bool isCXX () const {
83
+ return false
84
+ #define TESTLANGUAGE
85
+ #define TESTLANGUAGE_CXX (lang, version, std_flag, version_index ) \
86
+ || Language == Lang_##lang##version
87
+ #define TESTLANGUAGE_C (lang, version, std_flag, version_index )
88
+ #include " clang/Testing/TestLanguage.def"
89
+ ;
54
90
}
55
91
56
- bool isCXX20OrLater () const {
57
- return Language == Lang_CXX20 || Language == Lang_CXX23;
92
+ bool isCXXOrLater (int MinimumStdVersion) const {
93
+ const auto MinimumStdVersionIndex = 0
94
+ #define TESTLANGUAGE
95
+ #define TESTLANGUAGE_CXX (lang, version, std_flag, version_index ) \
96
+ +(MinimumStdVersion == version ? version_index : 0 )
97
+ #define TESTLANGUAGE_C (lang, version, std_flag, version_index )
98
+ #include " clang/Testing/TestLanguage.def"
99
+ ;
100
+ switch (Language) {
101
+ #define TESTLANGUAGE
102
+ #define TESTLANGUAGE_CXX (lang, version, std_flag, version_index ) \
103
+ case Lang_##lang##version: \
104
+ return MinimumStdVersionIndex <= version_index;
105
+ #define TESTLANGUAGE_C (lang, version, std_flag, version_index )
106
+ #include " clang/Testing/TestLanguage.def"
107
+ default :
108
+ return false ;
109
+ }
58
110
}
59
111
60
- bool isCXX23OrLater () const { return Language == Lang_CXX23; }
112
+ bool isCXX11OrLater () const { return isCXXOrLater (11 ); }
113
+
114
+ bool isCXX14OrLater () const { return isCXXOrLater (14 ); }
115
+
116
+ bool isCXX17OrLater () const { return isCXXOrLater (17 ); }
117
+
118
+ bool isCXX20OrLater () const { return isCXXOrLater (20 ); }
119
+
120
+ bool isCXX23OrLater () const { return isCXXOrLater (23 ); }
121
+
122
+ bool isCXXOrEarlier (int MaximumStdVersion) const {
123
+ const auto MaximumStdVersionIndex = 0
124
+ #define TESTLANGUAGE
125
+ #define TESTLANGUAGE_CXX (lang, version, std_flag, version_index ) \
126
+ +(MaximumStdVersion == version ? version_index : 0 )
127
+ #define TESTLANGUAGE_C (lang, version, std_flag, version_index )
128
+ #include " clang/Testing/TestLanguage.def"
129
+ ;
130
+ switch (Language) {
131
+ #define TESTLANGUAGE
132
+ #define TESTLANGUAGE_CXX (lang, version, std_flag, version_index ) \
133
+ case Lang_##lang##version: \
134
+ return MaximumStdVersionIndex >= version_index;
135
+ #define TESTLANGUAGE_C (lang, version, std_flag, version_index )
136
+ #include " clang/Testing/TestLanguage.def"
137
+ default :
138
+ return false ;
139
+ }
140
+ }
61
141
62
142
bool supportsCXXDynamicExceptionSpecification () const {
63
143
return Language == Lang_CXX03 || Language == Lang_CXX11 ||
@@ -75,6 +155,30 @@ struct TestClangConfig {
75
155
return Result;
76
156
}
77
157
158
+ std::string toShortString () const {
159
+ std::string Result;
160
+ llvm::raw_string_ostream OS (Result);
161
+ switch (Language) {
162
+ #define TESTLANGUAGE (lang, version, std_flag, version_index ) \
163
+ case Lang_##lang##version: \
164
+ OS << (#lang #version); \
165
+ break ;
166
+ #include " clang/Testing/TestLanguage.def"
167
+ case Lang_OpenCL:
168
+ OS << " OpenCL" ;
169
+ break ;
170
+ case Lang_OBJC:
171
+ OS << " OBJC" ;
172
+ break ;
173
+ case Lang_OBJCXX:
174
+ OS << " OBJCXX" ;
175
+ break ;
176
+ }
177
+
178
+ OS << (Target.find (" win" ) != std::string::npos ? " _win" : " " );
179
+ return Result;
180
+ }
181
+
78
182
std::string toString () const {
79
183
std::string Result;
80
184
llvm::raw_string_ostream OS (Result);
0 commit comments