@@ -27,37 +27,90 @@ 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; }
30
+ bool isC () const {
31
+ return false
32
+ #define TESTLANGUAGE_C (lang, version, std_flag, version_index ) \
33
+ || Language == Lang_##lang##version
34
+ #include " clang/Testing/TestLanguage.def"
35
+ ;
36
+ }
31
37
32
- bool isC99OrLater () const { return Language == Lang_C99; }
38
+ bool isC (int Version) const {
39
+ return false
40
+ #define TESTLANGUAGE_C (lang, version, std_flag, version_index ) \
41
+ || (Version == version && Language == Lang_##lang##version)
42
+ #include " clang/Testing/TestLanguage.def"
43
+ ;
44
+ }
33
45
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;
46
+ bool isCOrLater (int MinimumStdVersion) const {
47
+ const auto MinimumStdVersionIndex = 0
48
+ #define TESTLANGUAGE_C (lang, version, std_flag, version_index ) \
49
+ +(MinimumStdVersion == version ? version_index : 0 )
50
+ #include " clang/Testing/TestLanguage.def"
51
+ ;
52
+ switch (Language) {
53
+ #define TESTLANGUAGE_C (lang, version, std_flag, version_index ) \
54
+ case Lang_##lang##version: \
55
+ return MinimumStdVersionIndex <= version_index;
56
+ #include " clang/Testing/TestLanguage.def"
57
+ default :
58
+ return false ;
59
+ }
38
60
}
39
61
40
- bool isCXX11OrLater () const {
41
- return Language == Lang_CXX11 || Language == Lang_CXX14 ||
42
- Language == Lang_CXX17 || Language == Lang_CXX20 ||
43
- Language == Lang_CXX23 ;
62
+ bool isC99OrLater () const { return isCOrLater ( 99 ); }
63
+
64
+ bool isCOrEarlier ( int MaximumStdVersion) const {
65
+ return isC () && ( isC (MaximumStdVersion) || ! isCOrLater (MaximumStdVersion)) ;
44
66
}
45
67
46
- bool isCXX14OrLater () const {
47
- return Language == Lang_CXX14 || Language == Lang_CXX17 ||
48
- Language == Lang_CXX20 || Language == Lang_CXX23;
68
+ bool isCXX () const {
69
+ return false
70
+ #define TESTLANGUAGE_CXX (lang, version, std_flag, version_index ) \
71
+ || Language == Lang_##lang##version
72
+ #include " clang/Testing/TestLanguage.def"
73
+ ;
49
74
}
50
75
51
- bool isCXX17OrLater () const {
52
- return Language == Lang_CXX17 || Language == Lang_CXX20 ||
53
- Language == Lang_CXX23;
76
+ bool isCXX (int Version) const {
77
+ return false
78
+ #define TESTLANGUAGE_CXX (lang, version, std_flag, version_index ) \
79
+ || (Version == version && Language == Lang_##lang##version)
80
+ #include " clang/Testing/TestLanguage.def"
81
+ ;
54
82
}
55
83
56
- bool isCXX20OrLater () const {
57
- return Language == Lang_CXX20 || Language == Lang_CXX23;
84
+ bool isCXXOrLater (int MinimumStdVersion) const {
85
+ const auto MinimumStdVersionIndex = 0
86
+ #define TESTLANGUAGE_CXX (lang, version, std_flag, version_index ) \
87
+ +(MinimumStdVersion == version ? version_index : 0 )
88
+ #include " clang/Testing/TestLanguage.def"
89
+ ;
90
+ switch (Language) {
91
+ #define TESTLANGUAGE_CXX (lang, version, std_flag, version_index ) \
92
+ case Lang_##lang##version: \
93
+ return MinimumStdVersionIndex <= version_index;
94
+ #include " clang/Testing/TestLanguage.def"
95
+ default :
96
+ return false ;
97
+ }
58
98
}
59
99
60
- bool isCXX23OrLater () const { return Language == Lang_CXX23; }
100
+ bool isCXX11OrLater () const { return isCXXOrLater (11 ); }
101
+
102
+ bool isCXX14OrLater () const { return isCXXOrLater (14 ); }
103
+
104
+ bool isCXX17OrLater () const { return isCXXOrLater (17 ); }
105
+
106
+ bool isCXX20OrLater () const { return isCXXOrLater (20 ); }
107
+
108
+ bool isCXX23OrLater () const { return isCXXOrLater (23 ); }
109
+
110
+ bool isCXXOrEarlier (int MaximumStdVersion) const {
111
+ return isCXX () &&
112
+ (isCXX (MaximumStdVersion) || !isCXXOrLater (MaximumStdVersion));
113
+ }
61
114
62
115
bool supportsCXXDynamicExceptionSpecification () const {
63
116
return Language == Lang_CXX03 || Language == Lang_CXX11 ||
@@ -75,6 +128,30 @@ struct TestClangConfig {
75
128
return Result;
76
129
}
77
130
131
+ std::string toShortString () const {
132
+ std::string Result;
133
+ llvm::raw_string_ostream OS (Result);
134
+ switch (Language) {
135
+ #define TESTLANGUAGE (lang, version, std_flag, version_index ) \
136
+ case Lang_##lang##version: \
137
+ OS << (#lang #version); \
138
+ break ;
139
+ #include " clang/Testing/TestLanguage.def"
140
+ case Lang_OpenCL:
141
+ OS << " OpenCL" ;
142
+ break ;
143
+ case Lang_OBJC:
144
+ OS << " OBJC" ;
145
+ break ;
146
+ case Lang_OBJCXX:
147
+ OS << " OBJCXX" ;
148
+ break ;
149
+ }
150
+
151
+ OS << (Target.find (" win" ) != std::string::npos ? " _win" : " " );
152
+ return Result;
153
+ }
154
+
78
155
std::string toString () const {
79
156
std::string Result;
80
157
llvm::raw_string_ostream OS (Result);
0 commit comments