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(cxx2b, "c++2b", 155 CXX, "Working draft for ISO C++ 2023 DIS", 156 LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus14 | CPlusPlus17 | 157 CPlusPlus20 | CPlusPlus2b | Digraphs | HexFloat) 158 159LANGSTANDARD(gnucxx2b, "gnu++2b", 160 CXX, "Working draft for ISO C++ 2023 DIS with GNU extensions", 161 LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus14 | CPlusPlus17 | 162 CPlusPlus20 | CPlusPlus2b | Digraphs | HexFloat | GNUMode) 163 164// OpenCL 165LANGSTANDARD(opencl10, "cl1.0", 166 OpenCL, "OpenCL 1.0", 167 LineComment | C99 | Digraphs | HexFloat | OpenCL) 168LANGSTANDARD_ALIAS_DEPR(opencl10, "cl") 169 170LANGSTANDARD(opencl11, "cl1.1", 171 OpenCL, "OpenCL 1.1", 172 LineComment | C99 | Digraphs | HexFloat | OpenCL) 173LANGSTANDARD(opencl12, "cl1.2", 174 OpenCL, "OpenCL 1.2", 175 LineComment | C99 | Digraphs | HexFloat | OpenCL) 176LANGSTANDARD(opencl20, "cl2.0", 177 OpenCL, "OpenCL 2.0", 178 LineComment | C99 | Digraphs | HexFloat | OpenCL) 179LANGSTANDARD(opencl30, "cl3.0", 180 OpenCL, "OpenCL 3.0", 181 LineComment | C99 | Digraphs | HexFloat | OpenCL) 182 183LANGSTANDARD(openclcpp10, "clc++1.0", 184 OpenCL, "C++ for OpenCL 1.0", 185 LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus14 | CPlusPlus17 | 186 Digraphs | HexFloat | OpenCL) 187LANGSTANDARD_ALIAS(openclcpp10, "clc++") 188 189LANGSTANDARD(openclcpp2021, "clc++2021", 190 OpenCL, "C++ for OpenCL 2021", 191 LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus14 | CPlusPlus17 | 192 Digraphs | HexFloat | OpenCL) 193 194LANGSTANDARD_ALIAS_DEPR(opencl10, "CL") 195LANGSTANDARD_ALIAS_DEPR(opencl11, "CL1.1") 196LANGSTANDARD_ALIAS_DEPR(opencl12, "CL1.2") 197LANGSTANDARD_ALIAS_DEPR(opencl20, "CL2.0") 198LANGSTANDARD_ALIAS_DEPR(opencl30, "CL3.0") 199LANGSTANDARD_ALIAS_DEPR(openclcpp10, "CLC++") 200LANGSTANDARD_ALIAS_DEPR(openclcpp10, "CLC++1.0") 201LANGSTANDARD_ALIAS_DEPR(openclcpp2021, "CLC++2021") 202 203// CUDA 204LANGSTANDARD(cuda, "cuda", CUDA, "NVIDIA CUDA(tm)", 205 LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus14 | Digraphs) 206 207// HIP 208LANGSTANDARD(hip, "hip", HIP, "HIP", 209 LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus14 | Digraphs) 210 211// HLSL 212LANGSTANDARD(hlsl, "hlsl", 213 HLSL, "High Level Shader Language", 214 LineComment | HLSL | CPlusPlus ) 215 216LANGSTANDARD(hlsl2015, "hlsl2015", 217 HLSL, "High Level Shader Language 2015", 218 LineComment | HLSL | CPlusPlus ) 219 220LANGSTANDARD(hlsl2016, "hlsl2016", 221 HLSL, "High Level Shader Language 2016", 222 LineComment | HLSL | CPlusPlus ) 223 224LANGSTANDARD(hlsl2017, "hlsl2017", 225 HLSL, "High Level Shader Language 2017", 226 LineComment | HLSL | CPlusPlus ) 227 228LANGSTANDARD(hlsl2018, "hlsl2018", 229 HLSL, "High Level Shader Language 2018", 230 LineComment | HLSL | CPlusPlus ) 231 232LANGSTANDARD(hlsl2021, "hlsl2021", 233 HLSL, "High Level Shader Language 2021", 234 LineComment | HLSL | CPlusPlus ) 235 236LANGSTANDARD(hlsl202x, "hlsl202x", 237 HLSL, "High Level Shader Language 202x", 238 LineComment | HLSL | CPlusPlus | CPlusPlus11) 239 240 241#undef LANGSTANDARD 242#undef LANGSTANDARD_ALIAS 243#undef LANGSTANDARD_ALIAS_DEPR 244