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