1//===-- LangStandards.def - Language Standard Data --------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LANGSTANDARD
10#error "LANGSTANDARD must be defined before including this file"
11#endif
12
13/// LANGSTANDARD(IDENT, NAME, LANG, DESC, FEATURES)
14///
15/// \param IDENT - The name of the standard as a C++ identifier.
16/// \param NAME - The name of the standard.
17/// \param LANG - The Language for which this is a standard.
18/// \param DESC - A short description of the standard.
19/// \param FEATURES - The standard features as flags, these are enums from the
20/// clang::frontend namespace, which is assumed to be available.
21
22/// LANGSTANDARD_ALIAS(IDENT, ALIAS)
23/// \param IDENT - The name of the standard as a C++ identifier.
24/// \param ALIAS - The alias of the standard.
25
26/// LANGSTANDARD_ALIAS_DEPR(IDENT, ALIAS)
27/// Same as LANGSTANDARD_ALIAS, but for a deprecated alias.
28
29#ifndef LANGSTANDARD_ALIAS
30#define LANGSTANDARD_ALIAS(IDENT, ALIAS)
31#endif
32
33#ifndef LANGSTANDARD_ALIAS_DEPR
34#define LANGSTANDARD_ALIAS_DEPR(IDENT, ALIAS) LANGSTANDARD_ALIAS(IDENT, ALIAS)
35#endif
36
37// C89-ish modes.
38LANGSTANDARD(c89, "c89",
39             C, "ISO C 1990", 0)
40LANGSTANDARD_ALIAS(c89, "c90")
41LANGSTANDARD_ALIAS(c89, "iso9899:1990")
42
43LANGSTANDARD(c94, "iso9899:199409",
44             C, "ISO C 1990 with amendment 1",
45             Digraphs)
46
47LANGSTANDARD(gnu89, "gnu89",
48             C, "ISO C 1990 with GNU extensions",
49             LineComment | Digraphs | GNUMode)
50LANGSTANDARD_ALIAS(gnu89, "gnu90")
51
52// C99-ish modes
53LANGSTANDARD(c99, "c99",
54             C, "ISO C 1999",
55             LineComment | C99 | Digraphs | HexFloat)
56LANGSTANDARD_ALIAS(c99, "iso9899:1999")
57LANGSTANDARD_ALIAS_DEPR(c99, "c9x")
58LANGSTANDARD_ALIAS_DEPR(c99, "iso9899:199x")
59
60LANGSTANDARD(gnu99, "gnu99",
61             C, "ISO C 1999 with GNU extensions",
62             LineComment | C99 | Digraphs | GNUMode | HexFloat)
63LANGSTANDARD_ALIAS_DEPR(gnu99, "gnu9x")
64
65// C11 modes
66LANGSTANDARD(c11, "c11",
67             C, "ISO C 2011",
68             LineComment | C99 | C11 | Digraphs | HexFloat)
69LANGSTANDARD_ALIAS(c11, "iso9899:2011")
70LANGSTANDARD_ALIAS_DEPR(c11, "c1x")
71LANGSTANDARD_ALIAS_DEPR(c11, "iso9899:201x")
72
73LANGSTANDARD(gnu11, "gnu11",
74             C, "ISO C 2011 with GNU extensions",
75             LineComment | C99 | C11 | Digraphs | GNUMode | HexFloat)
76LANGSTANDARD_ALIAS_DEPR(gnu11, "gnu1x")
77
78// C17 modes
79LANGSTANDARD(c17, "c17",
80             C, "ISO C 2017",
81             LineComment | C99 | C11 | C17 | Digraphs | HexFloat)
82LANGSTANDARD_ALIAS(c17, "iso9899:2017")
83LANGSTANDARD_ALIAS(c17, "c18")
84LANGSTANDARD_ALIAS(c17, "iso9899:2018")
85LANGSTANDARD(gnu17, "gnu17",
86             C, "ISO C 2017 with GNU extensions",
87             LineComment | C99 | C11 | C17 | Digraphs | GNUMode | HexFloat)
88LANGSTANDARD_ALIAS(gnu17, "gnu18")
89
90// C2x modes
91LANGSTANDARD(c2x, "c2x",
92             C, "Working Draft for ISO C2x",
93             LineComment | C99 | C11 | C17 | C2x | Digraphs | HexFloat)
94LANGSTANDARD(gnu2x, "gnu2x",
95             C, "Working Draft for ISO C2x with GNU extensions",
96             LineComment | C99 | C11 | C17 | C2x | Digraphs | GNUMode | HexFloat)
97
98// C++ modes
99LANGSTANDARD(cxx98, "c++98",
100             CXX, "ISO C++ 1998 with amendments",
101             LineComment | CPlusPlus | Digraphs)
102LANGSTANDARD_ALIAS(cxx98, "c++03")
103
104LANGSTANDARD(gnucxx98, "gnu++98",
105             CXX, "ISO C++ 1998 with amendments and GNU extensions",
106             LineComment | CPlusPlus | Digraphs | GNUMode)
107LANGSTANDARD_ALIAS(gnucxx98, "gnu++03")
108
109LANGSTANDARD(cxx11, "c++11",
110             CXX, "ISO C++ 2011 with amendments",
111             LineComment | CPlusPlus | CPlusPlus11 | Digraphs)
112LANGSTANDARD_ALIAS_DEPR(cxx11, "c++0x")
113
114LANGSTANDARD(gnucxx11, "gnu++11", CXX,
115             "ISO C++ 2011 with amendments and GNU extensions",
116             LineComment | CPlusPlus | CPlusPlus11 | Digraphs | GNUMode)
117LANGSTANDARD_ALIAS_DEPR(gnucxx11, "gnu++0x")
118
119LANGSTANDARD(cxx14, "c++14",
120             CXX, "ISO C++ 2014 with amendments",
121             LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus14 | Digraphs)
122LANGSTANDARD_ALIAS_DEPR(cxx14, "c++1y")
123
124LANGSTANDARD(gnucxx14, "gnu++14",
125             CXX, "ISO C++ 2014 with amendments and GNU extensions",
126             LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus14 | Digraphs |
127             GNUMode)
128LANGSTANDARD_ALIAS_DEPR(gnucxx14, "gnu++1y")
129
130LANGSTANDARD(cxx17, "c++17",
131             CXX, "ISO C++ 2017 with amendments",
132             LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus14 | CPlusPlus17 |
133             Digraphs | HexFloat)
134LANGSTANDARD_ALIAS_DEPR(cxx17, "c++1z")
135
136LANGSTANDARD(gnucxx17, "gnu++17",
137             CXX, "ISO C++ 2017 with amendments and GNU extensions",
138             LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus14 | CPlusPlus17 |
139             Digraphs | HexFloat | GNUMode)
140LANGSTANDARD_ALIAS_DEPR(gnucxx17, "gnu++1z")
141
142LANGSTANDARD(cxx20, "c++20",
143             CXX, "ISO C++ 2020 DIS",
144             LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus14 | CPlusPlus17 |
145             CPlusPlus20 | Digraphs | HexFloat)
146LANGSTANDARD_ALIAS_DEPR(cxx20, "c++2a")
147
148LANGSTANDARD(gnucxx20, "gnu++20",
149             CXX, "ISO C++ 2020 DIS with GNU extensions",
150             LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus14 | CPlusPlus17 |
151             CPlusPlus20 | Digraphs | HexFloat | GNUMode)
152LANGSTANDARD_ALIAS_DEPR(gnucxx20, "gnu++2a")
153
154LANGSTANDARD(cxx23, "c++23",
155             CXX, "ISO C++ 2023 DIS",
156             LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus14 | CPlusPlus17 |
157             CPlusPlus20 | CPlusPlus23 | Digraphs | HexFloat)
158LANGSTANDARD_ALIAS_DEPR(cxx23, "c++2b")
159
160LANGSTANDARD(gnucxx23, "gnu++23",
161             CXX, "ISO C++ 2023 DIS with GNU extensions",
162             LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus14 | CPlusPlus17 |
163             CPlusPlus20 | CPlusPlus23 | Digraphs | HexFloat | GNUMode)
164LANGSTANDARD_ALIAS_DEPR(gnucxx23, "gnu++2b")
165
166LANGSTANDARD(cxx26, "c++2c",
167             CXX, "Working draft for C++2c",
168             LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus14 | CPlusPlus17 |
169             CPlusPlus20 | CPlusPlus23 | CPlusPlus26 | Digraphs | HexFloat)
170LANGSTANDARD_ALIAS(cxx26, "c++26")
171
172LANGSTANDARD(gnucxx26, "gnu++2c",
173             CXX, "Working draft for C++2c with GNU extensions",
174             LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus14 | CPlusPlus17 |
175             CPlusPlus20 | CPlusPlus23 | CPlusPlus26 | Digraphs | HexFloat | GNUMode)
176LANGSTANDARD_ALIAS(gnucxx26, "gnu++26")
177
178// OpenCL
179LANGSTANDARD(opencl10, "cl1.0",
180             OpenCL, "OpenCL 1.0",
181             LineComment | C99 | Digraphs | HexFloat | OpenCL)
182LANGSTANDARD_ALIAS_DEPR(opencl10, "cl")
183
184LANGSTANDARD(opencl11, "cl1.1",
185             OpenCL, "OpenCL 1.1",
186             LineComment | C99 | Digraphs | HexFloat | OpenCL)
187LANGSTANDARD(opencl12, "cl1.2",
188             OpenCL, "OpenCL 1.2",
189             LineComment | C99 | Digraphs | HexFloat | OpenCL)
190LANGSTANDARD(opencl20, "cl2.0",
191             OpenCL, "OpenCL 2.0",
192             LineComment | C99 | Digraphs | HexFloat | OpenCL)
193LANGSTANDARD(opencl30, "cl3.0",
194             OpenCL, "OpenCL 3.0",
195             LineComment | C99 | Digraphs | HexFloat | OpenCL)
196
197LANGSTANDARD(openclcpp10, "clc++1.0",
198             OpenCL, "C++ for OpenCL 1.0",
199             LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus14 | CPlusPlus17 |
200             Digraphs | HexFloat | OpenCL)
201LANGSTANDARD_ALIAS(openclcpp10, "clc++")
202
203LANGSTANDARD(openclcpp2021, "clc++2021",
204             OpenCL, "C++ for OpenCL 2021",
205             LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus14 | CPlusPlus17 |
206             Digraphs | HexFloat | OpenCL)
207
208LANGSTANDARD_ALIAS_DEPR(opencl10, "CL")
209LANGSTANDARD_ALIAS_DEPR(opencl11, "CL1.1")
210LANGSTANDARD_ALIAS_DEPR(opencl12, "CL1.2")
211LANGSTANDARD_ALIAS_DEPR(opencl20, "CL2.0")
212LANGSTANDARD_ALIAS_DEPR(opencl30, "CL3.0")
213LANGSTANDARD_ALIAS_DEPR(openclcpp10, "CLC++")
214LANGSTANDARD_ALIAS_DEPR(openclcpp10, "CLC++1.0")
215LANGSTANDARD_ALIAS_DEPR(openclcpp2021, "CLC++2021")
216
217// HLSL
218LANGSTANDARD(hlsl, "hlsl",
219             HLSL, "High Level Shader Language",
220             LineComment | HLSL | CPlusPlus )
221
222LANGSTANDARD(hlsl2015, "hlsl2015",
223             HLSL, "High Level Shader Language 2015",
224             LineComment | HLSL | CPlusPlus )
225
226LANGSTANDARD(hlsl2016, "hlsl2016",
227             HLSL, "High Level Shader Language 2016",
228             LineComment | HLSL | CPlusPlus )
229
230LANGSTANDARD(hlsl2017, "hlsl2017",
231             HLSL, "High Level Shader Language 2017",
232             LineComment | HLSL | CPlusPlus )
233
234LANGSTANDARD(hlsl2018, "hlsl2018",
235             HLSL, "High Level Shader Language 2018",
236             LineComment | HLSL | CPlusPlus )
237
238LANGSTANDARD(hlsl2021, "hlsl2021",
239             HLSL, "High Level Shader Language 2021",
240             LineComment | HLSL | CPlusPlus )
241
242LANGSTANDARD(hlsl202x, "hlsl202x",
243             HLSL, "High Level Shader Language 202x",
244             LineComment | HLSL | CPlusPlus | CPlusPlus11)
245
246
247#undef LANGSTANDARD
248#undef LANGSTANDARD_ALIAS
249#undef LANGSTANDARD_ALIAS_DEPR
250