summaryrefslogtreecommitdiff
path: root/clang-r353983/include/clang/Basic
diff options
context:
space:
mode:
authorRalf Luther <luther.ralf@gmail.com>2019-03-27 20:23:17 +0000
committerGerrit Code Review <gerrit2@aicp-server-3>2019-03-27 20:23:17 +0000
commit1ce3a9d272e564b22a1333a1e36a3d3ab7cfab01 (patch)
tree391382eadd4fec5bb480f2e8934fa352770221d1 /clang-r353983/include/clang/Basic
parentd1d48b140bafaa8a50107292f5fce95562575765 (diff)
parent4f56932d3416ac03f646bc1a611b3135fec2fe08 (diff)
Merge "Update prebuilt Clang to r353983." into p9.0HEADp9.0-backupp9.0
Diffstat (limited to 'clang-r353983/include/clang/Basic')
-rw-r--r--clang-r353983/include/clang/Basic/ABI.h210
-rw-r--r--clang-r353983/include/clang/Basic/AddressSpaces.h73
-rw-r--r--clang-r353983/include/clang/Basic/AlignedAllocation.h43
-rw-r--r--clang-r353983/include/clang/Basic/AllDiagnostics.h41
-rw-r--r--clang-r353983/include/clang/Basic/AttrHasAttributeImpl.inc843
-rw-r--r--clang-r353983/include/clang/Basic/AttrKinds.h33
-rw-r--r--clang-r353983/include/clang/Basic/AttrList.inc334
-rw-r--r--clang-r353983/include/clang/Basic/AttrSubMatchRulesList.inc40
-rw-r--r--clang-r353983/include/clang/Basic/AttrSubjectMatchRules.h31
-rw-r--r--clang-r353983/include/clang/Basic/Attributes.h42
-rw-r--r--clang-r353983/include/clang/Basic/BitmaskEnum.h24
-rw-r--r--clang-r353983/include/clang/Basic/Builtins.def1529
-rw-r--r--clang-r353983/include/clang/Basic/Builtins.h263
-rw-r--r--clang-r353983/include/clang/Basic/BuiltinsAArch64.def212
-rw-r--r--clang-r353983/include/clang/Basic/BuiltinsAMDGPU.def181
-rw-r--r--clang-r353983/include/clang/Basic/BuiltinsARM.def332
-rw-r--r--clang-r353983/include/clang/Basic/BuiltinsHexagon.def1817
-rw-r--r--clang-r353983/include/clang/Basic/BuiltinsLe64.def18
-rw-r--r--clang-r353983/include/clang/Basic/BuiltinsMips.def899
-rw-r--r--clang-r353983/include/clang/Basic/BuiltinsNEON.def21
-rw-r--r--clang-r353983/include/clang/Basic/BuiltinsNVPTX.def675
-rw-r--r--clang-r353983/include/clang/Basic/BuiltinsPPC.def480
-rw-r--r--clang-r353983/include/clang/Basic/BuiltinsSystemZ.def280
-rw-r--r--clang-r353983/include/clang/Basic/BuiltinsWebAssembly.def112
-rw-r--r--clang-r353983/include/clang/Basic/BuiltinsX86.def1905
-rw-r--r--clang-r353983/include/clang/Basic/BuiltinsX86_64.def108
-rw-r--r--clang-r353983/include/clang/Basic/BuiltinsXCore.def21
-rw-r--r--clang-r353983/include/clang/Basic/CapturedStmt.h24
-rw-r--r--clang-r353983/include/clang/Basic/CharInfo.h198
-rw-r--r--clang-r353983/include/clang/Basic/CodeGenOptions.def369
-rw-r--r--clang-r353983/include/clang/Basic/CodeGenOptions.h335
-rw-r--r--clang-r353983/include/clang/Basic/CommentOptions.h38
-rw-r--r--clang-r353983/include/clang/Basic/Cuda.h120
-rw-r--r--clang-r353983/include/clang/Basic/DebugInfoOptions.h44
-rw-r--r--clang-r353983/include/clang/Basic/Diagnostic.h1593
-rw-r--r--clang-r353983/include/clang/Basic/DiagnosticAST.h28
-rw-r--r--clang-r353983/include/clang/Basic/DiagnosticASTKinds.inc131
-rw-r--r--clang-r353983/include/clang/Basic/DiagnosticAnalysis.h28
-rw-r--r--clang-r353983/include/clang/Basic/DiagnosticAnalysisKinds.inc5
-rw-r--r--clang-r353983/include/clang/Basic/DiagnosticCategories.h25
-rw-r--r--clang-r353983/include/clang/Basic/DiagnosticComment.h28
-rw-r--r--clang-r353983/include/clang/Basic/DiagnosticCommentKinds.inc39
-rw-r--r--clang-r353983/include/clang/Basic/DiagnosticCommonKinds.inc114
-rw-r--r--clang-r353983/include/clang/Basic/DiagnosticCrossTU.h28
-rw-r--r--clang-r353983/include/clang/Basic/DiagnosticCrossTUKinds.inc9
-rw-r--r--clang-r353983/include/clang/Basic/DiagnosticDriver.h28
-rw-r--r--clang-r353983/include/clang/Basic/DiagnosticDriverKinds.inc179
-rw-r--r--clang-r353983/include/clang/Basic/DiagnosticError.h60
-rw-r--r--clang-r353983/include/clang/Basic/DiagnosticFrontend.h28
-rw-r--r--clang-r353983/include/clang/Basic/DiagnosticFrontendKinds.inc113
-rw-r--r--clang-r353983/include/clang/Basic/DiagnosticGroups.inc1847
-rw-r--r--clang-r353983/include/clang/Basic/DiagnosticIDs.h341
-rw-r--r--clang-r353983/include/clang/Basic/DiagnosticIndexName.inc4887
-rw-r--r--clang-r353983/include/clang/Basic/DiagnosticLex.h28
-rw-r--r--clang-r353983/include/clang/Basic/DiagnosticLexKinds.inc330
-rw-r--r--clang-r353983/include/clang/Basic/DiagnosticOptions.def101
-rw-r--r--clang-r353983/include/clang/Basic/DiagnosticOptions.h128
-rw-r--r--clang-r353983/include/clang/Basic/DiagnosticParse.h28
-rw-r--r--clang-r353983/include/clang/Basic/DiagnosticParseKinds.inc490
-rw-r--r--clang-r353983/include/clang/Basic/DiagnosticRefactoring.h28
-rw-r--r--clang-r353983/include/clang/Basic/DiagnosticRefactoringKinds.inc11
-rw-r--r--clang-r353983/include/clang/Basic/DiagnosticSema.h28
-rw-r--r--clang-r353983/include/clang/Basic/DiagnosticSemaKinds.inc3459
-rw-r--r--clang-r353983/include/clang/Basic/DiagnosticSerialization.h28
-rw-r--r--clang-r353983/include/clang/Basic/DiagnosticSerializationKinds.inc67
-rw-r--r--clang-r353983/include/clang/Basic/ExceptionSpecificationType.h66
-rw-r--r--clang-r353983/include/clang/Basic/ExpressionTraits.h25
-rw-r--r--clang-r353983/include/clang/Basic/Features.def251
-rw-r--r--clang-r353983/include/clang/Basic/FileManager.h287
-rw-r--r--clang-r353983/include/clang/Basic/FileSystemOptions.h31
-rw-r--r--clang-r353983/include/clang/Basic/FileSystemStatCache.h117
-rw-r--r--clang-r353983/include/clang/Basic/FixedPoint.h191
-rw-r--r--clang-r353983/include/clang/Basic/IdentifierTable.h984
-rw-r--r--clang-r353983/include/clang/Basic/LLVM.h88
-rw-r--r--clang-r353983/include/clang/Basic/Lambda.h43
-rw-r--r--clang-r353983/include/clang/Basic/LangOptions.def328
-rw-r--r--clang-r353983/include/clang/Basic/LangOptions.h375
-rw-r--r--clang-r353983/include/clang/Basic/Linkage.h128
-rw-r--r--clang-r353983/include/clang/Basic/MSP430Target.def246
-rw-r--r--clang-r353983/include/clang/Basic/MacroBuilder.h47
-rw-r--r--clang-r353983/include/clang/Basic/MemoryBufferCache.h79
-rw-r--r--clang-r353983/include/clang/Basic/Module.h651
-rw-r--r--clang-r353983/include/clang/Basic/ObjCRuntime.h438
-rw-r--r--clang-r353983/include/clang/Basic/OpenCLExtensionTypes.def40
-rw-r--r--clang-r353983/include/clang/Basic/OpenCLExtensions.def93
-rw-r--r--clang-r353983/include/clang/Basic/OpenCLImageTypes.def87
-rw-r--r--clang-r353983/include/clang/Basic/OpenCLOptions.h142
-rw-r--r--clang-r353983/include/clang/Basic/OpenMPKinds.def954
-rw-r--r--clang-r353983/include/clang/Basic/OpenMPKinds.h262
-rw-r--r--clang-r353983/include/clang/Basic/OperatorKinds.def107
-rw-r--r--clang-r353983/include/clang/Basic/OperatorKinds.h35
-rw-r--r--clang-r353983/include/clang/Basic/OperatorPrecedence.h52
-rw-r--r--clang-r353983/include/clang/Basic/PartialDiagnostic.h422
-rw-r--r--clang-r353983/include/clang/Basic/PlistSupport.h137
-rw-r--r--clang-r353983/include/clang/Basic/PragmaKinds.h30
-rw-r--r--clang-r353983/include/clang/Basic/PrettyStackTrace.h37
-rw-r--r--clang-r353983/include/clang/Basic/SanitizerBlacklist.h46
-rw-r--r--clang-r353983/include/clang/Basic/SanitizerSpecialCaseList.h53
-rw-r--r--clang-r353983/include/clang/Basic/Sanitizers.def183
-rw-r--r--clang-r353983/include/clang/Basic/Sanitizers.h92
-rw-r--r--clang-r353983/include/clang/Basic/SourceLocation.h475
-rw-r--r--clang-r353983/include/clang/Basic/SourceManager.h1868
-rw-r--r--clang-r353983/include/clang/Basic/SourceManagerInternals.h133
-rw-r--r--clang-r353983/include/clang/Basic/Specifiers.h330
-rw-r--r--clang-r353983/include/clang/Basic/Stack.h26
-rw-r--r--clang-r353983/include/clang/Basic/SyncScope.h153
-rw-r--r--clang-r353983/include/clang/Basic/TargetBuiltins.h204
-rw-r--r--clang-r353983/include/clang/Basic/TargetCXXABI.h345
-rw-r--r--clang-r353983/include/clang/Basic/TargetInfo.h1376
-rw-r--r--clang-r353983/include/clang/Basic/TargetOptions.h88
-rw-r--r--clang-r353983/include/clang/Basic/TemplateKinds.h51
-rw-r--r--clang-r353983/include/clang/Basic/TokenKinds.def840
-rw-r--r--clang-r353983/include/clang/Basic/TokenKinds.h104
-rw-r--r--clang-r353983/include/clang/Basic/TypeTraits.h110
-rw-r--r--clang-r353983/include/clang/Basic/Version.h61
-rw-r--r--clang-r353983/include/clang/Basic/Version.inc5
-rw-r--r--clang-r353983/include/clang/Basic/Visibility.h145
-rw-r--r--clang-r353983/include/clang/Basic/X86Target.def339
-rw-r--r--clang-r353983/include/clang/Basic/XRayInstr.h71
-rw-r--r--clang-r353983/include/clang/Basic/XRayLists.h55
-rw-r--r--clang-r353983/include/clang/Basic/arm_fp16.inc110
-rw-r--r--clang-r353983/include/clang/Basic/arm_neon.inc1248
122 files changed, 41216 insertions, 0 deletions
diff --git a/clang-r353983/include/clang/Basic/ABI.h b/clang-r353983/include/clang/Basic/ABI.h
new file mode 100644
index 00000000..2401ffa2
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/ABI.h
@@ -0,0 +1,210 @@
+//===----- ABI.h - ABI related declarations ---------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Enums/classes describing ABI related information about constructors,
+/// destructors and thunks.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_ABI_H
+#define LLVM_CLANG_BASIC_ABI_H
+
+#include "llvm/Support/DataTypes.h"
+#include <cstring>
+
+namespace clang {
+
+/// C++ constructor types.
+enum CXXCtorType {
+ Ctor_Complete, ///< Complete object ctor
+ Ctor_Base, ///< Base object ctor
+ Ctor_Comdat, ///< The COMDAT used for ctors
+ Ctor_CopyingClosure, ///< Copying closure variant of a ctor
+ Ctor_DefaultClosure, ///< Default closure variant of a ctor
+};
+
+/// C++ destructor types.
+enum CXXDtorType {
+ Dtor_Deleting, ///< Deleting dtor
+ Dtor_Complete, ///< Complete object dtor
+ Dtor_Base, ///< Base object dtor
+ Dtor_Comdat ///< The COMDAT used for dtors
+};
+
+/// A return adjustment.
+struct ReturnAdjustment {
+ /// The non-virtual adjustment from the derived object to its
+ /// nearest virtual base.
+ int64_t NonVirtual;
+
+ /// Holds the ABI-specific information about the virtual return
+ /// adjustment, if needed.
+ union VirtualAdjustment {
+ // Itanium ABI
+ struct {
+ /// The offset (in bytes), relative to the address point
+ /// of the virtual base class offset.
+ int64_t VBaseOffsetOffset;
+ } Itanium;
+
+ // Microsoft ABI
+ struct {
+ /// The offset (in bytes) of the vbptr, relative to the beginning
+ /// of the derived class.
+ uint32_t VBPtrOffset;
+
+ /// Index of the virtual base in the vbtable.
+ uint32_t VBIndex;
+ } Microsoft;
+
+ VirtualAdjustment() {
+ memset(this, 0, sizeof(*this));
+ }
+
+ bool Equals(const VirtualAdjustment &Other) const {
+ return memcmp(this, &Other, sizeof(Other)) == 0;
+ }
+
+ bool isEmpty() const {
+ VirtualAdjustment Zero;
+ return Equals(Zero);
+ }
+
+ bool Less(const VirtualAdjustment &RHS) const {
+ return memcmp(this, &RHS, sizeof(RHS)) < 0;
+ }
+ } Virtual;
+
+ ReturnAdjustment() : NonVirtual(0) {}
+
+ bool isEmpty() const { return !NonVirtual && Virtual.isEmpty(); }
+
+ friend bool operator==(const ReturnAdjustment &LHS,
+ const ReturnAdjustment &RHS) {
+ return LHS.NonVirtual == RHS.NonVirtual && LHS.Virtual.Equals(RHS.Virtual);
+ }
+
+ friend bool operator!=(const ReturnAdjustment &LHS, const ReturnAdjustment &RHS) {
+ return !(LHS == RHS);
+ }
+
+ friend bool operator<(const ReturnAdjustment &LHS,
+ const ReturnAdjustment &RHS) {
+ if (LHS.NonVirtual < RHS.NonVirtual)
+ return true;
+
+ return LHS.NonVirtual == RHS.NonVirtual && LHS.Virtual.Less(RHS.Virtual);
+ }
+};
+
+/// A \c this pointer adjustment.
+struct ThisAdjustment {
+ /// The non-virtual adjustment from the derived object to its
+ /// nearest virtual base.
+ int64_t NonVirtual;
+
+ /// Holds the ABI-specific information about the virtual this
+ /// adjustment, if needed.
+ union VirtualAdjustment {
+ // Itanium ABI
+ struct {
+ /// The offset (in bytes), relative to the address point,
+ /// of the virtual call offset.
+ int64_t VCallOffsetOffset;
+ } Itanium;
+
+ struct {
+ /// The offset of the vtordisp (in bytes), relative to the ECX.
+ int32_t VtordispOffset;
+
+ /// The offset of the vbptr of the derived class (in bytes),
+ /// relative to the ECX after vtordisp adjustment.
+ int32_t VBPtrOffset;
+
+ /// The offset (in bytes) of the vbase offset in the vbtable.
+ int32_t VBOffsetOffset;
+ } Microsoft;
+
+ VirtualAdjustment() {
+ memset(this, 0, sizeof(*this));
+ }
+
+ bool Equals(const VirtualAdjustment &Other) const {
+ return memcmp(this, &Other, sizeof(Other)) == 0;
+ }
+
+ bool isEmpty() const {
+ VirtualAdjustment Zero;
+ return Equals(Zero);
+ }
+
+ bool Less(const VirtualAdjustment &RHS) const {
+ return memcmp(this, &RHS, sizeof(RHS)) < 0;
+ }
+ } Virtual;
+
+ ThisAdjustment() : NonVirtual(0) { }
+
+ bool isEmpty() const { return !NonVirtual && Virtual.isEmpty(); }
+
+ friend bool operator==(const ThisAdjustment &LHS,
+ const ThisAdjustment &RHS) {
+ return LHS.NonVirtual == RHS.NonVirtual && LHS.Virtual.Equals(RHS.Virtual);
+ }
+
+ friend bool operator!=(const ThisAdjustment &LHS, const ThisAdjustment &RHS) {
+ return !(LHS == RHS);
+ }
+
+ friend bool operator<(const ThisAdjustment &LHS,
+ const ThisAdjustment &RHS) {
+ if (LHS.NonVirtual < RHS.NonVirtual)
+ return true;
+
+ return LHS.NonVirtual == RHS.NonVirtual && LHS.Virtual.Less(RHS.Virtual);
+ }
+};
+
+class CXXMethodDecl;
+
+/// The \c this pointer adjustment as well as an optional return
+/// adjustment for a thunk.
+struct ThunkInfo {
+ /// The \c this pointer adjustment.
+ ThisAdjustment This;
+
+ /// The return adjustment.
+ ReturnAdjustment Return;
+
+ /// Holds a pointer to the overridden method this thunk is for,
+ /// if needed by the ABI to distinguish different thunks with equal
+ /// adjustments. Otherwise, null.
+ /// CAUTION: In the unlikely event you need to sort ThunkInfos, consider using
+ /// an ABI-specific comparator.
+ const CXXMethodDecl *Method;
+
+ ThunkInfo() : Method(nullptr) { }
+
+ ThunkInfo(const ThisAdjustment &This, const ReturnAdjustment &Return,
+ const CXXMethodDecl *Method = nullptr)
+ : This(This), Return(Return), Method(Method) {}
+
+ friend bool operator==(const ThunkInfo &LHS, const ThunkInfo &RHS) {
+ return LHS.This == RHS.This && LHS.Return == RHS.Return &&
+ LHS.Method == RHS.Method;
+ }
+
+ bool isEmpty() const {
+ return This.isEmpty() && Return.isEmpty() && Method == nullptr;
+ }
+};
+
+} // end namespace clang
+
+#endif
diff --git a/clang-r353983/include/clang/Basic/AddressSpaces.h b/clang-r353983/include/clang/Basic/AddressSpaces.h
new file mode 100644
index 00000000..2cc67474
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/AddressSpaces.h
@@ -0,0 +1,73 @@
+//===- AddressSpaces.h - Language-specific address spaces -------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+/// \file
+/// Provides definitions for the various language-specific address
+/// spaces.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_ADDRESSSPACES_H
+#define LLVM_CLANG_BASIC_ADDRESSSPACES_H
+
+#include <cassert>
+
+namespace clang {
+
+/// Defines the address space values used by the address space qualifier
+/// of QualType.
+///
+enum class LangAS : unsigned {
+ // The default value 0 is the value used in QualType for the situation
+ // where there is no address space qualifier.
+ Default = 0,
+
+ // OpenCL specific address spaces.
+ // In OpenCL each l-value must have certain non-default address space, each
+ // r-value must have no address space (i.e. the default address space). The
+ // pointee of a pointer must have non-default address space.
+ opencl_global,
+ opencl_local,
+ opencl_constant,
+ opencl_private,
+ opencl_generic,
+
+ // CUDA specific address spaces.
+ cuda_device,
+ cuda_constant,
+ cuda_shared,
+
+ // This denotes the count of language-specific address spaces and also
+ // the offset added to the target-specific address spaces, which are usually
+ // specified by address space attributes __attribute__(address_space(n))).
+ FirstTargetAddressSpace
+};
+
+/// The type of a lookup table which maps from language-specific address spaces
+/// to target-specific ones.
+using LangASMap = unsigned[(unsigned)LangAS::FirstTargetAddressSpace];
+
+/// \return whether \p AS is a target-specific address space rather than a
+/// clang AST address space
+inline bool isTargetAddressSpace(LangAS AS) {
+ return (unsigned)AS >= (unsigned)LangAS::FirstTargetAddressSpace;
+}
+
+inline unsigned toTargetAddressSpace(LangAS AS) {
+ assert(isTargetAddressSpace(AS));
+ return (unsigned)AS - (unsigned)LangAS::FirstTargetAddressSpace;
+}
+
+inline LangAS getLangASFromTargetAS(unsigned TargetAS) {
+ return static_cast<LangAS>((TargetAS) +
+ (unsigned)LangAS::FirstTargetAddressSpace);
+}
+
+} // namespace clang
+
+#endif // LLVM_CLANG_BASIC_ADDRESSSPACES_H
diff --git a/clang-r353983/include/clang/Basic/AlignedAllocation.h b/clang-r353983/include/clang/Basic/AlignedAllocation.h
new file mode 100644
index 00000000..88410c5c
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/AlignedAllocation.h
@@ -0,0 +1,43 @@
+//===--- AlignedAllocation.h - Aligned Allocation ---------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Defines a function that returns the minimum OS versions supporting
+/// C++17's aligned allocation functions.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_ALIGNED_ALLOCATION_H
+#define LLVM_CLANG_BASIC_ALIGNED_ALLOCATION_H
+
+#include "llvm/ADT/Triple.h"
+#include "llvm/Support/ErrorHandling.h"
+#include "llvm/Support/VersionTuple.h"
+
+namespace clang {
+
+inline llvm::VersionTuple alignedAllocMinVersion(llvm::Triple::OSType OS) {
+ switch (OS) {
+ default:
+ break;
+ case llvm::Triple::Darwin:
+ case llvm::Triple::MacOSX: // Earliest supporting version is 10.14.
+ return llvm::VersionTuple(10U, 14U);
+ case llvm::Triple::IOS:
+ case llvm::Triple::TvOS: // Earliest supporting version is 11.0.0.
+ return llvm::VersionTuple(11U);
+ case llvm::Triple::WatchOS: // Earliest supporting version is 4.0.0.
+ return llvm::VersionTuple(4U);
+ }
+
+ llvm_unreachable("Unexpected OS");
+}
+
+} // end namespace clang
+
+#endif // LLVM_CLANG_BASIC_ALIGNED_ALLOCATION_H
diff --git a/clang-r353983/include/clang/Basic/AllDiagnostics.h b/clang-r353983/include/clang/Basic/AllDiagnostics.h
new file mode 100644
index 00000000..cc6aa631
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/AllDiagnostics.h
@@ -0,0 +1,41 @@
+//===--- AllDiagnostics.h - Aggregate Diagnostic headers --------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Includes all the separate Diagnostic headers & some related helpers.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_ALLDIAGNOSTICS_H
+#define LLVM_CLANG_BASIC_ALLDIAGNOSTICS_H
+
+#include "clang/Basic/DiagnosticAST.h"
+#include "clang/Basic/DiagnosticAnalysis.h"
+#include "clang/Basic/DiagnosticComment.h"
+#include "clang/Basic/DiagnosticCrossTU.h"
+#include "clang/Basic/DiagnosticDriver.h"
+#include "clang/Basic/DiagnosticFrontend.h"
+#include "clang/Basic/DiagnosticLex.h"
+#include "clang/Basic/DiagnosticParse.h"
+#include "clang/Basic/DiagnosticSema.h"
+#include "clang/Basic/DiagnosticSerialization.h"
+#include "clang/Basic/DiagnosticRefactoring.h"
+
+namespace clang {
+template <size_t SizeOfStr, typename FieldType>
+class StringSizerHelper {
+ static_assert(SizeOfStr <= FieldType(~0U), "Field too small!");
+public:
+ enum { Size = SizeOfStr };
+};
+} // end namespace clang
+
+#define STR_SIZE(str, fieldTy) clang::StringSizerHelper<sizeof(str)-1, \
+ fieldTy>::Size
+
+#endif
diff --git a/clang-r353983/include/clang/Basic/AttrHasAttributeImpl.inc b/clang-r353983/include/clang/Basic/AttrHasAttributeImpl.inc
new file mode 100644
index 00000000..bd8bdcc9
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/AttrHasAttributeImpl.inc
@@ -0,0 +1,843 @@
+/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
+|* *|
+|* Code to implement the __has_attribute logic *|
+|* *|
+|* Automatically generated file, do not edit! *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+const llvm::Triple &T = Target.getTriple();
+switch (Syntax) {
+case AttrSyntax::GNU:
+ return llvm::StringSwitch<int>(Name)
+ .Case("aarch64_vector_pcs", 1)
+ .Case("amdgpu_flat_work_group_size", 1)
+ .Case("amdgpu_num_sgpr", 1)
+ .Case("amdgpu_num_vgpr", 1)
+ .Case("amdgpu_waves_per_eu", 1)
+ .Case("interrupt", true && (T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb || T.getArch() == llvm::Triple::armeb || T.getArch() == llvm::Triple::thumbeb) ? 1 : 0)
+ .Case("interrupt", true && (T.getArch() == llvm::Triple::avr) ? 1 : 0)
+ .Case("signal", true && (T.getArch() == llvm::Triple::avr) ? 1 : 0)
+ .Case("abi_tag", 1)
+ .Case("acquire_capability", 1)
+ .Case("acquire_shared_capability", 1)
+ .Case("exclusive_lock_function", 1)
+ .Case("shared_lock_function", 1)
+ .Case("acquire_capability", 1)
+ .Case("acquire_shared_capability", 1)
+ .Case("exclusive_lock_function", 1)
+ .Case("shared_lock_function", 1)
+ .Case("acquire_capability", 1)
+ .Case("acquire_shared_capability", 1)
+ .Case("exclusive_lock_function", 1)
+ .Case("shared_lock_function", 1)
+ .Case("acquire_capability", 1)
+ .Case("acquire_shared_capability", 1)
+ .Case("exclusive_lock_function", 1)
+ .Case("shared_lock_function", 1)
+ .Case("acquired_after", 1)
+ .Case("acquired_before", 1)
+ .Case("address_space", 1)
+ .Case("alias", 1)
+ .Case("align_value", 1)
+ .Case("aligned", 1)
+ .Case("alloc_align", 1)
+ .Case("alloc_size", 1)
+ .Case("always_destroy", 1)
+ .Case("always_inline", 1)
+ .Case("analyzer_noreturn", 1)
+ .Case("annotate", 1)
+ .Case("interrupt", true && (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64) ? 1 : 0)
+ .Case("no_caller_saved_registers", true && (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64) ? 1 : 0)
+ .Case("nocf_check", true && (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64) ? 1 : 0)
+ .Case("objc_arc_weak_reference_unavailable", 1)
+ .Case("argument_with_type_tag", 1)
+ .Case("pointer_with_type_tag", 1)
+ .Case("argument_with_type_tag", 1)
+ .Case("pointer_with_type_tag", 1)
+ .Case("artificial", 1)
+ .Case("assert_capability", 1)
+ .Case("assert_shared_capability", 1)
+ .Case("assert_capability", 1)
+ .Case("assert_shared_capability", 1)
+ .Case("assert_exclusive_lock", 1)
+ .Case("assert_shared_lock", 1)
+ .Case("assume_aligned", 1)
+ .Case("availability", 1)
+ .Case("blocks", 1)
+ .Case("bounded", 1)
+ .Case("cdecl", 1)
+ .Case("cf_audited_transfer", 1)
+ .Case("cf_consumed", 1)
+ .Case("cf_returns_not_retained", 1)
+ .Case("cf_returns_retained", 1)
+ .Case("cf_unknown_transfer", 1)
+ .Case("cpu_dispatch", 1)
+ .Case("cpu_specific", 1)
+ .Case("constant", 1)
+ .Case("cudart_builtin", 1)
+ .Case("device", 1)
+ .Case("device_builtin", 1)
+ .Case("device_builtin_surface_type", 1)
+ .Case("device_builtin_texture_type", 1)
+ .Case("global", 1)
+ .Case("host", 1)
+ .Case("launch_bounds", 1)
+ .Case("shared", 1)
+ .Case("callable_when", 1)
+ .Case("callback", 1)
+ .Case("capability", 1)
+ .Case("shared_capability", 1)
+ .Case("capability", 1)
+ .Case("shared_capability", 1)
+ .Case("carries_dependency", 1)
+ .Case("cleanup", 1)
+ .Case("cold", 1)
+ .Case("common", 1)
+ .Case("const", 1)
+ .Case("__const", 1)
+ .Case("const", 1)
+ .Case("__const", 1)
+ .Case("constructor", 1)
+ .Case("consumable", 1)
+ .Case("consumable_auto_cast_state", 1)
+ .Case("consumable_set_state_on_read", 1)
+ .Case("convergent", 1)
+ .Case("dllexport", true && (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb || T.getArch() == llvm::Triple::aarch64) && (T.getOS() == llvm::Triple::Win32) ? 1 : 0)
+ .Case("dllimport", true && (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb || T.getArch() == llvm::Triple::aarch64) && (T.getOS() == llvm::Triple::Win32) ? 1 : 0)
+ .Case("deprecated", 1)
+ .Case("destructor", 1)
+ .Case("diagnose_if", 1)
+ .Case("disable_tail_calls", 1)
+ .Case("enable_if", 1)
+ .Case("enum_extensibility", 1)
+ .Case("exclude_from_explicit_instantiation", 1)
+ .Case("exclusive_trylock_function", 1)
+ .Case("ext_vector_type", 1)
+ .Case("external_source_symbol", 1)
+ .Case("fastcall", 1)
+ .Case("flag_enum", 1)
+ .Case("flatten", 1)
+ .Case("format", 1)
+ .Case("format_arg", 1)
+ .Case("fortify_stdlib", 1)
+ .Case("gnu_inline", 1)
+ .Case("guarded_by", 1)
+ .Case("guarded_var", 1)
+ .Case("hot", 1)
+ .Case("ibaction", 1)
+ .Case("iboutlet", 1)
+ .Case("iboutletcollection", 1)
+ .Case("ifunc", true && (T.getObjectFormat() == llvm::Triple::ELF) ? 1 : 0)
+ .Case("init_priority", 1)
+ .Case("intel_ocl_bicc", 1)
+ .Case("internal_linkage", 1)
+ .Case("lto_visibility_public", 1)
+ .Case("lifetimebound", 1)
+ .Case("lock_returned", 1)
+ .Case("lockable", 1)
+ .Case("locks_excluded", 1)
+ .Case("ms_abi", 1)
+ .Case("interrupt", true && (T.getArch() == llvm::Triple::msp430) ? 1 : 0)
+ .Case("ms_struct", 1)
+ .Case("may_alias", 1)
+ .Case("micromips", true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel) ? 1 : 0)
+ .Case("minsize", 1)
+ .Case("min_vector_width", 1)
+ .Case("mips16", true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel) ? 1 : 0)
+ .Case("interrupt", true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel) ? 1 : 0)
+ .Case("long_call", true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel || T.getArch() == llvm::Triple::mips64 || T.getArch() == llvm::Triple::mips64el) ? 1 : 0)
+ .Case("far", true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel || T.getArch() == llvm::Triple::mips64 || T.getArch() == llvm::Triple::mips64el) ? 1 : 0)
+ .Case("long_call", true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel || T.getArch() == llvm::Triple::mips64 || T.getArch() == llvm::Triple::mips64el) ? 1 : 0)
+ .Case("far", true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel || T.getArch() == llvm::Triple::mips64 || T.getArch() == llvm::Triple::mips64el) ? 1 : 0)
+ .Case("short_call", true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel || T.getArch() == llvm::Triple::mips64 || T.getArch() == llvm::Triple::mips64el) ? 1 : 0)
+ .Case("near", true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel || T.getArch() == llvm::Triple::mips64 || T.getArch() == llvm::Triple::mips64el) ? 1 : 0)
+ .Case("short_call", true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel || T.getArch() == llvm::Triple::mips64 || T.getArch() == llvm::Triple::mips64el) ? 1 : 0)
+ .Case("near", true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel || T.getArch() == llvm::Triple::mips64 || T.getArch() == llvm::Triple::mips64el) ? 1 : 0)
+ .Case("mode", 1)
+ .Case("ns_consumed", 1)
+ .Case("ns_consumes_self", 1)
+ .Case("ns_returns_autoreleased", 1)
+ .Case("ns_returns_not_retained", 1)
+ .Case("ns_returns_retained", 1)
+ .Case("naked", 1)
+ .Case("neon_polyvector_type", 1)
+ .Case("neon_vector_type", 1)
+ .Case("nocommon", 1)
+ .Case("nodebug", 1)
+ .Case("noderef", 1)
+ .Case("no_destroy", 1)
+ .Case("noduplicate", 1)
+ .Case("noescape", 1)
+ .Case("noinline", 1)
+ .Case("no_instrument_function", 1)
+ .Case("nomicromips", true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel) ? 1 : 0)
+ .Case("nomips16", true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel) ? 1 : 0)
+ .Case("noreturn", 1)
+ .Case("no_sanitize", 1)
+ .Case("no_address_safety_analysis", 1)
+ .Case("no_sanitize_address", 1)
+ .Case("no_sanitize_thread", 1)
+ .Case("no_sanitize_memory", 1)
+ .Case("no_address_safety_analysis", 1)
+ .Case("no_sanitize_address", 1)
+ .Case("no_sanitize_thread", 1)
+ .Case("no_sanitize_memory", 1)
+ .Case("no_address_safety_analysis", 1)
+ .Case("no_sanitize_address", 1)
+ .Case("no_sanitize_thread", 1)
+ .Case("no_sanitize_memory", 1)
+ .Case("no_address_safety_analysis", 1)
+ .Case("no_sanitize_address", 1)
+ .Case("no_sanitize_thread", 1)
+ .Case("no_sanitize_memory", 1)
+ .Case("no_speculative_load_hardening", 1)
+ .Case("no_split_stack", 1)
+ .Case("no_stack_protector", 1)
+ .Case("no_thread_safety_analysis", 1)
+ .Case("nothrow", 1)
+ .Case("nonnull", 1)
+ .Case("not_tail_called", 1)
+ .Case("nv_weak", 1)
+ .Case("os_consumed", 1)
+ .Case("os_consumes_this", 1)
+ .Case("os_returns_not_retained", 1)
+ .Case("os_returns_retained", 1)
+ .Case("os_returns_retained_on_non_zero", 1)
+ .Case("os_returns_retained_on_zero", 1)
+ .Case("objc_boxable", 1)
+ .Case("objc_bridge", 1)
+ .Case("objc_bridge_mutable", 1)
+ .Case("objc_bridge_related", 1)
+ .Case("objc_designated_initializer", 1)
+ .Case("objc_exception", 1)
+ .Case("objc_protocol_requires_explicit_implementation", 1)
+ .Case("objc_externally_retained", 1)
+ .Case("objc_gc", 1)
+ .Case("objc_independent_class", 1)
+ .Case("objc_method_family", 1)
+ .Case("NSObject", 1)
+ .Case("objc_nonlazy_class", 1)
+ .Case("objc_ownership", 1)
+ .Case("objc_precise_lifetime", 1)
+ .Case("objc_requires_property_definitions", 1)
+ .Case("objc_requires_super", 1)
+ .Case("objc_returns_inner_pointer", 1)
+ .Case("objc_root_class", 1)
+ .Case("objc_runtime_name", 1)
+ .Case("objc_runtime_visible", 1)
+ .Case("objc_subclassing_restricted", 1)
+ .Case("intel_reqd_sub_group_size", 1)
+ .Case("nosvm", 1)
+ .Case("opencl_unroll_hint", 1)
+ .Case("optnone", 1)
+ .Case("overloadable", 1)
+ .Case("ownership_holds", 1)
+ .Case("ownership_returns", 1)
+ .Case("ownership_takes", 1)
+ .Case("ownership_holds", 1)
+ .Case("ownership_returns", 1)
+ .Case("ownership_takes", 1)
+ .Case("ownership_holds", 1)
+ .Case("ownership_returns", 1)
+ .Case("ownership_takes", 1)
+ .Case("packed", 1)
+ .Case("param_typestate", 1)
+ .Case("pascal", 1)
+ .Case("pass_object_size", 1)
+ .Case("pcs", 1)
+ .Case("preserve_all", 1)
+ .Case("preserve_most", 1)
+ .Case("pt_guarded_by", 1)
+ .Case("pt_guarded_var", 1)
+ .Case("pure", 1)
+ .Case("interrupt", true && (T.getArch() == llvm::Triple::riscv32 || T.getArch() == llvm::Triple::riscv64) ? 1 : 0)
+ .Case("regcall", 1)
+ .Case("regparm", 1)
+ .Case("reinitializes", 1)
+ .Case("release_capability", 1)
+ .Case("release_shared_capability", 1)
+ .Case("release_generic_capability", 1)
+ .Case("unlock_function", 1)
+ .Case("release_capability", 1)
+ .Case("release_shared_capability", 1)
+ .Case("release_generic_capability", 1)
+ .Case("unlock_function", 1)
+ .Case("release_capability", 1)
+ .Case("release_shared_capability", 1)
+ .Case("release_generic_capability", 1)
+ .Case("unlock_function", 1)
+ .Case("release_capability", 1)
+ .Case("release_shared_capability", 1)
+ .Case("release_generic_capability", 1)
+ .Case("unlock_function", 1)
+ .Case("kernel", 1)
+ .Case("reqd_work_group_size", 1)
+ .Case("require_constant_initialization", 1)
+ .Case("requires_capability", 1)
+ .Case("exclusive_locks_required", 1)
+ .Case("requires_shared_capability", 1)
+ .Case("shared_locks_required", 1)
+ .Case("requires_capability", 1)
+ .Case("exclusive_locks_required", 1)
+ .Case("requires_shared_capability", 1)
+ .Case("shared_locks_required", 1)
+ .Case("requires_capability", 1)
+ .Case("exclusive_locks_required", 1)
+ .Case("requires_shared_capability", 1)
+ .Case("shared_locks_required", 1)
+ .Case("requires_capability", 1)
+ .Case("exclusive_locks_required", 1)
+ .Case("requires_shared_capability", 1)
+ .Case("shared_locks_required", 1)
+ .Case("malloc", 1)
+ .Case("return_typestate", 1)
+ .Case("returns_nonnull", 1)
+ .Case("returns_twice", 1)
+ .Case("scoped_lockable", 1)
+ .Case("section", 1)
+ .Case("selectany", 1)
+ .Case("sentinel", 1)
+ .Case("set_typestate", 1)
+ .Case("shared_trylock_function", 1)
+ .Case("speculative_load_hardening", 1)
+ .Case("stdcall", 1)
+ .Case("swiftcall", 1)
+ .Case("swift_context", 1)
+ .Case("swift_error_result", 1)
+ .Case("swift_indirect_result", 1)
+ .Case("sysv_abi", 1)
+ .Case("tls_model", 1)
+ .Case("target", 1)
+ .Case("test_typestate", 1)
+ .Case("thiscall", 1)
+ .Case("transparent_union", 1)
+ .Case("trivial_abi", 1)
+ .Case("try_acquire_capability", 1)
+ .Case("try_acquire_shared_capability", 1)
+ .Case("try_acquire_capability", 1)
+ .Case("try_acquire_shared_capability", 1)
+ .Case("type_tag_for_datatype", 1)
+ .Case("type_visibility", 1)
+ .Case("unavailable", 1)
+ .Case("uninitialized", 1)
+ .Case("unused", 1)
+ .Case("used", 1)
+ .Case("vecreturn", 1)
+ .Case("vec_type_hint", 1)
+ .Case("vectorcall", 1)
+ .Case("vector_size", 1)
+ .Case("visibility", 1)
+ .Case("warn_unused", 1)
+ .Case("warn_unused_result", 1)
+ .Case("weak", 1)
+ .Case("weak_import", 1)
+ .Case("weakref", 1)
+ .Case("import_module", true && (T.getArch() == llvm::Triple::wasm32 || T.getArch() == llvm::Triple::wasm64) ? 1 : 0)
+ .Case("import_name", true && (T.getArch() == llvm::Triple::wasm32 || T.getArch() == llvm::Triple::wasm64) ? 1 : 0)
+ .Case("work_group_size_hint", 1)
+ .Case("force_align_arg_pointer", true && (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64) ? 1 : 0)
+ .Case("xray_always_instrument", 1)
+ .Case("xray_never_instrument", 1)
+ .Case("xray_always_instrument", 1)
+ .Case("xray_never_instrument", 1)
+ .Case("xray_log_args", 1)
+ .Default(0);
+case AttrSyntax::Declspec:
+ return llvm::StringSwitch<int>(Name)
+ .Case("align", 1)
+ .Case("cpu_dispatch", 1)
+ .Case("cpu_specific", 1)
+ .Case("__constant__", 1)
+ .Case("__cudart_builtin__", 1)
+ .Case("__device__", 1)
+ .Case("__device_builtin__", 1)
+ .Case("__device_builtin_surface_type__", 1)
+ .Case("__device_builtin_texture_type__", 1)
+ .Case("__global__", 1)
+ .Case("__host__", 1)
+ .Case("__launch_bounds__", 1)
+ .Case("__shared__", 1)
+ .Case("code_seg", 1)
+ .Case("dllexport", true && (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb || T.getArch() == llvm::Triple::aarch64) && (T.getOS() == llvm::Triple::Win32) ? 1 : 0)
+ .Case("dllimport", true && (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb || T.getArch() == llvm::Triple::aarch64) && (T.getOS() == llvm::Triple::Win32) ? 1 : 0)
+ .Case("deprecated", 1)
+ .Case("empty_bases", true && (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb || T.getArch() == llvm::Triple::aarch64) && (Target.getCXXABI().getKind() == TargetCXXABI::Microsoft) ? 1 : 0)
+ .Case("layout_version", true && (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb || T.getArch() == llvm::Triple::aarch64) && (Target.getCXXABI().getKind() == TargetCXXABI::Microsoft) ? 1 : 0)
+ .Case("novtable", true && (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb || T.getArch() == llvm::Triple::aarch64) && (Target.getCXXABI().getKind() == TargetCXXABI::Microsoft) ? 1 : 0)
+ .Case("naked", 1)
+ .Case("noalias", 1)
+ .Case("noinline", 1)
+ .Case("noreturn", 1)
+ .Case("nothrow", 1)
+ .Case("restrict", 1)
+ .Case("allocate", 1)
+ .Case("selectany", 1)
+ .Case("thread", 1)
+ .Case("uuid", 1)
+ .Case("property", 1)
+ .Default(0);
+case AttrSyntax::Microsoft:
+ return llvm::StringSwitch<int>(Name)
+ .Case("uuid", 1)
+ .Default(0);
+case AttrSyntax::Pragma:
+ return llvm::StringSwitch<int>(Name)
+ .Case("init_seg", 1)
+ .Case("loop", 1)
+ .Case("unroll", 1)
+ .Case("nounroll", 1)
+ .Case("unroll_and_jam", 1)
+ .Case("nounroll_and_jam", 1)
+ .Case("loop", 1)
+ .Case("unroll", 1)
+ .Case("nounroll", 1)
+ .Case("unroll_and_jam", 1)
+ .Case("nounroll_and_jam", 1)
+ .Case("loop", 1)
+ .Case("unroll", 1)
+ .Case("nounroll", 1)
+ .Case("unroll_and_jam", 1)
+ .Case("nounroll_and_jam", 1)
+ .Case("loop", 1)
+ .Case("unroll", 1)
+ .Case("nounroll", 1)
+ .Case("unroll_and_jam", 1)
+ .Case("nounroll_and_jam", 1)
+ .Case("loop", 1)
+ .Case("unroll", 1)
+ .Case("nounroll", 1)
+ .Case("unroll_and_jam", 1)
+ .Case("nounroll_and_jam", 1)
+ .Case("declare simd", 1)
+ .Case("declare target", 1)
+ .Default(0);
+case AttrSyntax::CXX: {
+if (ScopeName == "") {
+ return llvm::StringSwitch<int>(Name)
+ .Case("noreturn", LangOpts.CPlusPlus11 ? 200809 : 0)
+ .Case("carries_dependency", LangOpts.CPlusPlus11 ? 200809 : 0)
+ .Case("deprecated", LangOpts.CPlusPlus11 ? 201309 : 0)
+ .Case("deprecated", LangOpts.CPlusPlus11 ? 201309 : 0)
+ .Case("fallthrough", LangOpts.CPlusPlus11 ? 201603 : 0)
+ .Case("fallthrough", LangOpts.CPlusPlus11 ? 201603 : 0)
+ .Case("maybe_unused", LangOpts.CPlusPlus11 ? 201603 : 0)
+ .Case("unused", LangOpts.CPlusPlus11 ? 201603 : 0)
+ .Case("nodiscard", LangOpts.CPlusPlus11 ? 201603 : 0)
+ .Case("warn_unused_result", LangOpts.CPlusPlus11 ? 201603 : 0)
+ .Case("warn_unused_result", LangOpts.CPlusPlus11 ? 201603 : 0)
+ .Default(0);
+} else if (ScopeName == "clang") {
+ return llvm::StringSwitch<int>(Name)
+ .Case("aarch64_vector_pcs", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("amdgpu_flat_work_group_size", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("amdgpu_num_sgpr", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("amdgpu_num_vgpr", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("amdgpu_waves_per_eu", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("acquire_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("acquire_shared_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("acquire_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("acquire_shared_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("address_space", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("always_destroy", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("annotate", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("objc_arc_weak_reference_unavailable", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("argument_with_type_tag", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("pointer_with_type_tag", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("argument_with_type_tag", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("pointer_with_type_tag", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("assert_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("assert_shared_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("assert_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("assert_shared_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("availability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("blocks", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("cf_audited_transfer", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("cf_consumed", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("cf_returns_not_retained", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("cf_returns_retained", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("cf_unknown_transfer", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("cpu_dispatch", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("cpu_specific", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("callable_when", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("callback", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("shared_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("shared_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("consumable", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("consumable_auto_cast_state", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("consumable_set_state_on_read", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("convergent", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("disable_tail_calls", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("enum_extensibility", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("exclude_from_explicit_instantiation", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("external_source_symbol", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("fallthrough", LangOpts.CPlusPlus11 ? 201603 : 0)
+ .Case("flag_enum", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("fortify_stdlib", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("guarded_var", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("ibaction", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("iboutlet", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("iboutletcollection", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("intel_ocl_bicc", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("internal_linkage", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("lto_visibility_public", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("lifetimebound", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("minsize", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("min_vector_width", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("ns_consumed", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("ns_consumes_self", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("ns_returns_autoreleased", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("ns_returns_not_retained", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("ns_returns_retained", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("neon_polyvector_type", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("neon_vector_type", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("noderef", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("no_destroy", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("noduplicate", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("noescape", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("no_sanitize", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("no_sanitize_memory", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("no_speculative_load_hardening", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("no_stack_protector", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("no_thread_safety_analysis", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("not_tail_called", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("os_consumed", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("os_consumes_this", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("os_returns_not_retained", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("os_returns_retained", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("os_returns_retained_on_non_zero", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("os_returns_retained_on_zero", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("objc_boxable", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("objc_bridge", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("objc_bridge_mutable", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("objc_bridge_related", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("objc_designated_initializer", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("objc_exception", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("objc_protocol_requires_explicit_implementation", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("objc_externally_retained", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("objc_gc", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("objc_independent_class", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("objc_method_family", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("NSObject", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("objc_nonlazy_class", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("objc_ownership", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("objc_precise_lifetime", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("objc_requires_property_definitions", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("objc_requires_super", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("objc_returns_inner_pointer", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("objc_root_class", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("objc_runtime_name", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("objc_runtime_visible", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("objc_subclassing_restricted", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("optnone", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("overloadable", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("ownership_holds", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("ownership_returns", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("ownership_takes", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("ownership_holds", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("ownership_returns", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("ownership_takes", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("ownership_holds", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("ownership_returns", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("ownership_takes", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("param_typestate", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("pascal", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("pass_object_size", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("preserve_all", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("preserve_most", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("pt_guarded_var", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("reinitializes", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("release_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("release_shared_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("release_generic_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("unlock_function", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("release_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("release_shared_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("release_generic_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("unlock_function", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("release_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("release_shared_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("release_generic_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("unlock_function", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("release_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("release_shared_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("release_generic_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("unlock_function", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("require_constant_initialization", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("requires_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("exclusive_locks_required", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("requires_shared_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("shared_locks_required", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("requires_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("exclusive_locks_required", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("requires_shared_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("shared_locks_required", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("requires_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("exclusive_locks_required", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("requires_shared_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("shared_locks_required", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("requires_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("exclusive_locks_required", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("requires_shared_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("shared_locks_required", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("return_typestate", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("scoped_lockable", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("set_typestate", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("speculative_load_hardening", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("swiftcall", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("swift_context", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("swift_error_result", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("swift_indirect_result", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("test_typestate", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("trivial_abi", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("try_acquire_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("try_acquire_shared_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("try_acquire_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("try_acquire_shared_capability", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("type_tag_for_datatype", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("type_visibility", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("unavailable", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("uninitialized", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("vecreturn", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("vectorcall", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("warn_unused_result", LangOpts.CPlusPlus11 ? 201603 : 0)
+ .Case("weak_import", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("import_module", true && (T.getArch() == llvm::Triple::wasm32 || T.getArch() == llvm::Triple::wasm64) && LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("import_name", true && (T.getArch() == llvm::Triple::wasm32 || T.getArch() == llvm::Triple::wasm64) && LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("xray_always_instrument", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("xray_never_instrument", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("xray_always_instrument", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("xray_never_instrument", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("xray_log_args", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Default(0);
+} else if (ScopeName == "gnu") {
+ return llvm::StringSwitch<int>(Name)
+ .Case("interrupt", true && (T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb || T.getArch() == llvm::Triple::armeb || T.getArch() == llvm::Triple::thumbeb) && LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("interrupt", true && (T.getArch() == llvm::Triple::avr) && LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("signal", true && (T.getArch() == llvm::Triple::avr) && LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("abi_tag", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("alias", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("aligned", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("alloc_align", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("alloc_size", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("always_inline", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("interrupt", true && (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64) && LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("no_caller_saved_registers", true && (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64) && LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("nocf_check", true && (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64) && LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("artificial", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("assume_aligned", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("cdecl", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("cleanup", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("cold", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("common", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("const", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("__const", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("const", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("__const", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("constructor", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("dllexport", true && (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb || T.getArch() == llvm::Triple::aarch64) && (T.getOS() == llvm::Triple::Win32) && LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("dllimport", true && (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb || T.getArch() == llvm::Triple::aarch64) && (T.getOS() == llvm::Triple::Win32) && LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("deprecated", LangOpts.CPlusPlus11 ? 201309 : 0)
+ .Case("destructor", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("fastcall", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("flatten", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("format", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("format_arg", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("gnu_inline", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("hot", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("ifunc", true && (T.getObjectFormat() == llvm::Triple::ELF) && LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("init_priority", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("ms_abi", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("interrupt", true && (T.getArch() == llvm::Triple::msp430) && LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("ms_struct", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("may_alias", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("micromips", true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel) && LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("mips16", true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel) && LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("interrupt", true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel) && LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("long_call", true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel || T.getArch() == llvm::Triple::mips64 || T.getArch() == llvm::Triple::mips64el) && LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("far", true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel || T.getArch() == llvm::Triple::mips64 || T.getArch() == llvm::Triple::mips64el) && LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("long_call", true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel || T.getArch() == llvm::Triple::mips64 || T.getArch() == llvm::Triple::mips64el) && LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("far", true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel || T.getArch() == llvm::Triple::mips64 || T.getArch() == llvm::Triple::mips64el) && LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("short_call", true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel || T.getArch() == llvm::Triple::mips64 || T.getArch() == llvm::Triple::mips64el) && LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("near", true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel || T.getArch() == llvm::Triple::mips64 || T.getArch() == llvm::Triple::mips64el) && LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("short_call", true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel || T.getArch() == llvm::Triple::mips64 || T.getArch() == llvm::Triple::mips64el) && LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("near", true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel || T.getArch() == llvm::Triple::mips64 || T.getArch() == llvm::Triple::mips64el) && LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("mode", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("naked", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("nocommon", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("nodebug", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("noinline", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("no_instrument_function", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("nomicromips", true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel) && LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("nomips16", true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel) && LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("noreturn", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("no_address_safety_analysis", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("no_sanitize_address", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("no_sanitize_thread", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("no_address_safety_analysis", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("no_sanitize_address", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("no_sanitize_thread", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("no_address_safety_analysis", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("no_sanitize_address", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("no_sanitize_thread", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("no_split_stack", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("nothrow", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("nonnull", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("packed", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("pcs", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("pure", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("interrupt", true && (T.getArch() == llvm::Triple::riscv32 || T.getArch() == llvm::Triple::riscv64) && LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("regcall", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("regparm", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("malloc", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("returns_nonnull", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("returns_twice", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("section", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("selectany", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("sentinel", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("stdcall", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("sysv_abi", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("tls_model", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("target", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("thiscall", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("transparent_union", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("unused", LangOpts.CPlusPlus11 ? 201603 : 0)
+ .Case("used", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("vector_size", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("visibility", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("warn_unused", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("warn_unused_result", LangOpts.CPlusPlus11 ? 201603 : 0)
+ .Case("weak", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("weakref", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Case("force_align_arg_pointer", true && (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64) && LangOpts.CPlusPlus11 ? 1 : 0)
+ .Default(0);
+} else if (ScopeName == "gsl") {
+ return llvm::StringSwitch<int>(Name)
+ .Case("suppress", LangOpts.CPlusPlus11 ? 1 : 0)
+ .Default(0);
+}
+} break;
+case AttrSyntax::C: {
+if (ScopeName == "") {
+ return llvm::StringSwitch<int>(Name)
+ .Case("deprecated", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("fallthrough", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("maybe_unused", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("nodiscard", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Default(0);
+} else if (ScopeName == "clang") {
+ return llvm::StringSwitch<int>(Name)
+ .Case("aarch64_vector_pcs", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("address_space", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("annotate", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("objc_arc_weak_reference_unavailable", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("argument_with_type_tag", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("pointer_with_type_tag", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("argument_with_type_tag", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("pointer_with_type_tag", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("availability", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("blocks", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("cf_audited_transfer", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("cf_consumed", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("cf_returns_not_retained", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("cf_returns_retained", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("cf_unknown_transfer", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("cpu_dispatch", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("cpu_specific", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("callback", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("convergent", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("disable_tail_calls", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("enum_extensibility", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("exclude_from_explicit_instantiation", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("external_source_symbol", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("flag_enum", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("fortify_stdlib", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("ibaction", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("iboutlet", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("iboutletcollection", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("internal_linkage", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("lto_visibility_public", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("minsize", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("min_vector_width", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("ns_consumed", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("ns_consumes_self", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("ns_returns_autoreleased", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("ns_returns_not_retained", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("ns_returns_retained", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("neon_polyvector_type", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("neon_vector_type", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("noderef", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("noduplicate", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("noescape", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("no_sanitize", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("no_sanitize_memory", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("no_speculative_load_hardening", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("no_stack_protector", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("no_thread_safety_analysis", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("not_tail_called", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("os_consumed", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("os_consumes_this", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("os_returns_not_retained", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("os_returns_retained", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("os_returns_retained_on_non_zero", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("os_returns_retained_on_zero", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("objc_boxable", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("objc_bridge", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("objc_bridge_mutable", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("objc_bridge_related", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("objc_designated_initializer", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("objc_exception", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("objc_protocol_requires_explicit_implementation", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("objc_externally_retained", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("objc_gc", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("objc_independent_class", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("objc_method_family", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("NSObject", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("objc_nonlazy_class", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("objc_ownership", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("objc_precise_lifetime", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("objc_requires_property_definitions", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("objc_requires_super", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("objc_returns_inner_pointer", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("objc_root_class", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("objc_runtime_name", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("objc_runtime_visible", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("objc_subclassing_restricted", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("optnone", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("overloadable", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("ownership_holds", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("ownership_returns", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("ownership_takes", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("ownership_holds", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("ownership_returns", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("ownership_takes", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("ownership_holds", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("ownership_returns", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("ownership_takes", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("pascal", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("pass_object_size", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("preserve_all", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("preserve_most", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("speculative_load_hardening", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("swiftcall", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("swift_context", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("swift_error_result", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("swift_indirect_result", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("type_tag_for_datatype", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("type_visibility", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("unavailable", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("vectorcall", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("weak_import", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("import_module", true && (T.getArch() == llvm::Triple::wasm32 || T.getArch() == llvm::Triple::wasm64) && LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("import_name", true && (T.getArch() == llvm::Triple::wasm32 || T.getArch() == llvm::Triple::wasm64) && LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("xray_always_instrument", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("xray_never_instrument", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("xray_always_instrument", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("xray_never_instrument", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Case("xray_log_args", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+ .Default(0);
+}
+} break;
+}
diff --git a/clang-r353983/include/clang/Basic/AttrKinds.h b/clang-r353983/include/clang/Basic/AttrKinds.h
new file mode 100644
index 00000000..ec0052df
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/AttrKinds.h
@@ -0,0 +1,33 @@
+//===----- Attr.h - Enum values for C Attribute Kinds ----------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Defines the clang::attr::Kind enum.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_ATTRKINDS_H
+#define LLVM_CLANG_BASIC_ATTRKINDS_H
+
+namespace clang {
+
+namespace attr {
+
+// A list of all the recognized kinds of attributes.
+enum Kind {
+#define ATTR(X) X,
+#define ATTR_RANGE(CLASS, FIRST_NAME, LAST_NAME) \
+ First##CLASS = FIRST_NAME, \
+ Last##CLASS = LAST_NAME,
+#include "clang/Basic/AttrList.inc"
+};
+
+} // end namespace attr
+} // end namespace clang
+
+#endif
diff --git a/clang-r353983/include/clang/Basic/AttrList.inc b/clang-r353983/include/clang/Basic/AttrList.inc
new file mode 100644
index 00000000..156a2a43
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/AttrList.inc
@@ -0,0 +1,334 @@
+/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
+|* *|
+|* List of all attributes that Clang recognizes *|
+|* *|
+|* Automatically generated file, do not edit! *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+#ifndef TYPE_ATTR
+#define TYPE_ATTR(NAME) ATTR(NAME)
+#endif
+
+#ifndef STMT_ATTR
+#define STMT_ATTR(NAME) ATTR(NAME)
+#endif
+
+#ifndef INHERITABLE_ATTR
+#define INHERITABLE_ATTR(NAME) ATTR(NAME)
+#endif
+
+#ifndef DECL_OR_TYPE_ATTR
+#define DECL_OR_TYPE_ATTR(NAME) INHERITABLE_ATTR(NAME)
+#endif
+
+#ifndef INHERITABLE_PARAM_ATTR
+#define INHERITABLE_PARAM_ATTR(NAME) INHERITABLE_ATTR(NAME)
+#endif
+
+#ifndef PARAMETER_ABI_ATTR
+#define PARAMETER_ABI_ATTR(NAME) INHERITABLE_PARAM_ATTR(NAME)
+#endif
+
+#ifndef PRAGMA_SPELLING_ATTR
+#define PRAGMA_SPELLING_ATTR(NAME)
+#endif
+
+TYPE_ATTR(AddressSpace)
+TYPE_ATTR(NoDeref)
+TYPE_ATTR(ObjCGC)
+TYPE_ATTR(ObjCInertUnsafeUnretained)
+TYPE_ATTR(ObjCKindOf)
+TYPE_ATTR(OpenCLConstantAddressSpace)
+TYPE_ATTR(OpenCLGenericAddressSpace)
+TYPE_ATTR(OpenCLGlobalAddressSpace)
+TYPE_ATTR(OpenCLLocalAddressSpace)
+TYPE_ATTR(OpenCLPrivateAddressSpace)
+TYPE_ATTR(Ptr32)
+TYPE_ATTR(Ptr64)
+TYPE_ATTR(SPtr)
+TYPE_ATTR(TypeNonNull)
+TYPE_ATTR(TypeNullUnspecified)
+TYPE_ATTR(TypeNullable)
+TYPE_ATTR(UPtr)
+STMT_ATTR(FallThrough)
+STMT_ATTR(Suppress)
+DECL_OR_TYPE_ATTR(AArch64VectorPcs)
+DECL_OR_TYPE_ATTR(AnyX86NoCfCheck)
+DECL_OR_TYPE_ATTR(CDecl)
+DECL_OR_TYPE_ATTR(FastCall)
+DECL_OR_TYPE_ATTR(IntelOclBicc)
+DECL_OR_TYPE_ATTR(LifetimeBound)
+DECL_OR_TYPE_ATTR(MSABI)
+DECL_OR_TYPE_ATTR(NSReturnsRetained)
+DECL_OR_TYPE_ATTR(ObjCOwnership)
+DECL_OR_TYPE_ATTR(Pascal)
+DECL_OR_TYPE_ATTR(Pcs)
+DECL_OR_TYPE_ATTR(PreserveAll)
+DECL_OR_TYPE_ATTR(PreserveMost)
+DECL_OR_TYPE_ATTR(RegCall)
+DECL_OR_TYPE_ATTR(StdCall)
+DECL_OR_TYPE_ATTR(SwiftCall)
+DECL_OR_TYPE_ATTR(SysVABI)
+DECL_OR_TYPE_ATTR(ThisCall)
+DECL_OR_TYPE_ATTR(VectorCall)
+PARAMETER_ABI_ATTR(SwiftContext)
+PARAMETER_ABI_ATTR(SwiftErrorResult)
+PARAMETER_ABI_ATTR(SwiftIndirectResult)
+INHERITABLE_PARAM_ATTR(Annotate)
+INHERITABLE_PARAM_ATTR(CFConsumed)
+INHERITABLE_PARAM_ATTR(CarriesDependency)
+INHERITABLE_PARAM_ATTR(NSConsumed)
+INHERITABLE_PARAM_ATTR(NonNull)
+INHERITABLE_PARAM_ATTR(OSConsumed)
+INHERITABLE_PARAM_ATTR(PassObjectSize)
+INHERITABLE_ATTR(AMDGPUFlatWorkGroupSize)
+INHERITABLE_ATTR(AMDGPUNumSGPR)
+INHERITABLE_ATTR(AMDGPUNumVGPR)
+INHERITABLE_ATTR(AMDGPUWavesPerEU)
+INHERITABLE_ATTR(ARMInterrupt)
+INHERITABLE_ATTR(AVRInterrupt)
+INHERITABLE_ATTR(AVRSignal)
+INHERITABLE_ATTR(AcquireCapability)
+INHERITABLE_ATTR(AcquiredAfter)
+INHERITABLE_ATTR(AcquiredBefore)
+INHERITABLE_ATTR(AlignMac68k)
+INHERITABLE_ATTR(Aligned)
+INHERITABLE_ATTR(AllocAlign)
+INHERITABLE_ATTR(AllocSize)
+INHERITABLE_ATTR(AlwaysDestroy)
+INHERITABLE_ATTR(AlwaysInline)
+INHERITABLE_ATTR(AnalyzerNoReturn)
+INHERITABLE_ATTR(AnyX86Interrupt)
+INHERITABLE_ATTR(AnyX86NoCallerSavedRegisters)
+INHERITABLE_ATTR(ArcWeakrefUnavailable)
+INHERITABLE_ATTR(ArgumentWithTypeTag)
+INHERITABLE_ATTR(Artificial)
+INHERITABLE_ATTR(AsmLabel)
+INHERITABLE_ATTR(AssertCapability)
+INHERITABLE_ATTR(AssertExclusiveLock)
+INHERITABLE_ATTR(AssertSharedLock)
+INHERITABLE_ATTR(AssumeAligned)
+INHERITABLE_ATTR(Availability)
+INHERITABLE_ATTR(Blocks)
+INHERITABLE_ATTR(C11NoReturn)
+INHERITABLE_ATTR(CFAuditedTransfer)
+INHERITABLE_ATTR(CFReturnsNotRetained)
+INHERITABLE_ATTR(CFReturnsRetained)
+INHERITABLE_ATTR(CFUnknownTransfer)
+INHERITABLE_ATTR(CPUDispatch)
+INHERITABLE_ATTR(CPUSpecific)
+INHERITABLE_ATTR(CUDAConstant)
+INHERITABLE_ATTR(CUDADevice)
+INHERITABLE_ATTR(CUDAGlobal)
+INHERITABLE_ATTR(CUDAHost)
+INHERITABLE_ATTR(CUDAInvalidTarget)
+INHERITABLE_ATTR(CUDALaunchBounds)
+INHERITABLE_ATTR(CUDAShared)
+INHERITABLE_ATTR(CXX11NoReturn)
+INHERITABLE_ATTR(CallableWhen)
+INHERITABLE_ATTR(Callback)
+INHERITABLE_ATTR(Capability)
+INHERITABLE_ATTR(CapturedRecord)
+INHERITABLE_ATTR(Cleanup)
+INHERITABLE_ATTR(CodeSeg)
+INHERITABLE_ATTR(Cold)
+INHERITABLE_ATTR(Common)
+INHERITABLE_ATTR(Const)
+INHERITABLE_ATTR(Constructor)
+INHERITABLE_ATTR(Consumable)
+INHERITABLE_ATTR(ConsumableAutoCast)
+INHERITABLE_ATTR(ConsumableSetOnRead)
+INHERITABLE_ATTR(Convergent)
+INHERITABLE_ATTR(DLLExport)
+INHERITABLE_ATTR(DLLExportStaticLocal)
+INHERITABLE_ATTR(DLLImport)
+INHERITABLE_ATTR(DLLImportStaticLocal)
+INHERITABLE_ATTR(Deprecated)
+INHERITABLE_ATTR(Destructor)
+INHERITABLE_ATTR(DiagnoseIf)
+INHERITABLE_ATTR(DisableTailCalls)
+INHERITABLE_ATTR(EmptyBases)
+INHERITABLE_ATTR(EnableIf)
+INHERITABLE_ATTR(EnumExtensibility)
+INHERITABLE_ATTR(ExcludeFromExplicitInstantiation)
+INHERITABLE_ATTR(ExclusiveTrylockFunction)
+INHERITABLE_ATTR(ExternalSourceSymbol)
+INHERITABLE_ATTR(Final)
+INHERITABLE_ATTR(FlagEnum)
+INHERITABLE_ATTR(Flatten)
+INHERITABLE_ATTR(Format)
+INHERITABLE_ATTR(FormatArg)
+INHERITABLE_ATTR(FortifyStdLib)
+INHERITABLE_ATTR(GNUInline)
+INHERITABLE_ATTR(GuardedBy)
+INHERITABLE_ATTR(GuardedVar)
+INHERITABLE_ATTR(Hot)
+INHERITABLE_ATTR(IBAction)
+INHERITABLE_ATTR(IBOutlet)
+INHERITABLE_ATTR(IBOutletCollection)
+INHERITABLE_ATTR(InitPriority)
+INHERITABLE_ATTR(InternalLinkage)
+INHERITABLE_ATTR(LTOVisibilityPublic)
+INHERITABLE_ATTR(LayoutVersion)
+INHERITABLE_ATTR(LockReturned)
+INHERITABLE_ATTR(LocksExcluded)
+INHERITABLE_ATTR(MSInheritance)
+INHERITABLE_ATTR(MSNoVTable)
+INHERITABLE_ATTR(MSP430Interrupt)
+INHERITABLE_ATTR(MSStruct)
+INHERITABLE_ATTR(MSVtorDisp)
+INHERITABLE_ATTR(MaxFieldAlignment)
+INHERITABLE_ATTR(MayAlias)
+INHERITABLE_ATTR(MicroMips)
+INHERITABLE_ATTR(MinSize)
+INHERITABLE_ATTR(MinVectorWidth)
+INHERITABLE_ATTR(Mips16)
+INHERITABLE_ATTR(MipsInterrupt)
+INHERITABLE_ATTR(MipsLongCall)
+INHERITABLE_ATTR(MipsShortCall)
+INHERITABLE_ATTR(NSConsumesSelf)
+INHERITABLE_ATTR(NSReturnsAutoreleased)
+INHERITABLE_ATTR(NSReturnsNotRetained)
+INHERITABLE_ATTR(Naked)
+INHERITABLE_ATTR(NoAlias)
+INHERITABLE_ATTR(NoCommon)
+INHERITABLE_ATTR(NoDebug)
+INHERITABLE_ATTR(NoDestroy)
+INHERITABLE_ATTR(NoDuplicate)
+INHERITABLE_ATTR(NoInline)
+INHERITABLE_ATTR(NoInstrumentFunction)
+INHERITABLE_ATTR(NoMicroMips)
+INHERITABLE_ATTR(NoMips16)
+INHERITABLE_ATTR(NoReturn)
+INHERITABLE_ATTR(NoSanitize)
+INHERITABLE_ATTR(NoSpeculativeLoadHardening)
+INHERITABLE_ATTR(NoSplitStack)
+INHERITABLE_ATTR(NoStackProtector)
+INHERITABLE_ATTR(NoThreadSafetyAnalysis)
+INHERITABLE_ATTR(NoThrow)
+INHERITABLE_ATTR(NotTailCalled)
+INHERITABLE_ATTR(OMPCaptureNoInit)
+INHERITABLE_ATTR(OMPDeclareTargetDecl)
+INHERITABLE_ATTR(OMPThreadPrivateDecl)
+INHERITABLE_ATTR(OSConsumesThis)
+INHERITABLE_ATTR(OSReturnsNotRetained)
+INHERITABLE_ATTR(OSReturnsRetained)
+INHERITABLE_ATTR(OSReturnsRetainedOnNonZero)
+INHERITABLE_ATTR(OSReturnsRetainedOnZero)
+INHERITABLE_ATTR(ObjCBridge)
+INHERITABLE_ATTR(ObjCBridgeMutable)
+INHERITABLE_ATTR(ObjCBridgeRelated)
+INHERITABLE_ATTR(ObjCException)
+INHERITABLE_ATTR(ObjCExplicitProtocolImpl)
+INHERITABLE_ATTR(ObjCExternallyRetained)
+INHERITABLE_ATTR(ObjCIndependentClass)
+INHERITABLE_ATTR(ObjCMethodFamily)
+INHERITABLE_ATTR(ObjCNSObject)
+INHERITABLE_ATTR(ObjCPreciseLifetime)
+INHERITABLE_ATTR(ObjCRequiresPropertyDefs)
+INHERITABLE_ATTR(ObjCRequiresSuper)
+INHERITABLE_ATTR(ObjCReturnsInnerPointer)
+INHERITABLE_ATTR(ObjCRootClass)
+INHERITABLE_ATTR(ObjCSubclassingRestricted)
+INHERITABLE_ATTR(OpenCLIntelReqdSubGroupSize)
+INHERITABLE_ATTR(OpenCLKernel)
+INHERITABLE_ATTR(OpenCLUnrollHint)
+INHERITABLE_ATTR(OptimizeNone)
+INHERITABLE_ATTR(Override)
+INHERITABLE_ATTR(Ownership)
+INHERITABLE_ATTR(Packed)
+INHERITABLE_ATTR(ParamTypestate)
+INHERITABLE_ATTR(PragmaClangBSSSection)
+INHERITABLE_ATTR(PragmaClangDataSection)
+INHERITABLE_ATTR(PragmaClangRodataSection)
+INHERITABLE_ATTR(PragmaClangTextSection)
+INHERITABLE_ATTR(PtGuardedBy)
+INHERITABLE_ATTR(PtGuardedVar)
+INHERITABLE_ATTR(Pure)
+INHERITABLE_ATTR(RISCVInterrupt)
+INHERITABLE_ATTR(Reinitializes)
+INHERITABLE_ATTR(ReleaseCapability)
+INHERITABLE_ATTR(ReqdWorkGroupSize)
+INHERITABLE_ATTR(RequireConstantInit)
+INHERITABLE_ATTR(RequiresCapability)
+INHERITABLE_ATTR(Restrict)
+INHERITABLE_ATTR(ReturnTypestate)
+INHERITABLE_ATTR(ReturnsNonNull)
+INHERITABLE_ATTR(ReturnsTwice)
+INHERITABLE_ATTR(ScopedLockable)
+INHERITABLE_ATTR(Section)
+INHERITABLE_ATTR(SelectAny)
+INHERITABLE_ATTR(Sentinel)
+INHERITABLE_ATTR(SetTypestate)
+INHERITABLE_ATTR(SharedTrylockFunction)
+INHERITABLE_ATTR(SpeculativeLoadHardening)
+INHERITABLE_ATTR(TLSModel)
+INHERITABLE_ATTR(Target)
+INHERITABLE_ATTR(TestTypestate)
+INHERITABLE_ATTR(TransparentUnion)
+INHERITABLE_ATTR(TrivialABI)
+INHERITABLE_ATTR(TryAcquireCapability)
+INHERITABLE_ATTR(TypeTagForDatatype)
+INHERITABLE_ATTR(TypeVisibility)
+INHERITABLE_ATTR(Unavailable)
+INHERITABLE_ATTR(Uninitialized)
+INHERITABLE_ATTR(Unused)
+INHERITABLE_ATTR(Used)
+INHERITABLE_ATTR(Uuid)
+INHERITABLE_ATTR(VecReturn)
+INHERITABLE_ATTR(VecTypeHint)
+INHERITABLE_ATTR(Visibility)
+INHERITABLE_ATTR(WarnUnused)
+INHERITABLE_ATTR(WarnUnusedResult)
+INHERITABLE_ATTR(Weak)
+INHERITABLE_ATTR(WeakImport)
+INHERITABLE_ATTR(WeakRef)
+INHERITABLE_ATTR(WebAssemblyImportModule)
+INHERITABLE_ATTR(WebAssemblyImportName)
+INHERITABLE_ATTR(WorkGroupSizeHint)
+INHERITABLE_ATTR(X86ForceAlignArgPointer)
+INHERITABLE_ATTR(XRayInstrument)
+INHERITABLE_ATTR(XRayLogArgs)
+ATTR(AbiTag)
+ATTR(Alias)
+ATTR(AlignValue)
+ATTR(IFunc)
+ATTR(InitSeg)
+ATTR(LoopHint)
+ATTR(Mode)
+ATTR(NoEscape)
+ATTR(OMPCaptureKind)
+ATTR(OMPDeclareSimdDecl)
+ATTR(OMPReferencedVar)
+ATTR(ObjCBoxable)
+ATTR(ObjCDesignatedInitializer)
+ATTR(ObjCNonLazyClass)
+ATTR(ObjCRuntimeName)
+ATTR(ObjCRuntimeVisible)
+ATTR(OpenCLAccess)
+ATTR(Overloadable)
+ATTR(RenderScriptKernel)
+ATTR(Thread)
+PRAGMA_SPELLING_ATTR(InitSeg)
+PRAGMA_SPELLING_ATTR(LoopHint)
+PRAGMA_SPELLING_ATTR(OMPDeclareSimdDecl)
+PRAGMA_SPELLING_ATTR(OMPDeclareTargetDecl)
+#ifdef ATTR_RANGE
+ATTR_RANGE(Attr, AddressSpace, Thread)
+ATTR_RANGE(TypeAttr, AddressSpace, UPtr)
+ATTR_RANGE(StmtAttr, FallThrough, Suppress)
+ATTR_RANGE(InheritableAttr, AArch64VectorPcs, XRayLogArgs)
+ATTR_RANGE(DeclOrTypeAttr, AArch64VectorPcs, VectorCall)
+ATTR_RANGE(InheritableParamAttr, SwiftContext, PassObjectSize)
+ATTR_RANGE(ParameterABIAttr, SwiftContext, SwiftIndirectResult)
+#undef ATTR_RANGE
+#endif
+#undef ATTR
+#undef TYPE_ATTR
+#undef STMT_ATTR
+#undef INHERITABLE_ATTR
+#undef DECL_OR_TYPE_ATTR
+#undef INHERITABLE_PARAM_ATTR
+#undef PARAMETER_ABI_ATTR
+#undef PRAGMA_SPELLING_ATTR
diff --git a/clang-r353983/include/clang/Basic/AttrSubMatchRulesList.inc b/clang-r353983/include/clang/Basic/AttrSubMatchRulesList.inc
new file mode 100644
index 00000000..2004ded4
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/AttrSubMatchRulesList.inc
@@ -0,0 +1,40 @@
+/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
+|* *|
+|* List of all attribute subject matching rules that Clang recognizes *|
+|* *|
+|* Automatically generated file, do not edit! *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+#ifndef ATTR_MATCH_RULE
+#define ATTR_MATCH_RULE(NAME)
+#endif
+
+#ifndef ATTR_MATCH_SUB_RULE
+#define ATTR_MATCH_SUB_RULE(Value, Spelling, IsAbstract, Parent, IsNegated) ATTR_MATCH_RULE(Value, Spelling, IsAbstract)
+#endif
+ATTR_MATCH_RULE(SubjectMatchRule_block, "block", 0)
+ATTR_MATCH_RULE(SubjectMatchRule_enum, "enum", 0)
+ATTR_MATCH_RULE(SubjectMatchRule_enum_constant, "enum_constant", 0)
+ATTR_MATCH_RULE(SubjectMatchRule_field, "field", 0)
+ATTR_MATCH_RULE(SubjectMatchRule_function, "function", 0)
+ATTR_MATCH_SUB_RULE(SubjectMatchRule_function_is_member, "function(is_member)", 0, attr::SubjectMatchRule_function, 0)
+ATTR_MATCH_RULE(SubjectMatchRule_namespace, "namespace", 0)
+ATTR_MATCH_RULE(SubjectMatchRule_objc_category, "objc_category", 0)
+ATTR_MATCH_RULE(SubjectMatchRule_objc_interface, "objc_interface", 0)
+ATTR_MATCH_RULE(SubjectMatchRule_objc_method, "objc_method", 0)
+ATTR_MATCH_SUB_RULE(SubjectMatchRule_objc_method_is_instance, "objc_method(is_instance)", 0, attr::SubjectMatchRule_objc_method, 0)
+ATTR_MATCH_RULE(SubjectMatchRule_objc_property, "objc_property", 0)
+ATTR_MATCH_RULE(SubjectMatchRule_objc_protocol, "objc_protocol", 0)
+ATTR_MATCH_RULE(SubjectMatchRule_record, "record", 0)
+ATTR_MATCH_SUB_RULE(SubjectMatchRule_record_not_is_union, "record(unless(is_union))", 0, attr::SubjectMatchRule_record, 1)
+ATTR_MATCH_RULE(SubjectMatchRule_hasType_abstract, "hasType", 1)
+ATTR_MATCH_SUB_RULE(SubjectMatchRule_hasType_functionType, "hasType(functionType)", 0, attr::SubjectMatchRule_hasType_abstract, 0)
+ATTR_MATCH_RULE(SubjectMatchRule_type_alias, "type_alias", 0)
+ATTR_MATCH_RULE(SubjectMatchRule_variable, "variable", 0)
+ATTR_MATCH_SUB_RULE(SubjectMatchRule_variable_is_thread_local, "variable(is_thread_local)", 0, attr::SubjectMatchRule_variable, 0)
+ATTR_MATCH_SUB_RULE(SubjectMatchRule_variable_is_global, "variable(is_global)", 0, attr::SubjectMatchRule_variable, 0)
+ATTR_MATCH_SUB_RULE(SubjectMatchRule_variable_is_parameter, "variable(is_parameter)", 0, attr::SubjectMatchRule_variable, 0)
+ATTR_MATCH_SUB_RULE(SubjectMatchRule_variable_not_is_parameter, "variable(unless(is_parameter))", 0, attr::SubjectMatchRule_variable, 1)
+#undef ATTR_MATCH_SUB_RULE
+#undef ATTR_MATCH_RULE
diff --git a/clang-r353983/include/clang/Basic/AttrSubjectMatchRules.h b/clang-r353983/include/clang/Basic/AttrSubjectMatchRules.h
new file mode 100644
index 00000000..010cefca
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/AttrSubjectMatchRules.h
@@ -0,0 +1,31 @@
+//===-- AttrSubjectMatchRules.h - Attribute subject match rules -*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_ATTR_SUBJECT_MATCH_RULES_H
+#define LLVM_CLANG_BASIC_ATTR_SUBJECT_MATCH_RULES_H
+
+#include "clang/Basic/SourceLocation.h"
+#include "llvm/ADT/DenseMap.h"
+
+namespace clang {
+namespace attr {
+
+/// A list of all the recognized kinds of attributes.
+enum SubjectMatchRule {
+#define ATTR_MATCH_RULE(X, Spelling, IsAbstract) X,
+#include "clang/Basic/AttrSubMatchRulesList.inc"
+};
+
+const char *getSubjectMatchRuleSpelling(SubjectMatchRule Rule);
+
+using ParsedSubjectMatchRuleSet = llvm::DenseMap<int, SourceRange>;
+
+} // end namespace attr
+} // end namespace clang
+
+#endif
diff --git a/clang-r353983/include/clang/Basic/Attributes.h b/clang-r353983/include/clang/Basic/Attributes.h
new file mode 100644
index 00000000..c69633de
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/Attributes.h
@@ -0,0 +1,42 @@
+//===--- Attributes.h - Attributes header -----------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_ATTRIBUTES_H
+#define LLVM_CLANG_BASIC_ATTRIBUTES_H
+
+#include "clang/Basic/LangOptions.h"
+#include "clang/Basic/TargetInfo.h"
+
+namespace clang {
+
+class IdentifierInfo;
+
+enum class AttrSyntax {
+ /// Is the identifier known as a GNU-style attribute?
+ GNU,
+ /// Is the identifier known as a __declspec-style attribute?
+ Declspec,
+ /// Is the identifier known as a [] Microsoft-style attribute?
+ Microsoft,
+ // Is the identifier known as a C++-style attribute?
+ CXX,
+ // Is the identifier known as a C-style attribute?
+ C,
+ // Is the identifier known as a pragma attribute?
+ Pragma
+};
+
+/// Return the version number associated with the attribute if we
+/// recognize and implement the attribute specified by the given information.
+int hasAttribute(AttrSyntax Syntax, const IdentifierInfo *Scope,
+ const IdentifierInfo *Attr, const TargetInfo &Target,
+ const LangOptions &LangOpts);
+
+} // end namespace clang
+
+#endif // LLVM_CLANG_BASIC_ATTRIBUTES_H
diff --git a/clang-r353983/include/clang/Basic/BitmaskEnum.h b/clang-r353983/include/clang/Basic/BitmaskEnum.h
new file mode 100644
index 00000000..34bfa176
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/BitmaskEnum.h
@@ -0,0 +1,24 @@
+//===--- BitmaskEnum.h - wrapper of LLVM's bitmask enum facility-*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+/// \file
+/// Provides LLVM's BitmaskEnum facility to enumeration types declared in
+/// namespace clang.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_BITMASKENUM_H
+#define LLVM_CLANG_BASIC_BITMASKENUM_H
+
+#include "llvm/ADT/BitmaskEnum.h"
+
+namespace clang {
+ LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE();
+}
+
+#endif
diff --git a/clang-r353983/include/clang/Basic/Builtins.def b/clang-r353983/include/clang/Basic/Builtins.def
new file mode 100644
index 00000000..2e8c6d97
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/Builtins.def
@@ -0,0 +1,1529 @@
+//===--- Builtins.def - Builtin function info database ----------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the standard builtin function database. Users of this file
+// must define the BUILTIN macro to make use of this information.
+//
+//===----------------------------------------------------------------------===//
+
+// FIXME: This should really be a .td file, but that requires modifying tblgen.
+// Perhaps tblgen should have plugins.
+
+// The first value provided to the macro specifies the function name of the
+// builtin, and results in a clang::builtin::BIXX enum value for XX.
+
+// The second value provided to the macro specifies the type of the function
+// (result value, then each argument) as follows:
+// v -> void
+// b -> boolean
+// c -> char
+// s -> short
+// i -> int
+// h -> half
+// f -> float
+// d -> double
+// z -> size_t
+// w -> wchar_t
+// F -> constant CFString
+// G -> id
+// H -> SEL
+// M -> struct objc_super
+// a -> __builtin_va_list
+// A -> "reference" to __builtin_va_list
+// V -> Vector, followed by the number of elements and the base type.
+// E -> ext_vector, followed by the number of elements and the base type.
+// X -> _Complex, followed by the base type.
+// Y -> ptrdiff_t
+// P -> FILE
+// J -> jmp_buf
+// SJ -> sigjmp_buf
+// K -> ucontext_t
+// p -> pid_t
+// . -> "...". This may only occur at the end of the function list.
+//
+// Types may be prefixed with the following modifiers:
+// L -> long (e.g. Li for 'long int', Ld for 'long double')
+// LL -> long long (e.g. LLi for 'long long int', LLd for __float128)
+// LLL -> __int128_t (e.g. LLLi)
+// W -> int64_t
+// N -> 'int' size if target is LP64, 'L' otherwise.
+// S -> signed
+// U -> unsigned
+// I -> Required to constant fold to an integer constant expression.
+//
+// Types may be postfixed with the following modifiers:
+// * -> pointer (optionally followed by an address space number, if no address
+// space is specified than any address space will be accepted)
+// & -> reference (optionally followed by an address space number)
+// C -> const
+// D -> volatile
+
+// The third value provided to the macro specifies information about attributes
+// of the function. These must be kept in sync with the predicates in the
+// Builtin::Context class. Currently we have:
+// n -> nothrow
+// r -> noreturn
+// U -> pure
+// c -> const
+// t -> signature is meaningless, use custom typechecking
+// F -> this is a libc/libm function with a '__builtin_' prefix added.
+// f -> this is a libc/libm function without the '__builtin_' prefix. It can
+// be followed by ':headername:' to state which header this function
+// comes from.
+// h -> this function requires a specific header or an explicit declaration.
+// i -> this is a runtime library implemented function without the
+// '__builtin_' prefix. It will be implemented in compiler-rt or libgcc.
+// p:N: -> this is a printf-like function whose Nth argument is the format
+// string.
+// P:N: -> similar to the p:N: attribute, but the function is like vprintf
+// in that it accepts its arguments as a va_list rather than
+// through an ellipsis
+// s:N: -> this is a scanf-like function whose Nth argument is the format
+// string.
+// S:N: -> similar to the s:N: attribute, but the function is like vscanf
+// in that it accepts its arguments as a va_list rather than
+// through an ellipsis
+// e -> const, but only when -fno-math-errno
+// j -> returns_twice (like setjmp)
+// u -> arguments are not evaluated for their side-effects
+// V:N: -> requires vectors of at least N bits to be legal
+// C<N,M_0,...,M_k> -> callback behavior: argument N is called with argument
+// M_0, ..., M_k as payload
+// FIXME: gcc has nonnull
+
+#if defined(BUILTIN) && !defined(LIBBUILTIN)
+# define LIBBUILTIN(ID, TYPE, ATTRS, HEADER, BUILTIN_LANG) BUILTIN(ID, TYPE, ATTRS)
+#endif
+
+#if defined(BUILTIN) && !defined(LANGBUILTIN)
+# define LANGBUILTIN(ID, TYPE, ATTRS, BUILTIN_LANG) BUILTIN(ID, TYPE, ATTRS)
+#endif
+
+// Standard libc/libm functions:
+BUILTIN(__builtin_atan2 , "ddd" , "Fne")
+BUILTIN(__builtin_atan2f, "fff" , "Fne")
+BUILTIN(__builtin_atan2l, "LdLdLd", "Fne")
+BUILTIN(__builtin_abs , "ii" , "ncF")
+BUILTIN(__builtin_copysign, "ddd", "ncF")
+BUILTIN(__builtin_copysignf, "fff", "ncF")
+BUILTIN(__builtin_copysignl, "LdLdLd", "ncF")
+BUILTIN(__builtin_copysignf128, "LLdLLdLLd", "ncF")
+BUILTIN(__builtin_fabs , "dd" , "ncF")
+BUILTIN(__builtin_fabsf, "ff" , "ncF")
+BUILTIN(__builtin_fabsl, "LdLd", "ncF")
+BUILTIN(__builtin_fabsf128, "LLdLLd", "ncF")
+BUILTIN(__builtin_fmod , "ddd" , "Fne")
+BUILTIN(__builtin_fmodf, "fff" , "Fne")
+BUILTIN(__builtin_fmodl, "LdLdLd", "Fne")
+BUILTIN(__builtin_frexp , "ddi*" , "Fn")
+BUILTIN(__builtin_frexpf, "ffi*" , "Fn")
+BUILTIN(__builtin_frexpl, "LdLdi*", "Fn")
+BUILTIN(__builtin_huge_val, "d", "nc")
+BUILTIN(__builtin_huge_valf, "f", "nc")
+BUILTIN(__builtin_huge_vall, "Ld", "nc")
+BUILTIN(__builtin_huge_valf128, "LLd", "nc")
+BUILTIN(__builtin_inf , "d" , "nc")
+BUILTIN(__builtin_inff , "f" , "nc")
+BUILTIN(__builtin_infl , "Ld" , "nc")
+BUILTIN(__builtin_inff128 , "LLd" , "nc")
+BUILTIN(__builtin_labs , "LiLi" , "Fnc")
+BUILTIN(__builtin_llabs, "LLiLLi", "Fnc")
+BUILTIN(__builtin_ldexp , "ddi" , "Fne")
+BUILTIN(__builtin_ldexpf, "ffi" , "Fne")
+BUILTIN(__builtin_ldexpl, "LdLdi", "Fne")
+BUILTIN(__builtin_modf , "ddd*" , "Fn")
+BUILTIN(__builtin_modff, "fff*" , "Fn")
+BUILTIN(__builtin_modfl, "LdLdLd*", "Fn")
+BUILTIN(__builtin_nan, "dcC*" , "FnU")
+BUILTIN(__builtin_nanf, "fcC*" , "FnU")
+BUILTIN(__builtin_nanl, "LdcC*", "FnU")
+BUILTIN(__builtin_nanf128, "LLdcC*", "FnU")
+BUILTIN(__builtin_nans, "dcC*" , "FnU")
+BUILTIN(__builtin_nansf, "fcC*" , "FnU")
+BUILTIN(__builtin_nansl, "LdcC*", "FnU")
+BUILTIN(__builtin_nansf128, "LLdcC*", "FnU")
+BUILTIN(__builtin_powi , "ddi" , "Fnc")
+BUILTIN(__builtin_powif, "ffi" , "Fnc")
+BUILTIN(__builtin_powil, "LdLdi", "Fnc")
+BUILTIN(__builtin_pow , "ddd" , "Fne")
+BUILTIN(__builtin_powf, "fff" , "Fne")
+BUILTIN(__builtin_powl, "LdLdLd", "Fne")
+
+// Standard unary libc/libm functions with double/float/long double variants:
+BUILTIN(__builtin_acos , "dd" , "Fne")
+BUILTIN(__builtin_acosf, "ff" , "Fne")
+BUILTIN(__builtin_acosl, "LdLd", "Fne")
+BUILTIN(__builtin_acosh , "dd" , "Fne")
+BUILTIN(__builtin_acoshf, "ff" , "Fne")
+BUILTIN(__builtin_acoshl, "LdLd", "Fne")
+BUILTIN(__builtin_asin , "dd" , "Fne")
+BUILTIN(__builtin_asinf, "ff" , "Fne")
+BUILTIN(__builtin_asinl, "LdLd", "Fne")
+BUILTIN(__builtin_asinh , "dd" , "Fne")
+BUILTIN(__builtin_asinhf, "ff" , "Fne")
+BUILTIN(__builtin_asinhl, "LdLd", "Fne")
+BUILTIN(__builtin_atan , "dd" , "Fne")
+BUILTIN(__builtin_atanf, "ff" , "Fne")
+BUILTIN(__builtin_atanl, "LdLd", "Fne")
+BUILTIN(__builtin_atanh , "dd", "Fne")
+BUILTIN(__builtin_atanhf, "ff", "Fne")
+BUILTIN(__builtin_atanhl, "LdLd", "Fne")
+BUILTIN(__builtin_cbrt , "dd", "Fnc")
+BUILTIN(__builtin_cbrtf, "ff", "Fnc")
+BUILTIN(__builtin_cbrtl, "LdLd", "Fnc")
+BUILTIN(__builtin_ceil , "dd" , "Fnc")
+BUILTIN(__builtin_ceilf, "ff" , "Fnc")
+BUILTIN(__builtin_ceill, "LdLd", "Fnc")
+BUILTIN(__builtin_cos , "dd" , "Fne")
+BUILTIN(__builtin_cosf, "ff" , "Fne")
+BUILTIN(__builtin_cosh , "dd" , "Fne")
+BUILTIN(__builtin_coshf, "ff" , "Fne")
+BUILTIN(__builtin_coshl, "LdLd", "Fne")
+BUILTIN(__builtin_cosl, "LdLd", "Fne")
+BUILTIN(__builtin_erf , "dd", "Fne")
+BUILTIN(__builtin_erff, "ff", "Fne")
+BUILTIN(__builtin_erfl, "LdLd", "Fne")
+BUILTIN(__builtin_erfc , "dd", "Fne")
+BUILTIN(__builtin_erfcf, "ff", "Fne")
+BUILTIN(__builtin_erfcl, "LdLd", "Fne")
+BUILTIN(__builtin_exp , "dd" , "Fne")
+BUILTIN(__builtin_expf, "ff" , "Fne")
+BUILTIN(__builtin_expl, "LdLd", "Fne")
+BUILTIN(__builtin_exp2 , "dd" , "Fne")
+BUILTIN(__builtin_exp2f, "ff" , "Fne")
+BUILTIN(__builtin_exp2l, "LdLd", "Fne")
+BUILTIN(__builtin_expm1 , "dd", "Fne")
+BUILTIN(__builtin_expm1f, "ff", "Fne")
+BUILTIN(__builtin_expm1l, "LdLd", "Fne")
+BUILTIN(__builtin_fdim, "ddd", "Fne")
+BUILTIN(__builtin_fdimf, "fff", "Fne")
+BUILTIN(__builtin_fdiml, "LdLdLd", "Fne")
+BUILTIN(__builtin_floor , "dd" , "Fnc")
+BUILTIN(__builtin_floorf, "ff" , "Fnc")
+BUILTIN(__builtin_floorl, "LdLd", "Fnc")
+BUILTIN(__builtin_fma, "dddd", "Fne")
+BUILTIN(__builtin_fmaf, "ffff", "Fne")
+BUILTIN(__builtin_fmal, "LdLdLdLd", "Fne")
+BUILTIN(__builtin_fmax, "ddd", "Fnc")
+BUILTIN(__builtin_fmaxf, "fff", "Fnc")
+BUILTIN(__builtin_fmaxl, "LdLdLd", "Fnc")
+BUILTIN(__builtin_fmin, "ddd", "Fnc")
+BUILTIN(__builtin_fminf, "fff", "Fnc")
+BUILTIN(__builtin_fminl, "LdLdLd", "Fnc")
+BUILTIN(__builtin_hypot , "ddd" , "Fne")
+BUILTIN(__builtin_hypotf, "fff" , "Fne")
+BUILTIN(__builtin_hypotl, "LdLdLd", "Fne")
+BUILTIN(__builtin_ilogb , "id", "Fne")
+BUILTIN(__builtin_ilogbf, "if", "Fne")
+BUILTIN(__builtin_ilogbl, "iLd", "Fne")
+BUILTIN(__builtin_lgamma , "dd", "Fn")
+BUILTIN(__builtin_lgammaf, "ff", "Fn")
+BUILTIN(__builtin_lgammal, "LdLd", "Fn")
+BUILTIN(__builtin_llrint, "LLid", "Fne")
+BUILTIN(__builtin_llrintf, "LLif", "Fne")
+BUILTIN(__builtin_llrintl, "LLiLd", "Fne")
+BUILTIN(__builtin_llround , "LLid", "Fne")
+BUILTIN(__builtin_llroundf, "LLif", "Fne")
+BUILTIN(__builtin_llroundl, "LLiLd", "Fne")
+BUILTIN(__builtin_log , "dd" , "Fne")
+BUILTIN(__builtin_log10 , "dd" , "Fne")
+BUILTIN(__builtin_log10f, "ff" , "Fne")
+BUILTIN(__builtin_log10l, "LdLd", "Fne")
+BUILTIN(__builtin_log1p , "dd" , "Fne")
+BUILTIN(__builtin_log1pf, "ff" , "Fne")
+BUILTIN(__builtin_log1pl, "LdLd", "Fne")
+BUILTIN(__builtin_log2, "dd" , "Fne")
+BUILTIN(__builtin_log2f, "ff" , "Fne")
+BUILTIN(__builtin_log2l, "LdLd" , "Fne")
+BUILTIN(__builtin_logb , "dd", "Fne")
+BUILTIN(__builtin_logbf, "ff", "Fne")
+BUILTIN(__builtin_logbl, "LdLd", "Fne")
+BUILTIN(__builtin_logf, "ff" , "Fne")
+BUILTIN(__builtin_logl, "LdLd", "Fne")
+BUILTIN(__builtin_lrint , "Lid", "Fne")
+BUILTIN(__builtin_lrintf, "Lif", "Fne")
+BUILTIN(__builtin_lrintl, "LiLd", "Fne")
+BUILTIN(__builtin_lround , "Lid", "Fne")
+BUILTIN(__builtin_lroundf, "Lif", "Fne")
+BUILTIN(__builtin_lroundl, "LiLd", "Fne")
+BUILTIN(__builtin_nearbyint , "dd", "Fnc")
+BUILTIN(__builtin_nearbyintf, "ff", "Fnc")
+BUILTIN(__builtin_nearbyintl, "LdLd", "Fnc")
+BUILTIN(__builtin_nextafter , "ddd", "Fne")
+BUILTIN(__builtin_nextafterf, "fff", "Fne")
+BUILTIN(__builtin_nextafterl, "LdLdLd", "Fne")
+BUILTIN(__builtin_nexttoward , "ddLd", "Fne")
+BUILTIN(__builtin_nexttowardf, "ffLd", "Fne")
+BUILTIN(__builtin_nexttowardl, "LdLdLd", "Fne")
+BUILTIN(__builtin_remainder , "ddd", "Fne")
+BUILTIN(__builtin_remainderf, "fff", "Fne")
+BUILTIN(__builtin_remainderl, "LdLdLd", "Fne")
+BUILTIN(__builtin_remquo , "dddi*", "Fn")
+BUILTIN(__builtin_remquof, "fffi*", "Fn")
+BUILTIN(__builtin_remquol, "LdLdLdi*", "Fn")
+BUILTIN(__builtin_rint , "dd", "Fnc")
+BUILTIN(__builtin_rintf, "ff", "Fnc")
+BUILTIN(__builtin_rintl, "LdLd", "Fnc")
+BUILTIN(__builtin_round, "dd" , "Fnc")
+BUILTIN(__builtin_roundf, "ff" , "Fnc")
+BUILTIN(__builtin_roundl, "LdLd" , "Fnc")
+BUILTIN(__builtin_scalbln , "ddLi", "Fne")
+BUILTIN(__builtin_scalblnf, "ffLi", "Fne")
+BUILTIN(__builtin_scalblnl, "LdLdLi", "Fne")
+BUILTIN(__builtin_scalbn , "ddi", "Fne")
+BUILTIN(__builtin_scalbnf, "ffi", "Fne")
+BUILTIN(__builtin_scalbnl, "LdLdi", "Fne")
+BUILTIN(__builtin_sin , "dd" , "Fne")
+BUILTIN(__builtin_sinf, "ff" , "Fne")
+BUILTIN(__builtin_sinh , "dd" , "Fne")
+BUILTIN(__builtin_sinhf, "ff" , "Fne")
+BUILTIN(__builtin_sinhl, "LdLd", "Fne")
+BUILTIN(__builtin_sinl, "LdLd", "Fne")
+BUILTIN(__builtin_sqrt , "dd" , "Fne")
+BUILTIN(__builtin_sqrtf, "ff" , "Fne")
+BUILTIN(__builtin_sqrtl, "LdLd", "Fne")
+BUILTIN(__builtin_tan , "dd" , "Fne")
+BUILTIN(__builtin_tanf, "ff" , "Fne")
+BUILTIN(__builtin_tanh , "dd" , "Fne")
+BUILTIN(__builtin_tanhf, "ff" , "Fne")
+BUILTIN(__builtin_tanhl, "LdLd", "Fne")
+BUILTIN(__builtin_tanl, "LdLd", "Fne")
+BUILTIN(__builtin_tgamma , "dd", "Fne")
+BUILTIN(__builtin_tgammaf, "ff", "Fne")
+BUILTIN(__builtin_tgammal, "LdLd", "Fne")
+BUILTIN(__builtin_trunc , "dd", "Fnc")
+BUILTIN(__builtin_truncf, "ff", "Fnc")
+BUILTIN(__builtin_truncl, "LdLd", "Fnc")
+
+// C99 complex builtins
+BUILTIN(__builtin_cabs, "dXd", "Fne")
+BUILTIN(__builtin_cabsf, "fXf", "Fne")
+BUILTIN(__builtin_cabsl, "LdXLd", "Fne")
+BUILTIN(__builtin_cacos, "XdXd", "Fne")
+BUILTIN(__builtin_cacosf, "XfXf", "Fne")
+BUILTIN(__builtin_cacosh, "XdXd", "Fne")
+BUILTIN(__builtin_cacoshf, "XfXf", "Fne")
+BUILTIN(__builtin_cacoshl, "XLdXLd", "Fne")
+BUILTIN(__builtin_cacosl, "XLdXLd", "Fne")
+BUILTIN(__builtin_carg, "dXd", "Fne")
+BUILTIN(__builtin_cargf, "fXf", "Fne")
+BUILTIN(__builtin_cargl, "LdXLd", "Fne")
+BUILTIN(__builtin_casin, "XdXd", "Fne")
+BUILTIN(__builtin_casinf, "XfXf", "Fne")
+BUILTIN(__builtin_casinh, "XdXd", "Fne")
+BUILTIN(__builtin_casinhf, "XfXf", "Fne")
+BUILTIN(__builtin_casinhl, "XLdXLd", "Fne")
+BUILTIN(__builtin_casinl, "XLdXLd", "Fne")
+BUILTIN(__builtin_catan, "XdXd", "Fne")
+BUILTIN(__builtin_catanf, "XfXf", "Fne")
+BUILTIN(__builtin_catanh, "XdXd", "Fne")
+BUILTIN(__builtin_catanhf, "XfXf", "Fne")
+BUILTIN(__builtin_catanhl, "XLdXLd", "Fne")
+BUILTIN(__builtin_catanl, "XLdXLd", "Fne")
+BUILTIN(__builtin_ccos, "XdXd", "Fne")
+BUILTIN(__builtin_ccosf, "XfXf", "Fne")
+BUILTIN(__builtin_ccosl, "XLdXLd", "Fne")
+BUILTIN(__builtin_ccosh, "XdXd", "Fne")
+BUILTIN(__builtin_ccoshf, "XfXf", "Fne")
+BUILTIN(__builtin_ccoshl, "XLdXLd", "Fne")
+BUILTIN(__builtin_cexp, "XdXd", "Fne")
+BUILTIN(__builtin_cexpf, "XfXf", "Fne")
+BUILTIN(__builtin_cexpl, "XLdXLd", "Fne")
+BUILTIN(__builtin_cimag, "dXd", "Fnc")
+BUILTIN(__builtin_cimagf, "fXf", "Fnc")
+BUILTIN(__builtin_cimagl, "LdXLd", "Fnc")
+BUILTIN(__builtin_conj, "XdXd", "Fnc")
+BUILTIN(__builtin_conjf, "XfXf", "Fnc")
+BUILTIN(__builtin_conjl, "XLdXLd", "Fnc")
+BUILTIN(__builtin_clog, "XdXd", "Fne")
+BUILTIN(__builtin_clogf, "XfXf", "Fne")
+BUILTIN(__builtin_clogl, "XLdXLd", "Fne")
+BUILTIN(__builtin_cproj, "XdXd", "Fnc")
+BUILTIN(__builtin_cprojf, "XfXf", "Fnc")
+BUILTIN(__builtin_cprojl, "XLdXLd", "Fnc")
+BUILTIN(__builtin_cpow, "XdXdXd", "Fne")
+BUILTIN(__builtin_cpowf, "XfXfXf", "Fne")
+BUILTIN(__builtin_cpowl, "XLdXLdXLd", "Fne")
+BUILTIN(__builtin_creal, "dXd", "Fnc")
+BUILTIN(__builtin_crealf, "fXf", "Fnc")
+BUILTIN(__builtin_creall, "LdXLd", "Fnc")
+BUILTIN(__builtin_csin, "XdXd", "Fne")
+BUILTIN(__builtin_csinf, "XfXf", "Fne")
+BUILTIN(__builtin_csinl, "XLdXLd", "Fne")
+BUILTIN(__builtin_csinh, "XdXd", "Fne")
+BUILTIN(__builtin_csinhf, "XfXf", "Fne")
+BUILTIN(__builtin_csinhl, "XLdXLd", "Fne")
+BUILTIN(__builtin_csqrt, "XdXd", "Fne")
+BUILTIN(__builtin_csqrtf, "XfXf", "Fne")
+BUILTIN(__builtin_csqrtl, "XLdXLd", "Fne")
+BUILTIN(__builtin_ctan, "XdXd", "Fne")
+BUILTIN(__builtin_ctanf, "XfXf", "Fne")
+BUILTIN(__builtin_ctanl, "XLdXLd", "Fne")
+BUILTIN(__builtin_ctanh, "XdXd", "Fne")
+BUILTIN(__builtin_ctanhf, "XfXf", "Fne")
+BUILTIN(__builtin_ctanhl, "XLdXLd", "Fne")
+
+// FP Comparisons.
+BUILTIN(__builtin_isgreater , "i.", "Fnc")
+BUILTIN(__builtin_isgreaterequal, "i.", "Fnc")
+BUILTIN(__builtin_isless , "i.", "Fnc")
+BUILTIN(__builtin_islessequal , "i.", "Fnc")
+BUILTIN(__builtin_islessgreater , "i.", "Fnc")
+BUILTIN(__builtin_isunordered , "i.", "Fnc")
+
+// Unary FP classification
+BUILTIN(__builtin_fpclassify, "iiiiii.", "Fnc")
+BUILTIN(__builtin_isfinite, "i.", "Fnc")
+BUILTIN(__builtin_isinf, "i.", "Fnc")
+BUILTIN(__builtin_isinf_sign, "i.", "Fnc")
+BUILTIN(__builtin_isnan, "i.", "Fnc")
+BUILTIN(__builtin_isnormal, "i.", "Fnc")
+
+// FP signbit builtins
+BUILTIN(__builtin_signbit, "i.", "Fnc")
+BUILTIN(__builtin_signbitf, "if", "Fnc")
+BUILTIN(__builtin_signbitl, "iLd", "Fnc")
+
+// Special FP builtins.
+BUILTIN(__builtin_canonicalize, "dd", "nc")
+BUILTIN(__builtin_canonicalizef, "ff", "nc")
+BUILTIN(__builtin_canonicalizel, "LdLd", "nc")
+
+// Builtins for arithmetic.
+BUILTIN(__builtin_clzs , "iUs" , "nc")
+BUILTIN(__builtin_clz , "iUi" , "nc")
+BUILTIN(__builtin_clzl , "iULi" , "nc")
+BUILTIN(__builtin_clzll, "iULLi", "nc")
+// TODO: int clzimax(uintmax_t)
+BUILTIN(__builtin_ctzs , "iUs" , "nc")
+BUILTIN(__builtin_ctz , "iUi" , "nc")
+BUILTIN(__builtin_ctzl , "iULi" , "nc")
+BUILTIN(__builtin_ctzll, "iULLi", "nc")
+// TODO: int ctzimax(uintmax_t)
+BUILTIN(__builtin_ffs , "ii" , "Fnc")
+BUILTIN(__builtin_ffsl , "iLi" , "Fnc")
+BUILTIN(__builtin_ffsll, "iLLi", "Fnc")
+BUILTIN(__builtin_parity , "iUi" , "nc")
+BUILTIN(__builtin_parityl , "iULi" , "nc")
+BUILTIN(__builtin_parityll, "iULLi", "nc")
+BUILTIN(__builtin_popcount , "iUi" , "nc")
+BUILTIN(__builtin_popcountl , "iULi" , "nc")
+BUILTIN(__builtin_popcountll, "iULLi", "nc")
+BUILTIN(__builtin_clrsb , "ii" , "nc")
+BUILTIN(__builtin_clrsbl , "iLi" , "nc")
+BUILTIN(__builtin_clrsbll, "iLLi", "nc")
+
+// FIXME: These type signatures are not correct for targets with int != 32-bits
+// or with ULL != 64-bits.
+BUILTIN(__builtin_bswap16, "UsUs", "nc")
+BUILTIN(__builtin_bswap32, "UiUi", "nc")
+BUILTIN(__builtin_bswap64, "ULLiULLi", "nc")
+
+BUILTIN(__builtin_bitreverse8, "UcUc", "nc")
+BUILTIN(__builtin_bitreverse16, "UsUs", "nc")
+BUILTIN(__builtin_bitreverse32, "UiUi", "nc")
+BUILTIN(__builtin_bitreverse64, "ULLiULLi", "nc")
+
+BUILTIN(__builtin_rotateleft8, "UcUcUc", "nc")
+BUILTIN(__builtin_rotateleft16, "UsUsUs", "nc")
+BUILTIN(__builtin_rotateleft32, "UiUiUi", "nc")
+BUILTIN(__builtin_rotateleft64, "ULLiULLiULLi", "nc")
+BUILTIN(__builtin_rotateright8, "UcUcUc", "nc")
+BUILTIN(__builtin_rotateright16, "UsUsUs", "nc")
+BUILTIN(__builtin_rotateright32, "UiUiUi", "nc")
+BUILTIN(__builtin_rotateright64, "ULLiULLiULLi", "nc")
+
+// Random GCC builtins
+BUILTIN(__builtin_constant_p, "i.", "nctu")
+BUILTIN(__builtin_classify_type, "i.", "nctu")
+BUILTIN(__builtin___CFStringMakeConstantString, "FC*cC*", "nc")
+BUILTIN(__builtin___NSStringMakeConstantString, "FC*cC*", "nc")
+BUILTIN(__builtin_va_start, "vA.", "nt")
+BUILTIN(__builtin_va_end, "vA", "n")
+BUILTIN(__builtin_va_copy, "vAA", "n")
+BUILTIN(__builtin_stdarg_start, "vA.", "n")
+BUILTIN(__builtin_assume_aligned, "v*vC*z.", "nc")
+BUILTIN(__builtin_bcmp, "iv*v*z", "Fn")
+BUILTIN(__builtin_bcopy, "vv*v*z", "n")
+BUILTIN(__builtin_bzero, "vv*z", "nF")
+BUILTIN(__builtin_fprintf, "iP*cC*.", "Fp:1:")
+BUILTIN(__builtin_memchr, "v*vC*iz", "nF")
+BUILTIN(__builtin_memcmp, "ivC*vC*z", "nF")
+BUILTIN(__builtin_memcpy, "v*v*vC*z", "nF")
+BUILTIN(__builtin_memmove, "v*v*vC*z", "nF")
+BUILTIN(__builtin_mempcpy, "v*v*vC*z", "nF")
+BUILTIN(__builtin_memset, "v*v*iz", "nF")
+BUILTIN(__builtin_printf, "icC*.", "Fp:0:")
+BUILTIN(__builtin_stpcpy, "c*c*cC*", "nF")
+BUILTIN(__builtin_stpncpy, "c*c*cC*z", "nF")
+BUILTIN(__builtin_strcasecmp, "icC*cC*", "nF")
+BUILTIN(__builtin_strcat, "c*c*cC*", "nF")
+BUILTIN(__builtin_strchr, "c*cC*i", "nF")
+BUILTIN(__builtin_strcmp, "icC*cC*", "nF")
+BUILTIN(__builtin_strcpy, "c*c*cC*", "nF")
+BUILTIN(__builtin_strcspn, "zcC*cC*", "nF")
+BUILTIN(__builtin_strdup, "c*cC*", "nF")
+BUILTIN(__builtin_strlen, "zcC*", "nF")
+BUILTIN(__builtin_strncasecmp, "icC*cC*z", "nF")
+BUILTIN(__builtin_strncat, "c*c*cC*z", "nF")
+BUILTIN(__builtin_strncmp, "icC*cC*z", "nF")
+BUILTIN(__builtin_strncpy, "c*c*cC*z", "nF")
+BUILTIN(__builtin_strndup, "c*cC*z", "nF")
+BUILTIN(__builtin_strpbrk, "c*cC*cC*", "nF")
+BUILTIN(__builtin_strrchr, "c*cC*i", "nF")
+BUILTIN(__builtin_strspn, "zcC*cC*", "nF")
+BUILTIN(__builtin_strstr, "c*cC*cC*", "nF")
+BUILTIN(__builtin_wcschr, "w*wC*w", "nF")
+BUILTIN(__builtin_wcscmp, "iwC*wC*", "nF")
+BUILTIN(__builtin_wcslen, "zwC*", "nF")
+BUILTIN(__builtin_wcsncmp, "iwC*wC*z", "nF")
+BUILTIN(__builtin_wmemchr, "w*wC*wz", "nF")
+BUILTIN(__builtin_wmemcmp, "iwC*wC*z", "nF")
+BUILTIN(__builtin_wmemcpy, "w*w*wC*z", "nF")
+BUILTIN(__builtin_wmemmove, "w*w*wC*z", "nF")
+BUILTIN(__builtin_return_address, "v*IUi", "n")
+BUILTIN(__builtin_extract_return_addr, "v*v*", "n")
+BUILTIN(__builtin_frame_address, "v*IUi", "n")
+BUILTIN(__builtin___clear_cache, "vc*c*", "n")
+BUILTIN(__builtin_flt_rounds, "i", "nc")
+BUILTIN(__builtin_setjmp, "iv**", "j")
+BUILTIN(__builtin_longjmp, "vv**i", "r")
+BUILTIN(__builtin_unwind_init, "v", "")
+BUILTIN(__builtin_eh_return_data_regno, "iIi", "nc")
+BUILTIN(__builtin_snprintf, "ic*zcC*.", "nFp:2:")
+BUILTIN(__builtin_vsprintf, "ic*cC*a", "nFP:1:")
+BUILTIN(__builtin_vsnprintf, "ic*zcC*a", "nFP:2:")
+BUILTIN(__builtin_thread_pointer, "v*", "nc")
+BUILTIN(__builtin_launder, "v*v*", "nt")
+
+// GCC exception builtins
+BUILTIN(__builtin_eh_return, "vzv*", "r") // FIXME: Takes intptr_t, not size_t!
+BUILTIN(__builtin_frob_return_addr, "v*v*", "n")
+BUILTIN(__builtin_dwarf_cfa, "v*", "n")
+BUILTIN(__builtin_init_dwarf_reg_size_table, "vv*", "n")
+BUILTIN(__builtin_dwarf_sp_column, "Ui", "n")
+BUILTIN(__builtin_extend_pointer, "ULLiv*", "n") // _Unwind_Word == uint64_t
+
+// GCC Object size checking builtins
+BUILTIN(__builtin_object_size, "zvC*i", "nu")
+BUILTIN(__builtin_dynamic_object_size, "zvC*i", "nu") // Clang only.
+BUILTIN(__builtin___memcpy_chk, "v*v*vC*zz", "nF")
+BUILTIN(__builtin___memccpy_chk, "v*v*vC*izz", "nF")
+BUILTIN(__builtin___memmove_chk, "v*v*vC*zz", "nF")
+BUILTIN(__builtin___mempcpy_chk, "v*v*vC*zz", "nF")
+BUILTIN(__builtin___memset_chk, "v*v*izz", "nF")
+BUILTIN(__builtin___stpcpy_chk, "c*c*cC*z", "nF")
+BUILTIN(__builtin___strcat_chk, "c*c*cC*z", "nF")
+BUILTIN(__builtin___strcpy_chk, "c*c*cC*z", "nF")
+BUILTIN(__builtin___strlcat_chk, "zc*cC*zz", "nF")
+BUILTIN(__builtin___strlcpy_chk, "zc*cC*zz", "nF")
+BUILTIN(__builtin___strncat_chk, "c*c*cC*zz", "nF")
+BUILTIN(__builtin___strncpy_chk, "c*c*cC*zz", "nF")
+BUILTIN(__builtin___stpncpy_chk, "c*c*cC*zz", "nF")
+BUILTIN(__builtin___snprintf_chk, "ic*zizcC*.", "Fp:4:")
+BUILTIN(__builtin___sprintf_chk, "ic*izcC*.", "Fp:3:")
+BUILTIN(__builtin___vsnprintf_chk, "ic*zizcC*a", "FP:4:")
+BUILTIN(__builtin___vsprintf_chk, "ic*izcC*a", "FP:3:")
+BUILTIN(__builtin___fprintf_chk, "iP*icC*.", "Fp:2:")
+BUILTIN(__builtin___printf_chk, "iicC*.", "Fp:1:")
+BUILTIN(__builtin___vfprintf_chk, "iP*icC*a", "FP:2:")
+BUILTIN(__builtin___vprintf_chk, "iicC*a", "FP:1:")
+
+BUILTIN(__builtin_unpredictable, "LiLi" , "nc")
+BUILTIN(__builtin_expect, "LiLiLi" , "nc")
+BUILTIN(__builtin_prefetch, "vvC*.", "nc")
+BUILTIN(__builtin_readcyclecounter, "ULLi", "n")
+BUILTIN(__builtin_trap, "v", "nr")
+BUILTIN(__builtin_debugtrap, "v", "n")
+BUILTIN(__builtin_unreachable, "v", "nr")
+BUILTIN(__builtin_shufflevector, "v." , "nct")
+BUILTIN(__builtin_convertvector, "v." , "nct")
+BUILTIN(__builtin_alloca, "v*z" , "Fn")
+BUILTIN(__builtin_alloca_with_align, "v*zIz", "Fn")
+BUILTIN(__builtin_call_with_static_chain, "v.", "nt")
+
+// "Overloaded" Atomic operator builtins. These are overloaded to support data
+// types of i8, i16, i32, i64, and i128. The front-end sees calls to the
+// non-suffixed version of these (which has a bogus type) and transforms them to
+// the right overloaded version in Sema (plus casts).
+
+// FIXME: These assume that char -> i8, short -> i16, int -> i32,
+// long long -> i64.
+
+BUILTIN(__sync_fetch_and_add, "v.", "t")
+BUILTIN(__sync_fetch_and_add_1, "ccD*c.", "nt")
+BUILTIN(__sync_fetch_and_add_2, "ssD*s.", "nt")
+BUILTIN(__sync_fetch_and_add_4, "iiD*i.", "nt")
+BUILTIN(__sync_fetch_and_add_8, "LLiLLiD*LLi.", "nt")
+BUILTIN(__sync_fetch_and_add_16, "LLLiLLLiD*LLLi.", "nt")
+
+BUILTIN(__sync_fetch_and_sub, "v.", "t")
+BUILTIN(__sync_fetch_and_sub_1, "ccD*c.", "nt")
+BUILTIN(__sync_fetch_and_sub_2, "ssD*s.", "nt")
+BUILTIN(__sync_fetch_and_sub_4, "iiD*i.", "nt")
+BUILTIN(__sync_fetch_and_sub_8, "LLiLLiD*LLi.", "nt")
+BUILTIN(__sync_fetch_and_sub_16, "LLLiLLLiD*LLLi.", "nt")
+
+BUILTIN(__sync_fetch_and_or, "v.", "t")
+BUILTIN(__sync_fetch_and_or_1, "ccD*c.", "nt")
+BUILTIN(__sync_fetch_and_or_2, "ssD*s.", "nt")
+BUILTIN(__sync_fetch_and_or_4, "iiD*i.", "nt")
+BUILTIN(__sync_fetch_and_or_8, "LLiLLiD*LLi.", "nt")
+BUILTIN(__sync_fetch_and_or_16, "LLLiLLLiD*LLLi.", "nt")
+
+BUILTIN(__sync_fetch_and_and, "v.", "t")
+BUILTIN(__sync_fetch_and_and_1, "ccD*c.", "tn")
+BUILTIN(__sync_fetch_and_and_2, "ssD*s.", "tn")
+BUILTIN(__sync_fetch_and_and_4, "iiD*i.", "tn")
+BUILTIN(__sync_fetch_and_and_8, "LLiLLiD*LLi.", "tn")
+BUILTIN(__sync_fetch_and_and_16, "LLLiLLLiD*LLLi.", "tn")
+
+BUILTIN(__sync_fetch_and_xor, "v.", "t")
+BUILTIN(__sync_fetch_and_xor_1, "ccD*c.", "tn")
+BUILTIN(__sync_fetch_and_xor_2, "ssD*s.", "tn")
+BUILTIN(__sync_fetch_and_xor_4, "iiD*i.", "tn")
+BUILTIN(__sync_fetch_and_xor_8, "LLiLLiD*LLi.", "tn")
+BUILTIN(__sync_fetch_and_xor_16, "LLLiLLLiD*LLLi.", "tn")
+
+BUILTIN(__sync_fetch_and_nand, "v.", "t")
+BUILTIN(__sync_fetch_and_nand_1, "ccD*c.", "tn")
+BUILTIN(__sync_fetch_and_nand_2, "ssD*s.", "tn")
+BUILTIN(__sync_fetch_and_nand_4, "iiD*i.", "tn")
+BUILTIN(__sync_fetch_and_nand_8, "LLiLLiD*LLi.", "tn")
+BUILTIN(__sync_fetch_and_nand_16, "LLLiLLLiD*LLLi.", "tn")
+
+BUILTIN(__sync_add_and_fetch, "v.", "t")
+BUILTIN(__sync_add_and_fetch_1, "ccD*c.", "tn")
+BUILTIN(__sync_add_and_fetch_2, "ssD*s.", "tn")
+BUILTIN(__sync_add_and_fetch_4, "iiD*i.", "tn")
+BUILTIN(__sync_add_and_fetch_8, "LLiLLiD*LLi.", "tn")
+BUILTIN(__sync_add_and_fetch_16, "LLLiLLLiD*LLLi.", "tn")
+
+BUILTIN(__sync_sub_and_fetch, "v.", "t")
+BUILTIN(__sync_sub_and_fetch_1, "ccD*c.", "tn")
+BUILTIN(__sync_sub_and_fetch_2, "ssD*s.", "tn")
+BUILTIN(__sync_sub_and_fetch_4, "iiD*i.", "tn")
+BUILTIN(__sync_sub_and_fetch_8, "LLiLLiD*LLi.", "tn")
+BUILTIN(__sync_sub_and_fetch_16, "LLLiLLLiD*LLLi.", "tn")
+
+BUILTIN(__sync_or_and_fetch, "v.", "t")
+BUILTIN(__sync_or_and_fetch_1, "ccD*c.", "tn")
+BUILTIN(__sync_or_and_fetch_2, "ssD*s.", "tn")
+BUILTIN(__sync_or_and_fetch_4, "iiD*i.", "tn")
+BUILTIN(__sync_or_and_fetch_8, "LLiLLiD*LLi.", "tn")
+BUILTIN(__sync_or_and_fetch_16, "LLLiLLLiD*LLLi.", "tn")
+
+BUILTIN(__sync_and_and_fetch, "v.", "t")
+BUILTIN(__sync_and_and_fetch_1, "ccD*c.", "tn")
+BUILTIN(__sync_and_and_fetch_2, "ssD*s.", "tn")
+BUILTIN(__sync_and_and_fetch_4, "iiD*i.", "tn")
+BUILTIN(__sync_and_and_fetch_8, "LLiLLiD*LLi.", "tn")
+BUILTIN(__sync_and_and_fetch_16, "LLLiLLLiD*LLLi.", "tn")
+
+BUILTIN(__sync_xor_and_fetch, "v.", "t")
+BUILTIN(__sync_xor_and_fetch_1, "ccD*c.", "tn")
+BUILTIN(__sync_xor_and_fetch_2, "ssD*s.", "tn")
+BUILTIN(__sync_xor_and_fetch_4, "iiD*i.", "tn")
+BUILTIN(__sync_xor_and_fetch_8, "LLiLLiD*LLi.", "tn")
+BUILTIN(__sync_xor_and_fetch_16, "LLLiLLLiD*LLLi.", "tn")
+
+BUILTIN(__sync_nand_and_fetch, "v.", "t")
+BUILTIN(__sync_nand_and_fetch_1, "ccD*c.", "tn")
+BUILTIN(__sync_nand_and_fetch_2, "ssD*s.", "tn")
+BUILTIN(__sync_nand_and_fetch_4, "iiD*i.", "tn")
+BUILTIN(__sync_nand_and_fetch_8, "LLiLLiD*LLi.", "tn")
+BUILTIN(__sync_nand_and_fetch_16, "LLLiLLLiD*LLLi.", "tn")
+
+BUILTIN(__sync_bool_compare_and_swap, "v.", "t")
+BUILTIN(__sync_bool_compare_and_swap_1, "bcD*cc.", "tn")
+BUILTIN(__sync_bool_compare_and_swap_2, "bsD*ss.", "tn")
+BUILTIN(__sync_bool_compare_and_swap_4, "biD*ii.", "tn")
+BUILTIN(__sync_bool_compare_and_swap_8, "bLLiD*LLiLLi.", "tn")
+BUILTIN(__sync_bool_compare_and_swap_16, "bLLLiD*LLLiLLLi.", "tn")
+
+BUILTIN(__sync_val_compare_and_swap, "v.", "t")
+BUILTIN(__sync_val_compare_and_swap_1, "ccD*cc.", "tn")
+BUILTIN(__sync_val_compare_and_swap_2, "ssD*ss.", "tn")
+BUILTIN(__sync_val_compare_and_swap_4, "iiD*ii.", "tn")
+BUILTIN(__sync_val_compare_and_swap_8, "LLiLLiD*LLiLLi.", "tn")
+BUILTIN(__sync_val_compare_and_swap_16, "LLLiLLLiD*LLLiLLLi.", "tn")
+
+BUILTIN(__sync_lock_test_and_set, "v.", "t")
+BUILTIN(__sync_lock_test_and_set_1, "ccD*c.", "tn")
+BUILTIN(__sync_lock_test_and_set_2, "ssD*s.", "tn")
+BUILTIN(__sync_lock_test_and_set_4, "iiD*i.", "tn")
+BUILTIN(__sync_lock_test_and_set_8, "LLiLLiD*LLi.", "tn")
+BUILTIN(__sync_lock_test_and_set_16, "LLLiLLLiD*LLLi.", "tn")
+
+BUILTIN(__sync_lock_release, "v.", "t")
+BUILTIN(__sync_lock_release_1, "vcD*.", "tn")
+BUILTIN(__sync_lock_release_2, "vsD*.", "tn")
+BUILTIN(__sync_lock_release_4, "viD*.", "tn")
+BUILTIN(__sync_lock_release_8, "vLLiD*.", "tn")
+BUILTIN(__sync_lock_release_16, "vLLLiD*.", "tn")
+
+BUILTIN(__sync_swap, "v.", "t")
+BUILTIN(__sync_swap_1, "ccD*c.", "tn")
+BUILTIN(__sync_swap_2, "ssD*s.", "tn")
+BUILTIN(__sync_swap_4, "iiD*i.", "tn")
+BUILTIN(__sync_swap_8, "LLiLLiD*LLi.", "tn")
+BUILTIN(__sync_swap_16, "LLLiLLLiD*LLLi.", "tn")
+
+// Some of our atomics builtins are handled by AtomicExpr rather than
+// as normal builtin CallExprs. This macro is used for such builtins.
+#ifndef ATOMIC_BUILTIN
+#define ATOMIC_BUILTIN(ID, TYPE, ATTRS) BUILTIN(ID, TYPE, ATTRS)
+#endif
+
+// C11 _Atomic operations for <stdatomic.h>.
+ATOMIC_BUILTIN(__c11_atomic_init, "v.", "t")
+ATOMIC_BUILTIN(__c11_atomic_load, "v.", "t")
+ATOMIC_BUILTIN(__c11_atomic_store, "v.", "t")
+ATOMIC_BUILTIN(__c11_atomic_exchange, "v.", "t")
+ATOMIC_BUILTIN(__c11_atomic_compare_exchange_strong, "v.", "t")
+ATOMIC_BUILTIN(__c11_atomic_compare_exchange_weak, "v.", "t")
+ATOMIC_BUILTIN(__c11_atomic_fetch_add, "v.", "t")
+ATOMIC_BUILTIN(__c11_atomic_fetch_sub, "v.", "t")
+ATOMIC_BUILTIN(__c11_atomic_fetch_and, "v.", "t")
+ATOMIC_BUILTIN(__c11_atomic_fetch_or, "v.", "t")
+ATOMIC_BUILTIN(__c11_atomic_fetch_xor, "v.", "t")
+BUILTIN(__c11_atomic_thread_fence, "vi", "n")
+BUILTIN(__c11_atomic_signal_fence, "vi", "n")
+BUILTIN(__c11_atomic_is_lock_free, "iz", "n")
+
+// GNU atomic builtins.
+ATOMIC_BUILTIN(__atomic_load, "v.", "t")
+ATOMIC_BUILTIN(__atomic_load_n, "v.", "t")
+ATOMIC_BUILTIN(__atomic_store, "v.", "t")
+ATOMIC_BUILTIN(__atomic_store_n, "v.", "t")
+ATOMIC_BUILTIN(__atomic_exchange, "v.", "t")
+ATOMIC_BUILTIN(__atomic_exchange_n, "v.", "t")
+ATOMIC_BUILTIN(__atomic_compare_exchange, "v.", "t")
+ATOMIC_BUILTIN(__atomic_compare_exchange_n, "v.", "t")
+ATOMIC_BUILTIN(__atomic_fetch_add, "v.", "t")
+ATOMIC_BUILTIN(__atomic_fetch_sub, "v.", "t")
+ATOMIC_BUILTIN(__atomic_fetch_and, "v.", "t")
+ATOMIC_BUILTIN(__atomic_fetch_or, "v.", "t")
+ATOMIC_BUILTIN(__atomic_fetch_xor, "v.", "t")
+ATOMIC_BUILTIN(__atomic_fetch_nand, "v.", "t")
+ATOMIC_BUILTIN(__atomic_add_fetch, "v.", "t")
+ATOMIC_BUILTIN(__atomic_sub_fetch, "v.", "t")
+ATOMIC_BUILTIN(__atomic_and_fetch, "v.", "t")
+ATOMIC_BUILTIN(__atomic_or_fetch, "v.", "t")
+ATOMIC_BUILTIN(__atomic_xor_fetch, "v.", "t")
+ATOMIC_BUILTIN(__atomic_nand_fetch, "v.", "t")
+BUILTIN(__atomic_test_and_set, "bvD*i", "n")
+BUILTIN(__atomic_clear, "vvD*i", "n")
+BUILTIN(__atomic_thread_fence, "vi", "n")
+BUILTIN(__atomic_signal_fence, "vi", "n")
+BUILTIN(__atomic_always_lock_free, "izvCD*", "n")
+BUILTIN(__atomic_is_lock_free, "izvCD*", "n")
+
+// OpenCL 2.0 atomic builtins.
+ATOMIC_BUILTIN(__opencl_atomic_init, "v.", "t")
+ATOMIC_BUILTIN(__opencl_atomic_load, "v.", "t")
+ATOMIC_BUILTIN(__opencl_atomic_store, "v.", "t")
+ATOMIC_BUILTIN(__opencl_atomic_exchange, "v.", "t")
+ATOMIC_BUILTIN(__opencl_atomic_compare_exchange_strong, "v.", "t")
+ATOMIC_BUILTIN(__opencl_atomic_compare_exchange_weak, "v.", "t")
+ATOMIC_BUILTIN(__opencl_atomic_fetch_add, "v.", "t")
+ATOMIC_BUILTIN(__opencl_atomic_fetch_sub, "v.", "t")
+ATOMIC_BUILTIN(__opencl_atomic_fetch_and, "v.", "t")
+ATOMIC_BUILTIN(__opencl_atomic_fetch_or, "v.", "t")
+ATOMIC_BUILTIN(__opencl_atomic_fetch_xor, "v.", "t")
+ATOMIC_BUILTIN(__opencl_atomic_fetch_min, "v.", "t")
+ATOMIC_BUILTIN(__opencl_atomic_fetch_max, "v.", "t")
+
+// GCC does not support these, they are a Clang extension.
+ATOMIC_BUILTIN(__atomic_fetch_min, "v.", "t")
+ATOMIC_BUILTIN(__atomic_fetch_max, "v.", "t")
+
+#undef ATOMIC_BUILTIN
+
+// Non-overloaded atomic builtins.
+BUILTIN(__sync_synchronize, "v", "n")
+// GCC does not support these, they are a Clang extension.
+BUILTIN(__sync_fetch_and_min, "iiD*i", "n")
+BUILTIN(__sync_fetch_and_max, "iiD*i", "n")
+BUILTIN(__sync_fetch_and_umin, "UiUiD*Ui", "n")
+BUILTIN(__sync_fetch_and_umax, "UiUiD*Ui", "n")
+
+// Random libc builtins.
+BUILTIN(__builtin_abort, "v", "Fnr")
+BUILTIN(__builtin_index, "c*cC*i", "Fn")
+BUILTIN(__builtin_rindex, "c*cC*i", "Fn")
+
+// Microsoft builtins. These are only active with -fms-extensions.
+LANGBUILTIN(_alloca, "v*z", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__annotation, "wC*.","n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__assume, "vb", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_bittest, "UcNiC*Ni", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_bittestandcomplement, "UcNi*Ni", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_bittestandreset, "UcNi*Ni", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_bittestandset, "UcNi*Ni", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_bittest64, "UcWiC*Wi", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_bittestandcomplement64, "UcWi*Wi", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_bittestandreset64, "UcWi*Wi", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_bittestandset64, "UcWi*Wi", "n", ALL_MS_LANGUAGES)
+LIBBUILTIN(_byteswap_ushort, "UsUs", "fnc", "stdlib.h", ALL_MS_LANGUAGES)
+LIBBUILTIN(_byteswap_ulong, "UNiUNi", "fnc", "stdlib.h", ALL_MS_LANGUAGES)
+LIBBUILTIN(_byteswap_uint64, "ULLiULLi", "fnc", "stdlib.h", ALL_MS_LANGUAGES)
+LANGBUILTIN(__debugbreak, "v", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__exception_code, "UNi", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_exception_code, "UNi", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__exception_info, "v*", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_exception_info, "v*", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__abnormal_termination, "i", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_abnormal_termination, "i", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__GetExceptionInfo, "v*.", "ntu", ALL_MS_LANGUAGES)
+LANGBUILTIN(_InterlockedAnd8, "ccD*c", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_InterlockedAnd16, "ssD*s", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_InterlockedAnd, "NiNiD*Ni", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_InterlockedCompareExchange8, "ccD*cc", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_InterlockedCompareExchange16, "ssD*ss", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_InterlockedCompareExchange, "NiNiD*NiNi", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_InterlockedCompareExchange64, "LLiLLiD*LLiLLi", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_InterlockedCompareExchangePointer, "v*v*D*v*v*", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_InterlockedCompareExchangePointer_nf, "v*v*D*v*v*", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_InterlockedDecrement16, "ssD*", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_InterlockedDecrement, "NiNiD*", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_InterlockedExchange, "NiNiD*Ni", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_InterlockedExchange8, "ccD*c", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_InterlockedExchange16, "ssD*s", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_InterlockedExchangeAdd8, "ccD*c", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_InterlockedExchangeAdd16, "ssD*s", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_InterlockedExchangeAdd, "NiNiD*Ni", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_InterlockedExchangePointer, "v*v*D*v*", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_InterlockedExchangeSub8, "ccD*c", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_InterlockedExchangeSub16, "ssD*s", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_InterlockedExchangeSub, "NiNiD*Ni", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_InterlockedIncrement16, "ssD*", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_InterlockedIncrement, "NiNiD*", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_InterlockedOr8, "ccD*c", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_InterlockedOr16, "ssD*s", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_InterlockedOr, "NiNiD*Ni", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_InterlockedXor8, "ccD*c", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_InterlockedXor16, "ssD*s", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_InterlockedXor, "NiNiD*Ni", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_interlockedbittestandreset, "UcNiD*Ni", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_interlockedbittestandreset64, "UcWiD*Wi", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_interlockedbittestandreset_acq, "UcNiD*Ni", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_interlockedbittestandreset_nf, "UcNiD*Ni", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_interlockedbittestandreset_rel, "UcNiD*Ni", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_interlockedbittestandset, "UcNiD*Ni", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_interlockedbittestandset64, "UcWiD*Wi", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_interlockedbittestandset_acq, "UcNiD*Ni", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_interlockedbittestandset_nf, "UcNiD*Ni", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_interlockedbittestandset_rel, "UcNiD*Ni", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__noop, "i.", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__lzcnt16, "UsUs", "nc", ALL_MS_LANGUAGES)
+LANGBUILTIN(__lzcnt, "UiUi", "nc", ALL_MS_LANGUAGES)
+LANGBUILTIN(__lzcnt64, "UWiUWi", "nc", ALL_MS_LANGUAGES)
+LANGBUILTIN(__popcnt16, "UsUs", "nc", ALL_MS_LANGUAGES)
+LANGBUILTIN(__popcnt, "UiUi", "nc", ALL_MS_LANGUAGES)
+LANGBUILTIN(__popcnt64, "UWiUWi", "nc", ALL_MS_LANGUAGES)
+LANGBUILTIN(_ReturnAddress, "v*", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_rotl8, "UcUcUc", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_rotl16, "UsUsUc", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_rotl, "UiUii", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_lrotl, "UNiUNii", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_rotl64, "UWiUWii", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_rotr8, "UcUcUc", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_rotr16, "UsUsUc", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_rotr, "UiUii", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_lrotr, "UNiUNii", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_rotr64, "UWiUWii", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__va_start, "vc**.", "nt", ALL_MS_LANGUAGES)
+LANGBUILTIN(__fastfail, "vUi", "nr", ALL_MS_LANGUAGES)
+
+// Microsoft library builtins.
+LIBBUILTIN(_setjmpex, "iJ", "fj", "setjmpex.h", ALL_MS_LANGUAGES)
+
+// C99 library functions
+// C99 stdarg.h
+LIBBUILTIN(va_start, "vA.", "fn", "stdarg.h", ALL_LANGUAGES)
+LIBBUILTIN(va_end, "vA", "fn", "stdarg.h", ALL_LANGUAGES)
+LIBBUILTIN(va_copy, "vAA", "fn", "stdarg.h", ALL_LANGUAGES)
+// C99 stdlib.h
+LIBBUILTIN(abort, "v", "fr", "stdlib.h", ALL_LANGUAGES)
+LIBBUILTIN(calloc, "v*zz", "f", "stdlib.h", ALL_LANGUAGES)
+LIBBUILTIN(exit, "vi", "fr", "stdlib.h", ALL_LANGUAGES)
+LIBBUILTIN(_Exit, "vi", "fr", "stdlib.h", ALL_LANGUAGES)
+LIBBUILTIN(malloc, "v*z", "f", "stdlib.h", ALL_LANGUAGES)
+LIBBUILTIN(realloc, "v*v*z", "f", "stdlib.h", ALL_LANGUAGES)
+LIBBUILTIN(strtod, "dcC*c**", "f", "stdlib.h", ALL_LANGUAGES)
+LIBBUILTIN(strtof, "fcC*c**", "f", "stdlib.h", ALL_LANGUAGES)
+LIBBUILTIN(strtold, "LdcC*c**", "f", "stdlib.h", ALL_LANGUAGES)
+LIBBUILTIN(strtol, "LicC*c**i", "f", "stdlib.h", ALL_LANGUAGES)
+LIBBUILTIN(strtoll, "LLicC*c**i", "f", "stdlib.h", ALL_LANGUAGES)
+LIBBUILTIN(strtoul, "ULicC*c**i", "f", "stdlib.h", ALL_LANGUAGES)
+LIBBUILTIN(strtoull, "ULLicC*c**i", "f", "stdlib.h", ALL_LANGUAGES)
+// C99 string.h
+LIBBUILTIN(memcpy, "v*v*vC*z", "f", "string.h", ALL_LANGUAGES)
+LIBBUILTIN(memcmp, "ivC*vC*z", "f", "string.h", ALL_LANGUAGES)
+LIBBUILTIN(memmove, "v*v*vC*z", "f", "string.h", ALL_LANGUAGES)
+LIBBUILTIN(strcpy, "c*c*cC*", "f", "string.h", ALL_LANGUAGES)
+LIBBUILTIN(strncpy, "c*c*cC*z", "f", "string.h", ALL_LANGUAGES)
+LIBBUILTIN(strcmp, "icC*cC*", "f", "string.h", ALL_LANGUAGES)
+LIBBUILTIN(strncmp, "icC*cC*z", "f", "string.h", ALL_LANGUAGES)
+LIBBUILTIN(strcat, "c*c*cC*", "f", "string.h", ALL_LANGUAGES)
+LIBBUILTIN(strncat, "c*c*cC*z", "f", "string.h", ALL_LANGUAGES)
+LIBBUILTIN(strxfrm, "zc*cC*z", "f", "string.h", ALL_LANGUAGES)
+LIBBUILTIN(memchr, "v*vC*iz", "f", "string.h", ALL_LANGUAGES)
+LIBBUILTIN(strchr, "c*cC*i", "f", "string.h", ALL_LANGUAGES)
+LIBBUILTIN(strcspn, "zcC*cC*", "f", "string.h", ALL_LANGUAGES)
+LIBBUILTIN(strpbrk, "c*cC*cC*", "f", "string.h", ALL_LANGUAGES)
+LIBBUILTIN(strrchr, "c*cC*i", "f", "string.h", ALL_LANGUAGES)
+LIBBUILTIN(strspn, "zcC*cC*", "f", "string.h", ALL_LANGUAGES)
+LIBBUILTIN(strstr, "c*cC*cC*", "f", "string.h", ALL_LANGUAGES)
+LIBBUILTIN(strtok, "c*c*cC*", "f", "string.h", ALL_LANGUAGES)
+LIBBUILTIN(memset, "v*v*iz", "f", "string.h", ALL_LANGUAGES)
+LIBBUILTIN(strerror, "c*i", "f", "string.h", ALL_LANGUAGES)
+LIBBUILTIN(strlen, "zcC*", "f", "string.h", ALL_LANGUAGES)
+// C99 stdio.h
+// FIXME: This list is incomplete.
+LIBBUILTIN(printf, "icC*.", "fp:0:", "stdio.h", ALL_LANGUAGES)
+LIBBUILTIN(fprintf, "iP*cC*.", "fp:1:", "stdio.h", ALL_LANGUAGES)
+LIBBUILTIN(snprintf, "ic*zcC*.", "fp:2:", "stdio.h", ALL_LANGUAGES)
+LIBBUILTIN(sprintf, "ic*cC*.", "fp:1:", "stdio.h", ALL_LANGUAGES)
+LIBBUILTIN(vprintf, "icC*a", "fP:0:", "stdio.h", ALL_LANGUAGES)
+LIBBUILTIN(vfprintf, "iP*cC*a", "fP:1:", "stdio.h", ALL_LANGUAGES)
+LIBBUILTIN(vsnprintf, "ic*zcC*a", "fP:2:", "stdio.h", ALL_LANGUAGES)
+LIBBUILTIN(vsprintf, "ic*cC*a", "fP:1:", "stdio.h", ALL_LANGUAGES)
+LIBBUILTIN(scanf, "icC*R.", "fs:0:", "stdio.h", ALL_LANGUAGES)
+LIBBUILTIN(fscanf, "iP*RcC*R.", "fs:1:", "stdio.h", ALL_LANGUAGES)
+LIBBUILTIN(sscanf, "icC*RcC*R.", "fs:1:", "stdio.h", ALL_LANGUAGES)
+LIBBUILTIN(vscanf, "icC*Ra", "fS:0:", "stdio.h", ALL_LANGUAGES)
+LIBBUILTIN(vfscanf, "iP*RcC*Ra", "fS:1:", "stdio.h", ALL_LANGUAGES)
+LIBBUILTIN(vsscanf, "icC*RcC*Ra", "fS:1:", "stdio.h", ALL_LANGUAGES)
+LIBBUILTIN(fopen, "P*cC*cC*", "f", "stdio.h", ALL_LANGUAGES)
+LIBBUILTIN(fread, "zv*zzP*", "f", "stdio.h", ALL_LANGUAGES)
+LIBBUILTIN(fwrite, "zvC*zzP*", "f", "stdio.h", ALL_LANGUAGES)
+
+// C99 ctype.h
+LIBBUILTIN(isalnum, "ii", "fnU", "ctype.h", ALL_LANGUAGES)
+LIBBUILTIN(isalpha, "ii", "fnU", "ctype.h", ALL_LANGUAGES)
+LIBBUILTIN(isblank, "ii", "fnU", "ctype.h", ALL_LANGUAGES)
+LIBBUILTIN(iscntrl, "ii", "fnU", "ctype.h", ALL_LANGUAGES)
+LIBBUILTIN(isdigit, "ii", "fnU", "ctype.h", ALL_LANGUAGES)
+LIBBUILTIN(isgraph, "ii", "fnU", "ctype.h", ALL_LANGUAGES)
+LIBBUILTIN(islower, "ii", "fnU", "ctype.h", ALL_LANGUAGES)
+LIBBUILTIN(isprint, "ii", "fnU", "ctype.h", ALL_LANGUAGES)
+LIBBUILTIN(ispunct, "ii", "fnU", "ctype.h", ALL_LANGUAGES)
+LIBBUILTIN(isspace, "ii", "fnU", "ctype.h", ALL_LANGUAGES)
+LIBBUILTIN(isupper, "ii", "fnU", "ctype.h", ALL_LANGUAGES)
+LIBBUILTIN(isxdigit, "ii", "fnU", "ctype.h", ALL_LANGUAGES)
+LIBBUILTIN(tolower, "ii", "fnU", "ctype.h", ALL_LANGUAGES)
+LIBBUILTIN(toupper, "ii", "fnU", "ctype.h", ALL_LANGUAGES)
+// C99 wchar.h
+// FIXME: This list is incomplete. We should cover at least the functions that
+// take format strings.
+LIBBUILTIN(wcschr, "w*wC*w", "f", "wchar.h", ALL_LANGUAGES)
+LIBBUILTIN(wcscmp, "iwC*wC*", "f", "wchar.h", ALL_LANGUAGES)
+LIBBUILTIN(wcslen, "zwC*", "f", "wchar.h", ALL_LANGUAGES)
+LIBBUILTIN(wcsncmp, "iwC*wC*z", "f", "wchar.h", ALL_LANGUAGES)
+LIBBUILTIN(wmemchr, "w*wC*wz", "f", "wchar.h", ALL_LANGUAGES)
+LIBBUILTIN(wmemcmp, "iwC*wC*z", "f", "wchar.h", ALL_LANGUAGES)
+LIBBUILTIN(wmemcpy, "w*w*wC*z", "f", "wchar.h", ALL_LANGUAGES)
+LIBBUILTIN(wmemmove,"w*w*wC*z", "f", "wchar.h", ALL_LANGUAGES)
+
+// C99
+// In some systems setjmp is a macro that expands to _setjmp. We undefine
+// it here to avoid having two identical LIBBUILTIN entries.
+#undef setjmp
+LIBBUILTIN(setjmp, "iJ", "fj", "setjmp.h", ALL_LANGUAGES)
+LIBBUILTIN(longjmp, "vJi", "fr", "setjmp.h", ALL_LANGUAGES)
+
+// Non-C library functions, active in GNU mode only.
+// Functions with (returns_twice) attribute (marked as "j") are still active in
+// all languages, because losing this attribute would result in miscompilation
+// when these functions are used in non-GNU mode. PR16138.
+LIBBUILTIN(alloca, "v*z", "f", "stdlib.h", ALL_GNU_LANGUAGES)
+// POSIX string.h
+LIBBUILTIN(stpcpy, "c*c*cC*", "f", "string.h", ALL_GNU_LANGUAGES)
+LIBBUILTIN(stpncpy, "c*c*cC*z", "f", "string.h", ALL_GNU_LANGUAGES)
+LIBBUILTIN(strdup, "c*cC*", "f", "string.h", ALL_GNU_LANGUAGES)
+LIBBUILTIN(strndup, "c*cC*z", "f", "string.h", ALL_GNU_LANGUAGES)
+// POSIX strings.h
+LIBBUILTIN(index, "c*cC*i", "f", "strings.h", ALL_GNU_LANGUAGES)
+LIBBUILTIN(rindex, "c*cC*i", "f", "strings.h", ALL_GNU_LANGUAGES)
+LIBBUILTIN(bzero, "vv*z", "f", "strings.h", ALL_GNU_LANGUAGES)
+// In some systems str[n]casejmp is a macro that expands to _str[n]icmp.
+// We undefine then here to avoid wrong name.
+#undef strcasecmp
+#undef strncasecmp
+LIBBUILTIN(strcasecmp, "icC*cC*", "f", "strings.h", ALL_GNU_LANGUAGES)
+LIBBUILTIN(strncasecmp, "icC*cC*z", "f", "strings.h", ALL_GNU_LANGUAGES)
+// POSIX unistd.h
+LIBBUILTIN(_exit, "vi", "fr", "unistd.h", ALL_GNU_LANGUAGES)
+LIBBUILTIN(vfork, "p", "fj", "unistd.h", ALL_LANGUAGES)
+// POSIX pthread.h
+LIBBUILTIN(pthread_create, "", "fC<2,3>", "pthread.h", ALL_GNU_LANGUAGES)
+
+// POSIX setjmp.h
+
+LIBBUILTIN(_setjmp, "iJ", "fj", "setjmp.h", ALL_LANGUAGES)
+LIBBUILTIN(__sigsetjmp, "iSJi", "fj", "setjmp.h", ALL_LANGUAGES)
+LIBBUILTIN(sigsetjmp, "iSJi", "fj", "setjmp.h", ALL_LANGUAGES)
+LIBBUILTIN(setjmp_syscall, "iJ", "fj", "setjmp.h", ALL_LANGUAGES)
+LIBBUILTIN(savectx, "iJ", "fj", "setjmp.h", ALL_LANGUAGES)
+LIBBUILTIN(qsetjmp, "iJ", "fj", "setjmp.h", ALL_LANGUAGES)
+LIBBUILTIN(getcontext, "iK*", "fj", "setjmp.h", ALL_LANGUAGES)
+
+LIBBUILTIN(_longjmp, "vJi", "fr", "setjmp.h", ALL_GNU_LANGUAGES)
+LIBBUILTIN(siglongjmp, "vSJi", "fr", "setjmp.h", ALL_GNU_LANGUAGES)
+// non-standard but very common
+LIBBUILTIN(strlcpy, "zc*cC*z", "f", "string.h", ALL_GNU_LANGUAGES)
+LIBBUILTIN(strlcat, "zc*cC*z", "f", "string.h", ALL_GNU_LANGUAGES)
+// id objc_msgSend(id, SEL, ...)
+LIBBUILTIN(objc_msgSend, "GGH.", "f", "objc/message.h", OBJC_LANG)
+// long double objc_msgSend_fpret(id self, SEL op, ...)
+LIBBUILTIN(objc_msgSend_fpret, "LdGH.", "f", "objc/message.h", OBJC_LANG)
+// _Complex long double objc_msgSend_fp2ret(id self, SEL op, ...)
+LIBBUILTIN(objc_msgSend_fp2ret, "XLdGH.", "f", "objc/message.h", OBJC_LANG)
+// void objc_msgSend_stret (id, SEL, ...)
+LIBBUILTIN(objc_msgSend_stret, "vGH.", "f", "objc/message.h", OBJC_LANG)
+// id objc_msgSendSuper(struct objc_super *super, SEL op, ...)
+LIBBUILTIN(objc_msgSendSuper, "GM*H.", "f", "objc/message.h", OBJC_LANG)
+// void objc_msgSendSuper_stret(struct objc_super *super, SEL op, ...)
+LIBBUILTIN(objc_msgSendSuper_stret, "vM*H.", "f", "objc/message.h", OBJC_LANG)
+// id objc_getClass(const char *name)
+LIBBUILTIN(objc_getClass, "GcC*", "f", "objc/runtime.h", OBJC_LANG)
+// id objc_getMetaClass(const char *name)
+LIBBUILTIN(objc_getMetaClass, "GcC*", "f", "objc/runtime.h", OBJC_LANG)
+// void objc_enumerationMutation(id)
+LIBBUILTIN(objc_enumerationMutation, "vG", "f", "objc/runtime.h", OBJC_LANG)
+
+// id objc_read_weak(id *location)
+LIBBUILTIN(objc_read_weak, "GG*", "f", "objc/objc-auto.h", OBJC_LANG)
+// id objc_assign_weak(id value, id *location)
+LIBBUILTIN(objc_assign_weak, "GGG*", "f", "objc/objc-auto.h", OBJC_LANG)
+// id objc_assign_ivar(id value, id dest, ptrdiff_t offset)
+LIBBUILTIN(objc_assign_ivar, "GGGY", "f", "objc/objc-auto.h", OBJC_LANG)
+// id objc_assign_global(id val, id *dest)
+LIBBUILTIN(objc_assign_global, "GGG*", "f", "objc/objc-auto.h", OBJC_LANG)
+// id objc_assign_strongCast(id val, id *dest
+LIBBUILTIN(objc_assign_strongCast, "GGG*", "f", "objc/objc-auto.h", OBJC_LANG)
+
+// id objc_exception_extract(void *localExceptionData)
+LIBBUILTIN(objc_exception_extract, "Gv*", "f", "objc/objc-exception.h", OBJC_LANG)
+// void objc_exception_try_enter(void *localExceptionData)
+LIBBUILTIN(objc_exception_try_enter, "vv*", "f", "objc/objc-exception.h", OBJC_LANG)
+// void objc_exception_try_exit(void *localExceptionData)
+LIBBUILTIN(objc_exception_try_exit, "vv*", "f", "objc/objc-exception.h", OBJC_LANG)
+// int objc_exception_match(Class exceptionClass, id exception)
+LIBBUILTIN(objc_exception_match, "iGG", "f", "objc/objc-exception.h", OBJC_LANG)
+// void objc_exception_throw(id exception)
+LIBBUILTIN(objc_exception_throw, "vG", "f", "objc/objc-exception.h", OBJC_LANG)
+
+// int objc_sync_enter(id obj)
+LIBBUILTIN(objc_sync_enter, "iG", "f", "objc/objc-sync.h", OBJC_LANG)
+// int objc_sync_exit(id obj)
+LIBBUILTIN(objc_sync_exit, "iG", "f", "objc/objc-sync.h", OBJC_LANG)
+
+BUILTIN(__builtin_objc_memmove_collectable, "v*v*vC*z", "nF")
+
+// void NSLog(NSString *fmt, ...)
+LIBBUILTIN(NSLog, "vG.", "fp:0:", "Foundation/NSObjCRuntime.h", OBJC_LANG)
+// void NSLogv(NSString *fmt, va_list args)
+LIBBUILTIN(NSLogv, "vGa", "fP:0:", "Foundation/NSObjCRuntime.h", OBJC_LANG)
+
+// Builtin math library functions
+LIBBUILTIN(atan2, "ddd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(atan2f, "fff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(atan2l, "LdLdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(abs, "ii", "fnc", "stdlib.h", ALL_LANGUAGES)
+LIBBUILTIN(labs, "LiLi", "fnc", "stdlib.h", ALL_LANGUAGES)
+LIBBUILTIN(llabs, "LLiLLi", "fnc", "stdlib.h", ALL_LANGUAGES)
+
+LIBBUILTIN(copysign, "ddd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(copysignf, "fff", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(copysignl, "LdLdLd", "fnc", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(fabs, "dd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(fabsf, "ff", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(fabsl, "LdLd", "fnc", "math.h", ALL_LANGUAGES)
+
+// Some systems define finitef as alias of _finitef.
+#if defined (finitef)
+#undef finitef
+#endif
+LIBBUILTIN(finite, "id", "fnc", "math.h", GNU_LANG)
+LIBBUILTIN(finitef, "if", "fnc", "math.h", GNU_LANG)
+LIBBUILTIN(finitel, "iLd", "fnc", "math.h", GNU_LANG)
+// glibc's math.h generates calls to __finite
+LIBBUILTIN(__finite, "id", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(__finitef, "if", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(__finitel, "iLd", "fnc", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(fmod, "ddd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(fmodf, "fff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(fmodl, "LdLdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(frexp, "ddi*", "fn", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(frexpf, "ffi*", "fn", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(frexpl, "LdLdi*", "fn", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(ldexp, "ddi", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(ldexpf, "ffi", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(ldexpl, "LdLdi", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(modf, "ddd*", "fn", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(modff, "fff*", "fn", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(modfl, "LdLdLd*", "fn", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(nan, "dcC*", "fUn", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(nanf, "fcC*", "fUn", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(nanl, "LdcC*", "fUn", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(pow, "ddd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(powf, "fff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(powl, "LdLdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(acos, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(acosf, "ff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(acosl, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(acosh, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(acoshf, "ff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(acoshl, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(asin, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(asinf, "ff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(asinl, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(asinh, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(asinhf, "ff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(asinhl, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(atan, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(atanf, "ff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(atanl, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(atanh, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(atanhf, "ff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(atanhl, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(cbrt, "dd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(cbrtf, "ff", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(cbrtl, "LdLd", "fnc", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(ceil, "dd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(ceilf, "ff", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(ceill, "LdLd", "fnc", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(cos, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(cosf, "ff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(cosl, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(cosh, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(coshf, "ff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(coshl, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(erf, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(erff, "ff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(erfl, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(erfc, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(erfcf, "ff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(erfcl, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(exp, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(expf, "ff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(expl, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(exp2, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(exp2f, "ff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(exp2l, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(expm1, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(expm1f, "ff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(expm1l, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(fdim, "ddd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(fdimf, "fff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(fdiml, "LdLdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(floor, "dd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(floorf, "ff", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(floorl, "LdLd", "fnc", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(fma, "dddd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(fmaf, "ffff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(fmal, "LdLdLdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(fmax, "ddd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(fmaxf, "fff", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(fmaxl, "LdLdLd", "fnc", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(fmin, "ddd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(fminf, "fff", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(fminl, "LdLdLd", "fnc", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(hypot, "ddd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(hypotf, "fff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(hypotl, "LdLdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(ilogb, "id", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(ilogbf, "if", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(ilogbl, "iLd", "fne", "math.h", ALL_LANGUAGES)
+
+// POSIX math.h declares a global, signgam, that lgamma writes to, so these
+// shouldn't have "e" or "c" attributes
+LIBBUILTIN(lgamma, "dd", "fn", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(lgammaf, "ff", "fn", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(lgammal, "LdLd", "fn", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(llrint, "LLid", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(llrintf, "LLif", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(llrintl, "LLiLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(llround, "LLid", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(llroundf, "LLif", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(llroundl, "LLiLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(log, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(logf, "ff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(logl, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(log10, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(log10f, "ff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(log10l, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(log1p, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(log1pf, "ff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(log1pl, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(log2, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(log2f, "ff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(log2l, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(logb, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(logbf, "ff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(logbl, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(lrint, "Lid", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(lrintf, "Lif", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(lrintl, "LiLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(lround, "Lid", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(lroundf, "Lif", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(lroundl, "LiLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(nearbyint, "dd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(nearbyintf, "ff", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(nearbyintl, "LdLd", "fnc", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(nextafter, "ddd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(nextafterf, "fff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(nextafterl, "LdLdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(nexttoward, "ddLd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(nexttowardf, "ffLd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(nexttowardl, "LdLdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(remainder, "ddd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(remainderf, "fff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(remainderl, "LdLdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(remquo, "dddi*", "fn", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(remquof, "fffi*", "fn", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(remquol, "LdLdLdi*", "fn", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(rint, "dd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(rintf, "ff", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(rintl, "LdLd", "fnc", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(round, "dd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(roundf, "ff", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(roundl, "LdLd", "fnc", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(scalbln, "ddLi", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(scalblnf, "ffLi", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(scalblnl, "LdLdLi", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(scalbn, "ddi", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(scalbnf, "ffi", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(scalbnl, "LdLdi", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(sin, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(sinf, "ff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(sinl, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(sinh, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(sinhf, "ff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(sinhl, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(sqrt, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(sqrtf, "ff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(sqrtl, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(tan, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(tanf, "ff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(tanl, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(tanh, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(tanhf, "ff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(tanhl, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(tgamma, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(tgammaf, "ff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(tgammal, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(trunc, "dd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(truncf, "ff", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(truncl, "LdLd", "fnc", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(cabs, "dXd", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(cabsf, "fXf", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(cabsl, "LdXLd", "fne", "complex.h", ALL_LANGUAGES)
+
+LIBBUILTIN(cacos, "XdXd", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(cacosf, "XfXf", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(cacosl, "XLdXLd", "fne", "complex.h", ALL_LANGUAGES)
+
+LIBBUILTIN(cacosh, "XdXd", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(cacoshf, "XfXf", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(cacoshl, "XLdXLd", "fne", "complex.h", ALL_LANGUAGES)
+
+LIBBUILTIN(carg, "dXd", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(cargf, "fXf", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(cargl, "LdXLd", "fne", "complex.h", ALL_LANGUAGES)
+
+LIBBUILTIN(casin, "XdXd", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(casinf, "XfXf", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(casinl, "XLdXLd", "fne", "complex.h", ALL_LANGUAGES)
+
+LIBBUILTIN(casinh, "XdXd", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(casinhf, "XfXf", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(casinhl, "XLdXLd", "fne", "complex.h", ALL_LANGUAGES)
+
+LIBBUILTIN(catan, "XdXd", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(catanf, "XfXf", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(catanl, "XLdXLd", "fne", "complex.h", ALL_LANGUAGES)
+
+LIBBUILTIN(catanh, "XdXd", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(catanhf, "XfXf", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(catanhl, "XLdXLd", "fne", "complex.h", ALL_LANGUAGES)
+
+LIBBUILTIN(ccos, "XdXd", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(ccosf, "XfXf", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(ccosl, "XLdXLd", "fne", "complex.h", ALL_LANGUAGES)
+
+LIBBUILTIN(ccosh, "XdXd", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(ccoshf, "XfXf", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(ccoshl, "XLdXLd", "fne", "complex.h", ALL_LANGUAGES)
+
+LIBBUILTIN(cexp, "XdXd", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(cexpf, "XfXf", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(cexpl, "XLdXLd", "fne", "complex.h", ALL_LANGUAGES)
+
+LIBBUILTIN(cimag, "dXd", "fnc", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(cimagf, "fXf", "fnc", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(cimagl, "LdXLd", "fnc", "complex.h", ALL_LANGUAGES)
+
+LIBBUILTIN(conj, "XdXd", "fnc", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(conjf, "XfXf", "fnc", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(conjl, "XLdXLd", "fnc", "complex.h", ALL_LANGUAGES)
+
+LIBBUILTIN(clog, "XdXd", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(clogf, "XfXf", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(clogl, "XLdXLd", "fne", "complex.h", ALL_LANGUAGES)
+
+LIBBUILTIN(cproj, "XdXd", "fnc", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(cprojf, "XfXf", "fnc", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(cprojl, "XLdXLd", "fnc", "complex.h", ALL_LANGUAGES)
+
+LIBBUILTIN(cpow, "XdXdXd", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(cpowf, "XfXfXf", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(cpowl, "XLdXLdXLd", "fne", "complex.h", ALL_LANGUAGES)
+
+LIBBUILTIN(creal, "dXd", "fnc", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(crealf, "fXf", "fnc", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(creall, "LdXLd", "fnc", "complex.h", ALL_LANGUAGES)
+
+LIBBUILTIN(csin, "XdXd", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(csinf, "XfXf", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(csinl, "XLdXLd", "fne", "complex.h", ALL_LANGUAGES)
+
+LIBBUILTIN(csinh, "XdXd", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(csinhf, "XfXf", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(csinhl, "XLdXLd", "fne", "complex.h", ALL_LANGUAGES)
+
+LIBBUILTIN(csqrt, "XdXd", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(csqrtf, "XfXf", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(csqrtl, "XLdXLd", "fne", "complex.h", ALL_LANGUAGES)
+
+LIBBUILTIN(ctan, "XdXd", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(ctanf, "XfXf", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(ctanl, "XLdXLd", "fne", "complex.h", ALL_LANGUAGES)
+
+LIBBUILTIN(ctanh, "XdXd", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(ctanhf, "XfXf", "fne", "complex.h", ALL_LANGUAGES)
+LIBBUILTIN(ctanhl, "XLdXLd", "fne", "complex.h", ALL_LANGUAGES)
+
+// __sinpi and friends are OS X specific library functions, but otherwise much
+// like the standard (non-complex) sin (etc).
+LIBBUILTIN(__sinpi, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(__sinpif, "ff", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(__cospi, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(__cospif, "ff", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(__tanpi, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(__tanpif, "ff", "fne", "math.h", ALL_LANGUAGES)
+
+// Similarly, __exp10 is OS X only
+LIBBUILTIN(__exp10, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(__exp10f, "ff", "fne", "math.h", ALL_LANGUAGES)
+
+// Blocks runtime Builtin math library functions
+LIBBUILTIN(_Block_object_assign, "vv*vC*iC", "f", "Blocks.h", ALL_LANGUAGES)
+LIBBUILTIN(_Block_object_dispose, "vvC*iC", "f", "Blocks.h", ALL_LANGUAGES)
+// FIXME: Also declare NSConcreteGlobalBlock and NSConcreteStackBlock.
+
+// Annotation function
+BUILTIN(__builtin_annotation, "v.", "tn")
+
+// Invariants
+BUILTIN(__builtin_assume, "vb", "n")
+
+// Multiprecision Arithmetic Builtins.
+BUILTIN(__builtin_addcb, "UcUcCUcCUcCUc*", "n")
+BUILTIN(__builtin_addcs, "UsUsCUsCUsCUs*", "n")
+BUILTIN(__builtin_addc, "UiUiCUiCUiCUi*", "n")
+BUILTIN(__builtin_addcl, "ULiULiCULiCULiCULi*", "n")
+BUILTIN(__builtin_addcll, "ULLiULLiCULLiCULLiCULLi*", "n")
+BUILTIN(__builtin_subcb, "UcUcCUcCUcCUc*", "n")
+BUILTIN(__builtin_subcs, "UsUsCUsCUsCUs*", "n")
+BUILTIN(__builtin_subc, "UiUiCUiCUiCUi*", "n")
+BUILTIN(__builtin_subcl, "ULiULiCULiCULiCULi*", "n")
+BUILTIN(__builtin_subcll, "ULLiULLiCULLiCULLiCULLi*", "n")
+
+// Checked Arithmetic Builtins for Security.
+BUILTIN(__builtin_add_overflow, "b.", "nt")
+BUILTIN(__builtin_sub_overflow, "b.", "nt")
+BUILTIN(__builtin_mul_overflow, "b.", "nt")
+BUILTIN(__builtin_uadd_overflow, "bUiCUiCUi*", "n")
+BUILTIN(__builtin_uaddl_overflow, "bULiCULiCULi*", "n")
+BUILTIN(__builtin_uaddll_overflow, "bULLiCULLiCULLi*", "n")
+BUILTIN(__builtin_usub_overflow, "bUiCUiCUi*", "n")
+BUILTIN(__builtin_usubl_overflow, "bULiCULiCULi*", "n")
+BUILTIN(__builtin_usubll_overflow, "bULLiCULLiCULLi*", "n")
+BUILTIN(__builtin_umul_overflow, "bUiCUiCUi*", "n")
+BUILTIN(__builtin_umull_overflow, "bULiCULiCULi*", "n")
+BUILTIN(__builtin_umulll_overflow, "bULLiCULLiCULLi*", "n")
+BUILTIN(__builtin_sadd_overflow, "bSiCSiCSi*", "n")
+BUILTIN(__builtin_saddl_overflow, "bSLiCSLiCSLi*", "n")
+BUILTIN(__builtin_saddll_overflow, "bSLLiCSLLiCSLLi*", "n")
+BUILTIN(__builtin_ssub_overflow, "bSiCSiCSi*", "n")
+BUILTIN(__builtin_ssubl_overflow, "bSLiCSLiCSLi*", "n")
+BUILTIN(__builtin_ssubll_overflow, "bSLLiCSLLiCSLLi*", "n")
+BUILTIN(__builtin_smul_overflow, "bSiCSiCSi*", "n")
+BUILTIN(__builtin_smull_overflow, "bSLiCSLiCSLi*", "n")
+BUILTIN(__builtin_smulll_overflow, "bSLLiCSLLiCSLLi*", "n")
+
+// Clang builtins (not available in GCC).
+BUILTIN(__builtin_addressof, "v*v&", "nct")
+BUILTIN(__builtin_operator_new, "v*z", "tc")
+BUILTIN(__builtin_operator_delete, "vv*", "tn")
+BUILTIN(__builtin_char_memchr, "c*cC*iz", "n")
+BUILTIN(__builtin_dump_struct, "ivC*v*", "tn")
+
+// Safestack builtins
+BUILTIN(__builtin___get_unsafe_stack_start, "v*", "Fn")
+BUILTIN(__builtin___get_unsafe_stack_bottom, "v*", "Fn")
+BUILTIN(__builtin___get_unsafe_stack_top, "v*", "Fn")
+BUILTIN(__builtin___get_unsafe_stack_ptr, "v*", "Fn")
+
+// Nontemporal loads/stores builtins
+BUILTIN(__builtin_nontemporal_store, "v.", "t")
+BUILTIN(__builtin_nontemporal_load, "v.", "t")
+
+// Coroutine intrinsics.
+BUILTIN(__builtin_coro_resume, "vv*", "")
+BUILTIN(__builtin_coro_destroy, "vv*", "")
+BUILTIN(__builtin_coro_done, "bv*", "n")
+BUILTIN(__builtin_coro_promise, "v*v*IiIb", "n")
+
+BUILTIN(__builtin_coro_size, "z", "n")
+BUILTIN(__builtin_coro_frame, "v*", "n")
+BUILTIN(__builtin_coro_noop, "v*", "n")
+BUILTIN(__builtin_coro_free, "v*v*", "n")
+
+BUILTIN(__builtin_coro_id, "v*Iiv*v*v*", "n")
+BUILTIN(__builtin_coro_alloc, "b", "n")
+BUILTIN(__builtin_coro_begin, "v*v*", "n")
+BUILTIN(__builtin_coro_end, "bv*Ib", "n")
+BUILTIN(__builtin_coro_suspend, "cIb", "n")
+BUILTIN(__builtin_coro_param, "bv*v*", "n")
+// OpenCL v2.0 s6.13.16, s9.17.3.5 - Pipe functions.
+// We need the generic prototype, since the packet type could be anything.
+LANGBUILTIN(read_pipe, "i.", "tn", OCLC20_LANG)
+LANGBUILTIN(write_pipe, "i.", "tn", OCLC20_LANG)
+
+LANGBUILTIN(reserve_read_pipe, "i.", "tn", OCLC20_LANG)
+LANGBUILTIN(reserve_write_pipe, "i.", "tn", OCLC20_LANG)
+
+LANGBUILTIN(commit_write_pipe, "v.", "tn", OCLC20_LANG)
+LANGBUILTIN(commit_read_pipe, "v.", "tn", OCLC20_LANG)
+
+LANGBUILTIN(sub_group_reserve_read_pipe, "i.", "tn", OCLC20_LANG)
+LANGBUILTIN(sub_group_reserve_write_pipe, "i.", "tn", OCLC20_LANG)
+
+LANGBUILTIN(sub_group_commit_read_pipe, "v.", "tn", OCLC20_LANG)
+LANGBUILTIN(sub_group_commit_write_pipe, "v.", "tn", OCLC20_LANG)
+
+LANGBUILTIN(work_group_reserve_read_pipe, "i.", "tn", OCLC20_LANG)
+LANGBUILTIN(work_group_reserve_write_pipe, "i.", "tn", OCLC20_LANG)
+
+LANGBUILTIN(work_group_commit_read_pipe, "v.", "tn", OCLC20_LANG)
+LANGBUILTIN(work_group_commit_write_pipe, "v.", "tn", OCLC20_LANG)
+
+LANGBUILTIN(get_pipe_num_packets, "Ui.", "tn", OCLC20_LANG)
+LANGBUILTIN(get_pipe_max_packets, "Ui.", "tn", OCLC20_LANG)
+
+// OpenCL v2.0 s6.13.17 - Enqueue kernel functions.
+// Custom builtin check allows to perform special check of passed block arguments.
+LANGBUILTIN(enqueue_kernel, "i.", "tn", OCLC20_LANG)
+LANGBUILTIN(get_kernel_work_group_size, "Ui.", "tn", OCLC20_LANG)
+LANGBUILTIN(get_kernel_preferred_work_group_size_multiple, "Ui.", "tn", OCLC20_LANG)
+LANGBUILTIN(get_kernel_max_sub_group_size_for_ndrange, "Ui.", "tn", OCLC20_LANG)
+LANGBUILTIN(get_kernel_sub_group_count_for_ndrange, "Ui.", "tn", OCLC20_LANG)
+
+// OpenCL v2.0 s6.13.9 - Address space qualifier functions.
+LANGBUILTIN(to_global, "v*v*", "tn", OCLC20_LANG)
+LANGBUILTIN(to_local, "v*v*", "tn", OCLC20_LANG)
+LANGBUILTIN(to_private, "v*v*", "tn", OCLC20_LANG)
+
+// OpenCL half load/store builtin
+LANGBUILTIN(__builtin_store_half, "vdh*", "n", ALL_OCLC_LANGUAGES)
+LANGBUILTIN(__builtin_store_halff, "vfh*", "n", ALL_OCLC_LANGUAGES)
+LANGBUILTIN(__builtin_load_half, "dhC*", "nc", ALL_OCLC_LANGUAGES)
+LANGBUILTIN(__builtin_load_halff, "fhC*", "nc", ALL_OCLC_LANGUAGES)
+
+// Builtins for os_log/os_trace
+BUILTIN(__builtin_os_log_format_buffer_size, "zcC*.", "p:0:nut")
+BUILTIN(__builtin_os_log_format, "v*v*cC*.", "p:0:nt")
+
+// OpenMP 4.0
+LANGBUILTIN(omp_is_initial_device, "i", "nc", OMP_LANG)
+
+// Builtins for XRay
+BUILTIN(__xray_customevent, "vcC*z", "")
+BUILTIN(__xray_typedevent, "vzcC*z", "")
+
+// Win64-compatible va_list functions
+BUILTIN(__builtin_ms_va_start, "vc*&.", "nt")
+BUILTIN(__builtin_ms_va_end, "vc*&", "n")
+BUILTIN(__builtin_ms_va_copy, "vc*&c*&", "n")
+
+#undef BUILTIN
+#undef LIBBUILTIN
+#undef LANGBUILTIN
diff --git a/clang-r353983/include/clang/Basic/Builtins.h b/clang-r353983/include/clang/Basic/Builtins.h
new file mode 100644
index 00000000..b3d6e456
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/Builtins.h
@@ -0,0 +1,263 @@
+//===--- Builtins.h - Builtin function header -------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Defines enum values for all the target-independent builtin
+/// functions.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_BUILTINS_H
+#define LLVM_CLANG_BASIC_BUILTINS_H
+
+#include "llvm/ADT/ArrayRef.h"
+#include <cstring>
+
+// VC++ defines 'alloca' as an object-like macro, which interferes with our
+// builtins.
+#undef alloca
+
+namespace clang {
+class TargetInfo;
+class IdentifierTable;
+class ASTContext;
+class QualType;
+class LangOptions;
+
+enum LanguageID {
+ GNU_LANG = 0x1, // builtin requires GNU mode.
+ C_LANG = 0x2, // builtin for c only.
+ CXX_LANG = 0x4, // builtin for cplusplus only.
+ OBJC_LANG = 0x8, // builtin for objective-c and objective-c++
+ MS_LANG = 0x10, // builtin requires MS mode.
+ OCLC20_LANG = 0x20, // builtin for OpenCL C 2.0 only.
+ OCLC1X_LANG = 0x40, // builtin for OpenCL C 1.x only.
+ OMP_LANG = 0x80, // builtin requires OpenMP.
+ ALL_LANGUAGES = C_LANG | CXX_LANG | OBJC_LANG, // builtin for all languages.
+ ALL_GNU_LANGUAGES = ALL_LANGUAGES | GNU_LANG, // builtin requires GNU mode.
+ ALL_MS_LANGUAGES = ALL_LANGUAGES | MS_LANG, // builtin requires MS mode.
+ ALL_OCLC_LANGUAGES = OCLC1X_LANG | OCLC20_LANG // builtin for OCLC languages.
+};
+
+namespace Builtin {
+enum ID {
+ NotBuiltin = 0, // This is not a builtin function.
+#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
+#include "clang/Basic/Builtins.def"
+ FirstTSBuiltin
+};
+
+struct Info {
+ const char *Name, *Type, *Attributes, *HeaderName;
+ LanguageID Langs;
+ const char *Features;
+};
+
+/// Holds information about both target-independent and
+/// target-specific builtins, allowing easy queries by clients.
+///
+/// Builtins from an optional auxiliary target are stored in
+/// AuxTSRecords. Their IDs are shifted up by TSRecords.size() and need to
+/// be translated back with getAuxBuiltinID() before use.
+class Context {
+ llvm::ArrayRef<Info> TSRecords;
+ llvm::ArrayRef<Info> AuxTSRecords;
+
+public:
+ Context() {}
+
+ /// Perform target-specific initialization
+ /// \param AuxTarget Target info to incorporate builtins from. May be nullptr.
+ void InitializeTarget(const TargetInfo &Target, const TargetInfo *AuxTarget);
+
+ /// Mark the identifiers for all the builtins with their
+ /// appropriate builtin ID # and mark any non-portable builtin identifiers as
+ /// such.
+ void initializeBuiltins(IdentifierTable &Table, const LangOptions& LangOpts);
+
+ /// Return the identifier name for the specified builtin,
+ /// e.g. "__builtin_abs".
+ const char *getName(unsigned ID) const {
+ return getRecord(ID).Name;
+ }
+
+ /// Get the type descriptor string for the specified builtin.
+ const char *getTypeString(unsigned ID) const {
+ return getRecord(ID).Type;
+ }
+
+ /// Return true if this function is a target-specific builtin.
+ bool isTSBuiltin(unsigned ID) const {
+ return ID >= Builtin::FirstTSBuiltin;
+ }
+
+ /// Return true if this function has no side effects.
+ bool isPure(unsigned ID) const {
+ return strchr(getRecord(ID).Attributes, 'U') != nullptr;
+ }
+
+ /// Return true if this function has no side effects and doesn't
+ /// read memory.
+ bool isConst(unsigned ID) const {
+ return strchr(getRecord(ID).Attributes, 'c') != nullptr;
+ }
+
+ /// Return true if we know this builtin never throws an exception.
+ bool isNoThrow(unsigned ID) const {
+ return strchr(getRecord(ID).Attributes, 'n') != nullptr;
+ }
+
+ /// Return true if we know this builtin never returns.
+ bool isNoReturn(unsigned ID) const {
+ return strchr(getRecord(ID).Attributes, 'r') != nullptr;
+ }
+
+ /// Return true if we know this builtin can return twice.
+ bool isReturnsTwice(unsigned ID) const {
+ return strchr(getRecord(ID).Attributes, 'j') != nullptr;
+ }
+
+ /// Returns true if this builtin does not perform the side-effects
+ /// of its arguments.
+ bool isUnevaluated(unsigned ID) const {
+ return strchr(getRecord(ID).Attributes, 'u') != nullptr;
+ }
+
+ /// Return true if this is a builtin for a libc/libm function,
+ /// with a "__builtin_" prefix (e.g. __builtin_abs).
+ bool isLibFunction(unsigned ID) const {
+ return strchr(getRecord(ID).Attributes, 'F') != nullptr;
+ }
+
+ /// Determines whether this builtin is a predefined libc/libm
+ /// function, such as "malloc", where we know the signature a
+ /// priori.
+ bool isPredefinedLibFunction(unsigned ID) const {
+ return strchr(getRecord(ID).Attributes, 'f') != nullptr;
+ }
+
+ /// Returns true if this builtin requires appropriate header in other
+ /// compilers. In Clang it will work even without including it, but we can emit
+ /// a warning about missing header.
+ bool isHeaderDependentFunction(unsigned ID) const {
+ return strchr(getRecord(ID).Attributes, 'h') != nullptr;
+ }
+
+ /// Determines whether this builtin is a predefined compiler-rt/libgcc
+ /// function, such as "__clear_cache", where we know the signature a
+ /// priori.
+ bool isPredefinedRuntimeFunction(unsigned ID) const {
+ return strchr(getRecord(ID).Attributes, 'i') != nullptr;
+ }
+
+ /// Determines whether this builtin has custom typechecking.
+ bool hasCustomTypechecking(unsigned ID) const {
+ return strchr(getRecord(ID).Attributes, 't') != nullptr;
+ }
+
+ /// Determines whether this builtin has a result or any arguments which
+ /// are pointer types.
+ bool hasPtrArgsOrResult(unsigned ID) const {
+ return strchr(getRecord(ID).Type, '*') != nullptr;
+ }
+
+ /// Return true if this builtin has a result or any arguments which are
+ /// reference types.
+ bool hasReferenceArgsOrResult(unsigned ID) const {
+ return strchr(getRecord(ID).Type, '&') != nullptr ||
+ strchr(getRecord(ID).Type, 'A') != nullptr;
+ }
+
+ /// Completely forget that the given ID was ever considered a builtin,
+ /// e.g., because the user provided a conflicting signature.
+ void forgetBuiltin(unsigned ID, IdentifierTable &Table);
+
+ /// If this is a library function that comes from a specific
+ /// header, retrieve that header name.
+ const char *getHeaderName(unsigned ID) const {
+ return getRecord(ID).HeaderName;
+ }
+
+ /// Determine whether this builtin is like printf in its
+ /// formatting rules and, if so, set the index to the format string
+ /// argument and whether this function as a va_list argument.
+ bool isPrintfLike(unsigned ID, unsigned &FormatIdx, bool &HasVAListArg);
+
+ /// Determine whether this builtin is like scanf in its
+ /// formatting rules and, if so, set the index to the format string
+ /// argument and whether this function as a va_list argument.
+ bool isScanfLike(unsigned ID, unsigned &FormatIdx, bool &HasVAListArg);
+
+ /// Determine whether this builtin has callback behavior (see
+ /// llvm::AbstractCallSites for details). If so, add the index to the
+ /// callback callee argument and the callback payload arguments.
+ bool performsCallback(unsigned ID,
+ llvm::SmallVectorImpl<int> &Encoding) const;
+
+ /// Return true if this function has no side effects and doesn't
+ /// read memory, except for possibly errno.
+ ///
+ /// Such functions can be const when the MathErrno lang option is disabled.
+ bool isConstWithoutErrno(unsigned ID) const {
+ return strchr(getRecord(ID).Attributes, 'e') != nullptr;
+ }
+
+ const char *getRequiredFeatures(unsigned ID) const {
+ return getRecord(ID).Features;
+ }
+
+ unsigned getRequiredVectorWidth(unsigned ID) const;
+
+ /// Return true if builtin ID belongs to AuxTarget.
+ bool isAuxBuiltinID(unsigned ID) const {
+ return ID >= (Builtin::FirstTSBuiltin + TSRecords.size());
+ }
+
+ /// Return real builtin ID (i.e. ID it would have during compilation
+ /// for AuxTarget).
+ unsigned getAuxBuiltinID(unsigned ID) const { return ID - TSRecords.size(); }
+
+ /// Returns true if this is a libc/libm function without the '__builtin_'
+ /// prefix.
+ static bool isBuiltinFunc(const char *Name);
+
+ /// Returns true if this is a builtin that can be redeclared. Returns true
+ /// for non-builtins.
+ bool canBeRedeclared(unsigned ID) const;
+
+private:
+ const Info &getRecord(unsigned ID) const;
+
+ /// Is this builtin supported according to the given language options?
+ bool builtinIsSupported(const Builtin::Info &BuiltinInfo,
+ const LangOptions &LangOpts);
+
+ /// Helper function for isPrintfLike and isScanfLike.
+ bool isLike(unsigned ID, unsigned &FormatIdx, bool &HasVAListArg,
+ const char *Fmt) const;
+};
+
+/// For a given BuiltinID, return the ID of the fortified variant function. For
+/// instance, if Builtin::BIsprintf is passed, this function will return
+/// Builtin::BI__builtin___sprintf_chk. If BuiltinID doesn't have a fortified
+/// variant, 0 is returned.
+unsigned getFortifiedVariantFunction(unsigned BuiltinID);
+
+} // end namespace Builtin
+
+/// Kinds of BuiltinTemplateDecl.
+enum BuiltinTemplateKind : int {
+ /// This names the __make_integer_seq BuiltinTemplateDecl.
+ BTK__make_integer_seq,
+
+ /// This names the __type_pack_element BuiltinTemplateDecl.
+ BTK__type_pack_element
+};
+
+} // end namespace clang
+#endif
diff --git a/clang-r353983/include/clang/Basic/BuiltinsAArch64.def b/clang-r353983/include/clang/Basic/BuiltinsAArch64.def
new file mode 100644
index 00000000..e9a8a2c4
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/BuiltinsAArch64.def
@@ -0,0 +1,212 @@
+//==- BuiltinsAArch64.def - AArch64 Builtin function database ----*- C++ -*-==//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the AArch64-specific builtin function database. Users of
+// this file must define the BUILTIN macro to make use of this information.
+//
+//===----------------------------------------------------------------------===//
+
+// The format of this database matches clang/Basic/Builtins.def.
+
+#if defined(BUILTIN) && !defined(LANGBUILTIN)
+# define LANGBUILTIN(ID, TYPE, ATTRS, BUILTIN_LANG) BUILTIN(ID, TYPE, ATTRS)
+#endif
+
+#if defined(BUILTIN) && !defined(TARGET_HEADER_BUILTIN)
+# define TARGET_HEADER_BUILTIN(ID, TYPE, ATTRS, HEADER, LANG, FEATURE) BUILTIN(ID, TYPE, ATTRS)
+#endif
+
+// In libgcc
+BUILTIN(__clear_cache, "vv*v*", "i")
+
+BUILTIN(__builtin_arm_ldrex, "v.", "t")
+BUILTIN(__builtin_arm_ldaex, "v.", "t")
+BUILTIN(__builtin_arm_strex, "i.", "t")
+BUILTIN(__builtin_arm_stlex, "i.", "t")
+BUILTIN(__builtin_arm_clrex, "v", "")
+
+// Bit manipulation
+BUILTIN(__builtin_arm_rbit, "UiUi", "nc")
+BUILTIN(__builtin_arm_rbit64, "WUiWUi", "nc")
+
+// HINT
+BUILTIN(__builtin_arm_nop, "v", "")
+BUILTIN(__builtin_arm_yield, "v", "")
+BUILTIN(__builtin_arm_wfe, "v", "")
+BUILTIN(__builtin_arm_wfi, "v", "")
+BUILTIN(__builtin_arm_sev, "v", "")
+BUILTIN(__builtin_arm_sevl, "v", "")
+
+// CRC32
+BUILTIN(__builtin_arm_crc32b, "UiUiUc", "nc")
+BUILTIN(__builtin_arm_crc32cb, "UiUiUc", "nc")
+BUILTIN(__builtin_arm_crc32h, "UiUiUs", "nc")
+BUILTIN(__builtin_arm_crc32ch, "UiUiUs", "nc")
+BUILTIN(__builtin_arm_crc32w, "UiUiUi", "nc")
+BUILTIN(__builtin_arm_crc32cw, "UiUiUi", "nc")
+BUILTIN(__builtin_arm_crc32d, "UiUiWUi", "nc")
+BUILTIN(__builtin_arm_crc32cd, "UiUiWUi", "nc")
+
+// Memory barrier
+BUILTIN(__builtin_arm_dmb, "vUi", "nc")
+BUILTIN(__builtin_arm_dsb, "vUi", "nc")
+BUILTIN(__builtin_arm_isb, "vUi", "nc")
+
+// Prefetch
+BUILTIN(__builtin_arm_prefetch, "vvC*UiUiUiUi", "nc")
+
+// System Registers
+BUILTIN(__builtin_arm_rsr, "UicC*", "nc")
+BUILTIN(__builtin_arm_rsr64, "WUicC*", "nc")
+BUILTIN(__builtin_arm_rsrp, "v*cC*", "nc")
+BUILTIN(__builtin_arm_wsr, "vcC*Ui", "nc")
+BUILTIN(__builtin_arm_wsr64, "vcC*WUi", "nc")
+BUILTIN(__builtin_arm_wsrp, "vcC*vC*", "nc")
+
+// MSVC
+LANGBUILTIN(__dmb, "vUi", "nc", ALL_MS_LANGUAGES)
+LANGBUILTIN(__dsb, "vUi", "nc", ALL_MS_LANGUAGES)
+LANGBUILTIN(__isb, "vUi", "nc", ALL_MS_LANGUAGES)
+LANGBUILTIN(__yield, "v", "", ALL_MS_LANGUAGES)
+LANGBUILTIN(__wfe, "v", "", ALL_MS_LANGUAGES)
+LANGBUILTIN(__wfi, "v", "", ALL_MS_LANGUAGES)
+LANGBUILTIN(__sev, "v", "", ALL_MS_LANGUAGES)
+LANGBUILTIN(__sevl, "v", "", ALL_MS_LANGUAGES)
+
+// MSVC intrinsics for volatile but non-acquire/release loads and stores
+LANGBUILTIN(__iso_volatile_load8, "ccCD*", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__iso_volatile_load16, "ssCD*", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__iso_volatile_load32, "iiCD*", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__iso_volatile_load64, "LLiLLiCD*", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__iso_volatile_store8, "vcD*c", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__iso_volatile_store16, "vsD*s", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__iso_volatile_store32, "viD*i", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__iso_volatile_store64, "vLLiD*LLi", "n", ALL_MS_LANGUAGES)
+
+TARGET_HEADER_BUILTIN(_BitScanForward, "UcUNi*UNi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_BitScanReverse, "UcUNi*UNi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_BitScanForward64, "UcUNi*ULLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_BitScanReverse64, "UcUNi*ULLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+
+TARGET_HEADER_BUILTIN(_InterlockedAdd, "LiLiD*Li", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedAnd64, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedDecrement64, "LLiLLiD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchange64, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd64, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchangeSub64, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedIncrement64, "LLiLLiD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedOr64, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedXor64, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+
+TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd_acq, "LiLiD*Li", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd_rel, "LiLiD*Li", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd_nf, "LiLiD*Li", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd8_acq, "ccD*c", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd8_rel, "ccD*c", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd8_nf, "ccD*c", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd16_acq, "ssD*s", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd16_rel, "ssD*s", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd16_nf, "ssD*s", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd64_acq, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd64_rel, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd64_nf, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+
+TARGET_HEADER_BUILTIN(_InterlockedExchange8_acq, "ccD*c", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchange8_nf, "ccD*c", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchange8_rel, "ccD*c", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchange16_acq, "ssD*s", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchange16_nf, "ssD*s", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchange16_rel, "ssD*s", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchange_acq, "LiLiD*Li", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchange_nf, "LiLiD*Li", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchange_rel, "LiLiD*Li", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchange64_acq, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchange64_nf, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchange64_rel, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+
+TARGET_HEADER_BUILTIN(_InterlockedCompareExchange8_acq, "ccD*cc", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedCompareExchange8_nf, "ccD*cc", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedCompareExchange8_rel, "ccD*cc", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedCompareExchange16_acq, "ssD*ss", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedCompareExchange16_nf, "ssD*ss", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedCompareExchange16_rel, "ssD*ss", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedCompareExchange_acq, "LiLiD*LiLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedCompareExchange_nf, "LiLiD*LiLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedCompareExchange_rel, "LiLiD*LiLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedCompareExchange64_acq, "LLiLLiD*LLiLLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedCompareExchange64_nf, "LLiLLiD*LLiLLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedCompareExchange64_rel, "LLiLLiD*LLiLLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+
+TARGET_HEADER_BUILTIN(_InterlockedOr8_acq, "ccD*c", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedOr8_nf, "ccD*c", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedOr8_rel, "ccD*c", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedOr16_acq, "ssD*s", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedOr16_nf, "ssD*s", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedOr16_rel, "ssD*s", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedOr_acq, "LiLiD*Li", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedOr_nf, "LiLiD*Li", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedOr_rel, "LiLiD*Li", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedOr64_acq, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedOr64_nf, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedOr64_rel, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+
+TARGET_HEADER_BUILTIN(_InterlockedXor8_acq, "ccD*c", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedXor8_nf, "ccD*c", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedXor8_rel, "ccD*c", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedXor16_acq, "ssD*s", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedXor16_nf, "ssD*s", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedXor16_rel, "ssD*s", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedXor_acq, "LiLiD*Li", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedXor_nf, "LiLiD*Li", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedXor_rel, "LiLiD*Li", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedXor64_acq, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedXor64_nf, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedXor64_rel, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+
+TARGET_HEADER_BUILTIN(_InterlockedAnd8_acq, "ccD*c", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedAnd8_nf, "ccD*c", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedAnd8_rel, "ccD*c", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedAnd16_acq, "ssD*s", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedAnd16_nf, "ssD*s", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedAnd16_rel, "ssD*s", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedAnd_acq, "LiLiD*Li", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedAnd_nf, "LiLiD*Li", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedAnd_rel, "LiLiD*Li", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedAnd64_acq, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedAnd64_nf, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedAnd64_rel, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+
+TARGET_HEADER_BUILTIN(_InterlockedIncrement16_acq, "ssD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedIncrement16_nf, "ssD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedIncrement16_rel, "ssD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedIncrement_acq, "LiLiD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedIncrement_nf, "LiLiD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedIncrement_rel, "LiLiD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedIncrement64_acq, "LLiLLiD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedIncrement64_nf, "LLiLLiD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedIncrement64_rel, "LLiLLiD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+
+TARGET_HEADER_BUILTIN(_InterlockedDecrement16_acq, "ssD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedDecrement16_nf, "ssD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedDecrement16_rel, "ssD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedDecrement_acq, "LiLiD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedDecrement_nf, "LiLiD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedDecrement_rel, "LiLiD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedDecrement64_acq, "LLiLLiD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedDecrement64_nf, "LLiLLiD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedDecrement64_rel, "LLiLLiD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+
+TARGET_HEADER_BUILTIN(_ReadWriteBarrier, "v", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__getReg, "ULLii", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_ReadStatusReg, "LLii", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_WriteStatusReg, "viLLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_AddressOfReturnAddress, "v*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+
+#undef BUILTIN
+#undef LANGBUILTIN
+#undef TARGET_HEADER_BUILTIN
diff --git a/clang-r353983/include/clang/Basic/BuiltinsAMDGPU.def b/clang-r353983/include/clang/Basic/BuiltinsAMDGPU.def
new file mode 100644
index 00000000..20592c7b
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/BuiltinsAMDGPU.def
@@ -0,0 +1,181 @@
+//==- BuiltinsAMDGPU.def - AMDGPU Builtin function database ------*- C++ -*-==//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the AMDGPU-specific builtin function database. Users of
+// this file must define the BUILTIN macro to make use of this information.
+//
+//===----------------------------------------------------------------------===//
+
+// The format of this database matches clang/Basic/Builtins.def.
+
+#if defined(BUILTIN) && !defined(TARGET_BUILTIN)
+# define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BUILTIN(ID, TYPE, ATTRS)
+#endif
+//===----------------------------------------------------------------------===//
+// SI+ only builtins.
+//===----------------------------------------------------------------------===//
+
+BUILTIN(__builtin_amdgcn_dispatch_ptr, "v*4", "nc")
+BUILTIN(__builtin_amdgcn_kernarg_segment_ptr, "v*4", "nc")
+BUILTIN(__builtin_amdgcn_implicitarg_ptr, "v*4", "nc")
+BUILTIN(__builtin_amdgcn_queue_ptr, "v*4", "nc")
+
+BUILTIN(__builtin_amdgcn_workgroup_id_x, "Ui", "nc")
+BUILTIN(__builtin_amdgcn_workgroup_id_y, "Ui", "nc")
+BUILTIN(__builtin_amdgcn_workgroup_id_z, "Ui", "nc")
+
+BUILTIN(__builtin_amdgcn_workitem_id_x, "Ui", "nc")
+BUILTIN(__builtin_amdgcn_workitem_id_y, "Ui", "nc")
+BUILTIN(__builtin_amdgcn_workitem_id_z, "Ui", "nc")
+
+//===----------------------------------------------------------------------===//
+// Instruction builtins.
+//===----------------------------------------------------------------------===//
+BUILTIN(__builtin_amdgcn_s_getreg, "UiIi", "n")
+BUILTIN(__builtin_amdgcn_s_getpc, "LUi", "n")
+BUILTIN(__builtin_amdgcn_s_waitcnt, "vIi", "n")
+BUILTIN(__builtin_amdgcn_s_sendmsg, "vIiUi", "n")
+BUILTIN(__builtin_amdgcn_s_sendmsghalt, "vIiUi", "n")
+BUILTIN(__builtin_amdgcn_s_barrier, "v", "n")
+BUILTIN(__builtin_amdgcn_wave_barrier, "v", "n")
+BUILTIN(__builtin_amdgcn_s_dcache_inv, "v", "n")
+BUILTIN(__builtin_amdgcn_buffer_wbinvl1, "v", "n")
+
+// FIXME: Need to disallow constant address space.
+BUILTIN(__builtin_amdgcn_div_scale, "dddbb*", "n")
+BUILTIN(__builtin_amdgcn_div_scalef, "fffbb*", "n")
+BUILTIN(__builtin_amdgcn_div_fmas, "ddddb", "nc")
+BUILTIN(__builtin_amdgcn_div_fmasf, "ffffb", "nc")
+BUILTIN(__builtin_amdgcn_div_fixup, "dddd", "nc")
+BUILTIN(__builtin_amdgcn_div_fixupf, "ffff", "nc")
+BUILTIN(__builtin_amdgcn_trig_preop, "ddi", "nc")
+BUILTIN(__builtin_amdgcn_trig_preopf, "ffi", "nc")
+BUILTIN(__builtin_amdgcn_rcp, "dd", "nc")
+BUILTIN(__builtin_amdgcn_rcpf, "ff", "nc")
+BUILTIN(__builtin_amdgcn_rsq, "dd", "nc")
+BUILTIN(__builtin_amdgcn_rsqf, "ff", "nc")
+BUILTIN(__builtin_amdgcn_rsq_clamp, "dd", "nc")
+BUILTIN(__builtin_amdgcn_rsq_clampf, "ff", "nc")
+BUILTIN(__builtin_amdgcn_sinf, "ff", "nc")
+BUILTIN(__builtin_amdgcn_cosf, "ff", "nc")
+BUILTIN(__builtin_amdgcn_log_clampf, "ff", "nc")
+BUILTIN(__builtin_amdgcn_ldexp, "ddi", "nc")
+BUILTIN(__builtin_amdgcn_ldexpf, "ffi", "nc")
+BUILTIN(__builtin_amdgcn_frexp_mant, "dd", "nc")
+BUILTIN(__builtin_amdgcn_frexp_mantf, "ff", "nc")
+BUILTIN(__builtin_amdgcn_frexp_exp, "id", "nc")
+BUILTIN(__builtin_amdgcn_frexp_expf, "if", "nc")
+BUILTIN(__builtin_amdgcn_fract, "dd", "nc")
+BUILTIN(__builtin_amdgcn_fractf, "ff", "nc")
+BUILTIN(__builtin_amdgcn_lerp, "UiUiUiUi", "nc")
+BUILTIN(__builtin_amdgcn_class, "bdi", "nc")
+BUILTIN(__builtin_amdgcn_classf, "bfi", "nc")
+BUILTIN(__builtin_amdgcn_cubeid, "ffff", "nc")
+BUILTIN(__builtin_amdgcn_cubesc, "ffff", "nc")
+BUILTIN(__builtin_amdgcn_cubetc, "ffff", "nc")
+BUILTIN(__builtin_amdgcn_cubema, "ffff", "nc")
+BUILTIN(__builtin_amdgcn_s_memtime, "LUi", "n")
+BUILTIN(__builtin_amdgcn_s_sleep, "vIi", "n")
+BUILTIN(__builtin_amdgcn_s_incperflevel, "vIi", "n")
+BUILTIN(__builtin_amdgcn_s_decperflevel, "vIi", "n")
+BUILTIN(__builtin_amdgcn_uicmp, "LUiUiUiIi", "nc")
+BUILTIN(__builtin_amdgcn_uicmpl, "LUiLUiLUiIi", "nc")
+BUILTIN(__builtin_amdgcn_sicmp, "LUiiiIi", "nc")
+BUILTIN(__builtin_amdgcn_sicmpl, "LUiLiLiIi", "nc")
+BUILTIN(__builtin_amdgcn_fcmp, "LUiddIi", "nc")
+BUILTIN(__builtin_amdgcn_fcmpf, "LUiffIi", "nc")
+BUILTIN(__builtin_amdgcn_ds_swizzle, "iiIi", "nc")
+BUILTIN(__builtin_amdgcn_ds_permute, "iii", "nc")
+BUILTIN(__builtin_amdgcn_ds_bpermute, "iii", "nc")
+BUILTIN(__builtin_amdgcn_readfirstlane, "ii", "nc")
+BUILTIN(__builtin_amdgcn_readlane, "iii", "nc")
+BUILTIN(__builtin_amdgcn_fmed3f, "ffff", "nc")
+BUILTIN(__builtin_amdgcn_ds_faddf, "ff*3fIiIiIb", "n")
+BUILTIN(__builtin_amdgcn_ds_fminf, "ff*3fIiIiIb", "n")
+BUILTIN(__builtin_amdgcn_ds_fmaxf, "ff*3fIiIiIb", "n")
+BUILTIN(__builtin_amdgcn_ds_append, "ii*3", "n")
+BUILTIN(__builtin_amdgcn_ds_consume, "ii*3", "n")
+
+//===----------------------------------------------------------------------===//
+// CI+ only builtins.
+//===----------------------------------------------------------------------===//
+TARGET_BUILTIN(__builtin_amdgcn_s_dcache_inv_vol, "v", "n", "ci-insts")
+TARGET_BUILTIN(__builtin_amdgcn_buffer_wbinvl1_vol, "v", "n", "ci-insts")
+
+//===----------------------------------------------------------------------===//
+// Interpolation builtins.
+//===----------------------------------------------------------------------===//
+BUILTIN(__builtin_amdgcn_interp_p1_f16, "ffUiUibUi", "nc")
+BUILTIN(__builtin_amdgcn_interp_p2_f16, "hffUiUibUi", "nc")
+BUILTIN(__builtin_amdgcn_interp_p1, "ffUiUiUi", "nc")
+BUILTIN(__builtin_amdgcn_interp_p2, "fffUiUiUi", "nc")
+BUILTIN(__builtin_amdgcn_interp_mov, "fUiUiUiUi", "nc")
+
+//===----------------------------------------------------------------------===//
+// VI+ only builtins.
+//===----------------------------------------------------------------------===//
+
+TARGET_BUILTIN(__builtin_amdgcn_div_fixuph, "hhhh", "nc", "16-bit-insts")
+TARGET_BUILTIN(__builtin_amdgcn_rcph, "hh", "nc", "16-bit-insts")
+TARGET_BUILTIN(__builtin_amdgcn_rsqh, "hh", "nc", "16-bit-insts")
+TARGET_BUILTIN(__builtin_amdgcn_sinh, "hh", "nc", "16-bit-insts")
+TARGET_BUILTIN(__builtin_amdgcn_cosh, "hh", "nc", "16-bit-insts")
+TARGET_BUILTIN(__builtin_amdgcn_ldexph, "hhi", "nc", "16-bit-insts")
+TARGET_BUILTIN(__builtin_amdgcn_frexp_manth, "hh", "nc", "16-bit-insts")
+TARGET_BUILTIN(__builtin_amdgcn_frexp_exph, "sh", "nc", "16-bit-insts")
+TARGET_BUILTIN(__builtin_amdgcn_fracth, "hh", "nc", "16-bit-insts")
+TARGET_BUILTIN(__builtin_amdgcn_classh, "bhi", "nc", "16-bit-insts")
+TARGET_BUILTIN(__builtin_amdgcn_s_memrealtime, "LUi", "n", "s-memrealtime")
+TARGET_BUILTIN(__builtin_amdgcn_mov_dpp, "iiIiIiIiIb", "nc", "dpp")
+TARGET_BUILTIN(__builtin_amdgcn_update_dpp, "iiiIiIiIiIb", "nc", "dpp")
+TARGET_BUILTIN(__builtin_amdgcn_s_dcache_wb, "v", "n", "vi-insts")
+
+//===----------------------------------------------------------------------===//
+// GFX9+ only builtins.
+//===----------------------------------------------------------------------===//
+
+TARGET_BUILTIN(__builtin_amdgcn_fmed3h, "hhhh", "nc", "gfx9-insts")
+
+//===----------------------------------------------------------------------===//
+// Deep learning builtins.
+//===----------------------------------------------------------------------===//
+
+TARGET_BUILTIN(__builtin_amdgcn_fdot2, "fV2hV2hfIb", "nc", "dot2-insts")
+TARGET_BUILTIN(__builtin_amdgcn_sdot2, "SiV2SsV2SsSiIb", "nc", "dot2-insts")
+TARGET_BUILTIN(__builtin_amdgcn_udot2, "UiV2UsV2UsUiIb", "nc", "dot2-insts")
+TARGET_BUILTIN(__builtin_amdgcn_sdot4, "SiSiSiSiIb", "nc", "dot1-insts")
+TARGET_BUILTIN(__builtin_amdgcn_udot4, "UiUiUiUiIb", "nc", "dot2-insts")
+TARGET_BUILTIN(__builtin_amdgcn_sdot8, "SiSiSiSiIb", "nc", "dot1-insts")
+TARGET_BUILTIN(__builtin_amdgcn_udot8, "UiUiUiUiIb", "nc", "dot2-insts")
+
+//===----------------------------------------------------------------------===//
+// Special builtins.
+//===----------------------------------------------------------------------===//
+BUILTIN(__builtin_amdgcn_read_exec, "LUi", "nc")
+BUILTIN(__builtin_amdgcn_read_exec_lo, "Ui", "nc")
+BUILTIN(__builtin_amdgcn_read_exec_hi, "Ui", "nc")
+
+//===----------------------------------------------------------------------===//
+// R600-NI only builtins.
+//===----------------------------------------------------------------------===//
+
+BUILTIN(__builtin_r600_implicitarg_ptr, "Uc*7", "nc")
+
+BUILTIN(__builtin_r600_read_tgid_x, "Ui", "nc")
+BUILTIN(__builtin_r600_read_tgid_y, "Ui", "nc")
+BUILTIN(__builtin_r600_read_tgid_z, "Ui", "nc")
+
+BUILTIN(__builtin_r600_read_tidig_x, "Ui", "nc")
+BUILTIN(__builtin_r600_read_tidig_y, "Ui", "nc")
+BUILTIN(__builtin_r600_read_tidig_z, "Ui", "nc")
+
+BUILTIN(__builtin_r600_recipsqrt_ieee, "dd", "nc")
+BUILTIN(__builtin_r600_recipsqrt_ieeef, "ff", "nc")
+
+#undef BUILTIN
+#undef TARGET_BUILTIN
diff --git a/clang-r353983/include/clang/Basic/BuiltinsARM.def b/clang-r353983/include/clang/Basic/BuiltinsARM.def
new file mode 100644
index 00000000..00060455
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/BuiltinsARM.def
@@ -0,0 +1,332 @@
+//===--- BuiltinsARM.def - ARM Builtin function database ----*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the ARM-specific builtin function database. Users of
+// this file must define the BUILTIN macro to make use of this information.
+//
+//===----------------------------------------------------------------------===//
+
+// The format of this database matches clang/Basic/Builtins.def.
+
+#if defined(BUILTIN) && !defined(LANGBUILTIN)
+# define LANGBUILTIN(ID, TYPE, ATTRS, BUILTIN_LANG) BUILTIN(ID, TYPE, ATTRS)
+#endif
+
+#if defined(BUILTIN) && !defined(TARGET_HEADER_BUILTIN)
+# define TARGET_HEADER_BUILTIN(ID, TYPE, ATTRS, HEADER, LANG, FEATURE) BUILTIN(ID, TYPE, ATTRS)
+#endif
+
+// In libgcc
+BUILTIN(__clear_cache, "vv*v*", "i")
+
+// 16-bit multiplications
+BUILTIN(__builtin_arm_smulbb, "iii", "nc")
+BUILTIN(__builtin_arm_smulbt, "iii", "nc")
+BUILTIN(__builtin_arm_smultb, "iii", "nc")
+BUILTIN(__builtin_arm_smultt, "iii", "nc")
+BUILTIN(__builtin_arm_smulwb, "iii", "nc")
+BUILTIN(__builtin_arm_smulwt, "iii", "nc")
+
+// Saturating arithmetic
+BUILTIN(__builtin_arm_qadd, "iii", "nc")
+BUILTIN(__builtin_arm_qsub, "iii", "nc")
+BUILTIN(__builtin_arm_qdbl, "ii", "nc")
+BUILTIN(__builtin_arm_ssat, "iiUi", "nc")
+BUILTIN(__builtin_arm_usat, "UiiUi", "nc")
+
+BUILTIN(__builtin_arm_smlabb, "iiii", "nc")
+BUILTIN(__builtin_arm_smlabt, "iiii", "nc")
+BUILTIN(__builtin_arm_smlatb, "iiii", "nc")
+BUILTIN(__builtin_arm_smlatt, "iiii", "nc")
+BUILTIN(__builtin_arm_smlawb, "iiii", "nc")
+BUILTIN(__builtin_arm_smlawt, "iiii", "nc")
+
+BUILTIN(__builtin_arm_ssat16, "iii", "nc")
+BUILTIN(__builtin_arm_usat16, "iii", "nc")
+
+BUILTIN(__builtin_arm_sxtab16, "iii", "nc")
+BUILTIN(__builtin_arm_sxtb16, "ii", "nc")
+BUILTIN(__builtin_arm_uxtab16, "iii", "nc")
+BUILTIN(__builtin_arm_uxtb16, "ii", "nc")
+
+BUILTIN(__builtin_arm_sel, "iii", "nc")
+
+BUILTIN(__builtin_arm_qadd8, "iii", "nc")
+BUILTIN(__builtin_arm_qsub8, "iii", "nc")
+BUILTIN(__builtin_arm_sadd8, "iii", "nc")
+BUILTIN(__builtin_arm_shadd8, "iii", "nc")
+BUILTIN(__builtin_arm_shsub8, "iii", "nc")
+BUILTIN(__builtin_arm_ssub8, "iii", "nc")
+BUILTIN(__builtin_arm_uadd8, "UiUiUi", "nc")
+BUILTIN(__builtin_arm_uhadd8, "UiUiUi", "nc")
+BUILTIN(__builtin_arm_uhsub8, "UiUiUi", "nc")
+BUILTIN(__builtin_arm_uqadd8, "UiUiUi", "nc")
+BUILTIN(__builtin_arm_uqsub8, "UiUiUi", "nc")
+BUILTIN(__builtin_arm_usub8, "UiUiUi", "nc")
+
+// Sum of 8-bit absolute differences
+BUILTIN(__builtin_arm_usad8, "UiUiUi", "nc")
+BUILTIN(__builtin_arm_usada8, "UiUiUiUi", "nc")
+
+// Parallel 16-bit addition and subtraction
+BUILTIN(__builtin_arm_qadd16, "iii", "nc")
+BUILTIN(__builtin_arm_qasx, "iii", "nc")
+BUILTIN(__builtin_arm_qsax, "iii", "nc")
+BUILTIN(__builtin_arm_qsub16, "iii", "nc")
+BUILTIN(__builtin_arm_sadd16, "iii", "nc")
+BUILTIN(__builtin_arm_sasx, "iii", "nc")
+BUILTIN(__builtin_arm_shadd16, "iii", "nc")
+BUILTIN(__builtin_arm_shasx, "iii", "nc")
+BUILTIN(__builtin_arm_shsax, "iii", "nc")
+BUILTIN(__builtin_arm_shsub16, "iii", "nc")
+BUILTIN(__builtin_arm_ssax, "iii", "nc")
+BUILTIN(__builtin_arm_ssub16, "iii", "nc")
+BUILTIN(__builtin_arm_uadd16, "UiUiUi", "nc")
+BUILTIN(__builtin_arm_uasx, "UiUiUi", "nc")
+BUILTIN(__builtin_arm_uhadd16, "UiUiUi", "nc")
+BUILTIN(__builtin_arm_uhasx, "UiUiUi", "nc")
+BUILTIN(__builtin_arm_uhsax, "UiUiUi", "nc")
+BUILTIN(__builtin_arm_uhsub16, "UiUiUi", "nc")
+BUILTIN(__builtin_arm_uqadd16, "UiUiUi", "nc")
+BUILTIN(__builtin_arm_uqasx, "UiUiUi", "nc")
+BUILTIN(__builtin_arm_uqsax, "UiUiUi", "nc")
+BUILTIN(__builtin_arm_uqsub16, "UiUiUi", "nc")
+BUILTIN(__builtin_arm_usax, "UiUiUi", "nc")
+BUILTIN(__builtin_arm_usub16, "UiUiUi", "nc")
+
+// Parallel 16-bit multiplication
+BUILTIN(__builtin_arm_smlad, "iiii", "nc")
+BUILTIN(__builtin_arm_smladx, "iiii", "nc")
+BUILTIN(__builtin_arm_smlald, "LLiiiLLi", "nc")
+BUILTIN(__builtin_arm_smlaldx, "LLiiiLLi", "nc")
+BUILTIN(__builtin_arm_smlsd, "iiii", "nc")
+BUILTIN(__builtin_arm_smlsdx, "iiii", "nc")
+BUILTIN(__builtin_arm_smlsld, "LLiiiLLi", "nc")
+BUILTIN(__builtin_arm_smlsldx, "LLiiiLLi", "nc")
+BUILTIN(__builtin_arm_smuad, "iii", "nc")
+BUILTIN(__builtin_arm_smuadx, "iii", "nc")
+BUILTIN(__builtin_arm_smusd, "iii", "nc")
+BUILTIN(__builtin_arm_smusdx, "iii", "nc")
+
+// Bit manipulation
+BUILTIN(__builtin_arm_rbit, "UiUi", "nc")
+
+// Store and load exclusive
+BUILTIN(__builtin_arm_ldrexd, "LLUiv*", "")
+BUILTIN(__builtin_arm_strexd, "iLLUiv*", "")
+
+BUILTIN(__builtin_arm_ldrex, "v.", "t")
+BUILTIN(__builtin_arm_ldaex, "v.", "t")
+BUILTIN(__builtin_arm_strex, "i.", "t")
+BUILTIN(__builtin_arm_stlex, "i.", "t")
+BUILTIN(__builtin_arm_clrex, "v", "")
+
+// VFP
+BUILTIN(__builtin_arm_get_fpscr, "Ui", "nc")
+BUILTIN(__builtin_arm_set_fpscr, "vUi", "nc")
+BUILTIN(__builtin_arm_vcvtr_f, "ffi", "nc")
+BUILTIN(__builtin_arm_vcvtr_d, "fdi", "nc")
+
+// Coprocessor
+BUILTIN(__builtin_arm_ldc, "vUIiUIivC*", "")
+BUILTIN(__builtin_arm_ldcl, "vUIiUIivC*", "")
+BUILTIN(__builtin_arm_ldc2, "vUIiUIivC*", "")
+BUILTIN(__builtin_arm_ldc2l, "vUIiUIivC*", "")
+
+BUILTIN(__builtin_arm_stc, "vUIiUIiv*", "")
+BUILTIN(__builtin_arm_stcl, "vUIiUIiv*", "")
+BUILTIN(__builtin_arm_stc2, "vUIiUIiv*", "")
+BUILTIN(__builtin_arm_stc2l, "vUIiUIiv*", "")
+
+BUILTIN(__builtin_arm_cdp, "vUIiUIiUIiUIiUIiUIi", "")
+BUILTIN(__builtin_arm_cdp2, "vUIiUIiUIiUIiUIiUIi", "")
+BUILTIN(__builtin_arm_mcr, "vUIiUIiUiUIiUIiUIi", "")
+BUILTIN(__builtin_arm_mcr2, "vUIiUIiUiUIiUIiUIi", "")
+BUILTIN(__builtin_arm_mrc, "UiUIiUIiUIiUIiUIi", "")
+BUILTIN(__builtin_arm_mrc2, "UiUIiUIiUIiUIiUIi", "")
+BUILTIN(__builtin_arm_mcrr, "vUIiUIiLLUiUIi", "")
+BUILTIN(__builtin_arm_mcrr2, "vUIiUIiLLUiUIi", "")
+BUILTIN(__builtin_arm_mrrc, "LLUiUIiUIiUIi", "")
+BUILTIN(__builtin_arm_mrrc2, "LLUiUIiUIiUIi", "")
+
+// CRC32
+BUILTIN(__builtin_arm_crc32b, "UiUiUc", "nc")
+BUILTIN(__builtin_arm_crc32cb, "UiUiUc", "nc")
+BUILTIN(__builtin_arm_crc32h, "UiUiUs", "nc")
+BUILTIN(__builtin_arm_crc32ch, "UiUiUs", "nc")
+BUILTIN(__builtin_arm_crc32w, "UiUiUi", "nc")
+BUILTIN(__builtin_arm_crc32cw, "UiUiUi", "nc")
+BUILTIN(__builtin_arm_crc32d, "UiUiLLUi", "nc")
+BUILTIN(__builtin_arm_crc32cd, "UiUiLLUi", "nc")
+
+// HINT
+BUILTIN(__builtin_arm_nop, "v", "")
+BUILTIN(__builtin_arm_yield, "v", "")
+BUILTIN(__builtin_arm_wfe, "v", "")
+BUILTIN(__builtin_arm_wfi, "v", "")
+BUILTIN(__builtin_arm_sev, "v", "")
+BUILTIN(__builtin_arm_sevl, "v", "")
+BUILTIN(__builtin_arm_dbg, "vUi", "")
+
+// Data barrier
+BUILTIN(__builtin_arm_dmb, "vUi", "nc")
+BUILTIN(__builtin_arm_dsb, "vUi", "nc")
+BUILTIN(__builtin_arm_isb, "vUi", "nc")
+
+// Prefetch
+BUILTIN(__builtin_arm_prefetch, "vvC*UiUi", "nc")
+
+// System registers (ACLE)
+BUILTIN(__builtin_arm_rsr, "UicC*", "nc")
+BUILTIN(__builtin_arm_rsr64, "LLUicC*", "nc")
+BUILTIN(__builtin_arm_rsrp, "v*cC*", "nc")
+BUILTIN(__builtin_arm_wsr, "vcC*Ui", "nc")
+BUILTIN(__builtin_arm_wsr64, "vcC*LLUi", "nc")
+BUILTIN(__builtin_arm_wsrp, "vcC*vC*", "nc")
+
+// MSVC
+LANGBUILTIN(__emit, "vIUiC", "", ALL_MS_LANGUAGES)
+
+LANGBUILTIN(__yield, "v", "", ALL_MS_LANGUAGES)
+LANGBUILTIN(__wfe, "v", "", ALL_MS_LANGUAGES)
+LANGBUILTIN(__wfi, "v", "", ALL_MS_LANGUAGES)
+LANGBUILTIN(__sev, "v", "", ALL_MS_LANGUAGES)
+LANGBUILTIN(__sevl, "v", "", ALL_MS_LANGUAGES)
+
+LANGBUILTIN(__dmb, "vUi", "nc", ALL_MS_LANGUAGES)
+LANGBUILTIN(__dsb, "vUi", "nc", ALL_MS_LANGUAGES)
+LANGBUILTIN(__isb, "vUi", "nc", ALL_MS_LANGUAGES)
+LANGBUILTIN(__iso_volatile_load8, "ccCD*", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__iso_volatile_load16, "ssCD*", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__iso_volatile_load32, "iiCD*", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__iso_volatile_load64, "LLiLLiCD*", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__iso_volatile_store8, "vcD*c", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__iso_volatile_store16, "vsD*s", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__iso_volatile_store32, "viD*i", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__iso_volatile_store64, "vLLiD*LLi", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__ldrexd, "WiWiCD*", "", ALL_MS_LANGUAGES)
+LANGBUILTIN(_MoveFromCoprocessor, "UiIUiIUiIUiIUiIUi", "", ALL_MS_LANGUAGES)
+LANGBUILTIN(_MoveFromCoprocessor2, "UiIUiIUiIUiIUiIUi", "", ALL_MS_LANGUAGES)
+LANGBUILTIN(_MoveToCoprocessor, "vUiIUiIUiIUiIUiIUi", "", ALL_MS_LANGUAGES)
+LANGBUILTIN(_MoveToCoprocessor2, "vUiIUiIUiIUiIUiIUi", "", ALL_MS_LANGUAGES)
+
+TARGET_HEADER_BUILTIN(_BitScanForward, "UcUNi*UNi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_BitScanReverse, "UcUNi*UNi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_BitScanForward64, "UcUNi*ULLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_BitScanReverse64, "UcUNi*ULLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+
+TARGET_HEADER_BUILTIN(_InterlockedAnd64, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedDecrement64, "LLiLLiD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchange64, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd64, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchangeSub64, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedIncrement64, "LLiLLiD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedOr64, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedXor64, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+
+TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd_acq, "LiLiD*Li", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd_rel, "LiLiD*Li", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd_nf, "LiLiD*Li", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd8_acq, "ccD*c", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd8_rel, "ccD*c", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd8_nf, "ccD*c", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd16_acq, "ssD*s", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd16_rel, "ssD*s", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd16_nf, "ssD*s", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd64_acq, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd64_rel, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd64_nf, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+
+TARGET_HEADER_BUILTIN(_InterlockedExchange8_acq, "ccD*c", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchange8_nf, "ccD*c", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchange8_rel, "ccD*c", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchange16_acq, "ssD*s", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchange16_nf, "ssD*s", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchange16_rel, "ssD*s", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchange_acq, "LiLiD*Li", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchange_nf, "LiLiD*Li", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchange_rel, "LiLiD*Li", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchange64_acq, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchange64_nf, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchange64_rel, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+
+TARGET_HEADER_BUILTIN(_InterlockedCompareExchange8_acq, "ccD*cc", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedCompareExchange8_nf, "ccD*cc", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedCompareExchange8_rel, "ccD*cc", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedCompareExchange16_acq, "ssD*ss", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedCompareExchange16_nf, "ssD*ss", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedCompareExchange16_rel, "ssD*ss", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedCompareExchange_acq, "LiLiD*LiLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedCompareExchange_nf, "LiLiD*LiLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedCompareExchange_rel, "LiLiD*LiLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedCompareExchange64_acq, "LLiLLiD*LLiLLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedCompareExchange64_nf, "LLiLLiD*LLiLLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedCompareExchange64_rel, "LLiLLiD*LLiLLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+
+TARGET_HEADER_BUILTIN(_InterlockedOr8_acq, "ccD*c", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedOr8_nf, "ccD*c", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedOr8_rel, "ccD*c", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedOr16_acq, "ssD*s", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedOr16_nf, "ssD*s", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedOr16_rel, "ssD*s", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedOr_acq, "LiLiD*Li", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedOr_nf, "LiLiD*Li", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedOr_rel, "LiLiD*Li", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedOr64_acq, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedOr64_nf, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedOr64_rel, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+
+TARGET_HEADER_BUILTIN(_InterlockedXor8_acq, "ccD*c", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedXor8_nf, "ccD*c", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedXor8_rel, "ccD*c", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedXor16_acq, "ssD*s", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedXor16_nf, "ssD*s", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedXor16_rel, "ssD*s", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedXor_acq, "LiLiD*Li", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedXor_nf, "LiLiD*Li", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedXor_rel, "LiLiD*Li", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedXor64_acq, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedXor64_nf, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedXor64_rel, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+
+TARGET_HEADER_BUILTIN(_InterlockedAnd8_acq, "ccD*c", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedAnd8_nf, "ccD*c", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedAnd8_rel, "ccD*c", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedAnd16_acq, "ssD*s", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedAnd16_nf, "ssD*s", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedAnd16_rel, "ssD*s", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedAnd_acq, "LiLiD*Li", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedAnd_nf, "LiLiD*Li", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedAnd_rel, "LiLiD*Li", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedAnd64_acq, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedAnd64_nf, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedAnd64_rel, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+
+TARGET_HEADER_BUILTIN(_InterlockedIncrement16_acq, "ssD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedIncrement16_nf, "ssD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedIncrement16_rel, "ssD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedIncrement_acq, "LiLiD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedIncrement_nf, "LiLiD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedIncrement_rel, "LiLiD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedIncrement64_acq, "LLiLLiD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedIncrement64_nf, "LLiLLiD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedIncrement64_rel, "LLiLLiD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+
+TARGET_HEADER_BUILTIN(_InterlockedDecrement16_acq, "ssD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedDecrement16_nf, "ssD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedDecrement16_rel, "ssD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedDecrement_acq, "LiLiD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedDecrement_nf, "LiLiD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedDecrement_rel, "LiLiD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedDecrement64_acq, "LLiLLiD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedDecrement64_nf, "LLiLLiD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedDecrement64_rel, "LLiLLiD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+
+#undef BUILTIN
+#undef LANGBUILTIN
+#undef TARGET_HEADER_BUILTIN
diff --git a/clang-r353983/include/clang/Basic/BuiltinsHexagon.def b/clang-r353983/include/clang/Basic/BuiltinsHexagon.def
new file mode 100644
index 00000000..18029af5
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/BuiltinsHexagon.def
@@ -0,0 +1,1817 @@
+//===-- BuiltinsHexagon.def - Hexagon Builtin function database --*- C++ -*-==//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the Hexagon-specific builtin function database. Users of
+// this file must define the BUILTIN macro to make use of this information.
+//
+//===----------------------------------------------------------------------===//
+
+// The format of this database matches clang/Basic/Builtins.def.
+
+// The builtins below are not autogenerated from iset.py.
+// Make sure you do not overwrite these.
+
+BUILTIN(__builtin_brev_ldd, "v*LLi*CLLi*iC", "")
+BUILTIN(__builtin_brev_ldw, "v*i*Ci*iC", "")
+BUILTIN(__builtin_brev_ldh, "v*s*Cs*iC", "")
+BUILTIN(__builtin_brev_lduh, "v*Us*CUs*iC", "")
+BUILTIN(__builtin_brev_ldb, "v*Sc*CSc*iC", "")
+BUILTIN(__builtin_brev_ldub, "v*Uc*CUc*iC", "")
+BUILTIN(__builtin_circ_ldd, "LLi*LLi*LLi*iIi", "")
+BUILTIN(__builtin_circ_ldw, "i*i*i*iIi", "")
+BUILTIN(__builtin_circ_ldh, "s*s*s*iIi", "")
+BUILTIN(__builtin_circ_lduh, "Us*Us*Us*iIi", "")
+BUILTIN(__builtin_circ_ldb, "c*c*c*iIi", "")
+BUILTIN(__builtin_circ_ldub, "Uc*Uc*Uc*iIi", "")
+BUILTIN(__builtin_brev_std, "LLi*CLLi*LLiiC", "")
+BUILTIN(__builtin_brev_stw, "i*Ci*iiC", "")
+BUILTIN(__builtin_brev_sth, "s*Cs*iiC", "")
+BUILTIN(__builtin_brev_sthhi, "s*Cs*iiC", "")
+BUILTIN(__builtin_brev_stb, "c*Cc*iiC", "")
+BUILTIN(__builtin_circ_std, "LLi*LLi*LLiiIi", "")
+BUILTIN(__builtin_circ_stw, "i*i*iiIi", "")
+BUILTIN(__builtin_circ_sth, "s*s*iiIi", "")
+BUILTIN(__builtin_circ_sthhi, "s*s*iiIi", "")
+BUILTIN(__builtin_circ_stb, "c*c*iiIi", "")
+BUILTIN(__builtin_HEXAGON_L2_loadrub_pci, "iv*IiivC*", "")
+BUILTIN(__builtin_HEXAGON_L2_loadrb_pci, "iv*IiivC*", "")
+BUILTIN(__builtin_HEXAGON_L2_loadruh_pci, "iv*IiivC*", "")
+BUILTIN(__builtin_HEXAGON_L2_loadrh_pci, "iv*IiivC*", "")
+BUILTIN(__builtin_HEXAGON_L2_loadri_pci, "iv*IiivC*", "")
+BUILTIN(__builtin_HEXAGON_L2_loadrd_pci, "LLiv*IiivC*", "")
+BUILTIN(__builtin_HEXAGON_L2_loadrub_pcr, "iv*ivC*", "")
+BUILTIN(__builtin_HEXAGON_L2_loadrb_pcr, "iv*ivC*", "")
+BUILTIN(__builtin_HEXAGON_L2_loadruh_pcr, "iv*ivC*", "")
+BUILTIN(__builtin_HEXAGON_L2_loadrh_pcr, "iv*ivC*", "")
+BUILTIN(__builtin_HEXAGON_L2_loadri_pcr, "iv*ivC*", "")
+BUILTIN(__builtin_HEXAGON_L2_loadrd_pcr, "LLiv*ivC*", "")
+
+BUILTIN(__builtin_HEXAGON_S2_storerb_pci, "vv*IiiivC*", "")
+BUILTIN(__builtin_HEXAGON_S2_storerh_pci, "vv*IiiivC*", "")
+BUILTIN(__builtin_HEXAGON_S2_storerf_pci, "vv*IiiivC*", "")
+BUILTIN(__builtin_HEXAGON_S2_storeri_pci, "vv*IiiivC*", "")
+BUILTIN(__builtin_HEXAGON_S2_storerd_pci, "vv*IiiLLivC*", "")
+BUILTIN(__builtin_HEXAGON_S2_storerb_pcr, "vv*iivC*", "")
+BUILTIN(__builtin_HEXAGON_S2_storerh_pcr, "vv*iivC*", "")
+BUILTIN(__builtin_HEXAGON_S2_storerf_pcr, "vv*iivC*", "")
+BUILTIN(__builtin_HEXAGON_S2_storeri_pcr, "vv*iivC*", "")
+BUILTIN(__builtin_HEXAGON_S2_storerd_pcr, "vv*iLLivC*", "")
+
+BUILTIN(__builtin_HEXAGON_prefetch,"vv*","")
+BUILTIN(__builtin_HEXAGON_Y2_dccleana,"vv*","")
+BUILTIN(__builtin_HEXAGON_Y2_dccleaninva,"vv*","")
+BUILTIN(__builtin_HEXAGON_Y2_dcinva,"vv*","")
+BUILTIN(__builtin_HEXAGON_Y2_dczeroa,"vv*","")
+BUILTIN(__builtin_HEXAGON_Y4_l2fetch,"vv*Ui","")
+BUILTIN(__builtin_HEXAGON_Y5_l2fetch,"vv*LLUi","")
+
+BUILTIN(__builtin_HEXAGON_V6_vS32b_qpred_ai,"vV16iv*V16i","")
+BUILTIN(__builtin_HEXAGON_V6_vS32b_nqpred_ai,"vV16iv*V16i","")
+BUILTIN(__builtin_HEXAGON_V6_vS32b_nt_qpred_ai,"vV16iv*V16i","")
+BUILTIN(__builtin_HEXAGON_V6_vS32b_nt_nqpred_ai,"vV16iv*V16i","")
+BUILTIN(__builtin_HEXAGON_V6_vS32b_qpred_ai_128B,"vV32iv*V32i","")
+BUILTIN(__builtin_HEXAGON_V6_vS32b_nqpred_ai_128B,"vV32iv*V32i","")
+BUILTIN(__builtin_HEXAGON_V6_vS32b_nt_qpred_ai_128B,"vV32iv*V32i","")
+BUILTIN(__builtin_HEXAGON_V6_vS32b_nt_nqpred_ai_128B,"vV32iv*V32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmaskedstoreq,"vV16iv*V16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmaskedstorenq,"vV16iv*V16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmaskedstorentq,"vV16iv*V16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmaskedstorentnq,"vV16iv*V16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmaskedstoreq_128B,"vV32iv*V32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmaskedstorenq_128B,"vV32iv*V32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmaskedstorentq_128B,"vV32iv*V32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmaskedstorentnq_128B,"vV32iv*V32i","")
+
+BUILTIN(__builtin_HEXAGON_V6_vgathermw,"vv*iiV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vgathermw_128B,"vv*iiV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vgathermh,"vv*iiV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vgathermh_128B,"vv*iiV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vgathermhw,"vv*iiV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vgathermhw_128B,"vv*iiV64i","")
+BUILTIN(__builtin_HEXAGON_V6_vgathermwq,"vv*V16iiiV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vgathermwq_128B,"vv*V32iiiV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vgathermhq,"vv*V16iiiV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vgathermhq_128B,"vv*V32iiiV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vgathermhwq,"vv*V16iiiV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vgathermhwq_128B,"vv*V32iiiV64i","")
+BUILTIN(__builtin_HEXAGON_V6_vscattermw,"viiV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vscattermw_128B,"viiV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vscattermh,"viiV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vscattermh_128B,"viiV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vscattermw_add,"viiV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vscattermw_add_128B,"viiV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vscattermh_add,"viiV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vscattermh_add_128B,"viiV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vscattermwq,"vV16iiiV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vscattermwq_128B,"vV32iiiV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vscattermhq,"vV16iiiV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vscattermhq_128B,"vV32iiiV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vscattermhw,"viiV32iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vscattermhw_128B,"viiV64iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vscattermhwq,"vV16iiiV32iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vscattermhwq_128B,"vV32iiiV64iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vscattermhw_add,"viiV32iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vscattermhw_add_128B,"viiV64iV32i","")
+
+// ---------------------------------------------------------------------
+// Auto-generated definitions.
+
+// V5 Scalar Instructions.
+
+BUILTIN(__builtin_HEXAGON_S2_asr_r_p_or,"LLiLLiLLii","")
+BUILTIN(__builtin_HEXAGON_S2_vsatwh,"iLLi","")
+BUILTIN(__builtin_HEXAGON_S2_tableidxd_goodsyntax,"iiiUIiUIi","")
+BUILTIN(__builtin_HEXAGON_M2_mpysu_up,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyud_acc_ll_s0,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyud_acc_ll_s1,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_cmpysc_s1,"LLiii","")
+BUILTIN(__builtin_HEXAGON_M2_cmpysc_s0,"LLiii","")
+BUILTIN(__builtin_HEXAGON_M4_cmpyi_whc,"iLLii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_sat_rnd_lh_s1,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_sat_rnd_lh_s0,"iii","")
+BUILTIN(__builtin_HEXAGON_S2_tableidxb_goodsyntax,"iiiUIiUIi","")
+BUILTIN(__builtin_HEXAGON_S2_shuffoh,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_F2_sfmax,"fff","")
+BUILTIN(__builtin_HEXAGON_A2_vabswsat,"LLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_asr_i_r,"iiUIi","")
+BUILTIN(__builtin_HEXAGON_S2_asr_i_p,"LLiLLiUIi","")
+BUILTIN(__builtin_HEXAGON_A4_combineri,"LLiiIi","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_nac_sat_hl_s1,"iiii","")
+BUILTIN(__builtin_HEXAGON_M4_vpmpyh_acc,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_vcmpy_s0_sat_i,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_notp,"LLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_hl_s1,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_hl_s0,"iii","")
+BUILTIN(__builtin_HEXAGON_C4_or_and,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_vmac2s_s0,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_vmac2s_s1,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_S2_brevp,"LLiLLi","")
+BUILTIN(__builtin_HEXAGON_M4_pmpyw_acc,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_S2_cl1,"ii","")
+BUILTIN(__builtin_HEXAGON_C4_cmplte,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_mmpyul_s0,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_vaddws,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_maxup,"ULLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A4_vcmphgti,"iLLiIi","")
+BUILTIN(__builtin_HEXAGON_S2_interleave,"LLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_vrcmpyi_s0,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_abssat,"ii","")
+BUILTIN(__builtin_HEXAGON_A2_vcmpwgtu,"iLLiLLi","")
+BUILTIN(__builtin_HEXAGON_C2_cmpgtu,"iii","")
+BUILTIN(__builtin_HEXAGON_C2_cmpgtp,"iLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A4_cmphgtui,"iiUIi","")
+BUILTIN(__builtin_HEXAGON_C2_cmpgti,"iiIi","")
+BUILTIN(__builtin_HEXAGON_M2_mpyi,"iii","")
+BUILTIN(__builtin_HEXAGON_F2_conv_df2uw_chop,"id","")
+BUILTIN(__builtin_HEXAGON_A4_cmpheq,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_lh_s1,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_lh_s0,"iii","")
+BUILTIN(__builtin_HEXAGON_S2_lsr_i_r_xacc,"iiiUIi","")
+BUILTIN(__builtin_HEXAGON_S2_vrcnegh,"LLiLLiLLii","")
+BUILTIN(__builtin_HEXAGON_S2_extractup,"LLiLLiUIiUIi","")
+BUILTIN(__builtin_HEXAGON_S2_asr_i_p_rnd_goodsyntax,"LLiLLiUIi","")
+BUILTIN(__builtin_HEXAGON_S4_ntstbit_r,"iii","")
+BUILTIN(__builtin_HEXAGON_F2_conv_w2sf,"fi","")
+BUILTIN(__builtin_HEXAGON_C2_not,"ii","")
+BUILTIN(__builtin_HEXAGON_C2_tfrpr,"ii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_ll_s1,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_ll_s0,"iii","")
+BUILTIN(__builtin_HEXAGON_A4_cmpbgt,"iii","")
+BUILTIN(__builtin_HEXAGON_S2_asr_r_r_and,"iiii","")
+BUILTIN(__builtin_HEXAGON_A4_rcmpneqi,"iiIi","")
+BUILTIN(__builtin_HEXAGON_S2_asl_i_r_nac,"iiiUIi","")
+BUILTIN(__builtin_HEXAGON_M2_subacc,"iiii","")
+BUILTIN(__builtin_HEXAGON_A2_orp,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mpyu_up,"Uiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_acc_sat_lh_s1,"iiii","")
+BUILTIN(__builtin_HEXAGON_S2_asr_i_vh,"LLiLLiUIi","")
+BUILTIN(__builtin_HEXAGON_S2_asr_i_vw,"LLiLLiUIi","")
+BUILTIN(__builtin_HEXAGON_A4_cmpbgtu,"iii","")
+BUILTIN(__builtin_HEXAGON_A4_vcmpbeq_any,"iLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A4_cmpbgti,"iiIi","")
+BUILTIN(__builtin_HEXAGON_M2_mpyd_lh_s1,"LLiii","")
+BUILTIN(__builtin_HEXAGON_S2_asl_r_p_nac,"LLiLLiLLii","")
+BUILTIN(__builtin_HEXAGON_S2_lsr_i_r_nac,"iiiUIi","")
+BUILTIN(__builtin_HEXAGON_A2_addsp,"LLiiLLi","")
+BUILTIN(__builtin_HEXAGON_S4_vxsubaddw,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A4_vcmpheqi,"iLLiIi","")
+BUILTIN(__builtin_HEXAGON_S4_vxsubaddh,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M4_pmpyw,"LLiii","")
+BUILTIN(__builtin_HEXAGON_S2_vsathb,"iLLi","")
+BUILTIN(__builtin_HEXAGON_S2_asr_r_p_and,"LLiLLiLLii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyu_acc_lh_s1,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyu_acc_lh_s0,"iiii","")
+BUILTIN(__builtin_HEXAGON_S2_lsl_r_p_acc,"LLiLLiLLii","")
+BUILTIN(__builtin_HEXAGON_A2_pxorf,"iiii","")
+BUILTIN(__builtin_HEXAGON_C2_cmpgei,"iiIi","")
+BUILTIN(__builtin_HEXAGON_A2_vsubub,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_asl_i_p,"LLiLLiUIi","")
+BUILTIN(__builtin_HEXAGON_S2_asl_i_r,"iiUIi","")
+BUILTIN(__builtin_HEXAGON_A4_vrminuw,"LLiLLiLLii","")
+BUILTIN(__builtin_HEXAGON_F2_sffma,"ffff","")
+BUILTIN(__builtin_HEXAGON_A2_absp,"LLiLLi","")
+BUILTIN(__builtin_HEXAGON_C2_all8,"ii","")
+BUILTIN(__builtin_HEXAGON_A4_vrminuh,"LLiLLiLLii","")
+BUILTIN(__builtin_HEXAGON_F2_sffma_lib,"ffff","")
+BUILTIN(__builtin_HEXAGON_M4_vrmpyoh_s0,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M4_vrmpyoh_s1,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_C2_bitsset,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_mpysip,"iiUIi","")
+BUILTIN(__builtin_HEXAGON_M2_mpysin,"iiUIi","")
+BUILTIN(__builtin_HEXAGON_A4_boundscheck,"iiLLi","")
+BUILTIN(__builtin_HEXAGON_M5_vrmpybuu,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_C4_fastcorner9,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_vrcmpys_s1rp,"iLLii","")
+BUILTIN(__builtin_HEXAGON_A2_neg,"ii","")
+BUILTIN(__builtin_HEXAGON_A2_subsat,"iii","")
+BUILTIN(__builtin_HEXAGON_S2_asl_r_r,"iii","")
+BUILTIN(__builtin_HEXAGON_S2_asl_r_p,"LLiLLii","")
+BUILTIN(__builtin_HEXAGON_A2_vnavgh,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_nac_sat_hl_s0,"iiii","")
+BUILTIN(__builtin_HEXAGON_F2_conv_ud2df,"dLLi","")
+BUILTIN(__builtin_HEXAGON_A2_vnavgw,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_asl_i_r_acc,"iiiUIi","")
+BUILTIN(__builtin_HEXAGON_S4_subi_lsr_ri,"iUIiiUIi","")
+BUILTIN(__builtin_HEXAGON_S2_vzxthw,"LLii","")
+BUILTIN(__builtin_HEXAGON_F2_sfadd,"fff","")
+BUILTIN(__builtin_HEXAGON_A2_sub,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_vmac2su_s0,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_vmac2su_s1,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_dpmpyss_s0,"LLiii","")
+BUILTIN(__builtin_HEXAGON_S2_insert,"iiiUIiUIi","")
+BUILTIN(__builtin_HEXAGON_S2_packhl,"LLiii","")
+BUILTIN(__builtin_HEXAGON_A4_vcmpwgti,"iLLiIi","")
+BUILTIN(__builtin_HEXAGON_A2_vavguwr,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_asl_r_r_and,"iiii","")
+BUILTIN(__builtin_HEXAGON_A2_svsubhs,"iii","")
+BUILTIN(__builtin_HEXAGON_A2_addh_l16_hl,"iii","")
+BUILTIN(__builtin_HEXAGON_M4_and_and,"iiii","")
+BUILTIN(__builtin_HEXAGON_F2_conv_d2df,"dLLi","")
+BUILTIN(__builtin_HEXAGON_C2_cmpgtui,"iiUIi","")
+BUILTIN(__builtin_HEXAGON_A2_vconj,"LLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_lsr_r_vw,"LLiLLii","")
+BUILTIN(__builtin_HEXAGON_S2_lsr_r_vh,"LLiLLii","")
+BUILTIN(__builtin_HEXAGON_A2_subh_l16_hl,"iii","")
+BUILTIN(__builtin_HEXAGON_S4_vxsubaddhr,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_clbp,"iLLi","")
+BUILTIN(__builtin_HEXAGON_S2_deinterleave,"LLiLLi","")
+BUILTIN(__builtin_HEXAGON_C2_any8,"ii","")
+BUILTIN(__builtin_HEXAGON_S2_togglebit_r,"iii","")
+BUILTIN(__builtin_HEXAGON_S2_togglebit_i,"iiUIi","")
+BUILTIN(__builtin_HEXAGON_F2_conv_uw2sf,"fi","")
+BUILTIN(__builtin_HEXAGON_S2_vsathb_nopack,"LLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_cmacs_s0,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_cmacs_s1,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_sat_hh_s0,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_sat_hh_s1,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_mmacuhs_s1,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mmacuhs_s0,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_clrbit_r,"iii","")
+BUILTIN(__builtin_HEXAGON_C4_or_andn,"iiii","")
+BUILTIN(__builtin_HEXAGON_S2_asl_r_r_nac,"iiii","")
+BUILTIN(__builtin_HEXAGON_S2_asl_i_p_acc,"LLiLLiLLiUIi","")
+BUILTIN(__builtin_HEXAGON_A4_vcmpwgtui,"iLLiUIi","")
+BUILTIN(__builtin_HEXAGON_M4_vrmpyoh_acc_s0,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M4_vrmpyoh_acc_s1,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A4_vrmaxh,"LLiLLiLLii","")
+BUILTIN(__builtin_HEXAGON_A2_vcmpbeq,"iLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_vcmphgt,"iLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_vnavgwcr,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_vrcmacr_s0c,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_vavgwcr,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_asl_i_p_xacc,"LLiLLiLLiUIi","")
+BUILTIN(__builtin_HEXAGON_A4_vrmaxw,"LLiLLiLLii","")
+BUILTIN(__builtin_HEXAGON_A2_vnavghr,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M4_cmpyi_wh,"iLLii","")
+BUILTIN(__builtin_HEXAGON_A2_tfrsi,"iIi","")
+BUILTIN(__builtin_HEXAGON_S2_asr_i_r_acc,"iiiUIi","")
+BUILTIN(__builtin_HEXAGON_A2_svnavgh,"iii","")
+BUILTIN(__builtin_HEXAGON_S2_lsr_i_r,"iiUIi","")
+BUILTIN(__builtin_HEXAGON_M2_vmac2,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_A4_vcmphgtui,"iLLiUIi","")
+BUILTIN(__builtin_HEXAGON_A2_svavgh,"iii","")
+BUILTIN(__builtin_HEXAGON_M4_vrmpyeh_acc_s0,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M4_vrmpyeh_acc_s1,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_lsr_i_p,"LLiLLiUIi","")
+BUILTIN(__builtin_HEXAGON_A2_combine_hl,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_up,"iii","")
+BUILTIN(__builtin_HEXAGON_A2_combine_hh,"iii","")
+BUILTIN(__builtin_HEXAGON_A2_negsat,"ii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyd_hl_s0,"LLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyd_hl_s1,"LLiii","")
+BUILTIN(__builtin_HEXAGON_A4_bitsplit,"LLiii","")
+BUILTIN(__builtin_HEXAGON_A2_vabshsat,"LLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mpyui,"iii","")
+BUILTIN(__builtin_HEXAGON_A2_addh_l16_sat_ll,"iii","")
+BUILTIN(__builtin_HEXAGON_S2_lsl_r_r_and,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mmpyul_rs0,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_asr_i_r_rnd_goodsyntax,"iiUIi","")
+BUILTIN(__builtin_HEXAGON_S2_lsr_r_p_nac,"LLiLLiLLii","")
+BUILTIN(__builtin_HEXAGON_C2_cmplt,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_cmacr_s0,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M4_or_and,"iiii","")
+BUILTIN(__builtin_HEXAGON_M4_mpyrr_addi,"iUIiii","")
+BUILTIN(__builtin_HEXAGON_S4_or_andi,"iiiIi","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_sat_hl_s0,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_sat_hl_s1,"iii","")
+BUILTIN(__builtin_HEXAGON_M4_mpyrr_addr,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mmachs_rs0,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mmachs_rs1,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_vrcmpyr_s0c,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_acc_sat_hl_s0,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyd_acc_ll_s1,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_F2_sffixupn,"fff","")
+BUILTIN(__builtin_HEXAGON_M2_mpyd_acc_lh_s0,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyd_acc_lh_s1,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_rnd_hh_s0,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_rnd_hh_s1,"iii","")
+BUILTIN(__builtin_HEXAGON_A2_vadduhs,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_vsubuhs,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_subh_h16_hl,"iii","")
+BUILTIN(__builtin_HEXAGON_A2_subh_h16_hh,"iii","")
+BUILTIN(__builtin_HEXAGON_A2_xorp,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A4_tfrpcp,"LLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_addh_h16_lh,"iii","")
+BUILTIN(__builtin_HEXAGON_A2_addh_h16_sat_hl,"iii","")
+BUILTIN(__builtin_HEXAGON_A2_addh_h16_ll,"iii","")
+BUILTIN(__builtin_HEXAGON_A2_addh_h16_sat_hh,"iii","")
+BUILTIN(__builtin_HEXAGON_A2_zxtb,"ii","")
+BUILTIN(__builtin_HEXAGON_A2_zxth,"ii","")
+BUILTIN(__builtin_HEXAGON_A2_vnavgwr,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M4_or_xor,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyud_acc_hh_s0,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyud_acc_hh_s1,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M5_vmacbsu,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_dpmpyuu_acc_s0,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_rnd_hl_s0,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_rnd_hl_s1,"iii","")
+BUILTIN(__builtin_HEXAGON_F2_sffms_lib,"ffff","")
+BUILTIN(__builtin_HEXAGON_C4_cmpneqi,"iiIi","")
+BUILTIN(__builtin_HEXAGON_M4_and_xor,"iiii","")
+BUILTIN(__builtin_HEXAGON_A2_sat,"iLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mpyd_nac_lh_s1,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyd_nac_lh_s0,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_A2_addsat,"iii","")
+BUILTIN(__builtin_HEXAGON_A2_svavghs,"iii","")
+BUILTIN(__builtin_HEXAGON_A2_vrsadub_acc,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_C2_bitsclri,"iiUIi","")
+BUILTIN(__builtin_HEXAGON_A2_subh_h16_sat_hh,"iii","")
+BUILTIN(__builtin_HEXAGON_A2_subh_h16_sat_hl,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_mmaculs_rs0,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mmaculs_rs1,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_vradduh,"iLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A4_addp_c,"LLiLLiLLiv*","")
+BUILTIN(__builtin_HEXAGON_C2_xor,"iii","")
+BUILTIN(__builtin_HEXAGON_S2_lsl_r_r_acc,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mmpyh_rs1,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mmpyh_rs0,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_F2_conv_df2ud_chop,"LLid","")
+BUILTIN(__builtin_HEXAGON_C4_or_or,"iiii","")
+BUILTIN(__builtin_HEXAGON_S4_vxaddsubhr,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_vsathub,"iLLi","")
+BUILTIN(__builtin_HEXAGON_F2_conv_df2sf,"fd","")
+BUILTIN(__builtin_HEXAGON_M2_hmmpyh_rs1,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_hmmpyh_s1,"iii","")
+BUILTIN(__builtin_HEXAGON_A2_vavgwr,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_tableidxh_goodsyntax,"iiiUIiUIi","")
+BUILTIN(__builtin_HEXAGON_A2_sxth,"ii","")
+BUILTIN(__builtin_HEXAGON_A2_sxtb,"ii","")
+BUILTIN(__builtin_HEXAGON_C4_or_orn,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_vrcmaci_s0c,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_sxtw,"LLii","")
+BUILTIN(__builtin_HEXAGON_M2_vabsdiffh,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_acc_lh_s1,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_acc_lh_s0,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_hmmpyl_s1,"iii","")
+BUILTIN(__builtin_HEXAGON_S2_cl1p,"iLLi","")
+BUILTIN(__builtin_HEXAGON_M2_vabsdiffw,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A4_andnp,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_C2_vmux,"LLiiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_parityp,"iLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_lsr_i_p_and,"LLiLLiLLiUIi","")
+BUILTIN(__builtin_HEXAGON_S2_asr_i_r_or,"iiiUIi","")
+BUILTIN(__builtin_HEXAGON_M2_mpyu_nac_ll_s0,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyu_nac_ll_s1,"iiii","")
+BUILTIN(__builtin_HEXAGON_F2_sfcmpeq,"iff","")
+BUILTIN(__builtin_HEXAGON_A2_vaddb_map,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_lsr_r_r_nac,"iiii","")
+BUILTIN(__builtin_HEXAGON_A2_vcmpheq,"iLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_clbnorm,"ii","")
+BUILTIN(__builtin_HEXAGON_M2_cnacsc_s1,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_cnacsc_s0,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_S4_subaddi,"iiIii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyud_nac_hl_s1,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyud_nac_hl_s0,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_S5_vasrhrnd_goodsyntax,"LLiLLiUIi","")
+BUILTIN(__builtin_HEXAGON_S2_tstbit_r,"iii","")
+BUILTIN(__builtin_HEXAGON_S4_vrcrotate,"LLiLLiiUIi","")
+BUILTIN(__builtin_HEXAGON_M2_mmachs_s1,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mmachs_s0,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_tstbit_i,"iiUIi","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_up_s1,"iii","")
+BUILTIN(__builtin_HEXAGON_S2_extractu_rp,"iiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mmpyuh_rs0,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_lsr_i_vw,"LLiLLiUIi","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_rnd_ll_s0,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_rnd_ll_s1,"iii","")
+BUILTIN(__builtin_HEXAGON_M4_or_or,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyu_hh_s1,"Uiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyu_hh_s0,"Uiii","")
+BUILTIN(__builtin_HEXAGON_S2_asl_r_p_acc,"LLiLLiLLii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyu_nac_lh_s0,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyu_nac_lh_s1,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_sat_ll_s0,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_sat_ll_s1,"iii","")
+BUILTIN(__builtin_HEXAGON_F2_conv_w2df,"di","")
+BUILTIN(__builtin_HEXAGON_A2_subh_l16_sat_hl,"iii","")
+BUILTIN(__builtin_HEXAGON_C2_cmpeqi,"iiIi","")
+BUILTIN(__builtin_HEXAGON_S2_asl_i_r_and,"iiiUIi","")
+BUILTIN(__builtin_HEXAGON_S2_vcnegh,"LLiLLii","")
+BUILTIN(__builtin_HEXAGON_A4_vcmpweqi,"iLLiIi","")
+BUILTIN(__builtin_HEXAGON_M2_vdmpyrs_s0,"iLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_vdmpyrs_s1,"iLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M4_xor_xacc,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_vdmpys_s1,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_vdmpys_s0,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_vavgubr,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mpyu_hl_s1,"Uiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyu_hl_s0,"Uiii","")
+BUILTIN(__builtin_HEXAGON_S2_asl_r_r_acc,"iiii","")
+BUILTIN(__builtin_HEXAGON_S2_cl0p,"iLLi","")
+BUILTIN(__builtin_HEXAGON_S2_valignib,"LLiLLiLLiUIi","")
+BUILTIN(__builtin_HEXAGON_F2_sffixupd,"fff","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_sat_rnd_hl_s1,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_sat_rnd_hl_s0,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_cmacsc_s0,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_cmacsc_s1,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_S2_ct1,"ii","")
+BUILTIN(__builtin_HEXAGON_S2_ct0,"ii","")
+BUILTIN(__builtin_HEXAGON_M2_dpmpyuu_nac_s0,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mmpyul_rs1,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S4_ntstbit_i,"iiUIi","")
+BUILTIN(__builtin_HEXAGON_F2_sffixupr,"ff","")
+BUILTIN(__builtin_HEXAGON_S2_asr_r_p_xor,"LLiLLiLLii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyud_acc_hl_s0,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyud_acc_hl_s1,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_A2_vcmphgtu,"iLLiLLi","")
+BUILTIN(__builtin_HEXAGON_C2_andn,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_vmpy2s_s0pack,"iii","")
+BUILTIN(__builtin_HEXAGON_S4_addaddi,"iiiIi","")
+BUILTIN(__builtin_HEXAGON_M2_mpyd_acc_ll_s0,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_acc_sat_hl_s1,"iiii","")
+BUILTIN(__builtin_HEXAGON_A4_rcmpeqi,"iiIi","")
+BUILTIN(__builtin_HEXAGON_M4_xor_and,"iiii","")
+BUILTIN(__builtin_HEXAGON_S2_asl_i_p_and,"LLiLLiLLiUIi","")
+BUILTIN(__builtin_HEXAGON_M2_mmpyuh_rs1,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_asr_r_r_or,"iiii","")
+BUILTIN(__builtin_HEXAGON_A4_round_ri,"iiUIi","")
+BUILTIN(__builtin_HEXAGON_A2_max,"iii","")
+BUILTIN(__builtin_HEXAGON_A4_round_rr,"iii","")
+BUILTIN(__builtin_HEXAGON_A4_combineii,"LLiIiUIi","")
+BUILTIN(__builtin_HEXAGON_A4_combineir,"LLiIii","")
+BUILTIN(__builtin_HEXAGON_C4_and_orn,"iiii","")
+BUILTIN(__builtin_HEXAGON_M5_vmacbuu,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_A4_rcmpeq,"iii","")
+BUILTIN(__builtin_HEXAGON_M4_cmpyr_whc,"iLLii","")
+BUILTIN(__builtin_HEXAGON_S2_lsr_i_r_acc,"iiiUIi","")
+BUILTIN(__builtin_HEXAGON_S2_vzxtbh,"LLii","")
+BUILTIN(__builtin_HEXAGON_M2_mmacuhs_rs1,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_asr_r_r_sat,"iii","")
+BUILTIN(__builtin_HEXAGON_A2_combinew,"LLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_acc_ll_s1,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_acc_ll_s0,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_cmpyi_s0,"LLiii","")
+BUILTIN(__builtin_HEXAGON_S2_asl_r_p_or,"LLiLLiLLii","")
+BUILTIN(__builtin_HEXAGON_S4_ori_asl_ri,"iUIiiUIi","")
+BUILTIN(__builtin_HEXAGON_C4_nbitsset,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyu_acc_hh_s1,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyu_acc_hh_s0,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyu_ll_s1,"Uiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyu_ll_s0,"Uiii","")
+BUILTIN(__builtin_HEXAGON_A2_addh_l16_ll,"iii","")
+BUILTIN(__builtin_HEXAGON_S2_lsr_r_r_and,"iiii","")
+BUILTIN(__builtin_HEXAGON_A4_modwrapu,"iii","")
+BUILTIN(__builtin_HEXAGON_A4_rcmpneq,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyd_acc_hh_s0,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyd_acc_hh_s1,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_F2_sfimm_p,"fUIi","")
+BUILTIN(__builtin_HEXAGON_F2_sfimm_n,"fUIi","")
+BUILTIN(__builtin_HEXAGON_M4_cmpyr_wh,"iLLii","")
+BUILTIN(__builtin_HEXAGON_S2_lsl_r_p_and,"LLiLLiLLii","")
+BUILTIN(__builtin_HEXAGON_A2_vavgub,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_F2_conv_d2sf,"fLLi","")
+BUILTIN(__builtin_HEXAGON_A2_vavguh,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A4_cmpbeqi,"iiUIi","")
+BUILTIN(__builtin_HEXAGON_F2_sfcmpuo,"iff","")
+BUILTIN(__builtin_HEXAGON_A2_vavguw,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_asr_i_p_nac,"LLiLLiLLiUIi","")
+BUILTIN(__builtin_HEXAGON_S2_vsatwh_nopack,"LLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mpyd_hh_s0,"LLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyd_hh_s1,"LLiii","")
+BUILTIN(__builtin_HEXAGON_S2_lsl_r_p_or,"LLiLLiLLii","")
+BUILTIN(__builtin_HEXAGON_A2_minu,"Uiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_sat_lh_s1,"iii","")
+BUILTIN(__builtin_HEXAGON_M4_or_andn,"iiii","")
+BUILTIN(__builtin_HEXAGON_A2_minp,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S4_or_andix,"iiiIi","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_rnd_lh_s0,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_rnd_lh_s1,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_mmpyuh_s0,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mmpyuh_s1,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_acc_sat_lh_s0,"iiii","")
+BUILTIN(__builtin_HEXAGON_F2_sfcmpge,"iff","")
+BUILTIN(__builtin_HEXAGON_F2_sfmin,"fff","")
+BUILTIN(__builtin_HEXAGON_F2_sfcmpgt,"iff","")
+BUILTIN(__builtin_HEXAGON_M4_vpmpyh,"LLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mmacuhs_rs0,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mpyd_rnd_lh_s1,"LLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyd_rnd_lh_s0,"LLiii","")
+BUILTIN(__builtin_HEXAGON_A2_roundsat,"iLLi","")
+BUILTIN(__builtin_HEXAGON_S2_ct1p,"iLLi","")
+BUILTIN(__builtin_HEXAGON_S4_extract_rp,"iiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_lsl_r_r_or,"iiii","")
+BUILTIN(__builtin_HEXAGON_C4_cmplteui,"iiUIi","")
+BUILTIN(__builtin_HEXAGON_S4_addi_lsr_ri,"iUIiiUIi","")
+BUILTIN(__builtin_HEXAGON_A4_tfrcpp,"LLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_asr_i_svw_trun,"iLLiUIi","")
+BUILTIN(__builtin_HEXAGON_A4_cmphgti,"iiIi","")
+BUILTIN(__builtin_HEXAGON_A4_vrminh,"LLiLLiLLii","")
+BUILTIN(__builtin_HEXAGON_A4_vrminw,"LLiLLiLLii","")
+BUILTIN(__builtin_HEXAGON_A4_cmphgtu,"iii","")
+BUILTIN(__builtin_HEXAGON_S2_insertp_rp,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_vnavghcr,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S4_subi_asl_ri,"iUIiiUIi","")
+BUILTIN(__builtin_HEXAGON_S2_lsl_r_vh,"LLiLLii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_hh_s0,"iii","")
+BUILTIN(__builtin_HEXAGON_A2_vsubws,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_sath,"ii","")
+BUILTIN(__builtin_HEXAGON_S2_asl_r_p_xor,"LLiLLiLLii","")
+BUILTIN(__builtin_HEXAGON_A2_satb,"ii","")
+BUILTIN(__builtin_HEXAGON_C2_cmpltu,"iii","")
+BUILTIN(__builtin_HEXAGON_S2_insertp,"LLiLLiLLiUIiUIi","")
+BUILTIN(__builtin_HEXAGON_M2_mpyd_rnd_ll_s1,"LLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyd_rnd_ll_s0,"LLiii","")
+BUILTIN(__builtin_HEXAGON_S2_lsr_i_p_nac,"LLiLLiLLiUIi","")
+BUILTIN(__builtin_HEXAGON_S2_extractup_rp,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S4_vxaddsubw,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S4_vxaddsubh,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_asrh,"ii","")
+BUILTIN(__builtin_HEXAGON_S4_extractp_rp,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_lsr_r_r_acc,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyd_nac_ll_s1,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyd_nac_ll_s0,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_C2_or,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_mmpyul_s1,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_vrcmacr_s0,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_xor,"iii","")
+BUILTIN(__builtin_HEXAGON_A2_add,"iii","")
+BUILTIN(__builtin_HEXAGON_A2_vsububs,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_vmpy2s_s1,"LLiii","")
+BUILTIN(__builtin_HEXAGON_M2_vmpy2s_s0,"LLiii","")
+BUILTIN(__builtin_HEXAGON_A2_vraddub_acc,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_F2_sfinvsqrta,"ff","")
+BUILTIN(__builtin_HEXAGON_S2_ct0p,"iLLi","")
+BUILTIN(__builtin_HEXAGON_A2_svaddh,"iii","")
+BUILTIN(__builtin_HEXAGON_S2_vcrotate,"LLiLLii","")
+BUILTIN(__builtin_HEXAGON_A2_aslh,"ii","")
+BUILTIN(__builtin_HEXAGON_A2_subh_h16_lh,"iii","")
+BUILTIN(__builtin_HEXAGON_A2_subh_h16_ll,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_hmmpyl_rs1,"iii","")
+BUILTIN(__builtin_HEXAGON_S2_asr_r_p,"LLiLLii","")
+BUILTIN(__builtin_HEXAGON_S2_vsplatrh,"LLii","")
+BUILTIN(__builtin_HEXAGON_S2_asr_r_r,"iii","")
+BUILTIN(__builtin_HEXAGON_A2_addh_h16_hl,"iii","")
+BUILTIN(__builtin_HEXAGON_S2_vsplatrb,"ii","")
+BUILTIN(__builtin_HEXAGON_A2_addh_h16_hh,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_cmpyr_s0,"LLiii","")
+BUILTIN(__builtin_HEXAGON_M2_dpmpyss_rnd_s0,"iii","")
+BUILTIN(__builtin_HEXAGON_C2_muxri,"iiIii","")
+BUILTIN(__builtin_HEXAGON_M2_vmac2es_s0,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_vmac2es_s1,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_C2_pxfer_map,"ii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyu_lh_s1,"Uiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyu_lh_s0,"Uiii","")
+BUILTIN(__builtin_HEXAGON_S2_asl_i_r_or,"iiiUIi","")
+BUILTIN(__builtin_HEXAGON_M2_mpyd_acc_hl_s0,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyd_acc_hl_s1,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_S2_asr_r_p_nac,"LLiLLiLLii","")
+BUILTIN(__builtin_HEXAGON_A2_vaddw,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_asr_i_r_and,"iiiUIi","")
+BUILTIN(__builtin_HEXAGON_A2_vaddh,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_nac_sat_lh_s1,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_nac_sat_lh_s0,"iiii","")
+BUILTIN(__builtin_HEXAGON_C2_cmpeqp,"iLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M4_mpyri_addi,"iUIiiUIi","")
+BUILTIN(__builtin_HEXAGON_A2_not,"ii","")
+BUILTIN(__builtin_HEXAGON_S4_andi_lsr_ri,"iUIiiUIi","")
+BUILTIN(__builtin_HEXAGON_M2_macsip,"iiiUIi","")
+BUILTIN(__builtin_HEXAGON_A2_tfrcrr,"ii","")
+BUILTIN(__builtin_HEXAGON_M2_macsin,"iiiUIi","")
+BUILTIN(__builtin_HEXAGON_C2_orn,"iii","")
+BUILTIN(__builtin_HEXAGON_M4_and_andn,"iiii","")
+BUILTIN(__builtin_HEXAGON_F2_sfmpy,"fff","")
+BUILTIN(__builtin_HEXAGON_M2_mpyud_nac_hh_s1,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyud_nac_hh_s0,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_S2_lsr_r_p_acc,"LLiLLiLLii","")
+BUILTIN(__builtin_HEXAGON_S2_asr_r_vw,"LLiLLii","")
+BUILTIN(__builtin_HEXAGON_M4_and_or,"iiii","")
+BUILTIN(__builtin_HEXAGON_S2_asr_r_vh,"LLiLLii","")
+BUILTIN(__builtin_HEXAGON_C2_mask,"LLii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_nac_hh_s0,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_nac_hh_s1,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_up_s1_sat,"iii","")
+BUILTIN(__builtin_HEXAGON_A4_vcmpbgt,"iLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M5_vrmacbsu,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_tableidxw_goodsyntax,"iiiUIiUIi","")
+BUILTIN(__builtin_HEXAGON_A2_vrsadub,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_tfrrcr,"ii","")
+BUILTIN(__builtin_HEXAGON_M2_vrcmpys_acc_s1,"LLiLLiLLii","")
+BUILTIN(__builtin_HEXAGON_F2_dfcmpge,"idd","")
+BUILTIN(__builtin_HEXAGON_M2_accii,"iiiIi","")
+BUILTIN(__builtin_HEXAGON_A5_vaddhubs,"iLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_vmaxw,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_vmaxb,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_vmaxh,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_vsxthw,"LLii","")
+BUILTIN(__builtin_HEXAGON_S4_andi_asl_ri,"iUIiiUIi","")
+BUILTIN(__builtin_HEXAGON_S2_asl_i_p_nac,"LLiLLiLLiUIi","")
+BUILTIN(__builtin_HEXAGON_S2_lsl_r_p_xor,"LLiLLiLLii","")
+BUILTIN(__builtin_HEXAGON_C2_cmpgt,"iii","")
+BUILTIN(__builtin_HEXAGON_F2_conv_df2d_chop,"LLid","")
+BUILTIN(__builtin_HEXAGON_M2_mpyu_nac_hl_s0,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyu_nac_hl_s1,"iiii","")
+BUILTIN(__builtin_HEXAGON_F2_conv_sf2w,"if","")
+BUILTIN(__builtin_HEXAGON_S2_lsr_r_p_or,"LLiLLiLLii","")
+BUILTIN(__builtin_HEXAGON_F2_sfclass,"ifUIi","")
+BUILTIN(__builtin_HEXAGON_M2_mpyud_acc_lh_s0,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M4_xor_andn,"iiii","")
+BUILTIN(__builtin_HEXAGON_S2_addasl_rrri,"iiiUIi","")
+BUILTIN(__builtin_HEXAGON_M5_vdmpybsu,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mpyu_nac_hh_s0,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyu_nac_hh_s1,"iiii","")
+BUILTIN(__builtin_HEXAGON_A2_addi,"iiIi","")
+BUILTIN(__builtin_HEXAGON_A2_addp,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_vmpy2s_s1pack,"iii","")
+BUILTIN(__builtin_HEXAGON_S4_clbpnorm,"iLLi","")
+BUILTIN(__builtin_HEXAGON_A4_round_rr_sat,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_nacci,"iiii","")
+BUILTIN(__builtin_HEXAGON_S2_shuffeh,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_lsr_i_r_and,"iiiUIi","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_sat_rnd_hh_s1,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_sat_rnd_hh_s0,"iii","")
+BUILTIN(__builtin_HEXAGON_F2_conv_sf2uw,"if","")
+BUILTIN(__builtin_HEXAGON_A2_vsubh,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_F2_conv_sf2ud,"LLif","")
+BUILTIN(__builtin_HEXAGON_A2_vsubw,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_vcmpwgt,"iLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M4_xor_or,"iiii","")
+BUILTIN(__builtin_HEXAGON_F2_conv_sf2uw_chop,"if","")
+BUILTIN(__builtin_HEXAGON_S2_asl_r_vw,"LLiLLii","")
+BUILTIN(__builtin_HEXAGON_S2_vsatwuh_nopack,"LLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_asl_r_vh,"LLiLLii","")
+BUILTIN(__builtin_HEXAGON_A2_svsubuhs,"iii","")
+BUILTIN(__builtin_HEXAGON_M5_vmpybsu,"LLiii","")
+BUILTIN(__builtin_HEXAGON_A2_subh_l16_sat_ll,"iii","")
+BUILTIN(__builtin_HEXAGON_C4_and_and,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyu_acc_hl_s1,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyu_acc_hl_s0,"iiii","")
+BUILTIN(__builtin_HEXAGON_S2_lsr_r_p,"LLiLLii","")
+BUILTIN(__builtin_HEXAGON_S2_lsr_r_r,"iii","")
+BUILTIN(__builtin_HEXAGON_A4_subp_c,"LLiLLiLLiv*","")
+BUILTIN(__builtin_HEXAGON_A2_vsubhs,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_C2_vitpack,"iii","")
+BUILTIN(__builtin_HEXAGON_A2_vavguhr,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_vsplicerb,"LLiLLiLLii","")
+BUILTIN(__builtin_HEXAGON_C4_nbitsclr,"iii","")
+BUILTIN(__builtin_HEXAGON_A2_vcmpbgtu,"iLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_cmpys_s1,"LLiii","")
+BUILTIN(__builtin_HEXAGON_M2_cmpys_s0,"LLiii","")
+BUILTIN(__builtin_HEXAGON_F2_dfcmpuo,"idd","")
+BUILTIN(__builtin_HEXAGON_S2_shuffob,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_C2_and,"iii","")
+BUILTIN(__builtin_HEXAGON_S5_popcountp,"iLLi","")
+BUILTIN(__builtin_HEXAGON_S4_extractp,"LLiLLiUIiUIi","")
+BUILTIN(__builtin_HEXAGON_S2_cl0,"ii","")
+BUILTIN(__builtin_HEXAGON_A4_vcmpbgti,"iLLiIi","")
+BUILTIN(__builtin_HEXAGON_M2_mmacls_s1,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mmacls_s0,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_C4_cmpneq,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_vmac2es,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_vdmacs_s0,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_vdmacs_s1,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mpyud_ll_s0,"ULLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyud_ll_s1,"ULLiii","")
+BUILTIN(__builtin_HEXAGON_S2_clb,"ii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_nac_ll_s0,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_nac_ll_s1,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyd_nac_hl_s1,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyd_nac_hl_s0,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_maci,"iiii","")
+BUILTIN(__builtin_HEXAGON_A2_vmaxuh,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A4_bitspliti,"LLiiUIi","")
+BUILTIN(__builtin_HEXAGON_A2_vmaxub,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mpyud_hh_s0,"ULLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyud_hh_s1,"ULLiii","")
+BUILTIN(__builtin_HEXAGON_M2_vrmac_s0,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_sat_lh_s0,"iii","")
+BUILTIN(__builtin_HEXAGON_S2_asl_r_r_sat,"iii","")
+BUILTIN(__builtin_HEXAGON_F2_conv_sf2d,"LLif","")
+BUILTIN(__builtin_HEXAGON_S2_asr_r_r_nac,"iiii","")
+BUILTIN(__builtin_HEXAGON_F2_dfimm_n,"dUIi","")
+BUILTIN(__builtin_HEXAGON_A4_cmphgt,"iii","")
+BUILTIN(__builtin_HEXAGON_F2_dfimm_p,"dUIi","")
+BUILTIN(__builtin_HEXAGON_M2_mpyud_acc_lh_s1,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_vcmpy_s1_sat_r,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M4_mpyri_addr_u2,"iiUIii","")
+BUILTIN(__builtin_HEXAGON_M2_vcmpy_s1_sat_i,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_lsl_r_p_nac,"LLiLLiLLii","")
+BUILTIN(__builtin_HEXAGON_M5_vrmacbuu,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S5_asrhub_rnd_sat_goodsyntax,"iLLiUIi","")
+BUILTIN(__builtin_HEXAGON_S2_vspliceib,"LLiLLiLLiUIi","")
+BUILTIN(__builtin_HEXAGON_M2_dpmpyss_acc_s0,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_cnacs_s1,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_cnacs_s0,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_A2_maxu,"Uiii","")
+BUILTIN(__builtin_HEXAGON_A2_maxp,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_andir,"iiIi","")
+BUILTIN(__builtin_HEXAGON_F2_sfrecipa,"fff","")
+BUILTIN(__builtin_HEXAGON_A2_combineii,"LLiIiIi","")
+BUILTIN(__builtin_HEXAGON_A4_orn,"iii","")
+BUILTIN(__builtin_HEXAGON_A4_cmpbgtui,"iiUIi","")
+BUILTIN(__builtin_HEXAGON_S2_lsr_r_r_or,"iiii","")
+BUILTIN(__builtin_HEXAGON_A4_vcmpbeqi,"iLLiUIi","")
+BUILTIN(__builtin_HEXAGON_S2_lsl_r_r,"iii","")
+BUILTIN(__builtin_HEXAGON_S2_lsl_r_p,"LLiLLii","")
+BUILTIN(__builtin_HEXAGON_A2_or,"iii","")
+BUILTIN(__builtin_HEXAGON_F2_dfcmpeq,"idd","")
+BUILTIN(__builtin_HEXAGON_C2_cmpeq,"iii","")
+BUILTIN(__builtin_HEXAGON_A2_tfrp,"LLiLLi","")
+BUILTIN(__builtin_HEXAGON_C4_and_andn,"iiii","")
+BUILTIN(__builtin_HEXAGON_S2_vsathub_nopack,"LLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_satuh,"ii","")
+BUILTIN(__builtin_HEXAGON_A2_satub,"ii","")
+BUILTIN(__builtin_HEXAGON_M2_vrcmpys_s1,"LLiLLii","")
+BUILTIN(__builtin_HEXAGON_S4_or_ori,"iiiIi","")
+BUILTIN(__builtin_HEXAGON_C4_fastcorner9_not,"iii","")
+BUILTIN(__builtin_HEXAGON_A2_tfrih,"iiUIi","")
+BUILTIN(__builtin_HEXAGON_A2_tfril,"iiUIi","")
+BUILTIN(__builtin_HEXAGON_M4_mpyri_addr,"iiiUIi","")
+BUILTIN(__builtin_HEXAGON_S2_vtrunehb,"iLLi","")
+BUILTIN(__builtin_HEXAGON_A2_vabsw,"LLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_vabsh,"LLiLLi","")
+BUILTIN(__builtin_HEXAGON_F2_sfsub,"fff","")
+BUILTIN(__builtin_HEXAGON_C2_muxii,"iiIiIi","")
+BUILTIN(__builtin_HEXAGON_C2_muxir,"iiiIi","")
+BUILTIN(__builtin_HEXAGON_A2_swiz,"ii","")
+BUILTIN(__builtin_HEXAGON_S2_asr_i_p_and,"LLiLLiLLiUIi","")
+BUILTIN(__builtin_HEXAGON_M2_cmpyrsc_s0,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_cmpyrsc_s1,"iii","")
+BUILTIN(__builtin_HEXAGON_A2_vraddub,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A4_tlbmatch,"iLLii","")
+BUILTIN(__builtin_HEXAGON_F2_conv_df2w_chop,"id","")
+BUILTIN(__builtin_HEXAGON_A2_and,"iii","")
+BUILTIN(__builtin_HEXAGON_S2_lsr_r_p_and,"LLiLLiLLii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_nac_sat_ll_s1,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_nac_sat_ll_s0,"iiii","")
+BUILTIN(__builtin_HEXAGON_S4_extract,"iiUIiUIi","")
+BUILTIN(__builtin_HEXAGON_A2_vcmpweq,"iLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_acci,"iiii","")
+BUILTIN(__builtin_HEXAGON_S2_lsr_i_p_acc,"LLiLLiLLiUIi","")
+BUILTIN(__builtin_HEXAGON_S2_lsr_i_p_or,"LLiLLiLLiUIi","")
+BUILTIN(__builtin_HEXAGON_F2_conv_ud2sf,"fLLi","")
+BUILTIN(__builtin_HEXAGON_A2_tfr,"ii","")
+BUILTIN(__builtin_HEXAGON_S2_asr_i_p_or,"LLiLLiLLiUIi","")
+BUILTIN(__builtin_HEXAGON_A2_subri,"iIii","")
+BUILTIN(__builtin_HEXAGON_A4_vrmaxuw,"LLiLLiLLii","")
+BUILTIN(__builtin_HEXAGON_M5_vmpybuu,"LLiii","")
+BUILTIN(__builtin_HEXAGON_A4_vrmaxuh,"LLiLLiLLii","")
+BUILTIN(__builtin_HEXAGON_S2_asl_i_vw,"LLiLLiUIi","")
+BUILTIN(__builtin_HEXAGON_A2_vavgw,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_brev,"ii","")
+BUILTIN(__builtin_HEXAGON_A2_vavgh,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_clrbit_i,"iiUIi","")
+BUILTIN(__builtin_HEXAGON_S2_asl_i_vh,"LLiLLiUIi","")
+BUILTIN(__builtin_HEXAGON_S2_lsr_i_r_or,"iiiUIi","")
+BUILTIN(__builtin_HEXAGON_S2_lsl_r_r_nac,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mmpyl_rs1,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mpyud_hl_s1,"ULLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mmpyl_s0,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mmpyl_s1,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_naccii,"iiiIi","")
+BUILTIN(__builtin_HEXAGON_S2_vrndpackwhs,"iLLi","")
+BUILTIN(__builtin_HEXAGON_S2_vtrunewh,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_dpmpyss_nac_s0,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyd_ll_s0,"LLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyd_ll_s1,"LLiii","")
+BUILTIN(__builtin_HEXAGON_M4_mac_up_s1_sat,"iiii","")
+BUILTIN(__builtin_HEXAGON_S4_vrcrotate_acc,"LLiLLiLLiiUIi","")
+BUILTIN(__builtin_HEXAGON_F2_conv_uw2df,"di","")
+BUILTIN(__builtin_HEXAGON_A2_vaddubs,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_asr_r_r_acc,"iiii","")
+BUILTIN(__builtin_HEXAGON_A2_orir,"iiIi","")
+BUILTIN(__builtin_HEXAGON_A2_andp,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_lfsp,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_min,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_mpysmi,"iiIi","")
+BUILTIN(__builtin_HEXAGON_M2_vcmpy_s0_sat_r,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mpyu_acc_ll_s1,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyu_acc_ll_s0,"iiii","")
+BUILTIN(__builtin_HEXAGON_S2_asr_r_svw_trun,"iLLii","")
+BUILTIN(__builtin_HEXAGON_M2_mmpyh_s0,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mmpyh_s1,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_F2_conv_sf2df,"df","")
+BUILTIN(__builtin_HEXAGON_S2_vtrunohb,"iLLi","")
+BUILTIN(__builtin_HEXAGON_F2_conv_sf2d_chop,"LLif","")
+BUILTIN(__builtin_HEXAGON_M2_mpyd_lh_s0,"LLiii","")
+BUILTIN(__builtin_HEXAGON_F2_conv_df2w,"id","")
+BUILTIN(__builtin_HEXAGON_S5_asrhub_sat,"iLLiUIi","")
+BUILTIN(__builtin_HEXAGON_S2_asl_i_r_xacc,"iiiUIi","")
+BUILTIN(__builtin_HEXAGON_F2_conv_df2d,"LLid","")
+BUILTIN(__builtin_HEXAGON_M2_mmaculs_s1,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mmaculs_s0,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_svadduhs,"iii","")
+BUILTIN(__builtin_HEXAGON_F2_conv_sf2w_chop,"if","")
+BUILTIN(__builtin_HEXAGON_S2_svsathub,"ii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyd_rnd_hl_s1,"LLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyd_rnd_hl_s0,"LLiii","")
+BUILTIN(__builtin_HEXAGON_S2_setbit_r,"iii","")
+BUILTIN(__builtin_HEXAGON_A2_vavghr,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_F2_sffma_sc,"ffffi","")
+BUILTIN(__builtin_HEXAGON_F2_dfclass,"idUIi","")
+BUILTIN(__builtin_HEXAGON_F2_conv_df2ud,"LLid","")
+BUILTIN(__builtin_HEXAGON_F2_conv_df2uw,"id","")
+BUILTIN(__builtin_HEXAGON_M2_cmpyrs_s0,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_cmpyrs_s1,"iii","")
+BUILTIN(__builtin_HEXAGON_C4_cmpltei,"iiIi","")
+BUILTIN(__builtin_HEXAGON_C4_cmplteu,"iii","")
+BUILTIN(__builtin_HEXAGON_A2_vsubb_map,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_subh_l16_ll,"iii","")
+BUILTIN(__builtin_HEXAGON_S2_asr_i_r_rnd,"iiUIi","")
+BUILTIN(__builtin_HEXAGON_M2_vrmpy_s0,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mpyd_rnd_hh_s1,"LLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyd_rnd_hh_s0,"LLiii","")
+BUILTIN(__builtin_HEXAGON_A2_minup,"ULLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_valignrb,"LLiLLiLLii","")
+BUILTIN(__builtin_HEXAGON_S2_asr_r_p_acc,"LLiLLiLLii","")
+BUILTIN(__builtin_HEXAGON_M2_mmpyl_rs0,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_vrcmaci_s0,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_vaddub,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_combine_lh,"iii","")
+BUILTIN(__builtin_HEXAGON_M5_vdmacbsu,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_combine_ll,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyud_hl_s0,"ULLiii","")
+BUILTIN(__builtin_HEXAGON_M2_vrcmpyi_s0c,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_asr_i_p_rnd,"LLiLLiUIi","")
+BUILTIN(__builtin_HEXAGON_A2_addpsat,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_svaddhs,"iii","")
+BUILTIN(__builtin_HEXAGON_S4_ori_lsr_ri,"iUIiiUIi","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_sat_rnd_ll_s1,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_sat_rnd_ll_s0,"iii","")
+BUILTIN(__builtin_HEXAGON_A2_vminw,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_vminh,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_vrcmpyr_s0,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_vminb,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_vcmac_s0_sat_i,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mpyud_lh_s0,"ULLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyud_lh_s1,"ULLiii","")
+BUILTIN(__builtin_HEXAGON_S2_asl_r_r_or,"iiii","")
+BUILTIN(__builtin_HEXAGON_S4_lsli,"iIii","")
+BUILTIN(__builtin_HEXAGON_S2_lsl_r_vw,"LLiLLii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_hh_s1,"iii","")
+BUILTIN(__builtin_HEXAGON_M4_vrmpyeh_s0,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M4_vrmpyeh_s1,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_nac_lh_s0,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_nac_lh_s1,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_vraddh,"iLLiLLi","")
+BUILTIN(__builtin_HEXAGON_C2_tfrrp,"ii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_acc_sat_ll_s0,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_acc_sat_ll_s1,"iiii","")
+BUILTIN(__builtin_HEXAGON_S2_vtrunowh,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_abs,"ii","")
+BUILTIN(__builtin_HEXAGON_A4_cmpbeq,"iii","")
+BUILTIN(__builtin_HEXAGON_A2_negp,"LLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_asl_i_r_sat,"iiUIi","")
+BUILTIN(__builtin_HEXAGON_A2_addh_l16_sat_hl,"iii","")
+BUILTIN(__builtin_HEXAGON_S2_vsatwuh,"iLLi","")
+BUILTIN(__builtin_HEXAGON_F2_dfcmpgt,"idd","")
+BUILTIN(__builtin_HEXAGON_S2_svsathb,"ii","")
+BUILTIN(__builtin_HEXAGON_C2_cmpgtup,"iLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A4_cround_ri,"iiUIi","")
+BUILTIN(__builtin_HEXAGON_S4_clbpaddi,"iLLiIi","")
+BUILTIN(__builtin_HEXAGON_A4_cround_rr,"iii","")
+BUILTIN(__builtin_HEXAGON_C2_mux,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_dpmpyuu_s0,"ULLiii","")
+BUILTIN(__builtin_HEXAGON_S2_shuffeb,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_vminuw,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_vaddhs,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_insert_rp,"iiiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_vminuh,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_vminub,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_extractu,"iiUIiUIi","")
+BUILTIN(__builtin_HEXAGON_A2_svsubh,"iii","")
+BUILTIN(__builtin_HEXAGON_S4_clbaddi,"iiIi","")
+BUILTIN(__builtin_HEXAGON_F2_sffms,"ffff","")
+BUILTIN(__builtin_HEXAGON_S2_vsxtbh,"LLii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyud_nac_ll_s1,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyud_nac_ll_s0,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_A2_subp,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_vmpy2es_s1,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_vmpy2es_s0,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S4_parity,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_acc_hh_s1,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_acc_hh_s0,"iiii","")
+BUILTIN(__builtin_HEXAGON_S4_addi_asl_ri,"iUIiiUIi","")
+BUILTIN(__builtin_HEXAGON_M2_mpyd_nac_hh_s1,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyd_nac_hh_s0,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_S2_asr_i_r_nac,"iiiUIi","")
+BUILTIN(__builtin_HEXAGON_A4_cmpheqi,"iiIi","")
+BUILTIN(__builtin_HEXAGON_S2_lsr_r_p_xor,"LLiLLiLLii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_acc_hl_s1,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_acc_hl_s0,"iiii","")
+BUILTIN(__builtin_HEXAGON_F2_conv_sf2ud_chop,"LLif","")
+BUILTIN(__builtin_HEXAGON_C2_cmpgeui,"iiUIi","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_acc_sat_hh_s0,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_acc_sat_hh_s1,"iiii","")
+BUILTIN(__builtin_HEXAGON_S2_asl_r_p_and,"LLiLLiLLii","")
+BUILTIN(__builtin_HEXAGON_A2_addh_h16_sat_lh,"iii","")
+BUILTIN(__builtin_HEXAGON_A2_addh_h16_sat_ll,"iii","")
+BUILTIN(__builtin_HEXAGON_M4_nac_up_s1_sat,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyud_nac_lh_s1,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpyud_nac_lh_s0,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_A4_round_ri_sat,"iiUIi","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_nac_hl_s0,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_nac_hl_s1,"iiii","")
+BUILTIN(__builtin_HEXAGON_A2_vavghcr,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mmacls_rs0,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_mmacls_rs1,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M2_cmaci_s0,"LLiLLiii","")
+BUILTIN(__builtin_HEXAGON_S2_setbit_i,"iiUIi","")
+BUILTIN(__builtin_HEXAGON_S2_asl_i_p_or,"LLiLLiLLiUIi","")
+BUILTIN(__builtin_HEXAGON_A4_andn,"iii","")
+BUILTIN(__builtin_HEXAGON_M5_vrmpybsu,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S2_vrndpackwh,"iLLi","")
+BUILTIN(__builtin_HEXAGON_M2_vcmac_s0_sat_r,"LLiLLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_vmaxuw,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_C2_bitsclr,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_xor_xacc,"iiii","")
+BUILTIN(__builtin_HEXAGON_A4_vcmpbgtui,"iLLiUIi","")
+BUILTIN(__builtin_HEXAGON_A4_ornp,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A2_tfrpi,"LLiIi","")
+BUILTIN(__builtin_HEXAGON_C4_and_or,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_nac_sat_hh_s1,"iiii","")
+BUILTIN(__builtin_HEXAGON_M2_mpy_nac_sat_hh_s0,"iiii","")
+BUILTIN(__builtin_HEXAGON_A2_subh_h16_sat_ll,"iii","")
+BUILTIN(__builtin_HEXAGON_A2_subh_h16_sat_lh,"iii","")
+BUILTIN(__builtin_HEXAGON_M2_vmpy2su_s1,"LLiii","")
+BUILTIN(__builtin_HEXAGON_M2_vmpy2su_s0,"LLiii","")
+BUILTIN(__builtin_HEXAGON_S2_asr_i_p_acc,"LLiLLiLLiUIi","")
+BUILTIN(__builtin_HEXAGON_C4_nbitsclri,"iiUIi","")
+BUILTIN(__builtin_HEXAGON_S2_lsr_i_vh,"LLiLLiUIi","")
+BUILTIN(__builtin_HEXAGON_S2_lsr_i_p_xacc,"LLiLLiLLiUIi","")
+
+// V55 Scalar Instructions.
+
+BUILTIN(__builtin_HEXAGON_A5_ACS,"LLiLLiLLiLLi","")
+
+// V60 Scalar Instructions.
+
+BUILTIN(__builtin_HEXAGON_S6_rol_i_p_and,"LLiLLiLLiUIi","")
+BUILTIN(__builtin_HEXAGON_S6_rol_i_r_xacc,"iiiUIi","")
+BUILTIN(__builtin_HEXAGON_S6_rol_i_r_and,"iiiUIi","")
+BUILTIN(__builtin_HEXAGON_S6_rol_i_r_acc,"iiiUIi","")
+BUILTIN(__builtin_HEXAGON_S6_rol_i_p_xacc,"LLiLLiLLiUIi","")
+BUILTIN(__builtin_HEXAGON_S6_rol_i_p,"LLiLLiUIi","")
+BUILTIN(__builtin_HEXAGON_S6_rol_i_p_nac,"LLiLLiLLiUIi","")
+BUILTIN(__builtin_HEXAGON_S6_rol_i_p_acc,"LLiLLiLLiUIi","")
+BUILTIN(__builtin_HEXAGON_S6_rol_i_r_or,"iiiUIi","")
+BUILTIN(__builtin_HEXAGON_S6_rol_i_r,"iiUIi","")
+BUILTIN(__builtin_HEXAGON_S6_rol_i_r_nac,"iiiUIi","")
+BUILTIN(__builtin_HEXAGON_S6_rol_i_p_or,"LLiLLiLLiUIi","")
+
+// V62 Scalar Instructions.
+
+BUILTIN(__builtin_HEXAGON_S6_vtrunehb_ppp,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_V6_ldntnt0,"V16ii","")
+BUILTIN(__builtin_HEXAGON_M6_vabsdiffub,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S6_vtrunohb_ppp,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_M6_vabsdiffb,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_A6_vminub_RdP,"LLiLLiLLi","")
+BUILTIN(__builtin_HEXAGON_S6_vsplatrbp,"LLii","")
+
+// V65 Scalar Instructions.
+
+BUILTIN(__builtin_HEXAGON_A6_vcmpbeq_notany,"iLLiLLi","")
+
+// V66 Scalar Instructions.
+
+BUILTIN(__builtin_HEXAGON_F2_dfsub,"ddd","")
+BUILTIN(__builtin_HEXAGON_F2_dfadd,"ddd","")
+BUILTIN(__builtin_HEXAGON_M2_mnaci,"iiii","")
+BUILTIN(__builtin_HEXAGON_S2_mask,"iUIiUIi","")
+
+// V60 HVX Instructions.
+
+BUILTIN(__builtin_HEXAGON_V6_veqb_or,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_veqb_or_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vminub,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vminub_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vaslw_acc,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vaslw_acc_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyhvsrs,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyhvsrs_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vsathub,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vsathub_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddh_dv,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddh_dv_128B,"V64iV64iV64i","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpybusi,"V32iV32iiUIi","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpybusi_128B,"V64iV64iiUIi","")
+BUILTIN(__builtin_HEXAGON_V6_vshufoh,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vshufoh_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vasrwv,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vasrwv_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpyhsuisat,"V16iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpyhsuisat_128B,"V32iV64ii","")
+BUILTIN(__builtin_HEXAGON_V6_vrsadubi_acc,"V32iV32iV32iiUIi","")
+BUILTIN(__builtin_HEXAGON_V6_vrsadubi_acc_128B,"V64iV64iV64iiUIi","")
+BUILTIN(__builtin_HEXAGON_V6_vnavgw,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vnavgw_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vnavgh,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vnavgh_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vavgub,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vavgub_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubb,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubb_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtw_and,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtw_and_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vavgubrnd,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vavgubrnd_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpybusv,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpybusv_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubbnq,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubbnq_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vroundhb,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vroundhb_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vadduhsat_dv,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vadduhsat_dv_128B,"V64iV64iV64i","")
+BUILTIN(__builtin_HEXAGON_V6_vsububsat,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vsububsat_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpabus_acc,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpabus_acc_128B,"V64iV64iV64ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmux,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmux_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyhus,"V32iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyhus_128B,"V64iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vpackeb,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vpackeb_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubhnq,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubhnq_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vavghrnd,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vavghrnd_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vtran2x2_map,"V16iV16iv*i","")
+BUILTIN(__builtin_HEXAGON_V6_vtran2x2_map_128B,"V32iV32iv*i","")
+BUILTIN(__builtin_HEXAGON_V6_vdelta,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vdelta_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtuh_and,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtuh_and_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vtmpyhb,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vtmpyhb_128B,"V64iV64ii","")
+BUILTIN(__builtin_HEXAGON_V6_vpackob,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vpackob_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmaxh,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmaxh_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vtmpybus_acc,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vtmpybus_acc_128B,"V64iV64iV64ii","")
+BUILTIN(__builtin_HEXAGON_V6_vsubuhsat,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubuhsat_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vasrw_acc,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vasrw_acc_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_pred_or,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_pred_or_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpyub_acc,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpyub_acc_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_lo,"V16iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_lo_128B,"V32iV64i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubb_dv,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubb_dv_128B,"V64iV64iV64i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubhsat_dv,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubhsat_dv_128B,"V64iV64iV64i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyiwh,"V16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyiwh_128B,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyiwb,"V16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyiwb_128B,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_ldu0,"V16ii","")
+BUILTIN(__builtin_HEXAGON_V6_ldu0_128B,"V32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vgtuh_xor,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtuh_xor_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vgth_or,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vgth_or_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vavgh,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vavgh_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vlalignb,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vlalignb_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vsh,"V32iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vsh_128B,"V64iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_pred_and_n,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_pred_and_n_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vsb,"V32iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vsb_128B,"V64iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vroundwuh,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vroundwuh_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vasrhv,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vasrhv_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vshuffh,"V16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vshuffh_128B,"V32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddhsat_dv,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddhsat_dv_128B,"V64iV64iV64i","")
+BUILTIN(__builtin_HEXAGON_V6_vnavgub,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vnavgub_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpybv,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpybv_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vnormamth,"V16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vnormamth_128B,"V32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpyhb,"V16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpyhb_128B,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vavguh,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vavguh_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vlsrwv,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vlsrwv_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vlsrhv,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vlsrhv_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpyhisat,"V16iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpyhisat_128B,"V32iV64ii","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpyhvsat,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpyhvsat_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddw,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddw_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vzh,"V32iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vzh_128B,"V64iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddh,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddh_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmaxub,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmaxub_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyhv_acc,"V32iV32iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyhv_acc_128B,"V64iV64iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vadduhsat,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vadduhsat_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vshufoeh,"V32iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vshufoeh_128B,"V64iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyuhv_acc,"V32iV32iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyuhv_acc_128B,"V64iV64iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_veqh,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_veqh_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpabuuv,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpabuuv_128B,"V64iV64iV64i","")
+BUILTIN(__builtin_HEXAGON_V6_vasrwhsat,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vasrwhsat_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vminuh,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vminuh_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vror,"V16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vror_128B,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyowh_rnd_sacc,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyowh_rnd_sacc_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmaxuh,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmaxuh_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vabsh_sat,"V16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vabsh_sat_128B,"V32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_pred_or_n,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_pred_or_n_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vdealb,"V16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vdealb_128B,"V32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpybusv,"V32iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpybusv_128B,"V64iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vzb,"V32iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vzb_128B,"V64iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpybus_dv,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpybus_dv_128B,"V64iV64ii","")
+BUILTIN(__builtin_HEXAGON_V6_vaddbq,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddbq_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddb,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddb_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddwq,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddwq_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vasrhubrndsat,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vasrhubrndsat_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vasrhubsat,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vasrhubsat_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vshufoeb,"V32iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vshufoeb_128B,"V64iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vpackhub_sat,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vpackhub_sat_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyiwh_acc,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyiwh_acc_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vtmpyb,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vtmpyb_128B,"V64iV64ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpabusv,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpabusv_128B,"V64iV64iV64i","")
+BUILTIN(__builtin_HEXAGON_V6_pred_and,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_pred_and_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubwnq,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubwnq_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vpackwuh_sat,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vpackwuh_sat_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vswap,"V32iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vswap_128B,"V64iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpyubv_acc,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpyubv_acc_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtb_and,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtb_and_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vaslw,"V16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vaslw_128B,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vpackhb_sat,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vpackhb_sat_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyih_acc,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyih_acc_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vshuffvdd,"V32iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vshuffvdd_128B,"V64iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vaddb_dv,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddb_dv_128B,"V64iV64iV64i","")
+BUILTIN(__builtin_HEXAGON_V6_vunpackub,"V32iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vunpackub_128B,"V64iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtuw,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtuw_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vlutvwh,"V32iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vlutvwh_128B,"V64iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vgtub,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtub_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyowh,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyowh_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyieoh,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyieoh_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_extractw,"iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_extractw_128B,"iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vavgwrnd,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vavgwrnd_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpyhsat_acc,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpyhsat_acc_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vgtub_xor,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtub_xor_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyub,"V32iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyub_128B,"V64iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyuh,"V32iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyuh_128B,"V64iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vunpackob,"V32iV32iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vunpackob_128B,"V64iV64iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpahb,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpahb_128B,"V64iV64ii","")
+BUILTIN(__builtin_HEXAGON_V6_veqw_or,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_veqw_or_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vandqrt,"V16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vandqrt_128B,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vxor,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vxor_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vasrwhrndsat,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vasrwhrndsat_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyhsat_acc,"V32iV32iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyhsat_acc_128B,"V64iV64iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpybus_acc,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpybus_acc_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vsubhw,"V32iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubhw_128B,"V64iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vdealb4w,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vdealb4w_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyowh_sacc,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyowh_sacc_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpybv,"V32iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpybv_128B,"V64iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vabsdiffh,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vabsdiffh_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vshuffob,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vshuffob_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyub_acc,"V32iV32iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyub_acc_128B,"V64iV64iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vnormamtw,"V16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vnormamtw_128B,"V32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vunpackuh,"V32iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vunpackuh_128B,"V64iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtuh_or,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtuh_or_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyiewuh_acc,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyiewuh_acc_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vunpackoh,"V32iV32iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vunpackoh_128B,"V64iV64iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpyhsat,"V16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpyhsat_128B,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyubv,"V32iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyubv_128B,"V64iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyhss,"V16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyhss_128B,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_hi,"V16iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_hi_128B,"V32iV64i","")
+BUILTIN(__builtin_HEXAGON_V6_vasrwuhsat,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vasrwuhsat_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_veqw,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_veqw_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vdsaduh,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vdsaduh_128B,"V64iV64ii","")
+BUILTIN(__builtin_HEXAGON_V6_vsubw,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubw_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubw_dv,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubw_dv_128B,"V64iV64iV64i","")
+BUILTIN(__builtin_HEXAGON_V6_veqb_and,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_veqb_and_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyih,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyih_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vtmpyb_acc,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vtmpyb_acc_128B,"V64iV64iV64ii","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpybus,"V16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpybus_128B,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpybus_acc,"V32iV32iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpybus_acc_128B,"V64iV64iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vgth_xor,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vgth_xor_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubhsat,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubhsat_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpyubi_acc,"V32iV32iV32iiUIi","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpyubi_acc_128B,"V64iV64iV64iiUIi","")
+BUILTIN(__builtin_HEXAGON_V6_vabsw,"V16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vabsw_128B,"V32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddwsat_dv,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddwsat_dv_128B,"V64iV64iV64i","")
+BUILTIN(__builtin_HEXAGON_V6_vlsrw,"V16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vlsrw_128B,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vabsh,"V16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vabsh_128B,"V32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vlsrh,"V16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vlsrh_128B,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_valignb,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_valignb_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vsubhq,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubhq_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vpackoh,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vpackoh_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpybus_acc,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpybus_acc_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpyhvsat_acc,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpyhvsat_acc_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpybv_acc,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpybv_acc_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddhsat,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddhsat_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vcombine,"V32iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vcombine_128B,"V64iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vandqrt_acc,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vandqrt_acc_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vaslhv,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vaslhv_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vinsertwr,"V16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vinsertwr_128B,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vsubh_dv,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubh_dv_128B,"V64iV64iV64i","")
+BUILTIN(__builtin_HEXAGON_V6_vshuffb,"V16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vshuffb_128B,"V32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vand,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vand_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyhv,"V32iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyhv_128B,"V64iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpyhsuisat_acc,"V16iV16iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpyhsuisat_acc_128B,"V32iV32iV64ii","")
+BUILTIN(__builtin_HEXAGON_V6_vsububsat_dv,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vsububsat_dv_128B,"V64iV64iV64i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtb_xor,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtb_xor_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vdsaduh_acc,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vdsaduh_acc_128B,"V64iV64iV64ii","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpyub,"V16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpyub_128B,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyuh_acc,"V32iV32iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyuh_acc_128B,"V64iV64iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vcl0h,"V16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vcl0h_128B,"V32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyhus_acc,"V32iV32iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyhus_acc_128B,"V64iV64iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpybv_acc,"V32iV32iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpybv_acc_128B,"V64iV64iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vrsadubi,"V32iV32iiUIi","")
+BUILTIN(__builtin_HEXAGON_V6_vrsadubi_128B,"V64iV64iiUIi","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpyhb_dv_acc,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpyhb_dv_acc_128B,"V64iV64iV64ii","")
+BUILTIN(__builtin_HEXAGON_V6_vshufeh,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vshufeh_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyewuh,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyewuh_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyhsrs,"V16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyhsrs_128B,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpybus_dv_acc,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpybus_dv_acc_128B,"V64iV64iV64ii","")
+BUILTIN(__builtin_HEXAGON_V6_vaddubh,"V32iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddubh_128B,"V64iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vasrwh,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vasrwh_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_ld0,"V16ii","")
+BUILTIN(__builtin_HEXAGON_V6_ld0_128B,"V32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vpopcounth,"V16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vpopcounth_128B,"V32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_ldnt0,"V16ii","")
+BUILTIN(__builtin_HEXAGON_V6_ldnt0_128B,"V32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vgth_and,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vgth_and_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddubsat_dv,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddubsat_dv_128B,"V64iV64iV64i","")
+BUILTIN(__builtin_HEXAGON_V6_vpackeh,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vpackeh_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyh,"V32iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyh_128B,"V64iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vminh,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vminh_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_pred_scalar2,"V16ii","")
+BUILTIN(__builtin_HEXAGON_V6_pred_scalar2_128B,"V32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vdealh,"V16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vdealh_128B,"V32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vpackwh_sat,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vpackwh_sat_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vaslh,"V16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vaslh_128B,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vgtuw_and,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtuw_and_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vor,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vor_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vlutvvb,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vlutvvb_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyiowh,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyiowh_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vlutvvb_oracc,"V16iV16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vlutvvb_oracc_128B,"V32iV32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vandvrt,"V16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vandvrt_128B,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_veqh_xor,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_veqh_xor_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vadduhw,"V32iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vadduhw_128B,"V64iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vcl0w,"V16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vcl0w_128B,"V32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyihb,"V16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyihb_128B,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vtmpybus,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vtmpybus_128B,"V64iV64ii","")
+BUILTIN(__builtin_HEXAGON_V6_vd0,"V16i","")
+BUILTIN(__builtin_HEXAGON_V6_vd0_128B,"V32i","")
+BUILTIN(__builtin_HEXAGON_V6_veqh_or,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_veqh_or_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtw_or,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtw_or_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpybus,"V16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpybus_128B,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vgtub_or,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtub_or_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpybus,"V32iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpybus_128B,"V64iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpyhb_acc,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpyhb_acc_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vandvrt_acc,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vandvrt_acc_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vassign,"V16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vassign_128B,"V32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddwnq,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddwnq_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtub_and,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtub_and_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpyhb_dv,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpyhb_dv_128B,"V64iV64ii","")
+BUILTIN(__builtin_HEXAGON_V6_vunpackb,"V32iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vunpackb_128B,"V64iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vunpackh,"V32iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vunpackh_128B,"V64iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpahb_acc,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpahb_acc_128B,"V64iV64iV64ii","")
+BUILTIN(__builtin_HEXAGON_V6_vaddbnq,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddbnq_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vlalignbi,"V16iV16iV16iUIi","")
+BUILTIN(__builtin_HEXAGON_V6_vlalignbi_128B,"V32iV32iV32iUIi","")
+BUILTIN(__builtin_HEXAGON_V6_vsatwh,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vsatwh_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtuh,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtuh_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyihb_acc,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyihb_acc_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpybusv_acc,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpybusv_acc_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vrdelta,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vrdelta_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vroundwh,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vroundwh_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddw_dv,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddw_dv_128B,"V64iV64iV64i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyiwb_acc,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyiwb_acc_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vsubbq,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubbq_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_veqh_and,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_veqh_and_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_valignbi,"V16iV16iV16iUIi","")
+BUILTIN(__builtin_HEXAGON_V6_valignbi_128B,"V32iV32iV32iUIi","")
+BUILTIN(__builtin_HEXAGON_V6_vaddwsat,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddwsat_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_veqw_and,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_veqw_and_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vabsdiffub,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vabsdiffub_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vshuffeb,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vshuffeb_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vabsdiffuh,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vabsdiffuh_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_veqw_xor,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_veqw_xor_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vgth,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vgth_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtuw_xor,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtuw_xor_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtb,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtb_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtw,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtw_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubwq,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubwq_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vnot,"V16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vnot_128B,"V32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtb_or,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtb_or_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtuw_or,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtuw_or_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddubsat,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddubsat_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmaxw,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmaxw_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vaslwv,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vaslwv_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vabsw_sat,"V16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vabsw_sat_128B,"V32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubwsat_dv,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubwsat_dv_128B,"V64iV64iV64i","")
+BUILTIN(__builtin_HEXAGON_V6_vroundhub,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vroundhub_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpyhisat_acc,"V16iV16iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpyhisat_acc_128B,"V32iV32iV64ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpabus,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpabus_128B,"V64iV64ii","")
+BUILTIN(__builtin_HEXAGON_V6_vassignp,"V32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vassignp_128B,"V64iV64i","")
+BUILTIN(__builtin_HEXAGON_V6_veqb,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_veqb_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vsububh,"V32iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vsububh_128B,"V64iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_lvsplatw,"V16ii","")
+BUILTIN(__builtin_HEXAGON_V6_lvsplatw_128B,"V32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vaddhnq,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddhnq_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpyhsusat,"V16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpyhsusat_128B,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_pred_not,"V16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_pred_not_128B,"V32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vlutvwh_oracc,"V32iV32iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vlutvwh_oracc_128B,"V64iV64iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyiewh_acc,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyiewh_acc_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vdealvdd,"V32iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vdealvdd_128B,"V64iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vavgw,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vavgw_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpyhsusat_acc,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vdmpyhsusat_acc_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vgtw_xor,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vgtw_xor_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vtmpyhb_acc,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vtmpyhb_acc_128B,"V64iV64iV64ii","")
+BUILTIN(__builtin_HEXAGON_V6_vaddhw,"V32iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddhw_128B,"V64iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddhq,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddhq_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpyubv,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpyubv_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubh,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubh_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpyubi,"V32iV32iiUIi","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpyubi_128B,"V64iV64iiUIi","")
+BUILTIN(__builtin_HEXAGON_V6_vminw,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vminw_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyubv_acc,"V32iV32iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyubv_acc_128B,"V64iV64iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_pred_xor,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_pred_xor_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_veqb_xor,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_veqb_xor_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyiewuh,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyiewuh_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpybusv_acc,"V32iV32iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpybusv_acc_128B,"V64iV64iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vavguhrnd,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vavguhrnd_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyowh_rnd,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyowh_rnd_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubwsat,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubwsat_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubuhw,"V32iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubuhw_128B,"V64iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpybusi_acc,"V32iV32iV32iiUIi","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpybusi_acc_128B,"V64iV64iV64iiUIi","")
+BUILTIN(__builtin_HEXAGON_V6_vasrw,"V16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vasrw_128B,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vasrh,"V16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vasrh_128B,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyuhv,"V32iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyuhv_128B,"V64iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vasrhbrndsat,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vasrhbrndsat_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vsubuhsat_dv,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubuhsat_dv_128B,"V64iV64iV64i","")
+BUILTIN(__builtin_HEXAGON_V6_vabsdiffw,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vabsdiffw_128B,"V32iV32iV32i","")
+
+// V62 HVX Instructions.
+
+BUILTIN(__builtin_HEXAGON_V6_vandnqrt_acc,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vandnqrt_acc_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vaddclbh,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddclbh_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyowh_64_acc,"V32iV32iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyowh_64_acc_128B,"V64iV64iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyewuh_64,"V32iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyewuh_64_128B,"V64iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vsatuwuh,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vsatuwuh_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_shuffeqh,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_shuffeqh_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_shuffeqw,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_shuffeqw_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_ldcnpnt0,"V16iii","")
+BUILTIN(__builtin_HEXAGON_V6_ldcnpnt0_128B,"V32iii","")
+BUILTIN(__builtin_HEXAGON_V6_vsubcarry,"V16iV16iV16iv*","")
+BUILTIN(__builtin_HEXAGON_V6_vsubcarry_128B,"V32iV32iV32iv*","")
+BUILTIN(__builtin_HEXAGON_V6_vasrhbsat,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vasrhbsat_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vminb,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vminb_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpauhb_acc,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpauhb_acc_128B,"V64iV64iV64ii","")
+BUILTIN(__builtin_HEXAGON_V6_vaddhw_acc,"V32iV32iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddhw_acc_128B,"V64iV64iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vlsrb,"V16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vlsrb_128B,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vlutvwhi,"V32iV16iV16iUIi","")
+BUILTIN(__builtin_HEXAGON_V6_vlutvwhi_128B,"V64iV32iV32iUIi","")
+BUILTIN(__builtin_HEXAGON_V6_vaddububb_sat,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddububb_sat_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubbsat_dv,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubbsat_dv_128B,"V64iV64iV64i","")
+BUILTIN(__builtin_HEXAGON_V6_ldtp0,"V16iii","")
+BUILTIN(__builtin_HEXAGON_V6_ldtp0_128B,"V32iii","")
+BUILTIN(__builtin_HEXAGON_V6_vlutvvb_oracci,"V16iV16iV16iV16iUIi","")
+BUILTIN(__builtin_HEXAGON_V6_vlutvvb_oracci_128B,"V32iV32iV32iV32iUIi","")
+BUILTIN(__builtin_HEXAGON_V6_vsubuwsat_dv,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubuwsat_dv_128B,"V64iV64iV64i","")
+BUILTIN(__builtin_HEXAGON_V6_ldpnt0,"V16iii","")
+BUILTIN(__builtin_HEXAGON_V6_ldpnt0_128B,"V32iii","")
+BUILTIN(__builtin_HEXAGON_V6_vandvnqv,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vandvnqv_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_lvsplatb,"V16ii","")
+BUILTIN(__builtin_HEXAGON_V6_lvsplatb_128B,"V32ii","")
+BUILTIN(__builtin_HEXAGON_V6_lvsplath,"V16ii","")
+BUILTIN(__builtin_HEXAGON_V6_lvsplath_128B,"V32ii","")
+BUILTIN(__builtin_HEXAGON_V6_ldtpnt0,"V16iii","")
+BUILTIN(__builtin_HEXAGON_V6_ldtpnt0_128B,"V32iii","")
+BUILTIN(__builtin_HEXAGON_V6_vlutvwh_nm,"V32iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vlutvwh_nm_128B,"V64iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_ldnpnt0,"V16iii","")
+BUILTIN(__builtin_HEXAGON_V6_ldnpnt0_128B,"V32iii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpauhb,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpauhb_128B,"V64iV64ii","")
+BUILTIN(__builtin_HEXAGON_V6_ldtnp0,"V16iii","")
+BUILTIN(__builtin_HEXAGON_V6_ldtnp0_128B,"V32iii","")
+BUILTIN(__builtin_HEXAGON_V6_vrounduhub,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vrounduhub_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vadduhw_acc,"V32iV32iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vadduhw_acc_128B,"V64iV64iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_ldcp0,"V16iii","")
+BUILTIN(__builtin_HEXAGON_V6_ldcp0_128B,"V32iii","")
+BUILTIN(__builtin_HEXAGON_V6_vadduwsat,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vadduwsat_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_ldtnpnt0,"V16iii","")
+BUILTIN(__builtin_HEXAGON_V6_ldtnpnt0_128B,"V32iii","")
+BUILTIN(__builtin_HEXAGON_V6_vaddbsat,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddbsat_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vandnqrt,"V16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vandnqrt_128B,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyiwub_acc,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyiwub_acc_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmaxb,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vmaxb_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vandvqv,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vandvqv_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddcarry,"V16iV16iV16iv*","")
+BUILTIN(__builtin_HEXAGON_V6_vaddcarry_128B,"V32iV32iV32iv*","")
+BUILTIN(__builtin_HEXAGON_V6_vasrwuhrndsat,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vasrwuhrndsat_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vlutvvbi,"V16iV16iV16iUIi","")
+BUILTIN(__builtin_HEXAGON_V6_vlutvvbi_128B,"V32iV32iV32iUIi","")
+BUILTIN(__builtin_HEXAGON_V6_vsubuwsat,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubuwsat_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddbsat_dv,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddbsat_dv_128B,"V64iV64iV64i","")
+BUILTIN(__builtin_HEXAGON_V6_ldnp0,"V16iii","")
+BUILTIN(__builtin_HEXAGON_V6_ldnp0_128B,"V32iii","")
+BUILTIN(__builtin_HEXAGON_V6_vasruwuhrndsat,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vasruwuhrndsat_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vrounduwuh,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vrounduwuh_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vlutvvb_nm,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vlutvvb_nm_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_pred_scalar2v2,"V16ii","")
+BUILTIN(__builtin_HEXAGON_V6_pred_scalar2v2_128B,"V32ii","")
+BUILTIN(__builtin_HEXAGON_V6_ldp0,"V16iii","")
+BUILTIN(__builtin_HEXAGON_V6_ldp0_128B,"V32iii","")
+BUILTIN(__builtin_HEXAGON_V6_vaddubh_acc,"V32iV32iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddubh_acc_128B,"V64iV64iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddclbw,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddclbw_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_ldcpnt0,"V16iii","")
+BUILTIN(__builtin_HEXAGON_V6_ldcpnt0_128B,"V32iii","")
+BUILTIN(__builtin_HEXAGON_V6_vadduwsat_dv,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vadduwsat_dv_128B,"V64iV64iV64i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyiwub,"V16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyiwub_128B,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vsubububb_sat,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubububb_sat_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_ldcnp0,"V16iii","")
+BUILTIN(__builtin_HEXAGON_V6_ldcnp0_128B,"V32iii","")
+BUILTIN(__builtin_HEXAGON_V6_vlutvwh_oracci,"V32iV32iV16iV16iUIi","")
+BUILTIN(__builtin_HEXAGON_V6_vlutvwh_oracci_128B,"V64iV64iV32iV32iUIi","")
+BUILTIN(__builtin_HEXAGON_V6_vsubbsat,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vsubbsat_128B,"V32iV32iV32i","")
+
+// V65 HVX Instructions.
+
+BUILTIN(__builtin_HEXAGON_V6_vasruhubrndsat,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vasruhubrndsat_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpybub_rtt,"V32iV16iLLi","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpybub_rtt_128B,"V64iV32iLLi","")
+BUILTIN(__builtin_HEXAGON_V6_vmpahhsat,"V16iV16iV16iLLi","")
+BUILTIN(__builtin_HEXAGON_V6_vmpahhsat_128B,"V32iV32iV32iLLi","")
+BUILTIN(__builtin_HEXAGON_V6_vavguwrnd,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vavguwrnd_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vnavgb,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vnavgb_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vasrh_acc,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vasrh_acc_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpauhuhsat,"V16iV16iV16iLLi","")
+BUILTIN(__builtin_HEXAGON_V6_vmpauhuhsat_128B,"V32iV32iV32iLLi","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyh_acc,"V32iV32iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyh_acc_128B,"V64iV64iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpybub_rtt_acc,"V32iV32iV16iLLi","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpybub_rtt_acc_128B,"V64iV64iV32iLLi","")
+BUILTIN(__builtin_HEXAGON_V6_vavgb,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vavgb_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vaslh_acc,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vaslh_acc_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vavguw,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vavguw_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vlut4,"V16iV16iLLi","")
+BUILTIN(__builtin_HEXAGON_V6_vlut4_128B,"V32iV32iLLi","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyuhe_acc,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyuhe_acc_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpyub_rtt,"V32iV16iLLi","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpyub_rtt_128B,"V64iV32iLLi","")
+BUILTIN(__builtin_HEXAGON_V6_vmpsuhuhsat,"V16iV16iV16iLLi","")
+BUILTIN(__builtin_HEXAGON_V6_vmpsuhuhsat_128B,"V32iV32iV32iLLi","")
+BUILTIN(__builtin_HEXAGON_V6_vasruhubsat,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vasruhubsat_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyuhe,"V16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpyuhe_128B,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpyub_rtt_acc,"V32iV32iV16iLLi","")
+BUILTIN(__builtin_HEXAGON_V6_vrmpyub_rtt_acc_128B,"V64iV64iV32iLLi","")
+BUILTIN(__builtin_HEXAGON_V6_vasruwuhsat,"V16iV16iV16ii","")
+BUILTIN(__builtin_HEXAGON_V6_vasruwuhsat_128B,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpabuu_acc,"V32iV32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpabuu_acc_128B,"V64iV64iV64ii","")
+BUILTIN(__builtin_HEXAGON_V6_vprefixqw,"V16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vprefixqw_128B,"V32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vprefixqh,"V16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vprefixqh_128B,"V32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vprefixqb,"V16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vprefixqb_128B,"V32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vabsb,"V16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vabsb_128B,"V32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vavgbrnd,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vavgbrnd_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vdd0,"V32i","")
+BUILTIN(__builtin_HEXAGON_V6_vdd0_128B,"V64i","")
+BUILTIN(__builtin_HEXAGON_V6_vmpabuu,"V32iV32ii","")
+BUILTIN(__builtin_HEXAGON_V6_vmpabuu_128B,"V64iV64ii","")
+BUILTIN(__builtin_HEXAGON_V6_vabsb_sat,"V16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vabsb_sat_128B,"V32iV32i","")
+
+// V66 HVX Instructions.
+
+BUILTIN(__builtin_HEXAGON_V6_vaddcarrysat,"V16iV16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vaddcarrysat_128B,"V32iV32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vasr_into,"V32iV32iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vasr_into_128B,"V64iV64iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vsatdw,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vsatdw_128B,"V32iV32iV32i","")
+BUILTIN(__builtin_HEXAGON_V6_vrotr,"V16iV16iV16i","")
+BUILTIN(__builtin_HEXAGON_V6_vrotr_128B,"V32iV32iV32i","")
+
+#undef BUILTIN
diff --git a/clang-r353983/include/clang/Basic/BuiltinsLe64.def b/clang-r353983/include/clang/Basic/BuiltinsLe64.def
new file mode 100644
index 00000000..776492cd
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/BuiltinsLe64.def
@@ -0,0 +1,18 @@
+//==- BuiltinsLe64.def - Le64 Builtin function database ----------*- C++ -*-==//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the Le64-specific builtin function database. Users of this
+// file must define the BUILTIN macro to make use of this information.
+//
+//===----------------------------------------------------------------------===//
+
+// The format of this database matches clang/Basic/Builtins.def.
+
+BUILTIN(__clear_cache, "vv*v*", "i")
+
+#undef BUILTIN
diff --git a/clang-r353983/include/clang/Basic/BuiltinsMips.def b/clang-r353983/include/clang/Basic/BuiltinsMips.def
new file mode 100644
index 00000000..9ac75b7a
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/BuiltinsMips.def
@@ -0,0 +1,899 @@
+//===-- BuiltinsMips.def - Mips Builtin function database --------*- C++ -*-==//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the MIPS-specific builtin function database. Users of
+// this file must define the BUILTIN macro to make use of this information.
+//
+//===----------------------------------------------------------------------===//
+
+// The format of this database matches clang/Basic/Builtins.def.
+
+// MIPS DSP Rev 1
+
+// Add/subtract with optional saturation
+BUILTIN(__builtin_mips_addu_qb, "V4ScV4ScV4Sc", "n")
+BUILTIN(__builtin_mips_addu_s_qb, "V4ScV4ScV4Sc", "n")
+BUILTIN(__builtin_mips_subu_qb, "V4ScV4ScV4Sc", "n")
+BUILTIN(__builtin_mips_subu_s_qb, "V4ScV4ScV4Sc", "n")
+
+BUILTIN(__builtin_mips_addq_ph, "V2sV2sV2s", "n")
+BUILTIN(__builtin_mips_addq_s_ph, "V2sV2sV2s", "n")
+BUILTIN(__builtin_mips_subq_ph, "V2sV2sV2s", "n")
+BUILTIN(__builtin_mips_subq_s_ph, "V2sV2sV2s", "n")
+
+BUILTIN(__builtin_mips_madd, "LLiLLiii", "nc")
+BUILTIN(__builtin_mips_maddu, "LLiLLiUiUi", "nc")
+BUILTIN(__builtin_mips_msub, "LLiLLiii", "nc")
+BUILTIN(__builtin_mips_msubu, "LLiLLiUiUi", "nc")
+
+BUILTIN(__builtin_mips_addq_s_w, "iii", "n")
+BUILTIN(__builtin_mips_subq_s_w, "iii", "n")
+
+BUILTIN(__builtin_mips_addsc, "iii", "n")
+BUILTIN(__builtin_mips_addwc, "iii", "n")
+
+BUILTIN(__builtin_mips_modsub, "iii", "nc")
+
+BUILTIN(__builtin_mips_raddu_w_qb, "iV4Sc", "nc")
+
+BUILTIN(__builtin_mips_absq_s_ph, "V2sV2s", "n")
+BUILTIN(__builtin_mips_absq_s_w, "ii", "n")
+
+BUILTIN(__builtin_mips_precrq_qb_ph, "V4ScV2sV2s", "nc")
+BUILTIN(__builtin_mips_precrqu_s_qb_ph, "V4ScV2sV2s", "n")
+BUILTIN(__builtin_mips_precrq_ph_w, "V2sii", "nc")
+BUILTIN(__builtin_mips_precrq_rs_ph_w, "V2sii", "n")
+BUILTIN(__builtin_mips_preceq_w_phl, "iV2s", "nc")
+BUILTIN(__builtin_mips_preceq_w_phr, "iV2s", "nc")
+BUILTIN(__builtin_mips_precequ_ph_qbl, "V2sV4Sc", "nc")
+BUILTIN(__builtin_mips_precequ_ph_qbr, "V2sV4Sc", "nc")
+BUILTIN(__builtin_mips_precequ_ph_qbla, "V2sV4Sc", "nc")
+BUILTIN(__builtin_mips_precequ_ph_qbra, "V2sV4Sc", "nc")
+BUILTIN(__builtin_mips_preceu_ph_qbl, "V2sV4Sc", "nc")
+BUILTIN(__builtin_mips_preceu_ph_qbr, "V2sV4Sc", "nc")
+BUILTIN(__builtin_mips_preceu_ph_qbla, "V2sV4Sc", "nc")
+BUILTIN(__builtin_mips_preceu_ph_qbra, "V2sV4Sc", "nc")
+
+BUILTIN(__builtin_mips_shll_qb, "V4ScV4Sci", "n")
+BUILTIN(__builtin_mips_shrl_qb, "V4ScV4Sci", "nc")
+BUILTIN(__builtin_mips_shll_ph, "V2sV2si", "n")
+BUILTIN(__builtin_mips_shll_s_ph, "V2sV2si", "n")
+BUILTIN(__builtin_mips_shra_ph, "V2sV2si", "nc")
+BUILTIN(__builtin_mips_shra_r_ph, "V2sV2si", "nc")
+BUILTIN(__builtin_mips_shll_s_w, "iii", "n")
+BUILTIN(__builtin_mips_shra_r_w, "iii", "nc")
+BUILTIN(__builtin_mips_shilo, "LLiLLii", "nc")
+
+BUILTIN(__builtin_mips_muleu_s_ph_qbl, "V2sV4ScV2s", "n")
+BUILTIN(__builtin_mips_muleu_s_ph_qbr, "V2sV4ScV2s", "n")
+BUILTIN(__builtin_mips_mulq_rs_ph, "V2sV2sV2s", "n")
+BUILTIN(__builtin_mips_muleq_s_w_phl, "iV2sV2s", "n")
+BUILTIN(__builtin_mips_muleq_s_w_phr, "iV2sV2s", "n")
+BUILTIN(__builtin_mips_mulsaq_s_w_ph, "LLiLLiV2sV2s", "n")
+BUILTIN(__builtin_mips_maq_s_w_phl, "LLiLLiV2sV2s", "n")
+BUILTIN(__builtin_mips_maq_s_w_phr, "LLiLLiV2sV2s", "n")
+BUILTIN(__builtin_mips_maq_sa_w_phl, "LLiLLiV2sV2s", "n")
+BUILTIN(__builtin_mips_maq_sa_w_phr, "LLiLLiV2sV2s", "n")
+BUILTIN(__builtin_mips_mult, "LLiii", "nc")
+BUILTIN(__builtin_mips_multu, "LLiUiUi", "nc")
+
+BUILTIN(__builtin_mips_dpau_h_qbl, "LLiLLiV4ScV4Sc", "nc")
+BUILTIN(__builtin_mips_dpau_h_qbr, "LLiLLiV4ScV4Sc", "nc")
+BUILTIN(__builtin_mips_dpsu_h_qbl, "LLiLLiV4ScV4Sc", "nc")
+BUILTIN(__builtin_mips_dpsu_h_qbr, "LLiLLiV4ScV4Sc", "nc")
+BUILTIN(__builtin_mips_dpaq_s_w_ph, "LLiLLiV2sV2s", "n")
+BUILTIN(__builtin_mips_dpsq_s_w_ph, "LLiLLiV2sV2s", "n")
+BUILTIN(__builtin_mips_dpaq_sa_l_w, "LLiLLiii", "n")
+BUILTIN(__builtin_mips_dpsq_sa_l_w, "LLiLLiii", "n")
+
+BUILTIN(__builtin_mips_cmpu_eq_qb, "vV4ScV4Sc", "n")
+BUILTIN(__builtin_mips_cmpu_lt_qb, "vV4ScV4Sc", "n")
+BUILTIN(__builtin_mips_cmpu_le_qb, "vV4ScV4Sc", "n")
+BUILTIN(__builtin_mips_cmpgu_eq_qb, "iV4ScV4Sc", "n")
+BUILTIN(__builtin_mips_cmpgu_lt_qb, "iV4ScV4Sc", "n")
+BUILTIN(__builtin_mips_cmpgu_le_qb, "iV4ScV4Sc", "n")
+BUILTIN(__builtin_mips_cmp_eq_ph, "vV2sV2s", "n")
+BUILTIN(__builtin_mips_cmp_lt_ph, "vV2sV2s", "n")
+BUILTIN(__builtin_mips_cmp_le_ph, "vV2sV2s", "n")
+
+BUILTIN(__builtin_mips_extr_s_h, "iLLii", "n")
+BUILTIN(__builtin_mips_extr_w, "iLLii", "n")
+BUILTIN(__builtin_mips_extr_rs_w, "iLLii", "n")
+BUILTIN(__builtin_mips_extr_r_w, "iLLii", "n")
+BUILTIN(__builtin_mips_extp, "iLLii", "n")
+BUILTIN(__builtin_mips_extpdp, "iLLii", "n")
+
+BUILTIN(__builtin_mips_wrdsp, "viIi", "n")
+BUILTIN(__builtin_mips_rddsp, "iIi", "n")
+BUILTIN(__builtin_mips_insv, "iii", "n")
+BUILTIN(__builtin_mips_bitrev, "ii", "nc")
+BUILTIN(__builtin_mips_packrl_ph, "V2sV2sV2s", "nc")
+BUILTIN(__builtin_mips_repl_qb, "V4Sci", "nc")
+BUILTIN(__builtin_mips_repl_ph, "V2si", "nc")
+BUILTIN(__builtin_mips_pick_qb, "V4ScV4ScV4Sc", "n")
+BUILTIN(__builtin_mips_pick_ph, "V2sV2sV2s", "n")
+BUILTIN(__builtin_mips_mthlip, "LLiLLii", "n")
+BUILTIN(__builtin_mips_bposge32, "i", "n")
+BUILTIN(__builtin_mips_lbux, "iv*i", "n")
+BUILTIN(__builtin_mips_lhx, "iv*i", "n")
+BUILTIN(__builtin_mips_lwx, "iv*i", "n")
+
+// MIPS DSP Rev 2
+
+BUILTIN(__builtin_mips_absq_s_qb, "V4ScV4Sc", "n")
+
+BUILTIN(__builtin_mips_addqh_ph, "V2sV2sV2s", "nc")
+BUILTIN(__builtin_mips_addqh_r_ph, "V2sV2sV2s", "nc")
+BUILTIN(__builtin_mips_addqh_w, "iii", "nc")
+BUILTIN(__builtin_mips_addqh_r_w, "iii", "nc")
+
+BUILTIN(__builtin_mips_addu_ph, "V2sV2sV2s", "n")
+BUILTIN(__builtin_mips_addu_s_ph, "V2sV2sV2s", "n")
+
+BUILTIN(__builtin_mips_adduh_qb, "V4ScV4ScV4Sc", "nc")
+BUILTIN(__builtin_mips_adduh_r_qb, "V4ScV4ScV4Sc", "nc")
+
+BUILTIN(__builtin_mips_append, "iiiIi", "nc")
+BUILTIN(__builtin_mips_balign, "iiiIi", "nc")
+
+BUILTIN(__builtin_mips_cmpgdu_eq_qb, "iV4ScV4Sc", "n")
+BUILTIN(__builtin_mips_cmpgdu_lt_qb, "iV4ScV4Sc", "n")
+BUILTIN(__builtin_mips_cmpgdu_le_qb, "iV4ScV4Sc", "n")
+
+BUILTIN(__builtin_mips_dpa_w_ph, "LLiLLiV2sV2s", "nc")
+BUILTIN(__builtin_mips_dps_w_ph, "LLiLLiV2sV2s", "nc")
+
+BUILTIN(__builtin_mips_dpaqx_s_w_ph, "LLiLLiV2sV2s", "n")
+BUILTIN(__builtin_mips_dpaqx_sa_w_ph, "LLiLLiV2sV2s", "n")
+BUILTIN(__builtin_mips_dpax_w_ph, "LLiLLiV2sV2s", "nc")
+BUILTIN(__builtin_mips_dpsx_w_ph, "LLiLLiV2sV2s", "nc")
+BUILTIN(__builtin_mips_dpsqx_s_w_ph, "LLiLLiV2sV2s", "n")
+BUILTIN(__builtin_mips_dpsqx_sa_w_ph, "LLiLLiV2sV2s", "n")
+
+BUILTIN(__builtin_mips_mul_ph, "V2sV2sV2s", "n")
+BUILTIN(__builtin_mips_mul_s_ph, "V2sV2sV2s", "n")
+
+BUILTIN(__builtin_mips_mulq_rs_w, "iii", "n")
+BUILTIN(__builtin_mips_mulq_s_ph, "V2sV2sV2s", "n")
+BUILTIN(__builtin_mips_mulq_s_w, "iii", "n")
+BUILTIN(__builtin_mips_mulsa_w_ph, "LLiLLiV2sV2s", "nc")
+
+BUILTIN(__builtin_mips_precr_qb_ph, "V4ScV2sV2s", "n")
+BUILTIN(__builtin_mips_precr_sra_ph_w, "V2siiIi", "nc")
+BUILTIN(__builtin_mips_precr_sra_r_ph_w, "V2siiIi", "nc")
+
+BUILTIN(__builtin_mips_prepend, "iiiIi", "nc")
+
+BUILTIN(__builtin_mips_shra_qb, "V4ScV4Sci", "nc")
+BUILTIN(__builtin_mips_shra_r_qb, "V4ScV4Sci", "nc")
+BUILTIN(__builtin_mips_shrl_ph, "V2sV2si", "nc")
+
+BUILTIN(__builtin_mips_subqh_ph, "V2sV2sV2s", "nc")
+BUILTIN(__builtin_mips_subqh_r_ph, "V2sV2sV2s", "nc")
+BUILTIN(__builtin_mips_subqh_w, "iii", "nc")
+BUILTIN(__builtin_mips_subqh_r_w, "iii", "nc")
+
+BUILTIN(__builtin_mips_subu_ph, "V2sV2sV2s", "n")
+BUILTIN(__builtin_mips_subu_s_ph, "V2sV2sV2s", "n")
+
+BUILTIN(__builtin_mips_subuh_qb, "V4ScV4ScV4Sc", "nc")
+BUILTIN(__builtin_mips_subuh_r_qb, "V4ScV4ScV4Sc", "nc")
+
+// MIPS MSA
+
+BUILTIN(__builtin_msa_add_a_b, "V16ScV16ScV16Sc", "nc")
+BUILTIN(__builtin_msa_add_a_h, "V8SsV8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_add_a_w, "V4SiV4SiV4Si", "nc")
+BUILTIN(__builtin_msa_add_a_d, "V2SLLiV2SLLiV2SLLi", "nc")
+
+BUILTIN(__builtin_msa_adds_a_b, "V16ScV16ScV16Sc", "nc")
+BUILTIN(__builtin_msa_adds_a_h, "V8SsV8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_adds_a_w, "V4SiV4SiV4Si", "nc")
+BUILTIN(__builtin_msa_adds_a_d, "V2SLLiV2SLLiV2SLLi", "nc")
+
+BUILTIN(__builtin_msa_adds_s_b, "V16ScV16ScV16Sc", "nc")
+BUILTIN(__builtin_msa_adds_s_h, "V8SsV8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_adds_s_w, "V4SiV4SiV4Si", "nc")
+BUILTIN(__builtin_msa_adds_s_d, "V2SLLiV2SLLiV2SLLi", "nc")
+
+BUILTIN(__builtin_msa_adds_u_b, "V16UcV16UcV16Uc", "nc")
+BUILTIN(__builtin_msa_adds_u_h, "V8UsV8UsV8Us", "nc")
+BUILTIN(__builtin_msa_adds_u_w, "V4UiV4UiV4Ui", "nc")
+BUILTIN(__builtin_msa_adds_u_d, "V2ULLiV2ULLiV2ULLi", "nc")
+
+BUILTIN(__builtin_msa_addv_b, "V16cV16cV16c", "nc")
+BUILTIN(__builtin_msa_addv_h, "V8sV8sV8s", "nc")
+BUILTIN(__builtin_msa_addv_w, "V4iV4iV4i", "nc")
+BUILTIN(__builtin_msa_addv_d, "V2LLiV2LLiV2LLi", "nc")
+
+BUILTIN(__builtin_msa_addvi_b, "V16cV16cIUi", "nc")
+BUILTIN(__builtin_msa_addvi_h, "V8sV8sIUi", "nc")
+BUILTIN(__builtin_msa_addvi_w, "V4iV4iIUi", "nc")
+BUILTIN(__builtin_msa_addvi_d, "V2LLiV2LLiIUi", "nc")
+
+BUILTIN(__builtin_msa_and_v, "V16UcV16UcV16Uc", "nc")
+
+BUILTIN(__builtin_msa_andi_b, "V16UcV16UcIUi", "nc")
+
+BUILTIN(__builtin_msa_asub_s_b, "V16ScV16ScV16Sc", "nc")
+BUILTIN(__builtin_msa_asub_s_h, "V8SsV8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_asub_s_w, "V4SiV4SiV4Si", "nc")
+BUILTIN(__builtin_msa_asub_s_d, "V2SLLiV2SLLiV2SLLi", "nc")
+
+BUILTIN(__builtin_msa_asub_u_b, "V16UcV16UcV16Uc", "nc")
+BUILTIN(__builtin_msa_asub_u_h, "V8UsV8UsV8Us", "nc")
+BUILTIN(__builtin_msa_asub_u_w, "V4UiV4UiV4Ui", "nc")
+BUILTIN(__builtin_msa_asub_u_d, "V2ULLiV2ULLiV2ULLi", "nc")
+
+BUILTIN(__builtin_msa_ave_s_b, "V16ScV16ScV16Sc", "nc")
+BUILTIN(__builtin_msa_ave_s_h, "V8SsV8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_ave_s_w, "V4SiV4SiV4Si", "nc")
+BUILTIN(__builtin_msa_ave_s_d, "V2SLLiV2SLLiV2SLLi", "nc")
+
+BUILTIN(__builtin_msa_ave_u_b, "V16UcV16UcV16Uc", "nc")
+BUILTIN(__builtin_msa_ave_u_h, "V8UsV8UsV8Us", "nc")
+BUILTIN(__builtin_msa_ave_u_w, "V4UiV4UiV4Ui", "nc")
+BUILTIN(__builtin_msa_ave_u_d, "V2ULLiV2ULLiV2ULLi", "nc")
+
+BUILTIN(__builtin_msa_aver_s_b, "V16ScV16ScV16Sc", "nc")
+BUILTIN(__builtin_msa_aver_s_h, "V8SsV8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_aver_s_w, "V4SiV4SiV4Si", "nc")
+BUILTIN(__builtin_msa_aver_s_d, "V2SLLiV2SLLiV2SLLi", "nc")
+
+BUILTIN(__builtin_msa_aver_u_b, "V16UcV16UcV16Uc", "nc")
+BUILTIN(__builtin_msa_aver_u_h, "V8UsV8UsV8Us", "nc")
+BUILTIN(__builtin_msa_aver_u_w, "V4UiV4UiV4Ui", "nc")
+BUILTIN(__builtin_msa_aver_u_d, "V2ULLiV2ULLiV2ULLi", "nc")
+
+BUILTIN(__builtin_msa_bclr_b, "V16UcV16UcV16Uc", "nc")
+BUILTIN(__builtin_msa_bclr_h, "V8UsV8UsV8Us", "nc")
+BUILTIN(__builtin_msa_bclr_w, "V4UiV4UiV4Ui", "nc")
+BUILTIN(__builtin_msa_bclr_d, "V2ULLiV2ULLiV2ULLi", "nc")
+
+BUILTIN(__builtin_msa_bclri_b, "V16UcV16UcIUi", "nc")
+BUILTIN(__builtin_msa_bclri_h, "V8UsV8UsIUi", "nc")
+BUILTIN(__builtin_msa_bclri_w, "V4UiV4UiIUi", "nc")
+BUILTIN(__builtin_msa_bclri_d, "V2ULLiV2ULLiIUi", "nc")
+
+BUILTIN(__builtin_msa_binsl_b, "V16UcV16UcV16UcV16Uc", "nc")
+BUILTIN(__builtin_msa_binsl_h, "V8UsV8UsV8UsV8Us", "nc")
+BUILTIN(__builtin_msa_binsl_w, "V4UiV4UiV4UiV4Ui", "nc")
+BUILTIN(__builtin_msa_binsl_d, "V2ULLiV2ULLiV2ULLiV2ULLi", "nc")
+
+BUILTIN(__builtin_msa_binsli_b, "V16UcV16UcV16UcIUi", "nc")
+BUILTIN(__builtin_msa_binsli_h, "V8UsV8UsV8UsIUi", "nc")
+BUILTIN(__builtin_msa_binsli_w, "V4UiV4UiV4UiIUi", "nc")
+BUILTIN(__builtin_msa_binsli_d, "V2ULLiV2ULLiV2ULLiIUi", "nc")
+
+BUILTIN(__builtin_msa_binsr_b, "V16UcV16UcV16UcV16Uc", "nc")
+BUILTIN(__builtin_msa_binsr_h, "V8UsV8UsV8UsV8Us", "nc")
+BUILTIN(__builtin_msa_binsr_w, "V4UiV4UiV4UiV4Ui", "nc")
+BUILTIN(__builtin_msa_binsr_d, "V2ULLiV2ULLiV2ULLiV2ULLi", "nc")
+
+BUILTIN(__builtin_msa_binsri_b, "V16UcV16UcV16UcIUi", "nc")
+BUILTIN(__builtin_msa_binsri_h, "V8UsV8UsV8UsIUi", "nc")
+BUILTIN(__builtin_msa_binsri_w, "V4UiV4UiV4UiIUi", "nc")
+BUILTIN(__builtin_msa_binsri_d, "V2ULLiV2ULLiV2ULLiIUi", "nc")
+
+BUILTIN(__builtin_msa_bmnz_v, "V16UcV16UcV16UcV16Uc", "nc")
+
+BUILTIN(__builtin_msa_bmnzi_b, "V16UcV16UcV16UcIUi", "nc")
+
+BUILTIN(__builtin_msa_bmz_v, "V16UcV16UcV16UcV16Uc", "nc")
+
+BUILTIN(__builtin_msa_bmzi_b, "V16UcV16UcV16UcIUi", "nc")
+
+BUILTIN(__builtin_msa_bneg_b, "V16UcV16UcV16Uc", "nc")
+BUILTIN(__builtin_msa_bneg_h, "V8UsV8UsV8Us", "nc")
+BUILTIN(__builtin_msa_bneg_w, "V4UiV4UiV4Ui", "nc")
+BUILTIN(__builtin_msa_bneg_d, "V2ULLiV2ULLiV2ULLi", "nc")
+
+BUILTIN(__builtin_msa_bnegi_b, "V16UcV16UcIUi", "nc")
+BUILTIN(__builtin_msa_bnegi_h, "V8UsV8UsIUi", "nc")
+BUILTIN(__builtin_msa_bnegi_w, "V4UiV4UiIUi", "nc")
+BUILTIN(__builtin_msa_bnegi_d, "V2ULLiV2ULLiIUi", "nc")
+
+BUILTIN(__builtin_msa_bnz_b, "iV16Uc", "nc")
+BUILTIN(__builtin_msa_bnz_h, "iV8Us", "nc")
+BUILTIN(__builtin_msa_bnz_w, "iV4Ui", "nc")
+BUILTIN(__builtin_msa_bnz_d, "iV2ULLi", "nc")
+
+BUILTIN(__builtin_msa_bnz_v, "iV16Uc", "nc")
+
+BUILTIN(__builtin_msa_bsel_v, "V16UcV16UcV16UcV16Uc", "nc")
+
+BUILTIN(__builtin_msa_bseli_b, "V16UcV16UcV16UcIUi", "nc")
+
+BUILTIN(__builtin_msa_bset_b, "V16UcV16UcV16Uc", "nc")
+BUILTIN(__builtin_msa_bset_h, "V8UsV8UsV8Us", "nc")
+BUILTIN(__builtin_msa_bset_w, "V4UiV4UiV4Ui", "nc")
+BUILTIN(__builtin_msa_bset_d, "V2ULLiV2ULLiV2ULLi", "nc")
+
+BUILTIN(__builtin_msa_bseti_b, "V16UcV16UcIUi", "nc")
+BUILTIN(__builtin_msa_bseti_h, "V8UsV8UsIUi", "nc")
+BUILTIN(__builtin_msa_bseti_w, "V4UiV4UiIUi", "nc")
+BUILTIN(__builtin_msa_bseti_d, "V2ULLiV2ULLiIUi", "nc")
+
+BUILTIN(__builtin_msa_bz_b, "iV16Uc", "nc")
+BUILTIN(__builtin_msa_bz_h, "iV8Us", "nc")
+BUILTIN(__builtin_msa_bz_w, "iV4Ui", "nc")
+BUILTIN(__builtin_msa_bz_d, "iV2ULLi", "nc")
+
+BUILTIN(__builtin_msa_bz_v, "iV16Uc", "nc")
+
+BUILTIN(__builtin_msa_ceq_b, "V16ScV16ScV16Sc", "nc")
+BUILTIN(__builtin_msa_ceq_h, "V8SsV8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_ceq_w, "V4SiV4SiV4Si", "nc")
+BUILTIN(__builtin_msa_ceq_d, "V2SLLiV2SLLiV2SLLi", "nc")
+
+BUILTIN(__builtin_msa_ceqi_b, "V16ScV16ScISi", "nc")
+BUILTIN(__builtin_msa_ceqi_h, "V8SsV8SsISi", "nc")
+BUILTIN(__builtin_msa_ceqi_w, "V4SiV4SiISi", "nc")
+BUILTIN(__builtin_msa_ceqi_d, "V2SLLiV2SLLiISi", "nc")
+
+BUILTIN(__builtin_msa_cfcmsa, "iIi", "n")
+
+BUILTIN(__builtin_msa_cle_s_b, "V16ScV16ScV16Sc", "nc")
+BUILTIN(__builtin_msa_cle_s_h, "V8SsV8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_cle_s_w, "V4SiV4SiV4Si", "nc")
+BUILTIN(__builtin_msa_cle_s_d, "V2SLLiV2SLLiV2SLLi", "nc")
+
+BUILTIN(__builtin_msa_cle_u_b, "V16ScV16UcV16Uc", "nc")
+BUILTIN(__builtin_msa_cle_u_h, "V8SsV8UsV8Us", "nc")
+BUILTIN(__builtin_msa_cle_u_w, "V4SiV4UiV4Ui", "nc")
+BUILTIN(__builtin_msa_cle_u_d, "V2SLLiV2ULLiV2ULLi", "nc")
+
+BUILTIN(__builtin_msa_clei_s_b, "V16ScV16ScISi", "nc")
+BUILTIN(__builtin_msa_clei_s_h, "V8SsV8SsISi", "nc")
+BUILTIN(__builtin_msa_clei_s_w, "V4SiV4SiISi", "nc")
+BUILTIN(__builtin_msa_clei_s_d, "V2SLLiV2SLLiISi", "nc")
+
+BUILTIN(__builtin_msa_clei_u_b, "V16ScV16UcIUi", "nc")
+BUILTIN(__builtin_msa_clei_u_h, "V8SsV8UsIUi", "nc")
+BUILTIN(__builtin_msa_clei_u_w, "V4SiV4UiIUi", "nc")
+BUILTIN(__builtin_msa_clei_u_d, "V2SLLiV2ULLiIUi", "nc")
+
+BUILTIN(__builtin_msa_clt_s_b, "V16ScV16ScV16Sc", "nc")
+BUILTIN(__builtin_msa_clt_s_h, "V8SsV8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_clt_s_w, "V4SiV4SiV4Si", "nc")
+BUILTIN(__builtin_msa_clt_s_d, "V2SLLiV2SLLiV2SLLi", "nc")
+
+BUILTIN(__builtin_msa_clt_u_b, "V16ScV16UcV16Uc", "nc")
+BUILTIN(__builtin_msa_clt_u_h, "V8SsV8UsV8Us", "nc")
+BUILTIN(__builtin_msa_clt_u_w, "V4SiV4UiV4Ui", "nc")
+BUILTIN(__builtin_msa_clt_u_d, "V2SLLiV2ULLiV2ULLi", "nc")
+
+BUILTIN(__builtin_msa_clti_s_b, "V16ScV16ScISi", "nc")
+BUILTIN(__builtin_msa_clti_s_h, "V8SsV8SsISi", "nc")
+BUILTIN(__builtin_msa_clti_s_w, "V4SiV4SiISi", "nc")
+BUILTIN(__builtin_msa_clti_s_d, "V2SLLiV2SLLiISi", "nc")
+
+BUILTIN(__builtin_msa_clti_u_b, "V16ScV16UcIUi", "nc")
+BUILTIN(__builtin_msa_clti_u_h, "V8SsV8UsIUi", "nc")
+BUILTIN(__builtin_msa_clti_u_w, "V4SiV4UiIUi", "nc")
+BUILTIN(__builtin_msa_clti_u_d, "V2SLLiV2ULLiIUi", "nc")
+
+BUILTIN(__builtin_msa_copy_s_b, "iV16ScIUi", "nc")
+BUILTIN(__builtin_msa_copy_s_h, "iV8SsIUi", "nc")
+BUILTIN(__builtin_msa_copy_s_w, "iV4SiIUi", "nc")
+BUILTIN(__builtin_msa_copy_s_d, "LLiV2SLLiIUi", "nc")
+
+BUILTIN(__builtin_msa_copy_u_b, "iV16UcIUi", "nc")
+BUILTIN(__builtin_msa_copy_u_h, "iV8UsIUi", "nc")
+BUILTIN(__builtin_msa_copy_u_w, "iV4UiIUi", "nc")
+BUILTIN(__builtin_msa_copy_u_d, "LLiV2ULLiIUi", "nc")
+
+BUILTIN(__builtin_msa_ctcmsa, "vIii", "n")
+
+BUILTIN(__builtin_msa_div_s_b, "V16ScV16ScV16Sc", "nc")
+BUILTIN(__builtin_msa_div_s_h, "V8SsV8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_div_s_w, "V4SiV4SiV4Si", "nc")
+BUILTIN(__builtin_msa_div_s_d, "V2SLLiV2SLLiV2SLLi", "nc")
+
+BUILTIN(__builtin_msa_div_u_b, "V16UcV16UcV16Uc", "nc")
+BUILTIN(__builtin_msa_div_u_h, "V8UsV8UsV8Us", "nc")
+BUILTIN(__builtin_msa_div_u_w, "V4UiV4UiV4Ui", "nc")
+BUILTIN(__builtin_msa_div_u_d, "V2ULLiV2ULLiV2ULLi", "nc")
+
+BUILTIN(__builtin_msa_dotp_s_h, "V8SsV16ScV16Sc", "nc")
+BUILTIN(__builtin_msa_dotp_s_w, "V4SiV8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_dotp_s_d, "V2SLLiV4SiV4Si", "nc")
+
+BUILTIN(__builtin_msa_dotp_u_h, "V8UsV16UcV16Uc", "nc")
+BUILTIN(__builtin_msa_dotp_u_w, "V4UiV8UsV8Us", "nc")
+BUILTIN(__builtin_msa_dotp_u_d, "V2ULLiV4UiV4Ui", "nc")
+
+BUILTIN(__builtin_msa_dpadd_s_h, "V8SsV8SsV16ScV16Sc", "nc")
+BUILTIN(__builtin_msa_dpadd_s_w, "V4SiV4SiV8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_dpadd_s_d, "V2SLLiV2SLLiV4SiV4Si", "nc")
+
+BUILTIN(__builtin_msa_dpadd_u_h, "V8UsV8UsV16UcV16Uc", "nc")
+BUILTIN(__builtin_msa_dpadd_u_w, "V4UiV4UiV8UsV8Us", "nc")
+BUILTIN(__builtin_msa_dpadd_u_d, "V2ULLiV2ULLiV4UiV4Ui", "nc")
+
+BUILTIN(__builtin_msa_dpsub_s_h, "V8SsV8SsV16ScV16Sc", "nc")
+BUILTIN(__builtin_msa_dpsub_s_w, "V4SiV4SiV8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_dpsub_s_d, "V2SLLiV2SLLiV4SiV4Si", "nc")
+
+BUILTIN(__builtin_msa_dpsub_u_h, "V8UsV8UsV16UcV16Uc", "nc")
+BUILTIN(__builtin_msa_dpsub_u_w, "V4UiV4UiV8UsV8Us", "nc")
+BUILTIN(__builtin_msa_dpsub_u_d, "V2ULLiV2ULLiV4UiV4Ui", "nc")
+
+BUILTIN(__builtin_msa_fadd_w, "V4fV4fV4f", "nc")
+BUILTIN(__builtin_msa_fadd_d, "V2dV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fcaf_w, "V4iV4fV4f", "nc")
+BUILTIN(__builtin_msa_fcaf_d, "V2LLiV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fceq_w, "V4iV4fV4f", "nc")
+BUILTIN(__builtin_msa_fceq_d, "V2LLiV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fclass_w, "V4iV4f", "nc")
+BUILTIN(__builtin_msa_fclass_d, "V2LLiV2d", "nc")
+
+BUILTIN(__builtin_msa_fcle_w, "V4iV4fV4f", "nc")
+BUILTIN(__builtin_msa_fcle_d, "V2LLiV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fclt_w, "V4iV4fV4f", "nc")
+BUILTIN(__builtin_msa_fclt_d, "V2LLiV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fcne_w, "V4iV4fV4f", "nc")
+BUILTIN(__builtin_msa_fcne_d, "V2LLiV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fcor_w, "V4iV4fV4f", "nc")
+BUILTIN(__builtin_msa_fcor_d, "V2LLiV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fcueq_w, "V4iV4fV4f", "nc")
+BUILTIN(__builtin_msa_fcueq_d, "V2LLiV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fcule_w, "V4iV4fV4f", "nc")
+BUILTIN(__builtin_msa_fcule_d, "V2LLiV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fcult_w, "V4iV4fV4f", "nc")
+BUILTIN(__builtin_msa_fcult_d, "V2LLiV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fcun_w, "V4iV4fV4f", "nc")
+BUILTIN(__builtin_msa_fcun_d, "V2LLiV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fcune_w, "V4iV4fV4f", "nc")
+BUILTIN(__builtin_msa_fcune_d, "V2LLiV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fdiv_w, "V4fV4fV4f", "nc")
+BUILTIN(__builtin_msa_fdiv_d, "V2dV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fexdo_h, "V8hV4fV4f", "nc")
+BUILTIN(__builtin_msa_fexdo_w, "V4fV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fexp2_w, "V4fV4fV4i", "nc")
+BUILTIN(__builtin_msa_fexp2_d, "V2dV2dV2LLi", "nc")
+
+BUILTIN(__builtin_msa_fexupl_w, "V4fV8h", "nc")
+BUILTIN(__builtin_msa_fexupl_d, "V2dV4f", "nc")
+
+BUILTIN(__builtin_msa_fexupr_w, "V4fV8h", "nc")
+BUILTIN(__builtin_msa_fexupr_d, "V2dV4f", "nc")
+
+BUILTIN(__builtin_msa_ffint_s_w, "V4fV4Si", "nc")
+BUILTIN(__builtin_msa_ffint_s_d, "V2dV2SLLi", "nc")
+
+BUILTIN(__builtin_msa_ffint_u_w, "V4fV4Ui", "nc")
+BUILTIN(__builtin_msa_ffint_u_d, "V2dV2ULLi", "nc")
+
+// ffql uses integers since long _Fract is not implemented
+BUILTIN(__builtin_msa_ffql_w, "V4fV8Ss", "nc")
+BUILTIN(__builtin_msa_ffql_d, "V2dV4Si", "nc")
+
+// ffqr uses integers since long _Fract is not implemented
+BUILTIN(__builtin_msa_ffqr_w, "V4fV8Ss", "nc")
+BUILTIN(__builtin_msa_ffqr_d, "V2dV4Si", "nc")
+
+BUILTIN(__builtin_msa_fill_b, "V16Sci", "nc")
+BUILTIN(__builtin_msa_fill_h, "V8Ssi", "nc")
+BUILTIN(__builtin_msa_fill_w, "V4Sii", "nc")
+BUILTIN(__builtin_msa_fill_d, "V2SLLiLLi", "nc")
+
+BUILTIN(__builtin_msa_flog2_w, "V4fV4f", "nc")
+BUILTIN(__builtin_msa_flog2_d, "V2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fmadd_w, "V4fV4fV4fV4f", "nc")
+BUILTIN(__builtin_msa_fmadd_d, "V2dV2dV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fmax_w, "V4fV4fV4f", "nc")
+BUILTIN(__builtin_msa_fmax_d, "V2dV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fmax_a_w, "V4fV4fV4f", "nc")
+BUILTIN(__builtin_msa_fmax_a_d, "V2dV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fmin_w, "V4fV4fV4f", "nc")
+BUILTIN(__builtin_msa_fmin_d, "V2dV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fmin_a_w, "V4fV4fV4f", "nc")
+BUILTIN(__builtin_msa_fmin_a_d, "V2dV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fmsub_w, "V4fV4fV4fV4f", "nc")
+BUILTIN(__builtin_msa_fmsub_d, "V2dV2dV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fmul_w, "V4fV4fV4f", "nc")
+BUILTIN(__builtin_msa_fmul_d, "V2dV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_frint_w, "V4fV4f", "nc")
+BUILTIN(__builtin_msa_frint_d, "V2dV2d", "nc")
+
+BUILTIN(__builtin_msa_frcp_w, "V4fV4f", "nc")
+BUILTIN(__builtin_msa_frcp_d, "V2dV2d", "nc")
+
+BUILTIN(__builtin_msa_frsqrt_w, "V4fV4f", "nc")
+BUILTIN(__builtin_msa_frsqrt_d, "V2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fsaf_w, "V4iV4fV4f", "nc")
+BUILTIN(__builtin_msa_fsaf_d, "V2LLiV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fseq_w, "V4iV4fV4f", "nc")
+BUILTIN(__builtin_msa_fseq_d, "V2LLiV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fsle_w, "V4iV4fV4f", "nc")
+BUILTIN(__builtin_msa_fsle_d, "V2LLiV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fslt_w, "V4iV4fV4f", "nc")
+BUILTIN(__builtin_msa_fslt_d, "V2LLiV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fsne_w, "V4iV4fV4f", "nc")
+BUILTIN(__builtin_msa_fsne_d, "V2LLiV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fsor_w, "V4iV4fV4f", "nc")
+BUILTIN(__builtin_msa_fsor_d, "V2LLiV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fsqrt_w, "V4fV4f", "nc")
+BUILTIN(__builtin_msa_fsqrt_d, "V2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fsub_w, "V4fV4fV4f", "nc")
+BUILTIN(__builtin_msa_fsub_d, "V2dV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fsueq_w, "V4iV4fV4f", "nc")
+BUILTIN(__builtin_msa_fsueq_d, "V2LLiV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fsule_w, "V4iV4fV4f", "nc")
+BUILTIN(__builtin_msa_fsule_d, "V2LLiV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fsult_w, "V4iV4fV4f", "nc")
+BUILTIN(__builtin_msa_fsult_d, "V2LLiV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fsun_w, "V4iV4fV4f", "nc")
+BUILTIN(__builtin_msa_fsun_d, "V2LLiV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_fsune_w, "V4iV4fV4f", "nc")
+BUILTIN(__builtin_msa_fsune_d, "V2LLiV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_ftint_s_w, "V4SiV4f", "nc")
+BUILTIN(__builtin_msa_ftint_s_d, "V2SLLiV2d", "nc")
+
+BUILTIN(__builtin_msa_ftint_u_w, "V4UiV4f", "nc")
+BUILTIN(__builtin_msa_ftint_u_d, "V2ULLiV2d", "nc")
+
+BUILTIN(__builtin_msa_ftq_h, "V4UiV4fV4f", "nc")
+BUILTIN(__builtin_msa_ftq_w, "V2ULLiV2dV2d", "nc")
+
+BUILTIN(__builtin_msa_ftrunc_s_w, "V4SiV4f", "nc")
+BUILTIN(__builtin_msa_ftrunc_s_d, "V2SLLiV2d", "nc")
+
+BUILTIN(__builtin_msa_ftrunc_u_w, "V4UiV4f", "nc")
+BUILTIN(__builtin_msa_ftrunc_u_d, "V2ULLiV2d", "nc")
+
+BUILTIN(__builtin_msa_hadd_s_h, "V8SsV16ScV16Sc", "nc")
+BUILTIN(__builtin_msa_hadd_s_w, "V4SiV8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_hadd_s_d, "V2SLLiV4SiV4Si", "nc")
+
+BUILTIN(__builtin_msa_hadd_u_h, "V8UsV16UcV16Uc", "nc")
+BUILTIN(__builtin_msa_hadd_u_w, "V4UiV8UsV8Us", "nc")
+BUILTIN(__builtin_msa_hadd_u_d, "V2ULLiV4UiV4Ui", "nc")
+
+BUILTIN(__builtin_msa_hsub_s_h, "V8SsV16ScV16Sc", "nc")
+BUILTIN(__builtin_msa_hsub_s_w, "V4SiV8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_hsub_s_d, "V2SLLiV4SiV4Si", "nc")
+
+BUILTIN(__builtin_msa_hsub_u_h, "V8UsV16UcV16Uc", "nc")
+BUILTIN(__builtin_msa_hsub_u_w, "V4UiV8UsV8Us", "nc")
+BUILTIN(__builtin_msa_hsub_u_d, "V2ULLiV4UiV4Ui", "nc")
+
+BUILTIN(__builtin_msa_ilvev_b, "V16cV16cV16c", "nc")
+BUILTIN(__builtin_msa_ilvev_h, "V8sV8sV8s", "nc")
+BUILTIN(__builtin_msa_ilvev_w, "V4iV4iV4i", "nc")
+BUILTIN(__builtin_msa_ilvev_d, "V2LLiV2LLiV2LLi", "nc")
+
+BUILTIN(__builtin_msa_ilvl_b, "V16cV16cV16c", "nc")
+BUILTIN(__builtin_msa_ilvl_h, "V8sV8sV8s", "nc")
+BUILTIN(__builtin_msa_ilvl_w, "V4iV4iV4i", "nc")
+BUILTIN(__builtin_msa_ilvl_d, "V2LLiV2LLiV2LLi", "nc")
+
+BUILTIN(__builtin_msa_ilvod_b, "V16cV16cV16c", "nc")
+BUILTIN(__builtin_msa_ilvod_h, "V8sV8sV8s", "nc")
+BUILTIN(__builtin_msa_ilvod_w, "V4iV4iV4i", "nc")
+BUILTIN(__builtin_msa_ilvod_d, "V2LLiV2LLiV2LLi", "nc")
+
+BUILTIN(__builtin_msa_ilvr_b, "V16cV16cV16c", "nc")
+BUILTIN(__builtin_msa_ilvr_h, "V8sV8sV8s", "nc")
+BUILTIN(__builtin_msa_ilvr_w, "V4iV4iV4i", "nc")
+BUILTIN(__builtin_msa_ilvr_d, "V2LLiV2LLiV2LLi", "nc")
+
+BUILTIN(__builtin_msa_insert_b, "V16ScV16ScIUii", "nc")
+BUILTIN(__builtin_msa_insert_h, "V8SsV8SsIUii", "nc")
+BUILTIN(__builtin_msa_insert_w, "V4SiV4SiIUii", "nc")
+BUILTIN(__builtin_msa_insert_d, "V2SLLiV2SLLiIUiLLi", "nc")
+
+BUILTIN(__builtin_msa_insve_b, "V16ScV16ScIUiV16Sc", "nc")
+BUILTIN(__builtin_msa_insve_h, "V8SsV8SsIUiV8Ss", "nc")
+BUILTIN(__builtin_msa_insve_w, "V4SiV4SiIUiV4Si", "nc")
+BUILTIN(__builtin_msa_insve_d, "V2SLLiV2SLLiIUiV2SLLi", "nc")
+
+BUILTIN(__builtin_msa_ld_b, "V16Scv*Ii", "nc")
+BUILTIN(__builtin_msa_ld_h, "V8Ssv*Ii", "nc")
+BUILTIN(__builtin_msa_ld_w, "V4Siv*Ii", "nc")
+BUILTIN(__builtin_msa_ld_d, "V2SLLiv*Ii", "nc")
+
+BUILTIN(__builtin_msa_ldi_b, "V16cIi", "nc")
+BUILTIN(__builtin_msa_ldi_h, "V8sIi", "nc")
+BUILTIN(__builtin_msa_ldi_w, "V4iIi", "nc")
+BUILTIN(__builtin_msa_ldi_d, "V2LLiIi", "nc")
+
+BUILTIN(__builtin_msa_madd_q_h, "V8SsV8SsV8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_madd_q_w, "V4SiV4SiV4SiV4Si", "nc")
+
+BUILTIN(__builtin_msa_maddr_q_h, "V8SsV8SsV8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_maddr_q_w, "V4SiV4SiV4SiV4Si", "nc")
+
+BUILTIN(__builtin_msa_maddv_b, "V16ScV16ScV16ScV16Sc", "nc")
+BUILTIN(__builtin_msa_maddv_h, "V8SsV8SsV8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_maddv_w, "V4SiV4SiV4SiV4Si", "nc")
+BUILTIN(__builtin_msa_maddv_d, "V2SLLiV2SLLiV2SLLiV2SLLi", "nc")
+
+BUILTIN(__builtin_msa_max_a_b, "V16ScV16ScV16Sc", "nc")
+BUILTIN(__builtin_msa_max_a_h, "V8SsV8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_max_a_w, "V4SiV4SiV4Si", "nc")
+BUILTIN(__builtin_msa_max_a_d, "V2SLLiV2SLLiV2SLLi", "nc")
+
+BUILTIN(__builtin_msa_max_s_b, "V16ScV16ScV16Sc", "nc")
+BUILTIN(__builtin_msa_max_s_h, "V8SsV8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_max_s_w, "V4SiV4SiV4Si", "nc")
+BUILTIN(__builtin_msa_max_s_d, "V2SLLiV2SLLiV2SLLi", "nc")
+
+BUILTIN(__builtin_msa_max_u_b, "V16UcV16UcV16Uc", "nc")
+BUILTIN(__builtin_msa_max_u_h, "V8UsV8UsV8Us", "nc")
+BUILTIN(__builtin_msa_max_u_w, "V4UiV4UiV4Ui", "nc")
+BUILTIN(__builtin_msa_max_u_d, "V2ULLiV2ULLiV2ULLi", "nc")
+
+BUILTIN(__builtin_msa_maxi_s_b, "V16ScV16ScIi", "nc")
+BUILTIN(__builtin_msa_maxi_s_h, "V8SsV8SsIi", "nc")
+BUILTIN(__builtin_msa_maxi_s_w, "V4SiV4SiIi", "nc")
+BUILTIN(__builtin_msa_maxi_s_d, "V2SLLiV2SLLiIi", "nc")
+
+BUILTIN(__builtin_msa_maxi_u_b, "V16UcV16UcIi", "nc")
+BUILTIN(__builtin_msa_maxi_u_h, "V8UsV8UsIi", "nc")
+BUILTIN(__builtin_msa_maxi_u_w, "V4UiV4UiIi", "nc")
+BUILTIN(__builtin_msa_maxi_u_d, "V2ULLiV2ULLiIi", "nc")
+
+BUILTIN(__builtin_msa_min_a_b, "V16ScV16ScV16Sc", "nc")
+BUILTIN(__builtin_msa_min_a_h, "V8SsV8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_min_a_w, "V4SiV4SiV4Si", "nc")
+BUILTIN(__builtin_msa_min_a_d, "V2SLLiV2SLLiV2SLLi", "nc")
+
+BUILTIN(__builtin_msa_min_s_b, "V16ScV16ScV16Sc", "nc")
+BUILTIN(__builtin_msa_min_s_h, "V8SsV8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_min_s_w, "V4SiV4SiV4Si", "nc")
+BUILTIN(__builtin_msa_min_s_d, "V2SLLiV2SLLiV2SLLi", "nc")
+
+BUILTIN(__builtin_msa_min_u_b, "V16UcV16UcV16Uc", "nc")
+BUILTIN(__builtin_msa_min_u_h, "V8UsV8UsV8Us", "nc")
+BUILTIN(__builtin_msa_min_u_w, "V4UiV4UiV4Ui", "nc")
+BUILTIN(__builtin_msa_min_u_d, "V2ULLiV2ULLiV2ULLi", "nc")
+
+BUILTIN(__builtin_msa_mini_s_b, "V16ScV16ScIi", "nc")
+BUILTIN(__builtin_msa_mini_s_h, "V8SsV8SsIi", "nc")
+BUILTIN(__builtin_msa_mini_s_w, "V4SiV4SiIi", "nc")
+BUILTIN(__builtin_msa_mini_s_d, "V2SLLiV2SLLiIi", "nc")
+
+BUILTIN(__builtin_msa_mini_u_b, "V16UcV16UcIi", "nc")
+BUILTIN(__builtin_msa_mini_u_h, "V8UsV8UsIi", "nc")
+BUILTIN(__builtin_msa_mini_u_w, "V4UiV4UiIi", "nc")
+BUILTIN(__builtin_msa_mini_u_d, "V2ULLiV2ULLiIi", "nc")
+
+BUILTIN(__builtin_msa_mod_s_b, "V16ScV16ScV16Sc", "nc")
+BUILTIN(__builtin_msa_mod_s_h, "V8SsV8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_mod_s_w, "V4SiV4SiV4Si", "nc")
+BUILTIN(__builtin_msa_mod_s_d, "V2SLLiV2SLLiV2SLLi", "nc")
+
+BUILTIN(__builtin_msa_mod_u_b, "V16UcV16UcV16Uc", "nc")
+BUILTIN(__builtin_msa_mod_u_h, "V8UsV8UsV8Us", "nc")
+BUILTIN(__builtin_msa_mod_u_w, "V4UiV4UiV4Ui", "nc")
+BUILTIN(__builtin_msa_mod_u_d, "V2ULLiV2ULLiV2ULLi", "nc")
+
+BUILTIN(__builtin_msa_move_v, "V16ScV16Sc", "nc")
+
+BUILTIN(__builtin_msa_msub_q_h, "V8SsV8SsV8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_msub_q_w, "V4SiV4SiV4SiV4Si", "nc")
+
+BUILTIN(__builtin_msa_msubr_q_h, "V8SsV8SsV8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_msubr_q_w, "V4SiV4SiV4SiV4Si", "nc")
+
+BUILTIN(__builtin_msa_msubv_b, "V16ScV16ScV16ScV16Sc", "nc")
+BUILTIN(__builtin_msa_msubv_h, "V8SsV8SsV8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_msubv_w, "V4SiV4SiV4SiV4Si", "nc")
+BUILTIN(__builtin_msa_msubv_d, "V2SLLiV2SLLiV2SLLiV2SLLi", "nc")
+
+BUILTIN(__builtin_msa_mul_q_h, "V8SsV8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_mul_q_w, "V4SiV4SiV4Si", "nc")
+
+BUILTIN(__builtin_msa_mulr_q_h, "V8SsV8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_mulr_q_w, "V4SiV4SiV4Si", "nc")
+
+BUILTIN(__builtin_msa_mulv_b, "V16ScV16ScV16Sc", "nc")
+BUILTIN(__builtin_msa_mulv_h, "V8SsV8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_mulv_w, "V4SiV4SiV4Si", "nc")
+BUILTIN(__builtin_msa_mulv_d, "V2SLLiV2SLLiV2SLLi", "nc")
+
+BUILTIN(__builtin_msa_nloc_b, "V16ScV16Sc", "nc")
+BUILTIN(__builtin_msa_nloc_h, "V8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_nloc_w, "V4SiV4Si", "nc")
+BUILTIN(__builtin_msa_nloc_d, "V2SLLiV2SLLi", "nc")
+
+BUILTIN(__builtin_msa_nlzc_b, "V16ScV16Sc", "nc")
+BUILTIN(__builtin_msa_nlzc_h, "V8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_nlzc_w, "V4SiV4Si", "nc")
+BUILTIN(__builtin_msa_nlzc_d, "V2SLLiV2SLLi", "nc")
+
+BUILTIN(__builtin_msa_nor_v, "V16UcV16UcV16Uc", "nc")
+
+BUILTIN(__builtin_msa_nori_b, "V16UcV16cIUi", "nc")
+
+BUILTIN(__builtin_msa_or_v, "V16UcV16UcV16Uc", "nc")
+
+BUILTIN(__builtin_msa_ori_b, "V16UcV16UcIUi", "nc")
+
+BUILTIN(__builtin_msa_pckev_b, "V16cV16cV16c", "nc")
+BUILTIN(__builtin_msa_pckev_h, "V8sV8sV8s", "nc")
+BUILTIN(__builtin_msa_pckev_w, "V4iV4iV4i", "nc")
+BUILTIN(__builtin_msa_pckev_d, "V2LLiV2LLiV2LLi", "nc")
+
+BUILTIN(__builtin_msa_pckod_b, "V16cV16cV16c", "nc")
+BUILTIN(__builtin_msa_pckod_h, "V8sV8sV8s", "nc")
+BUILTIN(__builtin_msa_pckod_w, "V4iV4iV4i", "nc")
+BUILTIN(__builtin_msa_pckod_d, "V2LLiV2LLiV2LLi", "nc")
+
+BUILTIN(__builtin_msa_pcnt_b, "V16ScV16Sc", "nc")
+BUILTIN(__builtin_msa_pcnt_h, "V8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_pcnt_w, "V4SiV4Si", "nc")
+BUILTIN(__builtin_msa_pcnt_d, "V2SLLiV2SLLi", "nc")
+
+BUILTIN(__builtin_msa_sat_s_b, "V16ScV16ScIUi", "nc")
+BUILTIN(__builtin_msa_sat_s_h, "V8SsV8SsIUi", "nc")
+BUILTIN(__builtin_msa_sat_s_w, "V4SiV4SiIUi", "nc")
+BUILTIN(__builtin_msa_sat_s_d, "V2SLLiV2SLLiIUi", "nc")
+
+BUILTIN(__builtin_msa_sat_u_b, "V16UcV16UcIUi", "nc")
+BUILTIN(__builtin_msa_sat_u_h, "V8UsV8UsIUi", "nc")
+BUILTIN(__builtin_msa_sat_u_w, "V4UiV4UiIUi", "nc")
+BUILTIN(__builtin_msa_sat_u_d, "V2ULLiV2ULLiIUi", "nc")
+
+BUILTIN(__builtin_msa_shf_b, "V16cV16cIUi", "nc")
+BUILTIN(__builtin_msa_shf_h, "V8sV8sIUi", "nc")
+BUILTIN(__builtin_msa_shf_w, "V4iV4iIUi", "nc")
+
+BUILTIN(__builtin_msa_sld_b, "V16cV16cV16cUi", "nc")
+BUILTIN(__builtin_msa_sld_h, "V8sV8sV8sUi", "nc")
+BUILTIN(__builtin_msa_sld_w, "V4iV4iV4iUi", "nc")
+BUILTIN(__builtin_msa_sld_d, "V2LLiV2LLiV2LLiUi", "nc")
+
+BUILTIN(__builtin_msa_sldi_b, "V16cV16cV16cIUi", "nc")
+BUILTIN(__builtin_msa_sldi_h, "V8sV8sV8sIUi", "nc")
+BUILTIN(__builtin_msa_sldi_w, "V4iV4iV4iIUi", "nc")
+BUILTIN(__builtin_msa_sldi_d, "V2LLiV2LLiV2LLiIUi", "nc")
+
+BUILTIN(__builtin_msa_sll_b, "V16cV16cV16c", "nc")
+BUILTIN(__builtin_msa_sll_h, "V8sV8sV8s", "nc")
+BUILTIN(__builtin_msa_sll_w, "V4iV4iV4i", "nc")
+BUILTIN(__builtin_msa_sll_d, "V2LLiV2LLiV2LLi", "nc")
+
+BUILTIN(__builtin_msa_slli_b, "V16cV16cIUi", "nc")
+BUILTIN(__builtin_msa_slli_h, "V8sV8sIUi", "nc")
+BUILTIN(__builtin_msa_slli_w, "V4iV4iIUi", "nc")
+BUILTIN(__builtin_msa_slli_d, "V2LLiV2LLiIUi", "nc")
+
+BUILTIN(__builtin_msa_splat_b, "V16cV16cUi", "nc")
+BUILTIN(__builtin_msa_splat_h, "V8sV8sUi", "nc")
+BUILTIN(__builtin_msa_splat_w, "V4iV4iUi", "nc")
+BUILTIN(__builtin_msa_splat_d, "V2LLiV2LLiUi", "nc")
+
+BUILTIN(__builtin_msa_splati_b, "V16cV16cIUi", "nc")
+BUILTIN(__builtin_msa_splati_h, "V8sV8sIUi", "nc")
+BUILTIN(__builtin_msa_splati_w, "V4iV4iIUi", "nc")
+BUILTIN(__builtin_msa_splati_d, "V2LLiV2LLiIUi", "nc")
+
+BUILTIN(__builtin_msa_sra_b, "V16cV16cV16c", "nc")
+BUILTIN(__builtin_msa_sra_h, "V8sV8sV8s", "nc")
+BUILTIN(__builtin_msa_sra_w, "V4iV4iV4i", "nc")
+BUILTIN(__builtin_msa_sra_d, "V2LLiV2LLiV2LLi", "nc")
+
+BUILTIN(__builtin_msa_srai_b, "V16cV16cIUi", "nc")
+BUILTIN(__builtin_msa_srai_h, "V8sV8sIUi", "nc")
+BUILTIN(__builtin_msa_srai_w, "V4iV4iIUi", "nc")
+BUILTIN(__builtin_msa_srai_d, "V2LLiV2LLiIUi", "nc")
+
+BUILTIN(__builtin_msa_srar_b, "V16cV16cV16c", "nc")
+BUILTIN(__builtin_msa_srar_h, "V8sV8sV8s", "nc")
+BUILTIN(__builtin_msa_srar_w, "V4iV4iV4i", "nc")
+BUILTIN(__builtin_msa_srar_d, "V2LLiV2LLiV2LLi", "nc")
+
+BUILTIN(__builtin_msa_srari_b, "V16cV16cIUi", "nc")
+BUILTIN(__builtin_msa_srari_h, "V8sV8sIUi", "nc")
+BUILTIN(__builtin_msa_srari_w, "V4iV4iIUi", "nc")
+BUILTIN(__builtin_msa_srari_d, "V2LLiV2LLiIUi", "nc")
+
+BUILTIN(__builtin_msa_srl_b, "V16cV16cV16c", "nc")
+BUILTIN(__builtin_msa_srl_h, "V8sV8sV8s", "nc")
+BUILTIN(__builtin_msa_srl_w, "V4iV4iV4i", "nc")
+BUILTIN(__builtin_msa_srl_d, "V2LLiV2LLiV2LLi", "nc")
+
+BUILTIN(__builtin_msa_srli_b, "V16cV16cIUi", "nc")
+BUILTIN(__builtin_msa_srli_h, "V8sV8sIUi", "nc")
+BUILTIN(__builtin_msa_srli_w, "V4iV4iIUi", "nc")
+BUILTIN(__builtin_msa_srli_d, "V2LLiV2LLiIUi", "nc")
+
+BUILTIN(__builtin_msa_srlr_b, "V16cV16cV16c", "nc")
+BUILTIN(__builtin_msa_srlr_h, "V8sV8sV8s", "nc")
+BUILTIN(__builtin_msa_srlr_w, "V4iV4iV4i", "nc")
+BUILTIN(__builtin_msa_srlr_d, "V2LLiV2LLiV2LLi", "nc")
+
+BUILTIN(__builtin_msa_srlri_b, "V16cV16cIUi", "nc")
+BUILTIN(__builtin_msa_srlri_h, "V8sV8sIUi", "nc")
+BUILTIN(__builtin_msa_srlri_w, "V4iV4iIUi", "nc")
+BUILTIN(__builtin_msa_srlri_d, "V2LLiV2LLiIUi", "nc")
+
+BUILTIN(__builtin_msa_st_b, "vV16Scv*Ii", "nc")
+BUILTIN(__builtin_msa_st_h, "vV8Ssv*Ii", "nc")
+BUILTIN(__builtin_msa_st_w, "vV4Siv*Ii", "nc")
+BUILTIN(__builtin_msa_st_d, "vV2SLLiv*Ii", "nc")
+
+BUILTIN(__builtin_msa_subs_s_b, "V16ScV16ScV16Sc", "nc")
+BUILTIN(__builtin_msa_subs_s_h, "V8SsV8SsV8Ss", "nc")
+BUILTIN(__builtin_msa_subs_s_w, "V4SiV4SiV4Si", "nc")
+BUILTIN(__builtin_msa_subs_s_d, "V2SLLiV2SLLiV2SLLi", "nc")
+
+BUILTIN(__builtin_msa_subs_u_b, "V16UcV16UcV16Uc", "nc")
+BUILTIN(__builtin_msa_subs_u_h, "V8UsV8UsV8Us", "nc")
+BUILTIN(__builtin_msa_subs_u_w, "V4UiV4UiV4Ui", "nc")
+BUILTIN(__builtin_msa_subs_u_d, "V2ULLiV2ULLiV2ULLi", "nc")
+
+BUILTIN(__builtin_msa_subsus_u_b, "V16UcV16UcV16Sc", "nc")
+BUILTIN(__builtin_msa_subsus_u_h, "V8UsV8UsV8Ss", "nc")
+BUILTIN(__builtin_msa_subsus_u_w, "V4UiV4UiV4Si", "nc")
+BUILTIN(__builtin_msa_subsus_u_d, "V2ULLiV2ULLiV2SLLi", "nc")
+
+BUILTIN(__builtin_msa_subsuu_s_b, "V16ScV16UcV16Uc", "nc")
+BUILTIN(__builtin_msa_subsuu_s_h, "V8SsV8UsV8Us", "nc")
+BUILTIN(__builtin_msa_subsuu_s_w, "V4SiV4UiV4Ui", "nc")
+BUILTIN(__builtin_msa_subsuu_s_d, "V2SLLiV2ULLiV2ULLi", "nc")
+
+BUILTIN(__builtin_msa_subv_b, "V16cV16cV16c", "nc")
+BUILTIN(__builtin_msa_subv_h, "V8sV8sV8s", "nc")
+BUILTIN(__builtin_msa_subv_w, "V4iV4iV4i", "nc")
+BUILTIN(__builtin_msa_subv_d, "V2LLiV2LLiV2LLi", "nc")
+
+BUILTIN(__builtin_msa_subvi_b, "V16cV16cIUi", "nc")
+BUILTIN(__builtin_msa_subvi_h, "V8sV8sIUi", "nc")
+BUILTIN(__builtin_msa_subvi_w, "V4iV4iIUi", "nc")
+BUILTIN(__builtin_msa_subvi_d, "V2LLiV2LLiIUi", "nc")
+
+BUILTIN(__builtin_msa_vshf_b, "V16cV16cV16cV16c", "nc")
+BUILTIN(__builtin_msa_vshf_h, "V8sV8sV8sV8s", "nc")
+BUILTIN(__builtin_msa_vshf_w, "V4iV4iV4iV4i", "nc")
+BUILTIN(__builtin_msa_vshf_d, "V2LLiV2LLiV2LLiV2LLi", "nc")
+
+BUILTIN(__builtin_msa_xor_v, "V16cV16cV16c", "nc")
+
+BUILTIN(__builtin_msa_xori_b, "V16cV16cIUi", "nc")
+
+#undef BUILTIN
diff --git a/clang-r353983/include/clang/Basic/BuiltinsNEON.def b/clang-r353983/include/clang/Basic/BuiltinsNEON.def
new file mode 100644
index 00000000..b8eb5a7b
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/BuiltinsNEON.def
@@ -0,0 +1,21 @@
+//===--- BuiltinsNEON.def - NEON Builtin function database ------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the NEON-specific builtin function database. Users of
+// this file must define the BUILTIN macro to make use of this information.
+//
+//===----------------------------------------------------------------------===//
+
+// The format of this database matches clang/Basic/Builtins.def.
+
+#define GET_NEON_BUILTINS
+#include "clang/Basic/arm_neon.inc"
+#include "clang/Basic/arm_fp16.inc"
+#undef GET_NEON_BUILTINS
+
+#undef BUILTIN
diff --git a/clang-r353983/include/clang/Basic/BuiltinsNVPTX.def b/clang-r353983/include/clang/Basic/BuiltinsNVPTX.def
new file mode 100644
index 00000000..b15ed266
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/BuiltinsNVPTX.def
@@ -0,0 +1,675 @@
+//===--- BuiltinsPTX.def - PTX Builtin function database ----*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the PTX-specific builtin function database. Users of
+// this file must define the BUILTIN macro to make use of this information.
+//
+//===----------------------------------------------------------------------===//
+
+// The format of this database matches clang/Basic/Builtins.def.
+
+#if defined(BUILTIN) && !defined(TARGET_BUILTIN)
+# define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BUILTIN(ID, TYPE, ATTRS)
+#endif
+
+#pragma push_macro("SM_70")
+#define SM_70 "sm_70|sm_71"
+#pragma push_macro("SM_60")
+#define SM_60 "sm_60|sm_61|sm_62|" SM_70
+
+#pragma push_macro("PTX61")
+#define PTX61 "ptx61"
+#pragma push_macro("PTX60")
+#define PTX60 "ptx60|" PTX61
+
+#pragma push_macro("AND")
+#define AND(a, b) a "," b
+
+// Special Registers
+
+BUILTIN(__nvvm_read_ptx_sreg_tid_x, "i", "nc")
+BUILTIN(__nvvm_read_ptx_sreg_tid_y, "i", "nc")
+BUILTIN(__nvvm_read_ptx_sreg_tid_z, "i", "nc")
+BUILTIN(__nvvm_read_ptx_sreg_tid_w, "i", "nc")
+
+BUILTIN(__nvvm_read_ptx_sreg_ntid_x, "i", "nc")
+BUILTIN(__nvvm_read_ptx_sreg_ntid_y, "i", "nc")
+BUILTIN(__nvvm_read_ptx_sreg_ntid_z, "i", "nc")
+BUILTIN(__nvvm_read_ptx_sreg_ntid_w, "i", "nc")
+
+BUILTIN(__nvvm_read_ptx_sreg_ctaid_x, "i", "nc")
+BUILTIN(__nvvm_read_ptx_sreg_ctaid_y, "i", "nc")
+BUILTIN(__nvvm_read_ptx_sreg_ctaid_z, "i", "nc")
+BUILTIN(__nvvm_read_ptx_sreg_ctaid_w, "i", "nc")
+
+BUILTIN(__nvvm_read_ptx_sreg_nctaid_x, "i", "nc")
+BUILTIN(__nvvm_read_ptx_sreg_nctaid_y, "i", "nc")
+BUILTIN(__nvvm_read_ptx_sreg_nctaid_z, "i", "nc")
+BUILTIN(__nvvm_read_ptx_sreg_nctaid_w, "i", "nc")
+
+BUILTIN(__nvvm_read_ptx_sreg_laneid, "i", "nc")
+BUILTIN(__nvvm_read_ptx_sreg_warpid, "i", "nc")
+BUILTIN(__nvvm_read_ptx_sreg_nwarpid, "i", "nc")
+
+BUILTIN(__nvvm_read_ptx_sreg_smid, "i", "nc")
+BUILTIN(__nvvm_read_ptx_sreg_nsmid, "i", "nc")
+BUILTIN(__nvvm_read_ptx_sreg_gridid, "i", "nc")
+
+BUILTIN(__nvvm_read_ptx_sreg_lanemask_eq, "i", "nc")
+BUILTIN(__nvvm_read_ptx_sreg_lanemask_le, "i", "nc")
+BUILTIN(__nvvm_read_ptx_sreg_lanemask_lt, "i", "nc")
+BUILTIN(__nvvm_read_ptx_sreg_lanemask_ge, "i", "nc")
+BUILTIN(__nvvm_read_ptx_sreg_lanemask_gt, "i", "nc")
+
+BUILTIN(__nvvm_read_ptx_sreg_clock, "i", "n")
+BUILTIN(__nvvm_read_ptx_sreg_clock64, "LLi", "n")
+
+BUILTIN(__nvvm_read_ptx_sreg_pm0, "i", "n")
+BUILTIN(__nvvm_read_ptx_sreg_pm1, "i", "n")
+BUILTIN(__nvvm_read_ptx_sreg_pm2, "i", "n")
+BUILTIN(__nvvm_read_ptx_sreg_pm3, "i", "n")
+
+// MISC
+
+BUILTIN(__nvvm_prmt, "UiUiUiUi", "")
+
+// Min Max
+
+BUILTIN(__nvvm_fmax_ftz_f, "fff", "")
+BUILTIN(__nvvm_fmax_f, "fff", "")
+BUILTIN(__nvvm_fmin_ftz_f, "fff", "")
+BUILTIN(__nvvm_fmin_f, "fff", "")
+
+BUILTIN(__nvvm_fmax_d, "ddd", "")
+BUILTIN(__nvvm_fmin_d, "ddd", "")
+
+// Multiplication
+
+BUILTIN(__nvvm_mulhi_i, "iii", "")
+BUILTIN(__nvvm_mulhi_ui, "UiUiUi", "")
+BUILTIN(__nvvm_mulhi_ll, "LLiLLiLLi", "")
+BUILTIN(__nvvm_mulhi_ull, "ULLiULLiULLi", "")
+
+BUILTIN(__nvvm_mul_rn_ftz_f, "fff", "")
+BUILTIN(__nvvm_mul_rn_f, "fff", "")
+BUILTIN(__nvvm_mul_rz_ftz_f, "fff", "")
+BUILTIN(__nvvm_mul_rz_f, "fff", "")
+BUILTIN(__nvvm_mul_rm_ftz_f, "fff", "")
+BUILTIN(__nvvm_mul_rm_f, "fff", "")
+BUILTIN(__nvvm_mul_rp_ftz_f, "fff", "")
+BUILTIN(__nvvm_mul_rp_f, "fff", "")
+
+BUILTIN(__nvvm_mul_rn_d, "ddd", "")
+BUILTIN(__nvvm_mul_rz_d, "ddd", "")
+BUILTIN(__nvvm_mul_rm_d, "ddd", "")
+BUILTIN(__nvvm_mul_rp_d, "ddd", "")
+
+BUILTIN(__nvvm_mul24_i, "iii", "")
+BUILTIN(__nvvm_mul24_ui, "UiUiUi", "")
+
+// Div
+
+BUILTIN(__nvvm_div_approx_ftz_f, "fff", "")
+BUILTIN(__nvvm_div_approx_f, "fff", "")
+
+BUILTIN(__nvvm_div_rn_ftz_f, "fff", "")
+BUILTIN(__nvvm_div_rn_f, "fff", "")
+BUILTIN(__nvvm_div_rz_ftz_f, "fff", "")
+BUILTIN(__nvvm_div_rz_f, "fff", "")
+BUILTIN(__nvvm_div_rm_ftz_f, "fff", "")
+BUILTIN(__nvvm_div_rm_f, "fff", "")
+BUILTIN(__nvvm_div_rp_ftz_f, "fff", "")
+BUILTIN(__nvvm_div_rp_f, "fff", "")
+
+BUILTIN(__nvvm_div_rn_d, "ddd", "")
+BUILTIN(__nvvm_div_rz_d, "ddd", "")
+BUILTIN(__nvvm_div_rm_d, "ddd", "")
+BUILTIN(__nvvm_div_rp_d, "ddd", "")
+
+// Sad
+
+BUILTIN(__nvvm_sad_i, "iiii", "")
+BUILTIN(__nvvm_sad_ui, "UiUiUiUi", "")
+
+// Floor, Ceil
+
+BUILTIN(__nvvm_floor_ftz_f, "ff", "")
+BUILTIN(__nvvm_floor_f, "ff", "")
+BUILTIN(__nvvm_floor_d, "dd", "")
+
+BUILTIN(__nvvm_ceil_ftz_f, "ff", "")
+BUILTIN(__nvvm_ceil_f, "ff", "")
+BUILTIN(__nvvm_ceil_d, "dd", "")
+
+// Abs
+
+BUILTIN(__nvvm_fabs_ftz_f, "ff", "")
+BUILTIN(__nvvm_fabs_f, "ff", "")
+BUILTIN(__nvvm_fabs_d, "dd", "")
+
+// Round
+
+BUILTIN(__nvvm_round_ftz_f, "ff", "")
+BUILTIN(__nvvm_round_f, "ff", "")
+BUILTIN(__nvvm_round_d, "dd", "")
+
+// Trunc
+
+BUILTIN(__nvvm_trunc_ftz_f, "ff", "")
+BUILTIN(__nvvm_trunc_f, "ff", "")
+BUILTIN(__nvvm_trunc_d, "dd", "")
+
+// Saturate
+
+BUILTIN(__nvvm_saturate_ftz_f, "ff", "")
+BUILTIN(__nvvm_saturate_f, "ff", "")
+BUILTIN(__nvvm_saturate_d, "dd", "")
+
+// Exp2, Log2
+
+BUILTIN(__nvvm_ex2_approx_ftz_f, "ff", "")
+BUILTIN(__nvvm_ex2_approx_f, "ff", "")
+BUILTIN(__nvvm_ex2_approx_d, "dd", "")
+
+BUILTIN(__nvvm_lg2_approx_ftz_f, "ff", "")
+BUILTIN(__nvvm_lg2_approx_f, "ff", "")
+BUILTIN(__nvvm_lg2_approx_d, "dd", "")
+
+// Sin, Cos
+
+BUILTIN(__nvvm_sin_approx_ftz_f, "ff", "")
+BUILTIN(__nvvm_sin_approx_f, "ff", "")
+
+BUILTIN(__nvvm_cos_approx_ftz_f, "ff", "")
+BUILTIN(__nvvm_cos_approx_f, "ff", "")
+
+// Fma
+
+BUILTIN(__nvvm_fma_rn_ftz_f, "ffff", "")
+BUILTIN(__nvvm_fma_rn_f, "ffff", "")
+BUILTIN(__nvvm_fma_rz_ftz_f, "ffff", "")
+BUILTIN(__nvvm_fma_rz_f, "ffff", "")
+BUILTIN(__nvvm_fma_rm_ftz_f, "ffff", "")
+BUILTIN(__nvvm_fma_rm_f, "ffff", "")
+BUILTIN(__nvvm_fma_rp_ftz_f, "ffff", "")
+BUILTIN(__nvvm_fma_rp_f, "ffff", "")
+BUILTIN(__nvvm_fma_rn_d, "dddd", "")
+BUILTIN(__nvvm_fma_rz_d, "dddd", "")
+BUILTIN(__nvvm_fma_rm_d, "dddd", "")
+BUILTIN(__nvvm_fma_rp_d, "dddd", "")
+
+// Rcp
+
+BUILTIN(__nvvm_rcp_rn_ftz_f, "ff", "")
+BUILTIN(__nvvm_rcp_rn_f, "ff", "")
+BUILTIN(__nvvm_rcp_rz_ftz_f, "ff", "")
+BUILTIN(__nvvm_rcp_rz_f, "ff", "")
+BUILTIN(__nvvm_rcp_rm_ftz_f, "ff", "")
+BUILTIN(__nvvm_rcp_rm_f, "ff", "")
+BUILTIN(__nvvm_rcp_rp_ftz_f, "ff", "")
+BUILTIN(__nvvm_rcp_rp_f, "ff", "")
+
+BUILTIN(__nvvm_rcp_rn_d, "dd", "")
+BUILTIN(__nvvm_rcp_rz_d, "dd", "")
+BUILTIN(__nvvm_rcp_rm_d, "dd", "")
+BUILTIN(__nvvm_rcp_rp_d, "dd", "")
+BUILTIN(__nvvm_rcp_approx_ftz_d, "dd", "")
+
+// Sqrt
+
+BUILTIN(__nvvm_sqrt_rn_ftz_f, "ff", "")
+BUILTIN(__nvvm_sqrt_rn_f, "ff", "")
+BUILTIN(__nvvm_sqrt_rz_ftz_f, "ff", "")
+BUILTIN(__nvvm_sqrt_rz_f, "ff", "")
+BUILTIN(__nvvm_sqrt_rm_ftz_f, "ff", "")
+BUILTIN(__nvvm_sqrt_rm_f, "ff", "")
+BUILTIN(__nvvm_sqrt_rp_ftz_f, "ff", "")
+BUILTIN(__nvvm_sqrt_rp_f, "ff", "")
+BUILTIN(__nvvm_sqrt_approx_ftz_f, "ff", "")
+BUILTIN(__nvvm_sqrt_approx_f, "ff", "")
+
+BUILTIN(__nvvm_sqrt_rn_d, "dd", "")
+BUILTIN(__nvvm_sqrt_rz_d, "dd", "")
+BUILTIN(__nvvm_sqrt_rm_d, "dd", "")
+BUILTIN(__nvvm_sqrt_rp_d, "dd", "")
+
+// Rsqrt
+
+BUILTIN(__nvvm_rsqrt_approx_ftz_f, "ff", "")
+BUILTIN(__nvvm_rsqrt_approx_f, "ff", "")
+BUILTIN(__nvvm_rsqrt_approx_d, "dd", "")
+
+// Add
+
+BUILTIN(__nvvm_add_rn_ftz_f, "fff", "")
+BUILTIN(__nvvm_add_rn_f, "fff", "")
+BUILTIN(__nvvm_add_rz_ftz_f, "fff", "")
+BUILTIN(__nvvm_add_rz_f, "fff", "")
+BUILTIN(__nvvm_add_rm_ftz_f, "fff", "")
+BUILTIN(__nvvm_add_rm_f, "fff", "")
+BUILTIN(__nvvm_add_rp_ftz_f, "fff", "")
+BUILTIN(__nvvm_add_rp_f, "fff", "")
+
+BUILTIN(__nvvm_add_rn_d, "ddd", "")
+BUILTIN(__nvvm_add_rz_d, "ddd", "")
+BUILTIN(__nvvm_add_rm_d, "ddd", "")
+BUILTIN(__nvvm_add_rp_d, "ddd", "")
+
+// Convert
+
+BUILTIN(__nvvm_d2f_rn_ftz, "fd", "")
+BUILTIN(__nvvm_d2f_rn, "fd", "")
+BUILTIN(__nvvm_d2f_rz_ftz, "fd", "")
+BUILTIN(__nvvm_d2f_rz, "fd", "")
+BUILTIN(__nvvm_d2f_rm_ftz, "fd", "")
+BUILTIN(__nvvm_d2f_rm, "fd", "")
+BUILTIN(__nvvm_d2f_rp_ftz, "fd", "")
+BUILTIN(__nvvm_d2f_rp, "fd", "")
+
+BUILTIN(__nvvm_d2i_rn, "id", "")
+BUILTIN(__nvvm_d2i_rz, "id", "")
+BUILTIN(__nvvm_d2i_rm, "id", "")
+BUILTIN(__nvvm_d2i_rp, "id", "")
+
+BUILTIN(__nvvm_d2ui_rn, "Uid", "")
+BUILTIN(__nvvm_d2ui_rz, "Uid", "")
+BUILTIN(__nvvm_d2ui_rm, "Uid", "")
+BUILTIN(__nvvm_d2ui_rp, "Uid", "")
+
+BUILTIN(__nvvm_i2d_rn, "di", "")
+BUILTIN(__nvvm_i2d_rz, "di", "")
+BUILTIN(__nvvm_i2d_rm, "di", "")
+BUILTIN(__nvvm_i2d_rp, "di", "")
+
+BUILTIN(__nvvm_ui2d_rn, "dUi", "")
+BUILTIN(__nvvm_ui2d_rz, "dUi", "")
+BUILTIN(__nvvm_ui2d_rm, "dUi", "")
+BUILTIN(__nvvm_ui2d_rp, "dUi", "")
+
+BUILTIN(__nvvm_f2i_rn_ftz, "if", "")
+BUILTIN(__nvvm_f2i_rn, "if", "")
+BUILTIN(__nvvm_f2i_rz_ftz, "if", "")
+BUILTIN(__nvvm_f2i_rz, "if", "")
+BUILTIN(__nvvm_f2i_rm_ftz, "if", "")
+BUILTIN(__nvvm_f2i_rm, "if", "")
+BUILTIN(__nvvm_f2i_rp_ftz, "if", "")
+BUILTIN(__nvvm_f2i_rp, "if", "")
+
+BUILTIN(__nvvm_f2ui_rn_ftz, "Uif", "")
+BUILTIN(__nvvm_f2ui_rn, "Uif", "")
+BUILTIN(__nvvm_f2ui_rz_ftz, "Uif", "")
+BUILTIN(__nvvm_f2ui_rz, "Uif", "")
+BUILTIN(__nvvm_f2ui_rm_ftz, "Uif", "")
+BUILTIN(__nvvm_f2ui_rm, "Uif", "")
+BUILTIN(__nvvm_f2ui_rp_ftz, "Uif", "")
+BUILTIN(__nvvm_f2ui_rp, "Uif", "")
+
+BUILTIN(__nvvm_i2f_rn, "fi", "")
+BUILTIN(__nvvm_i2f_rz, "fi", "")
+BUILTIN(__nvvm_i2f_rm, "fi", "")
+BUILTIN(__nvvm_i2f_rp, "fi", "")
+
+BUILTIN(__nvvm_ui2f_rn, "fUi", "")
+BUILTIN(__nvvm_ui2f_rz, "fUi", "")
+BUILTIN(__nvvm_ui2f_rm, "fUi", "")
+BUILTIN(__nvvm_ui2f_rp, "fUi", "")
+
+BUILTIN(__nvvm_lohi_i2d, "dii", "")
+
+BUILTIN(__nvvm_d2i_lo, "id", "")
+BUILTIN(__nvvm_d2i_hi, "id", "")
+
+BUILTIN(__nvvm_f2ll_rn_ftz, "LLif", "")
+BUILTIN(__nvvm_f2ll_rn, "LLif", "")
+BUILTIN(__nvvm_f2ll_rz_ftz, "LLif", "")
+BUILTIN(__nvvm_f2ll_rz, "LLif", "")
+BUILTIN(__nvvm_f2ll_rm_ftz, "LLif", "")
+BUILTIN(__nvvm_f2ll_rm, "LLif", "")
+BUILTIN(__nvvm_f2ll_rp_ftz, "LLif", "")
+BUILTIN(__nvvm_f2ll_rp, "LLif", "")
+
+BUILTIN(__nvvm_f2ull_rn_ftz, "ULLif", "")
+BUILTIN(__nvvm_f2ull_rn, "ULLif", "")
+BUILTIN(__nvvm_f2ull_rz_ftz, "ULLif", "")
+BUILTIN(__nvvm_f2ull_rz, "ULLif", "")
+BUILTIN(__nvvm_f2ull_rm_ftz, "ULLif", "")
+BUILTIN(__nvvm_f2ull_rm, "ULLif", "")
+BUILTIN(__nvvm_f2ull_rp_ftz, "ULLif", "")
+BUILTIN(__nvvm_f2ull_rp, "ULLif", "")
+
+BUILTIN(__nvvm_d2ll_rn, "LLid", "")
+BUILTIN(__nvvm_d2ll_rz, "LLid", "")
+BUILTIN(__nvvm_d2ll_rm, "LLid", "")
+BUILTIN(__nvvm_d2ll_rp, "LLid", "")
+
+BUILTIN(__nvvm_d2ull_rn, "ULLid", "")
+BUILTIN(__nvvm_d2ull_rz, "ULLid", "")
+BUILTIN(__nvvm_d2ull_rm, "ULLid", "")
+BUILTIN(__nvvm_d2ull_rp, "ULLid", "")
+
+BUILTIN(__nvvm_ll2f_rn, "fLLi", "")
+BUILTIN(__nvvm_ll2f_rz, "fLLi", "")
+BUILTIN(__nvvm_ll2f_rm, "fLLi", "")
+BUILTIN(__nvvm_ll2f_rp, "fLLi", "")
+
+BUILTIN(__nvvm_ull2f_rn, "fULLi", "")
+BUILTIN(__nvvm_ull2f_rz, "fULLi", "")
+BUILTIN(__nvvm_ull2f_rm, "fULLi", "")
+BUILTIN(__nvvm_ull2f_rp, "fULLi", "")
+
+BUILTIN(__nvvm_ll2d_rn, "dLLi", "")
+BUILTIN(__nvvm_ll2d_rz, "dLLi", "")
+BUILTIN(__nvvm_ll2d_rm, "dLLi", "")
+BUILTIN(__nvvm_ll2d_rp, "dLLi", "")
+
+BUILTIN(__nvvm_ull2d_rn, "dULLi", "")
+BUILTIN(__nvvm_ull2d_rz, "dULLi", "")
+BUILTIN(__nvvm_ull2d_rm, "dULLi", "")
+BUILTIN(__nvvm_ull2d_rp, "dULLi", "")
+
+BUILTIN(__nvvm_f2h_rn_ftz, "Usf", "")
+BUILTIN(__nvvm_f2h_rn, "Usf", "")
+
+// Bitcast
+
+BUILTIN(__nvvm_bitcast_f2i, "if", "")
+BUILTIN(__nvvm_bitcast_i2f, "fi", "")
+
+BUILTIN(__nvvm_bitcast_ll2d, "dLLi", "")
+BUILTIN(__nvvm_bitcast_d2ll, "LLid", "")
+
+// FNS
+TARGET_BUILTIN(__nvvm_fns, "UiUiUii", "n", PTX60)
+
+// Sync
+
+BUILTIN(__syncthreads, "v", "")
+BUILTIN(__nvvm_bar0_popc, "ii", "")
+BUILTIN(__nvvm_bar0_and, "ii", "")
+BUILTIN(__nvvm_bar0_or, "ii", "")
+BUILTIN(__nvvm_bar_sync, "vi", "n")
+TARGET_BUILTIN(__nvvm_bar_warp_sync, "vUi", "n", PTX60)
+TARGET_BUILTIN(__nvvm_barrier_sync, "vUi", "n", PTX60)
+TARGET_BUILTIN(__nvvm_barrier_sync_cnt, "vUiUi", "n", PTX60)
+
+// Shuffle
+
+BUILTIN(__nvvm_shfl_down_i32, "iiii", "")
+BUILTIN(__nvvm_shfl_down_f32, "ffii", "")
+BUILTIN(__nvvm_shfl_up_i32, "iiii", "")
+BUILTIN(__nvvm_shfl_up_f32, "ffii", "")
+BUILTIN(__nvvm_shfl_bfly_i32, "iiii", "")
+BUILTIN(__nvvm_shfl_bfly_f32, "ffii", "")
+BUILTIN(__nvvm_shfl_idx_i32, "iiii", "")
+BUILTIN(__nvvm_shfl_idx_f32, "ffii", "")
+
+TARGET_BUILTIN(__nvvm_shfl_sync_down_i32, "iUiiii", "", PTX60)
+TARGET_BUILTIN(__nvvm_shfl_sync_down_f32, "fUifii", "", PTX60)
+TARGET_BUILTIN(__nvvm_shfl_sync_up_i32, "iUiiii", "", PTX60)
+TARGET_BUILTIN(__nvvm_shfl_sync_up_f32, "fUifii", "", PTX60)
+TARGET_BUILTIN(__nvvm_shfl_sync_bfly_i32, "iUiiii", "", PTX60)
+TARGET_BUILTIN(__nvvm_shfl_sync_bfly_f32, "fUifii", "", PTX60)
+TARGET_BUILTIN(__nvvm_shfl_sync_idx_i32, "iUiiii", "", PTX60)
+TARGET_BUILTIN(__nvvm_shfl_sync_idx_f32, "fUifii", "", PTX60)
+
+// Vote
+BUILTIN(__nvvm_vote_all, "bb", "")
+BUILTIN(__nvvm_vote_any, "bb", "")
+BUILTIN(__nvvm_vote_uni, "bb", "")
+BUILTIN(__nvvm_vote_ballot, "Uib", "")
+
+TARGET_BUILTIN(__nvvm_vote_all_sync, "bUib", "", PTX60)
+TARGET_BUILTIN(__nvvm_vote_any_sync, "bUib", "", PTX60)
+TARGET_BUILTIN(__nvvm_vote_uni_sync, "bUib", "", PTX60)
+TARGET_BUILTIN(__nvvm_vote_ballot_sync, "UiUib", "", PTX60)
+
+// Match
+TARGET_BUILTIN(__nvvm_match_any_sync_i32, "UiUiUi", "", PTX60)
+TARGET_BUILTIN(__nvvm_match_any_sync_i64, "WiUiWi", "", PTX60)
+// These return a pair {value, predicate}, which requires custom lowering.
+TARGET_BUILTIN(__nvvm_match_all_sync_i32p, "UiUiUii*", "", PTX60)
+TARGET_BUILTIN(__nvvm_match_all_sync_i64p, "WiUiWii*", "", PTX60)
+
+// Membar
+
+BUILTIN(__nvvm_membar_cta, "v", "")
+BUILTIN(__nvvm_membar_gl, "v", "")
+BUILTIN(__nvvm_membar_sys, "v", "")
+
+// Memcpy, Memset
+
+BUILTIN(__nvvm_memcpy, "vUc*Uc*zi","")
+BUILTIN(__nvvm_memset, "vUc*Uczi","")
+
+// Image
+
+BUILTIN(__builtin_ptx_read_image2Dfi_, "V4fiiii", "")
+BUILTIN(__builtin_ptx_read_image2Dff_, "V4fiiff", "")
+BUILTIN(__builtin_ptx_read_image2Dii_, "V4iiiii", "")
+BUILTIN(__builtin_ptx_read_image2Dif_, "V4iiiff", "")
+
+BUILTIN(__builtin_ptx_read_image3Dfi_, "V4fiiiiii", "")
+BUILTIN(__builtin_ptx_read_image3Dff_, "V4fiiffff", "")
+BUILTIN(__builtin_ptx_read_image3Dii_, "V4iiiiiii", "")
+BUILTIN(__builtin_ptx_read_image3Dif_, "V4iiiffff", "")
+
+BUILTIN(__builtin_ptx_write_image2Df_, "viiiffff", "")
+BUILTIN(__builtin_ptx_write_image2Di_, "viiiiiii", "")
+BUILTIN(__builtin_ptx_write_image2Dui_, "viiiUiUiUiUi", "")
+BUILTIN(__builtin_ptx_get_image_depthi_, "ii", "")
+BUILTIN(__builtin_ptx_get_image_heighti_, "ii", "")
+BUILTIN(__builtin_ptx_get_image_widthi_, "ii", "")
+BUILTIN(__builtin_ptx_get_image_channel_data_typei_, "ii", "")
+BUILTIN(__builtin_ptx_get_image_channel_orderi_, "ii", "")
+
+// Atomic
+//
+// We need the atom intrinsics because
+// - they are used in converging analysis
+// - they are used in address space analysis and optimization
+// So it does not hurt to expose them as builtins.
+//
+BUILTIN(__nvvm_atom_add_gen_i, "iiD*i", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_add_gen_i, "iiD*i", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_add_gen_i, "iiD*i", "n", SM_60)
+BUILTIN(__nvvm_atom_add_gen_l, "LiLiD*Li", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_add_gen_l, "LiLiD*Li", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_add_gen_l, "LiLiD*Li", "n", SM_60)
+BUILTIN(__nvvm_atom_add_gen_ll, "LLiLLiD*LLi", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_add_gen_ll, "LLiLLiD*LLi", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_add_gen_ll, "LLiLLiD*LLi", "n", SM_60)
+BUILTIN(__nvvm_atom_add_gen_f, "ffD*f", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_add_gen_f, "ffD*f", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_add_gen_f, "ffD*f", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_add_gen_d, "ddD*d", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_cta_add_gen_d, "ddD*d", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_add_gen_d, "ddD*d", "n", SM_60)
+
+BUILTIN(__nvvm_atom_sub_gen_i, "iiD*i", "n")
+BUILTIN(__nvvm_atom_sub_gen_l, "LiLiD*Li", "n")
+BUILTIN(__nvvm_atom_sub_gen_ll, "LLiLLiD*LLi", "n")
+
+BUILTIN(__nvvm_atom_xchg_gen_i, "iiD*i", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_xchg_gen_i, "iiD*i", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_xchg_gen_i, "iiD*i", "n", SM_60)
+BUILTIN(__nvvm_atom_xchg_gen_l, "LiLiD*Li", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_xchg_gen_l, "LiLiD*Li", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_xchg_gen_l, "LiLiD*Li", "n", SM_60)
+BUILTIN(__nvvm_atom_xchg_gen_ll, "LLiLLiD*LLi", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_xchg_gen_ll, "LLiLLiD*LLi", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_xchg_gen_ll, "LLiLLiD*LLi", "n", SM_60)
+
+BUILTIN(__nvvm_atom_max_gen_i, "iiD*i", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_max_gen_i, "iiD*i", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_max_gen_i, "iiD*i", "n", SM_60)
+BUILTIN(__nvvm_atom_max_gen_ui, "UiUiD*Ui", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_max_gen_ui, "UiUiD*Ui", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_max_gen_ui, "UiUiD*Ui", "n", SM_60)
+BUILTIN(__nvvm_atom_max_gen_l, "LiLiD*Li", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_max_gen_l, "LiLiD*Li", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_max_gen_l, "LiLiD*Li", "n", SM_60)
+BUILTIN(__nvvm_atom_max_gen_ul, "ULiULiD*ULi", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_max_gen_ul, "ULiULiD*ULi", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_max_gen_ul, "ULiULiD*ULi", "n", SM_60)
+BUILTIN(__nvvm_atom_max_gen_ll, "LLiLLiD*LLi", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_max_gen_ll, "LLiLLiD*LLi", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_max_gen_ll, "LLiLLiD*LLi", "n", SM_60)
+BUILTIN(__nvvm_atom_max_gen_ull, "ULLiULLiD*ULLi", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_max_gen_ull, "ULLiULLiD*ULLi", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_max_gen_ull, "ULLiULLiD*ULLi", "n", SM_60)
+
+BUILTIN(__nvvm_atom_min_gen_i, "iiD*i", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_min_gen_i, "iiD*i", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_min_gen_i, "iiD*i", "n", SM_60)
+BUILTIN(__nvvm_atom_min_gen_ui, "UiUiD*Ui", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_min_gen_ui, "UiUiD*Ui", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_min_gen_ui, "UiUiD*Ui", "n", SM_60)
+BUILTIN(__nvvm_atom_min_gen_l, "LiLiD*Li", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_min_gen_l, "LiLiD*Li", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_min_gen_l, "LiLiD*Li", "n", SM_60)
+BUILTIN(__nvvm_atom_min_gen_ul, "ULiULiD*ULi", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_min_gen_ul, "ULiULiD*ULi", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_min_gen_ul, "ULiULiD*ULi", "n", SM_60)
+BUILTIN(__nvvm_atom_min_gen_ll, "LLiLLiD*LLi", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_min_gen_ll, "LLiLLiD*LLi", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_min_gen_ll, "LLiLLiD*LLi", "n", SM_60)
+BUILTIN(__nvvm_atom_min_gen_ull, "ULLiULLiD*ULLi", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_min_gen_ull, "ULLiULLiD*ULLi", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_min_gen_ull, "ULLiULLiD*ULLi", "n", SM_60)
+
+BUILTIN(__nvvm_atom_inc_gen_ui, "UiUiD*Ui", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_inc_gen_ui, "UiUiD*Ui", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_inc_gen_ui, "UiUiD*Ui", "n", SM_60)
+BUILTIN(__nvvm_atom_dec_gen_ui, "UiUiD*Ui", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_dec_gen_ui, "UiUiD*Ui", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_dec_gen_ui, "UiUiD*Ui", "n", SM_60)
+
+BUILTIN(__nvvm_atom_and_gen_i, "iiD*i", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_and_gen_i, "iiD*i", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_and_gen_i, "iiD*i", "n", SM_60)
+BUILTIN(__nvvm_atom_and_gen_l, "LiLiD*Li", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_and_gen_l, "LiLiD*Li", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_and_gen_l, "LiLiD*Li", "n", SM_60)
+BUILTIN(__nvvm_atom_and_gen_ll, "LLiLLiD*LLi", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_and_gen_ll, "LLiLLiD*LLi", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_and_gen_ll, "LLiLLiD*LLi", "n", SM_60)
+
+BUILTIN(__nvvm_atom_or_gen_i, "iiD*i", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_or_gen_i, "iiD*i", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_or_gen_i, "iiD*i", "n", SM_60)
+BUILTIN(__nvvm_atom_or_gen_l, "LiLiD*Li", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_or_gen_l, "LiLiD*Li", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_or_gen_l, "LiLiD*Li", "n", SM_60)
+BUILTIN(__nvvm_atom_or_gen_ll, "LLiLLiD*LLi", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_or_gen_ll, "LLiLLiD*LLi", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_or_gen_ll, "LLiLLiD*LLi", "n", SM_60)
+
+BUILTIN(__nvvm_atom_xor_gen_i, "iiD*i", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_xor_gen_i, "iiD*i", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_xor_gen_i, "iiD*i", "n", SM_60)
+BUILTIN(__nvvm_atom_xor_gen_l, "LiLiD*Li", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_xor_gen_l, "LiLiD*Li", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_xor_gen_l, "LiLiD*Li", "n", SM_60)
+BUILTIN(__nvvm_atom_xor_gen_ll, "LLiLLiD*LLi", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_xor_gen_ll, "LLiLLiD*LLi", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_xor_gen_ll, "LLiLLiD*LLi", "n", SM_60)
+
+BUILTIN(__nvvm_atom_cas_gen_i, "iiD*ii", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_cas_gen_i, "iiD*ii", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_cas_gen_i, "iiD*ii", "n", SM_60)
+BUILTIN(__nvvm_atom_cas_gen_l, "LiLiD*LiLi", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_cas_gen_l, "LiLiD*LiLi", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_cas_gen_l, "LiLiD*LiLi", "n", SM_60)
+BUILTIN(__nvvm_atom_cas_gen_ll, "LLiLLiD*LLiLLi", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_cas_gen_ll, "LLiLLiD*LLiLLi", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_cas_gen_ll, "LLiLLiD*LLiLLi", "n", SM_60)
+
+// Compiler Error Warn
+BUILTIN(__nvvm_compiler_error, "vcC*4", "n")
+BUILTIN(__nvvm_compiler_warn, "vcC*4", "n")
+
+// __ldg. This is not implemented as a builtin by nvcc.
+BUILTIN(__nvvm_ldg_c, "ccC*", "")
+BUILTIN(__nvvm_ldg_s, "ssC*", "")
+BUILTIN(__nvvm_ldg_i, "iiC*", "")
+BUILTIN(__nvvm_ldg_l, "LiLiC*", "")
+BUILTIN(__nvvm_ldg_ll, "LLiLLiC*", "")
+
+BUILTIN(__nvvm_ldg_uc, "UcUcC*", "")
+BUILTIN(__nvvm_ldg_us, "UsUsC*", "")
+BUILTIN(__nvvm_ldg_ui, "UiUiC*", "")
+BUILTIN(__nvvm_ldg_ul, "ULiULiC*", "")
+BUILTIN(__nvvm_ldg_ull, "ULLiULLiC*", "")
+
+BUILTIN(__nvvm_ldg_f, "ffC*", "")
+BUILTIN(__nvvm_ldg_d, "ddC*", "")
+
+BUILTIN(__nvvm_ldg_c2, "E2cE2cC*", "")
+BUILTIN(__nvvm_ldg_c4, "E4cE4cC*", "")
+BUILTIN(__nvvm_ldg_s2, "E2sE2sC*", "")
+BUILTIN(__nvvm_ldg_s4, "E4sE4sC*", "")
+BUILTIN(__nvvm_ldg_i2, "E2iE2iC*", "")
+BUILTIN(__nvvm_ldg_i4, "E4iE4iC*", "")
+BUILTIN(__nvvm_ldg_ll2, "E2LLiE2LLiC*", "")
+
+BUILTIN(__nvvm_ldg_uc2, "E2UcE2UcC*", "")
+BUILTIN(__nvvm_ldg_uc4, "E4UcE4UcC*", "")
+BUILTIN(__nvvm_ldg_us2, "E2UsE2UsC*", "")
+BUILTIN(__nvvm_ldg_us4, "E4UsE4UsC*", "")
+BUILTIN(__nvvm_ldg_ui2, "E2UiE2UiC*", "")
+BUILTIN(__nvvm_ldg_ui4, "E4UiE4UiC*", "")
+BUILTIN(__nvvm_ldg_ull2, "E2ULLiE2ULLiC*", "")
+
+BUILTIN(__nvvm_ldg_f2, "E2fE2fC*", "")
+BUILTIN(__nvvm_ldg_f4, "E4fE4fC*", "")
+BUILTIN(__nvvm_ldg_d2, "E2dE2dC*", "")
+
+// Builtins to support WMMA instructions on sm_70
+TARGET_BUILTIN(__hmma_m16n16k16_ld_a, "vi*iC*UiIi", "", AND(SM_70,PTX60))
+TARGET_BUILTIN(__hmma_m16n16k16_ld_b, "vi*iC*UiIi", "", AND(SM_70,PTX60))
+TARGET_BUILTIN(__hmma_m16n16k16_ld_c_f16, "vi*iC*UiIi", "", AND(SM_70,PTX60))
+TARGET_BUILTIN(__hmma_m16n16k16_ld_c_f32, "vf*fC*UiIi", "", AND(SM_70,PTX60))
+TARGET_BUILTIN(__hmma_m16n16k16_st_c_f16, "vi*i*UiIi", "", AND(SM_70,PTX60))
+TARGET_BUILTIN(__hmma_m16n16k16_st_c_f32, "vf*f*UiIi", "", AND(SM_70,PTX60))
+
+TARGET_BUILTIN(__hmma_m32n8k16_ld_a, "vi*iC*UiIi", "", AND(SM_70,PTX61))
+TARGET_BUILTIN(__hmma_m32n8k16_ld_b, "vi*iC*UiIi", "", AND(SM_70,PTX61))
+TARGET_BUILTIN(__hmma_m32n8k16_ld_c_f16, "vi*iC*UiIi", "", AND(SM_70,PTX61))
+TARGET_BUILTIN(__hmma_m32n8k16_ld_c_f32, "vf*fC*UiIi", "", AND(SM_70,PTX61))
+TARGET_BUILTIN(__hmma_m32n8k16_st_c_f16, "vi*i*UiIi", "", AND(SM_70,PTX61))
+TARGET_BUILTIN(__hmma_m32n8k16_st_c_f32, "vf*f*UiIi", "", AND(SM_70,PTX61))
+
+TARGET_BUILTIN(__hmma_m8n32k16_ld_a, "vi*iC*UiIi", "", AND(SM_70,PTX61))
+TARGET_BUILTIN(__hmma_m8n32k16_ld_b, "vi*iC*UiIi", "", AND(SM_70,PTX61))
+TARGET_BUILTIN(__hmma_m8n32k16_ld_c_f16, "vi*iC*UiIi", "", AND(SM_70,PTX61))
+TARGET_BUILTIN(__hmma_m8n32k16_ld_c_f32, "vf*fC*UiIi", "", AND(SM_70,PTX61))
+TARGET_BUILTIN(__hmma_m8n32k16_st_c_f16, "vi*i*UiIi", "", AND(SM_70,PTX61))
+TARGET_BUILTIN(__hmma_m8n32k16_st_c_f32, "vf*f*UiIi", "", AND(SM_70,PTX61))
+
+TARGET_BUILTIN(__hmma_m16n16k16_mma_f16f16, "vi*iC*iC*iC*IiIi", "", AND(SM_70,PTX60))
+TARGET_BUILTIN(__hmma_m16n16k16_mma_f32f16, "vf*iC*iC*iC*IiIi", "", AND(SM_70,PTX60))
+TARGET_BUILTIN(__hmma_m16n16k16_mma_f32f32, "vf*iC*iC*fC*IiIi", "", AND(SM_70,PTX60))
+TARGET_BUILTIN(__hmma_m16n16k16_mma_f16f32, "vi*iC*iC*fC*IiIi", "", AND(SM_70,PTX60))
+
+TARGET_BUILTIN(__hmma_m32n8k16_mma_f16f16, "vi*iC*iC*iC*IiIi", "", AND(SM_70,PTX61))
+TARGET_BUILTIN(__hmma_m32n8k16_mma_f32f16, "vf*iC*iC*iC*IiIi", "", AND(SM_70,PTX61))
+TARGET_BUILTIN(__hmma_m32n8k16_mma_f32f32, "vf*iC*iC*fC*IiIi", "", AND(SM_70,PTX61))
+TARGET_BUILTIN(__hmma_m32n8k16_mma_f16f32, "vi*iC*iC*fC*IiIi", "", AND(SM_70,PTX61))
+
+TARGET_BUILTIN(__hmma_m8n32k16_mma_f16f16, "vi*iC*iC*iC*IiIi", "", AND(SM_70,PTX61))
+TARGET_BUILTIN(__hmma_m8n32k16_mma_f32f16, "vf*iC*iC*iC*IiIi", "", AND(SM_70,PTX61))
+TARGET_BUILTIN(__hmma_m8n32k16_mma_f32f32, "vf*iC*iC*fC*IiIi", "", AND(SM_70,PTX61))
+TARGET_BUILTIN(__hmma_m8n32k16_mma_f16f32, "vi*iC*iC*fC*IiIi", "", AND(SM_70,PTX61))
+
+#undef BUILTIN
+#undef TARGET_BUILTIN
+#pragma pop_macro("AND")
+#pragma pop_macro("SM_60")
+#pragma pop_macro("SM_70")
+#pragma pop_macro("PTX60")
+#pragma pop_macro("PTX61")
diff --git a/clang-r353983/include/clang/Basic/BuiltinsPPC.def b/clang-r353983/include/clang/Basic/BuiltinsPPC.def
new file mode 100644
index 00000000..e55fa04a
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/BuiltinsPPC.def
@@ -0,0 +1,480 @@
+//===--- BuiltinsPPC.def - PowerPC Builtin function database ----*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the PowerPC-specific builtin function database. Users of
+// this file must define the BUILTIN macro to make use of this information.
+//
+//===----------------------------------------------------------------------===//
+
+// FIXME: this needs to be the full list supported by GCC. Right now, I'm just
+// adding stuff on demand.
+
+// The format of this database matches clang/Basic/Builtins.def.
+
+BUILTIN(__builtin_ppc_get_timebase, "ULLi", "n")
+
+// This is just a placeholder, the types and attributes are wrong.
+BUILTIN(__builtin_altivec_vaddcuw, "V4UiV4UiV4Ui", "")
+
+BUILTIN(__builtin_altivec_vaddsbs, "V16ScV16ScV16Sc", "")
+BUILTIN(__builtin_altivec_vaddubs, "V16UcV16UcV16Uc", "")
+BUILTIN(__builtin_altivec_vaddshs, "V8SsV8SsV8Ss", "")
+BUILTIN(__builtin_altivec_vadduhs, "V8UsV8UsV8Us", "")
+BUILTIN(__builtin_altivec_vaddsws, "V4SiV4SiV4Si", "")
+BUILTIN(__builtin_altivec_vadduws, "V4UiV4UiV4Ui", "")
+BUILTIN(__builtin_altivec_vaddeuqm, "V1ULLLiV1ULLLiV1ULLLiV1ULLLi","")
+BUILTIN(__builtin_altivec_vaddcuq, "V1ULLLiV1ULLLiV1ULLLi","")
+BUILTIN(__builtin_altivec_vaddecuq, "V1ULLLiV1ULLLiV1ULLLiV1ULLLi","")
+
+BUILTIN(__builtin_altivec_vsubsbs, "V16ScV16ScV16Sc", "")
+BUILTIN(__builtin_altivec_vsububs, "V16UcV16UcV16Uc", "")
+BUILTIN(__builtin_altivec_vsubshs, "V8SsV8SsV8Ss", "")
+BUILTIN(__builtin_altivec_vsubuhs, "V8UsV8UsV8Us", "")
+BUILTIN(__builtin_altivec_vsubsws, "V4SiV4SiV4Si", "")
+BUILTIN(__builtin_altivec_vsubuws, "V4UiV4UiV4Ui", "")
+BUILTIN(__builtin_altivec_vsubeuqm, "V1ULLLiV1ULLLiV1ULLLiV1ULLLi","")
+BUILTIN(__builtin_altivec_vsubcuq, "V1ULLLiV1ULLLiV1ULLLi","")
+BUILTIN(__builtin_altivec_vsubecuq, "V1ULLLiV1ULLLiV1ULLLiV1ULLLi","")
+
+BUILTIN(__builtin_altivec_vavgsb, "V16ScV16ScV16Sc", "")
+BUILTIN(__builtin_altivec_vavgub, "V16UcV16UcV16Uc", "")
+BUILTIN(__builtin_altivec_vavgsh, "V8SsV8SsV8Ss", "")
+BUILTIN(__builtin_altivec_vavguh, "V8UsV8UsV8Us", "")
+BUILTIN(__builtin_altivec_vavgsw, "V4SiV4SiV4Si", "")
+BUILTIN(__builtin_altivec_vavguw, "V4UiV4UiV4Ui", "")
+
+BUILTIN(__builtin_altivec_vrfip, "V4fV4f", "")
+
+BUILTIN(__builtin_altivec_vcfsx, "V4fV4iIi", "")
+BUILTIN(__builtin_altivec_vcfux, "V4fV4iIi", "")
+BUILTIN(__builtin_altivec_vctsxs, "V4SiV4fIi", "")
+BUILTIN(__builtin_altivec_vctuxs, "V4UiV4fIi", "")
+
+BUILTIN(__builtin_altivec_dss, "vUi", "")
+BUILTIN(__builtin_altivec_dssall, "v", "")
+BUILTIN(__builtin_altivec_dst, "vvC*iUi", "")
+BUILTIN(__builtin_altivec_dstt, "vvC*iUi", "")
+BUILTIN(__builtin_altivec_dstst, "vvC*iUi", "")
+BUILTIN(__builtin_altivec_dststt, "vvC*iUi", "")
+
+BUILTIN(__builtin_altivec_vexptefp, "V4fV4f", "")
+
+BUILTIN(__builtin_altivec_vrfim, "V4fV4f", "")
+
+BUILTIN(__builtin_altivec_lvx, "V4iivC*", "")
+BUILTIN(__builtin_altivec_lvxl, "V4iivC*", "")
+BUILTIN(__builtin_altivec_lvebx, "V16civC*", "")
+BUILTIN(__builtin_altivec_lvehx, "V8sivC*", "")
+BUILTIN(__builtin_altivec_lvewx, "V4iivC*", "")
+
+BUILTIN(__builtin_altivec_vlogefp, "V4fV4f", "")
+
+BUILTIN(__builtin_altivec_lvsl, "V16cUcvC*", "")
+BUILTIN(__builtin_altivec_lvsr, "V16cUcvC*", "")
+
+BUILTIN(__builtin_altivec_vmaddfp, "V4fV4fV4fV4f", "")
+BUILTIN(__builtin_altivec_vmhaddshs, "V8sV8sV8sV8s", "")
+BUILTIN(__builtin_altivec_vmhraddshs, "V8sV8sV8sV8s", "")
+
+BUILTIN(__builtin_altivec_vmsumubm, "V4UiV16UcV16UcV4Ui", "")
+BUILTIN(__builtin_altivec_vmsummbm, "V4SiV16ScV16UcV4Si", "")
+BUILTIN(__builtin_altivec_vmsumuhm, "V4UiV8UsV8UsV4Ui", "")
+BUILTIN(__builtin_altivec_vmsumshm, "V4SiV8SsV8SsV4Si", "")
+BUILTIN(__builtin_altivec_vmsumuhs, "V4UiV8UsV8UsV4Ui", "")
+BUILTIN(__builtin_altivec_vmsumshs, "V4SiV8SsV8SsV4Si", "")
+
+BUILTIN(__builtin_altivec_vmuleub, "V8UsV16UcV16Uc", "")
+BUILTIN(__builtin_altivec_vmulesb, "V8SsV16ScV16Sc", "")
+BUILTIN(__builtin_altivec_vmuleuh, "V4UiV8UsV8Us", "")
+BUILTIN(__builtin_altivec_vmulesh, "V4SiV8SsV8Ss", "")
+BUILTIN(__builtin_altivec_vmuleuw, "V2ULLiV4UiV4Ui", "")
+BUILTIN(__builtin_altivec_vmulesw, "V2SLLiV4SiV4Si", "")
+BUILTIN(__builtin_altivec_vmuloub, "V8UsV16UcV16Uc", "")
+BUILTIN(__builtin_altivec_vmulosb, "V8SsV16ScV16Sc", "")
+BUILTIN(__builtin_altivec_vmulouh, "V4UiV8UsV8Us", "")
+BUILTIN(__builtin_altivec_vmulosh, "V4SiV8SsV8Ss", "")
+BUILTIN(__builtin_altivec_vmulouw, "V2ULLiV4UiV4Ui", "")
+BUILTIN(__builtin_altivec_vmulosw, "V2SLLiV4SiV4Si", "")
+
+BUILTIN(__builtin_altivec_vnmsubfp, "V4fV4fV4fV4f", "")
+
+BUILTIN(__builtin_altivec_vpkpx, "V8sV4UiV4Ui", "")
+BUILTIN(__builtin_altivec_vpkuhus, "V16UcV8UsV8Us", "")
+BUILTIN(__builtin_altivec_vpkshss, "V16ScV8SsV8Ss", "")
+BUILTIN(__builtin_altivec_vpkuwus, "V8UsV4UiV4Ui", "")
+BUILTIN(__builtin_altivec_vpkswss, "V8SsV4SiV4Si", "")
+BUILTIN(__builtin_altivec_vpkshus, "V16UcV8SsV8Ss", "")
+BUILTIN(__builtin_altivec_vpkswus, "V8UsV4SiV4Si", "")
+BUILTIN(__builtin_altivec_vpksdss, "V4SiV2SLLiV2SLLi", "")
+BUILTIN(__builtin_altivec_vpksdus, "V4UiV2SLLiV2SLLi", "")
+BUILTIN(__builtin_altivec_vpkudus, "V4UiV2ULLiV2ULLi", "")
+BUILTIN(__builtin_altivec_vpkudum, "V4UiV2ULLiV2ULLi", "")
+
+BUILTIN(__builtin_altivec_vperm_4si, "V4iV4iV4iV16Uc", "")
+
+BUILTIN(__builtin_altivec_stvx, "vV4iiv*", "")
+BUILTIN(__builtin_altivec_stvxl, "vV4iiv*", "")
+BUILTIN(__builtin_altivec_stvebx, "vV16civ*", "")
+BUILTIN(__builtin_altivec_stvehx, "vV8siv*", "")
+BUILTIN(__builtin_altivec_stvewx, "vV4iiv*", "")
+
+BUILTIN(__builtin_altivec_vcmpbfp, "V4iV4fV4f", "")
+
+BUILTIN(__builtin_altivec_vcmpgefp, "V4iV4fV4f", "")
+
+BUILTIN(__builtin_altivec_vcmpequb, "V16cV16cV16c", "")
+BUILTIN(__builtin_altivec_vcmpequh, "V8sV8sV8s", "")
+BUILTIN(__builtin_altivec_vcmpequw, "V4iV4iV4i", "")
+BUILTIN(__builtin_altivec_vcmpequd, "V2LLiV2LLiV2LLi", "")
+BUILTIN(__builtin_altivec_vcmpeqfp, "V4iV4fV4f", "")
+
+BUILTIN(__builtin_altivec_vcmpneb, "V16cV16cV16c", "")
+BUILTIN(__builtin_altivec_vcmpneh, "V8sV8sV8s", "")
+BUILTIN(__builtin_altivec_vcmpnew, "V4iV4iV4i", "")
+
+BUILTIN(__builtin_altivec_vcmpnezb, "V16cV16cV16c", "")
+BUILTIN(__builtin_altivec_vcmpnezh, "V8sV8sV8s", "")
+BUILTIN(__builtin_altivec_vcmpnezw, "V4iV4iV4i", "")
+
+BUILTIN(__builtin_altivec_vcmpgtsb, "V16cV16ScV16Sc", "")
+BUILTIN(__builtin_altivec_vcmpgtub, "V16cV16UcV16Uc", "")
+BUILTIN(__builtin_altivec_vcmpgtsh, "V8sV8SsV8Ss", "")
+BUILTIN(__builtin_altivec_vcmpgtuh, "V8sV8UsV8Us", "")
+BUILTIN(__builtin_altivec_vcmpgtsw, "V4iV4SiV4Si", "")
+BUILTIN(__builtin_altivec_vcmpgtuw, "V4iV4UiV4Ui", "")
+BUILTIN(__builtin_altivec_vcmpgtsd, "V2LLiV2LLiV2LLi", "")
+BUILTIN(__builtin_altivec_vcmpgtud, "V2LLiV2ULLiV2ULLi", "")
+BUILTIN(__builtin_altivec_vcmpgtfp, "V4iV4fV4f", "")
+
+BUILTIN(__builtin_altivec_vmaxsb, "V16ScV16ScV16Sc", "")
+BUILTIN(__builtin_altivec_vmaxub, "V16UcV16UcV16Uc", "")
+BUILTIN(__builtin_altivec_vmaxsh, "V8SsV8SsV8Ss", "")
+BUILTIN(__builtin_altivec_vmaxuh, "V8UsV8UsV8Us", "")
+BUILTIN(__builtin_altivec_vmaxsw, "V4SiV4SiV4Si", "")
+BUILTIN(__builtin_altivec_vmaxuw, "V4UiV4UiV4Ui", "")
+BUILTIN(__builtin_altivec_vmaxsd, "V2LLiV2LLiV2LLi", "")
+BUILTIN(__builtin_altivec_vmaxud, "V2ULLiV2ULLiV2ULLi", "")
+BUILTIN(__builtin_altivec_vmaxfp, "V4fV4fV4f", "")
+
+BUILTIN(__builtin_altivec_mfvscr, "V8Us", "")
+
+BUILTIN(__builtin_altivec_vminsb, "V16ScV16ScV16Sc", "")
+BUILTIN(__builtin_altivec_vminub, "V16UcV16UcV16Uc", "")
+BUILTIN(__builtin_altivec_vminsh, "V8SsV8SsV8Ss", "")
+BUILTIN(__builtin_altivec_vminuh, "V8UsV8UsV8Us", "")
+BUILTIN(__builtin_altivec_vminsw, "V4SiV4SiV4Si", "")
+BUILTIN(__builtin_altivec_vminuw, "V4UiV4UiV4Ui", "")
+BUILTIN(__builtin_altivec_vminsd, "V2LLiV2LLiV2LLi", "")
+BUILTIN(__builtin_altivec_vminud, "V2ULLiV2ULLiV2ULLi", "")
+BUILTIN(__builtin_altivec_vminfp, "V4fV4fV4f", "")
+
+BUILTIN(__builtin_altivec_mtvscr, "vV4i", "")
+
+BUILTIN(__builtin_altivec_vrefp, "V4fV4f", "")
+
+BUILTIN(__builtin_altivec_vrlb, "V16cV16cV16Uc", "")
+BUILTIN(__builtin_altivec_vrlh, "V8sV8sV8Us", "")
+BUILTIN(__builtin_altivec_vrlw, "V4iV4iV4Ui", "")
+BUILTIN(__builtin_altivec_vrld, "V2LLiV2LLiV2ULLi", "")
+
+BUILTIN(__builtin_altivec_vsel_4si, "V4iV4iV4iV4Ui", "")
+
+BUILTIN(__builtin_altivec_vsl, "V4iV4iV4i", "")
+BUILTIN(__builtin_altivec_vslo, "V4iV4iV4i", "")
+
+BUILTIN(__builtin_altivec_vsrab, "V16cV16cV16Uc", "")
+BUILTIN(__builtin_altivec_vsrah, "V8sV8sV8Us", "")
+BUILTIN(__builtin_altivec_vsraw, "V4iV4iV4Ui", "")
+
+BUILTIN(__builtin_altivec_vsr, "V4iV4iV4i", "")
+BUILTIN(__builtin_altivec_vsro, "V4iV4iV4i", "")
+
+BUILTIN(__builtin_altivec_vrfin, "V4fV4f", "")
+
+BUILTIN(__builtin_altivec_vrsqrtefp, "V4fV4f", "")
+
+BUILTIN(__builtin_altivec_vsubcuw, "V4UiV4UiV4Ui", "")
+
+BUILTIN(__builtin_altivec_vsum4sbs, "V4SiV16ScV4Si", "")
+BUILTIN(__builtin_altivec_vsum4ubs, "V4UiV16UcV4Ui", "")
+BUILTIN(__builtin_altivec_vsum4shs, "V4SiV8SsV4Si", "")
+
+BUILTIN(__builtin_altivec_vsum2sws, "V4SiV4SiV4Si", "")
+
+BUILTIN(__builtin_altivec_vsumsws, "V4SiV4SiV4Si", "")
+
+BUILTIN(__builtin_altivec_vrfiz, "V4fV4f", "")
+
+BUILTIN(__builtin_altivec_vupkhsb, "V8sV16c", "")
+BUILTIN(__builtin_altivec_vupkhpx, "V4UiV8s", "")
+BUILTIN(__builtin_altivec_vupkhsh, "V4iV8s", "")
+BUILTIN(__builtin_altivec_vupkhsw, "V2LLiV4i", "")
+
+BUILTIN(__builtin_altivec_vupklsb, "V8sV16c", "")
+BUILTIN(__builtin_altivec_vupklpx, "V4UiV8s", "")
+BUILTIN(__builtin_altivec_vupklsh, "V4iV8s", "")
+BUILTIN(__builtin_altivec_vupklsw, "V2LLiV4i", "")
+
+BUILTIN(__builtin_altivec_vcmpbfp_p, "iiV4fV4f", "")
+
+BUILTIN(__builtin_altivec_vcmpgefp_p, "iiV4fV4f", "")
+
+BUILTIN(__builtin_altivec_vcmpequb_p, "iiV16cV16c", "")
+BUILTIN(__builtin_altivec_vcmpequh_p, "iiV8sV8s", "")
+BUILTIN(__builtin_altivec_vcmpequw_p, "iiV4iV4i", "")
+BUILTIN(__builtin_altivec_vcmpequd_p, "iiV2LLiV2LLi", "")
+BUILTIN(__builtin_altivec_vcmpeqfp_p, "iiV4fV4f", "")
+
+BUILTIN(__builtin_altivec_vcmpneb_p, "iiV16cV16c", "")
+BUILTIN(__builtin_altivec_vcmpneh_p, "iiV8sV8s", "")
+BUILTIN(__builtin_altivec_vcmpnew_p, "iiV4iV4i", "")
+BUILTIN(__builtin_altivec_vcmpned_p, "iiV2LLiV2LLi", "")
+
+BUILTIN(__builtin_altivec_vcmpgtsb_p, "iiV16ScV16Sc", "")
+BUILTIN(__builtin_altivec_vcmpgtub_p, "iiV16UcV16Uc", "")
+BUILTIN(__builtin_altivec_vcmpgtsh_p, "iiV8SsV8Ss", "")
+BUILTIN(__builtin_altivec_vcmpgtuh_p, "iiV8UsV8Us", "")
+BUILTIN(__builtin_altivec_vcmpgtsw_p, "iiV4SiV4Si", "")
+BUILTIN(__builtin_altivec_vcmpgtuw_p, "iiV4UiV4Ui", "")
+BUILTIN(__builtin_altivec_vcmpgtsd_p, "iiV2LLiV2LLi", "")
+BUILTIN(__builtin_altivec_vcmpgtud_p, "iiV2ULLiV2ULLi", "")
+BUILTIN(__builtin_altivec_vcmpgtfp_p, "iiV4fV4f", "")
+
+BUILTIN(__builtin_altivec_vgbbd, "V16UcV16Uc", "")
+BUILTIN(__builtin_altivec_vbpermq, "V2ULLiV16UcV16Uc", "")
+
+// P8 Crypto built-ins.
+BUILTIN(__builtin_altivec_crypto_vsbox, "V2ULLiV2ULLi", "")
+BUILTIN(__builtin_altivec_crypto_vpermxor, "V16UcV16UcV16UcV16Uc", "")
+BUILTIN(__builtin_altivec_crypto_vshasigmaw, "V4UiV4UiIiIi", "")
+BUILTIN(__builtin_altivec_crypto_vshasigmad, "V2ULLiV2ULLiIiIi", "")
+BUILTIN(__builtin_altivec_crypto_vcipher, "V2ULLiV2ULLiV2ULLi", "")
+BUILTIN(__builtin_altivec_crypto_vcipherlast, "V2ULLiV2ULLiV2ULLi", "")
+BUILTIN(__builtin_altivec_crypto_vncipher, "V2ULLiV2ULLiV2ULLi", "")
+BUILTIN(__builtin_altivec_crypto_vncipherlast, "V2ULLiV2ULLiV2ULLi", "")
+BUILTIN(__builtin_altivec_crypto_vpmsumb, "V16UcV16UcV16Uc", "")
+BUILTIN(__builtin_altivec_crypto_vpmsumh, "V8UsV8UsV8Us", "")
+BUILTIN(__builtin_altivec_crypto_vpmsumw, "V4UiV4UiV4Ui", "")
+BUILTIN(__builtin_altivec_crypto_vpmsumd, "V2ULLiV2ULLiV2ULLi", "")
+
+BUILTIN(__builtin_altivec_vclzb, "V16UcV16Uc", "")
+BUILTIN(__builtin_altivec_vclzh, "V8UsV8Us", "")
+BUILTIN(__builtin_altivec_vclzw, "V4UiV4Ui", "")
+BUILTIN(__builtin_altivec_vclzd, "V2ULLiV2ULLi", "")
+BUILTIN(__builtin_altivec_vctzb, "V16UcV16Uc", "")
+BUILTIN(__builtin_altivec_vctzh, "V8UsV8Us", "")
+BUILTIN(__builtin_altivec_vctzw, "V4UiV4Ui", "")
+BUILTIN(__builtin_altivec_vctzd, "V2ULLiV2ULLi", "")
+
+BUILTIN(__builtin_altivec_vclzlsbb, "SiV16Uc", "")
+BUILTIN(__builtin_altivec_vctzlsbb, "SiV16Uc", "")
+BUILTIN(__builtin_altivec_vprtybw, "V4UiV4Ui", "")
+BUILTIN(__builtin_altivec_vprtybd, "V2ULLiV2ULLi", "")
+BUILTIN(__builtin_altivec_vprtybq, "V1ULLLiV1ULLLi", "")
+
+// Vector population count built-ins
+BUILTIN(__builtin_altivec_vpopcntb, "V16UcV16Uc", "")
+BUILTIN(__builtin_altivec_vpopcnth, "V8UsV8Us", "")
+BUILTIN(__builtin_altivec_vpopcntw, "V4UiV4Ui", "")
+BUILTIN(__builtin_altivec_vpopcntd, "V2ULLiV2ULLi", "")
+
+// Absolute difference built-ins
+BUILTIN(__builtin_altivec_vabsdub, "V16UcV16UcV16Uc", "")
+BUILTIN(__builtin_altivec_vabsduh, "V8UsV8UsV8Us", "")
+BUILTIN(__builtin_altivec_vabsduw, "V4UiV4UiV4Ui", "")
+
+// P9 Shift built-ins.
+BUILTIN(__builtin_altivec_vslv, "V16UcV16UcV16Uc", "")
+BUILTIN(__builtin_altivec_vsrv, "V16UcV16UcV16Uc", "")
+
+// P9 Vector rotate built-ins
+BUILTIN(__builtin_altivec_vrlwmi, "V4UiV4UiV4UiV4Ui", "")
+BUILTIN(__builtin_altivec_vrldmi, "V2ULLiV2ULLiV2ULLiV2ULLi", "")
+BUILTIN(__builtin_altivec_vrlwnm, "V4UiV4UiV4Ui", "")
+BUILTIN(__builtin_altivec_vrldnm, "V2ULLiV2ULLiV2ULLi", "")
+
+// VSX built-ins.
+
+BUILTIN(__builtin_vsx_lxvd2x, "V2divC*", "")
+BUILTIN(__builtin_vsx_lxvw4x, "V4iivC*", "")
+BUILTIN(__builtin_vsx_lxvd2x_be, "V2dSLLivC*", "")
+BUILTIN(__builtin_vsx_lxvw4x_be, "V4iSLLivC*", "")
+
+BUILTIN(__builtin_vsx_stxvd2x, "vV2div*", "")
+BUILTIN(__builtin_vsx_stxvw4x, "vV4iiv*", "")
+BUILTIN(__builtin_vsx_stxvd2x_be, "vV2dSLLivC*", "")
+BUILTIN(__builtin_vsx_stxvw4x_be, "vV4iSLLivC*", "")
+
+BUILTIN(__builtin_vsx_lxvl, "V4ivC*ULLi", "")
+BUILTIN(__builtin_vsx_lxvll, "V4ivC*ULLi", "")
+BUILTIN(__builtin_vsx_stxvl, "vV4iv*ULLi", "")
+BUILTIN(__builtin_vsx_stxvll, "vV4iv*ULLi", "")
+
+BUILTIN(__builtin_vsx_xvmaxdp, "V2dV2dV2d", "")
+BUILTIN(__builtin_vsx_xvmaxsp, "V4fV4fV4f", "")
+BUILTIN(__builtin_vsx_xsmaxdp, "ddd", "")
+
+BUILTIN(__builtin_vsx_xvmindp, "V2dV2dV2d", "")
+BUILTIN(__builtin_vsx_xvminsp, "V4fV4fV4f", "")
+BUILTIN(__builtin_vsx_xsmindp, "ddd", "")
+
+BUILTIN(__builtin_vsx_xvdivdp, "V2dV2dV2d", "")
+BUILTIN(__builtin_vsx_xvdivsp, "V4fV4fV4f", "")
+
+BUILTIN(__builtin_vsx_xvrdpip, "V2dV2d", "")
+BUILTIN(__builtin_vsx_xvrspip, "V4fV4f", "")
+
+BUILTIN(__builtin_vsx_xvcmpeqdp, "V2ULLiV2dV2d", "")
+BUILTIN(__builtin_vsx_xvcmpeqsp, "V4UiV4fV4f", "")
+
+BUILTIN(__builtin_vsx_xvcmpeqdp_p, "iiV2dV2d", "")
+BUILTIN(__builtin_vsx_xvcmpeqsp_p, "iiV4fV4f", "")
+
+BUILTIN(__builtin_vsx_xvcmpgedp, "V2ULLiV2dV2d", "")
+BUILTIN(__builtin_vsx_xvcmpgesp, "V4UiV4fV4f", "")
+
+BUILTIN(__builtin_vsx_xvcmpgedp_p, "iiV2dV2d", "")
+BUILTIN(__builtin_vsx_xvcmpgesp_p, "iiV4fV4f", "")
+
+BUILTIN(__builtin_vsx_xvcmpgtdp, "V2ULLiV2dV2d", "")
+BUILTIN(__builtin_vsx_xvcmpgtsp, "V4UiV4fV4f", "")
+
+BUILTIN(__builtin_vsx_xvcmpgtdp_p, "iiV2dV2d", "")
+BUILTIN(__builtin_vsx_xvcmpgtsp_p, "iiV4fV4f", "")
+
+BUILTIN(__builtin_vsx_xvrdpim, "V2dV2d", "")
+BUILTIN(__builtin_vsx_xvrspim, "V4fV4f", "")
+
+BUILTIN(__builtin_vsx_xvrdpi, "V2dV2d", "")
+BUILTIN(__builtin_vsx_xvrspi, "V4fV4f", "")
+
+BUILTIN(__builtin_vsx_xvrdpic, "V2dV2d", "")
+BUILTIN(__builtin_vsx_xvrspic, "V4fV4f", "")
+
+BUILTIN(__builtin_vsx_xvrdpiz, "V2dV2d", "")
+BUILTIN(__builtin_vsx_xvrspiz, "V4fV4f", "")
+
+BUILTIN(__builtin_vsx_xvmaddadp, "V2dV2dV2dV2d", "")
+BUILTIN(__builtin_vsx_xvmaddasp, "V4fV4fV4fV4f", "")
+
+BUILTIN(__builtin_vsx_xvmsubadp, "V2dV2dV2dV2d", "")
+BUILTIN(__builtin_vsx_xvmsubasp, "V4fV4fV4fV4f", "")
+
+BUILTIN(__builtin_vsx_xvmuldp, "V2dV2dV2d", "")
+BUILTIN(__builtin_vsx_xvmulsp, "V4fV4fV4f", "")
+
+BUILTIN(__builtin_vsx_xvnmaddadp, "V2dV2dV2dV2d", "")
+BUILTIN(__builtin_vsx_xvnmaddasp, "V4fV4fV4fV4f", "")
+
+BUILTIN(__builtin_vsx_xvnmsubadp, "V2dV2dV2dV2d", "")
+BUILTIN(__builtin_vsx_xvnmsubasp, "V4fV4fV4fV4f", "")
+
+BUILTIN(__builtin_vsx_xvredp, "V2dV2d", "")
+BUILTIN(__builtin_vsx_xvresp, "V4fV4f", "")
+
+BUILTIN(__builtin_vsx_xvrsqrtedp, "V2dV2d", "")
+BUILTIN(__builtin_vsx_xvrsqrtesp, "V4fV4f", "")
+
+BUILTIN(__builtin_vsx_xvsqrtdp, "V2dV2d", "")
+BUILTIN(__builtin_vsx_xvsqrtsp, "V4fV4f", "")
+
+BUILTIN(__builtin_vsx_xxleqv, "V4UiV4UiV4Ui", "")
+
+BUILTIN(__builtin_vsx_xvcpsgndp, "V2dV2dV2d", "")
+BUILTIN(__builtin_vsx_xvcpsgnsp, "V4fV4fV4f", "")
+
+BUILTIN(__builtin_vsx_xvabssp, "V4fV4f", "")
+BUILTIN(__builtin_vsx_xvabsdp, "V2dV2d", "")
+
+// vector Insert/Extract exponent/significand builtins
+BUILTIN(__builtin_vsx_xviexpdp, "V2dV2ULLiV2ULLi", "")
+BUILTIN(__builtin_vsx_xviexpsp, "V4fV4UiV4Ui", "")
+BUILTIN(__builtin_vsx_xvxexpdp, "V2ULLiV2d", "")
+BUILTIN(__builtin_vsx_xvxexpsp, "V4UiV4f", "")
+BUILTIN(__builtin_vsx_xvxsigdp, "V2ULLiV2d", "")
+BUILTIN(__builtin_vsx_xvxsigsp, "V4UiV4f", "")
+
+// Conversion builtins
+BUILTIN(__builtin_vsx_xvcvdpsxws, "V4SiV2d", "")
+BUILTIN(__builtin_vsx_xvcvdpuxws, "V4UiV2d", "")
+BUILTIN(__builtin_vsx_xvcvsxwdp, "V2dV4Si", "")
+BUILTIN(__builtin_vsx_xvcvuxwdp, "V2dV4Ui", "")
+BUILTIN(__builtin_vsx_xvcvspdp, "V2dV4f", "")
+BUILTIN(__builtin_vsx_xvcvsxdsp, "V4fV2SLLi", "")
+BUILTIN(__builtin_vsx_xvcvuxdsp, "V4fV2ULLi", "")
+BUILTIN(__builtin_vsx_xvcvdpsp, "V4fV2d", "")
+
+BUILTIN(__builtin_vsx_xvcvsphp, "V4fV4f", "")
+BUILTIN(__builtin_vsx_xvcvhpsp, "V4fV8Us", "")
+
+// Vector Test Data Class builtins
+BUILTIN(__builtin_vsx_xvtstdcdp, "V2ULLiV2dIi", "")
+BUILTIN(__builtin_vsx_xvtstdcsp, "V4UiV4fIi", "")
+
+BUILTIN(__builtin_vsx_insertword, "V16UcV4UiV16UcIi", "")
+BUILTIN(__builtin_vsx_extractuword, "V2ULLiV16UcIi", "")
+
+BUILTIN(__builtin_vsx_xxpermdi, "v.", "t")
+BUILTIN(__builtin_vsx_xxsldwi, "v.", "t")
+
+// Float 128 built-ins
+BUILTIN(__builtin_sqrtf128_round_to_odd, "LLdLLd", "")
+BUILTIN(__builtin_addf128_round_to_odd, "LLdLLdLLd", "")
+BUILTIN(__builtin_subf128_round_to_odd, "LLdLLdLLd", "")
+BUILTIN(__builtin_mulf128_round_to_odd, "LLdLLdLLd", "")
+BUILTIN(__builtin_divf128_round_to_odd, "LLdLLdLLd", "")
+BUILTIN(__builtin_fmaf128_round_to_odd, "LLdLLdLLdLLd", "")
+BUILTIN(__builtin_truncf128_round_to_odd, "dLLd", "")
+BUILTIN(__builtin_vsx_scalar_extract_expq, "ULLiLLd", "")
+BUILTIN(__builtin_vsx_scalar_insert_exp_qp, "LLdLLdULLi", "")
+
+// HTM builtins
+BUILTIN(__builtin_tbegin, "UiUIi", "")
+BUILTIN(__builtin_tend, "UiUIi", "")
+
+BUILTIN(__builtin_tabort, "UiUi", "")
+BUILTIN(__builtin_tabortdc, "UiUiUiUi", "")
+BUILTIN(__builtin_tabortdci, "UiUiUii", "")
+BUILTIN(__builtin_tabortwc, "UiUiUiUi", "")
+BUILTIN(__builtin_tabortwci, "UiUiUii", "")
+
+BUILTIN(__builtin_tcheck, "Ui", "")
+BUILTIN(__builtin_treclaim, "UiUi", "")
+BUILTIN(__builtin_trechkpt, "Ui", "")
+BUILTIN(__builtin_tsr, "UiUi", "")
+
+BUILTIN(__builtin_tendall, "Ui", "")
+BUILTIN(__builtin_tresume, "Ui", "")
+BUILTIN(__builtin_tsuspend, "Ui", "")
+
+BUILTIN(__builtin_get_texasr, "LUi", "c")
+BUILTIN(__builtin_get_texasru, "LUi", "c")
+BUILTIN(__builtin_get_tfhar, "LUi", "c")
+BUILTIN(__builtin_get_tfiar, "LUi", "c")
+
+BUILTIN(__builtin_set_texasr, "vLUi", "c")
+BUILTIN(__builtin_set_texasru, "vLUi", "c")
+BUILTIN(__builtin_set_tfhar, "vLUi", "c")
+BUILTIN(__builtin_set_tfiar, "vLUi", "c")
+
+BUILTIN(__builtin_ttest, "LUi", "")
+
+// Scalar built-ins
+BUILTIN(__builtin_divwe, "SiSiSi", "")
+BUILTIN(__builtin_divweu, "UiUiUi", "")
+BUILTIN(__builtin_divde, "SLLiSLLiSLLi", "")
+BUILTIN(__builtin_divdeu, "ULLiULLiULLi", "")
+BUILTIN(__builtin_bpermd, "SLLiSLLiSLLi", "")
+
+// Vector int128 (un)pack
+BUILTIN(__builtin_unpack_vector_int128, "ULLiV1LLLii", "")
+BUILTIN(__builtin_pack_vector_int128, "V1LLLiULLiULLi", "")
+
+// FIXME: Obviously incomplete.
+
+#undef BUILTIN
diff --git a/clang-r353983/include/clang/Basic/BuiltinsSystemZ.def b/clang-r353983/include/clang/Basic/BuiltinsSystemZ.def
new file mode 100644
index 00000000..9133b3f7
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/BuiltinsSystemZ.def
@@ -0,0 +1,280 @@
+//===-- BuiltinsSystemZ.def - SystemZ Builtin function database -*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the SystemZ-specific builtin function database. Users of
+// this file must define the BUILTIN macro to make use of this information.
+//
+//===----------------------------------------------------------------------===//
+
+// The format of this database matches clang/Basic/Builtins.def.
+
+#if defined(BUILTIN) && !defined(TARGET_BUILTIN)
+# define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BUILTIN(ID, TYPE, ATTRS)
+#endif
+
+// Transactional-memory intrinsics
+TARGET_BUILTIN(__builtin_tbegin, "iv*", "j", "transactional-execution")
+TARGET_BUILTIN(__builtin_tbegin_nofloat, "iv*", "j", "transactional-execution")
+TARGET_BUILTIN(__builtin_tbeginc, "v", "nj", "transactional-execution")
+TARGET_BUILTIN(__builtin_tabort, "vi", "r", "transactional-execution")
+TARGET_BUILTIN(__builtin_tend, "i", "n", "transactional-execution")
+TARGET_BUILTIN(__builtin_tx_nesting_depth, "i", "nc", "transactional-execution")
+TARGET_BUILTIN(__builtin_tx_assist, "vi", "n", "transactional-execution")
+TARGET_BUILTIN(__builtin_non_tx_store, "vULi*ULi", "", "transactional-execution")
+
+// Vector intrinsics.
+// These all map directly to z instructions, except that some variants ending
+// in "s" have a final "int *" that receives the post-instruction CC value.
+
+// Vector support instructions (chapter 21 of the PoP)
+TARGET_BUILTIN(__builtin_s390_lcbb, "UivC*Ii", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vlbb, "V16ScvC*Ii", "", "vector")
+TARGET_BUILTIN(__builtin_s390_vll, "V16ScUivC*", "", "vector")
+TARGET_BUILTIN(__builtin_s390_vstl, "vV16ScUiv*", "", "vector")
+TARGET_BUILTIN(__builtin_s390_vperm, "V16UcV16UcV16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vpdi, "V2ULLiV2ULLiV2ULLiIi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vpksh, "V16ScV8SsV8Ss", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vpkshs, "V16ScV8SsV8Ssi*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vpksf, "V8SsV4SiV4Si", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vpksfs, "V8SsV4SiV4Sii*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vpksg, "V4SiV2SLLiV2SLLi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vpksgs, "V4SiV2SLLiV2SLLii*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vpklsh, "V16UcV8UsV8Us", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vpklshs, "V16UcV8UsV8Usi*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vpklsf, "V8UsV4UiV4Ui", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vpklsfs, "V8UsV4UiV4Uii*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vpklsg, "V4UiV2ULLiV2ULLi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vpklsgs, "V4UiV2ULLiV2ULLii*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vuphb, "V8SsV16Sc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vuphh, "V4SiV8Ss", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vuphf, "V2SLLiV4Si", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vuplb, "V8SsV16Sc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vuplhw, "V4SiV8Ss", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vuplf, "V2SLLiV4Si", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vuplhb, "V8UsV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vuplhh, "V4UiV8Us", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vuplhf, "V2ULLiV4Ui", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vupllb, "V8UsV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vupllh, "V4UiV8Us", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vupllf, "V2ULLiV4Ui", "nc", "vector")
+
+// Vector integer instructions (chapter 22 of the PoP)
+TARGET_BUILTIN(__builtin_s390_vaq, "V16UcV16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vacq, "V16UcV16UcV16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vaccb, "V16UcV16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vacch, "V8UsV8UsV8Us", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vaccf, "V4UiV4UiV4Ui", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vaccg, "V2ULLiV2ULLiV2ULLi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vaccq, "V16UcV16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vacccq, "V16UcV16UcV16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vavgb, "V16ScV16ScV16Sc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vavgh, "V8SsV8SsV8Ss", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vavgf, "V4SiV4SiV4Si", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vavgg, "V2SLLiV2SLLiV2SLLi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vavglb, "V16UcV16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vavglh, "V8UsV8UsV8Us", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vavglf, "V4UiV4UiV4Ui", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vavglg, "V2ULLiV2ULLiV2ULLi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vceqbs, "V16ScV16ScV16Sci*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vceqhs, "V8SsV8SsV8Ssi*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vceqfs, "V4SiV4SiV4Sii*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vceqgs, "V2SLLiV2SLLiV2SLLii*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vchbs, "V16ScV16ScV16Sci*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vchhs, "V8SsV8SsV8Ssi*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vchfs, "V4SiV4SiV4Sii*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vchgs, "V2SLLiV2SLLiV2SLLii*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vchlbs, "V16ScV16UcV16Uci*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vchlhs, "V8SsV8UsV8Usi*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vchlfs, "V4SiV4UiV4Uii*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vchlgs, "V2SLLiV2ULLiV2ULLii*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vcksm, "V4UiV4UiV4Ui", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vclzb, "V16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vclzh, "V8UsV8Us", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vclzf, "V4UiV4Ui", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vclzg, "V2ULLiV2ULLi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vctzb, "V16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vctzh, "V8UsV8Us", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vctzf, "V4UiV4Ui", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vctzg, "V2ULLiV2ULLi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_verimb, "V16UcV16UcV16UcV16UcIi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_verimh, "V8UsV8UsV8UsV8UsIi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_verimf, "V4UiV4UiV4UiV4UiIi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_verimg, "V2ULLiV2ULLiV2ULLiV2ULLiIi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_verllb, "V16UcV16UcUi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_verllh, "V8UsV8UsUi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_verllf, "V4UiV4UiUi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_verllg, "V2ULLiV2ULLiUi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_verllvb, "V16UcV16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_verllvh, "V8UsV8UsV8Us", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_verllvf, "V4UiV4UiV4Ui", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_verllvg, "V2ULLiV2ULLiV2ULLi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vgfmb, "V8UsV16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vgfmh, "V4UiV8UsV8Us", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vgfmf, "V2ULLiV4UiV4Ui", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vgfmg, "V16UcV2ULLiV2ULLi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vgfmab, "V8UsV16UcV16UcV8Us", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vgfmah, "V4UiV8UsV8UsV4Ui", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vgfmaf, "V2ULLiV4UiV4UiV2ULLi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vgfmag, "V16UcV2ULLiV2ULLiV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmahb, "V16ScV16ScV16ScV16Sc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmahh, "V8SsV8SsV8SsV8Ss", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmahf, "V4SiV4SiV4SiV4Si", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmalhb, "V16UcV16UcV16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmalhh, "V8UsV8UsV8UsV8Us", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmalhf, "V4UiV4UiV4UiV4Ui", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmaeb, "V8SsV16ScV16ScV8Ss", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmaeh, "V4SiV8SsV8SsV4Si", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmaef, "V2SLLiV4SiV4SiV2SLLi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmaleb, "V8UsV16UcV16UcV8Us", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmaleh, "V4UiV8UsV8UsV4Ui", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmalef, "V2ULLiV4UiV4UiV2ULLi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmaob, "V8SsV16ScV16ScV8Ss", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmaoh, "V4SiV8SsV8SsV4Si", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmaof, "V2SLLiV4SiV4SiV2SLLi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmalob, "V8UsV16UcV16UcV8Us", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmaloh, "V4UiV8UsV8UsV4Ui", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmalof, "V2ULLiV4UiV4UiV2ULLi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmhb, "V16ScV16ScV16Sc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmhh, "V8SsV8SsV8Ss", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmhf, "V4SiV4SiV4Si", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmlhb, "V16UcV16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmlhh, "V8UsV8UsV8Us", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmlhf, "V4UiV4UiV4Ui", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmeb, "V8SsV16ScV16Sc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmeh, "V4SiV8SsV8Ss", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmef, "V2SLLiV4SiV4Si", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmleb, "V8UsV16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmleh, "V4UiV8UsV8Us", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmlef, "V2ULLiV4UiV4Ui", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmob, "V8SsV16ScV16Sc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmoh, "V4SiV8SsV8Ss", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmof, "V2SLLiV4SiV4Si", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmlob, "V8UsV16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmloh, "V4UiV8UsV8Us", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vmlof, "V2ULLiV4UiV4Ui", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vpopctb, "V16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vpopcth, "V8UsV8Us", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vpopctf, "V4UiV4Ui", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vpopctg, "V2ULLiV2ULLi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vsq, "V16UcV16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vsbcbiq, "V16UcV16UcV16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vsbiq, "V16UcV16UcV16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vscbib, "V16UcV16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vscbih, "V8UsV8UsV8Us", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vscbif, "V4UiV4UiV4Ui", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vscbig, "V2ULLiV2ULLiV2ULLi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vscbiq, "V16UcV16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vsl, "V16UcV16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vslb, "V16UcV16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vsldb, "V16UcV16UcV16UcIi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vsra, "V16UcV16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vsrab, "V16UcV16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vsrl, "V16UcV16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vsrlb, "V16UcV16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vsumb, "V4UiV16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vsumh, "V4UiV8UsV8Us", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vsumgh, "V2ULLiV8UsV8Us", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vsumgf, "V2ULLiV4UiV4Ui", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vsumqf, "V16UcV4UiV4Ui", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vsumqg, "V16UcV2ULLiV2ULLi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vtm, "iV16UcV16Uc", "nc", "vector")
+
+// Vector string instructions (chapter 23 of the PoP)
+TARGET_BUILTIN(__builtin_s390_vfaeb, "V16UcV16UcV16UcIi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfaebs, "V16UcV16UcV16UcIii*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfaeh, "V8UsV8UsV8UsIi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfaehs, "V8UsV8UsV8UsIii*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfaef, "V4UiV4UiV4UiIi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfaefs, "V4UiV4UiV4UiIii*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfaezb, "V16UcV16UcV16UcIi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfaezbs, "V16UcV16UcV16UcIii*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfaezh, "V8UsV8UsV8UsIi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfaezhs, "V8UsV8UsV8UsIii*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfaezf, "V4UiV4UiV4UiIi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfaezfs, "V4UiV4UiV4UiIii*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfeeb, "V16UcV16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfeebs, "V16UcV16UcV16Uci*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfeeh, "V8UsV8UsV8Us", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfeehs, "V8UsV8UsV8Usi*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfeef, "V4UiV4UiV4Ui", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfeefs, "V4UiV4UiV4Uii*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfeezb, "V16UcV16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfeezbs, "V16UcV16UcV16Uci*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfeezh, "V8UsV8UsV8Us", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfeezhs, "V8UsV8UsV8Usi*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfeezf, "V4UiV4UiV4Ui", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfeezfs, "V4UiV4UiV4Uii*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfeneb, "V16UcV16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfenebs, "V16UcV16UcV16Uci*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfeneh, "V8UsV8UsV8Us", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfenehs, "V8UsV8UsV8Usi*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfenef, "V4UiV4UiV4Ui", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfenefs, "V4UiV4UiV4Uii*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfenezb, "V16UcV16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfenezbs, "V16UcV16UcV16Uci*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfenezh, "V8UsV8UsV8Us", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfenezhs, "V8UsV8UsV8Usi*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfenezf, "V4UiV4UiV4Ui", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfenezfs, "V4UiV4UiV4Uii*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vistrb, "V16UcV16Uc", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vistrbs, "V16UcV16Uci*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vistrh, "V8UsV8Us", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vistrhs, "V8UsV8Usi*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vistrf, "V4UiV4Ui", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vistrfs, "V4UiV4Uii*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vstrcb, "V16UcV16UcV16UcV16UcIi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vstrcbs, "V16UcV16UcV16UcV16UcIii*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vstrch, "V8UsV8UsV8UsV8UsIi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vstrchs, "V8UsV8UsV8UsV8UsIii*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vstrcf, "V4UiV4UiV4UiV4UiIi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vstrcfs, "V4UiV4UiV4UiV4UiIii*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vstrczb, "V16UcV16UcV16UcV16UcIi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vstrczbs, "V16UcV16UcV16UcV16UcIii*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vstrczh, "V8UsV8UsV8UsV8UsIi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vstrczhs, "V8UsV8UsV8UsV8UsIii*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vstrczf, "V4UiV4UiV4UiV4UiIi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vstrczfs, "V4UiV4UiV4UiV4UiIii*", "nc", "vector")
+
+// Vector floating-point instructions (chapter 24 of the PoP)
+TARGET_BUILTIN(__builtin_s390_vfcedbs, "V2SLLiV2dV2di*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfchdbs, "V2SLLiV2dV2di*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfchedbs, "V2SLLiV2dV2di*", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfidb, "V2dV2dIiIi", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vflndb, "V2dV2d", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vflpdb, "V2dV2d", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfmadb, "V2dV2dV2dV2d", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfmsdb, "V2dV2dV2dV2d", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vfsqdb, "V2dV2d", "nc", "vector")
+TARGET_BUILTIN(__builtin_s390_vftcidb, "V2SLLiV2dIii*", "nc", "vector")
+
+// Vector-enhancements facility 1 intrinsics.
+TARGET_BUILTIN(__builtin_s390_vlrl, "V16ScUivC*", "", "vector-enhancements-1")
+TARGET_BUILTIN(__builtin_s390_vstrl, "vV16ScUiv*", "", "vector-enhancements-1")
+TARGET_BUILTIN(__builtin_s390_vbperm, "V2ULLiV16UcV16Uc", "nc", "vector-enhancements-1")
+TARGET_BUILTIN(__builtin_s390_vmslg, "V16UcV2ULLiV2ULLiV16UcIi", "nc", "vector-enhancements-1")
+TARGET_BUILTIN(__builtin_s390_vfmaxdb, "V2dV2dV2dIi", "nc", "vector-enhancements-1")
+TARGET_BUILTIN(__builtin_s390_vfmindb, "V2dV2dV2dIi", "nc", "vector-enhancements-1")
+TARGET_BUILTIN(__builtin_s390_vfnmadb, "V2dV2dV2dV2d", "nc", "vector-enhancements-1")
+TARGET_BUILTIN(__builtin_s390_vfnmsdb, "V2dV2dV2dV2d", "nc", "vector-enhancements-1")
+TARGET_BUILTIN(__builtin_s390_vfcesbs, "V4SiV4fV4fi*", "nc", "vector-enhancements-1")
+TARGET_BUILTIN(__builtin_s390_vfchsbs, "V4SiV4fV4fi*", "nc", "vector-enhancements-1")
+TARGET_BUILTIN(__builtin_s390_vfchesbs, "V4SiV4fV4fi*", "nc", "vector-enhancements-1")
+TARGET_BUILTIN(__builtin_s390_vfisb, "V4fV4fIiIi", "nc", "vector-enhancements-1")
+TARGET_BUILTIN(__builtin_s390_vfmaxsb, "V4fV4fV4fIi", "nc", "vector-enhancements-1")
+TARGET_BUILTIN(__builtin_s390_vfminsb, "V4fV4fV4fIi", "nc", "vector-enhancements-1")
+TARGET_BUILTIN(__builtin_s390_vflnsb, "V4fV4f", "nc", "vector-enhancements-1")
+TARGET_BUILTIN(__builtin_s390_vflpsb, "V4fV4f", "nc", "vector-enhancements-1")
+TARGET_BUILTIN(__builtin_s390_vfmasb, "V4fV4fV4fV4f", "nc", "vector-enhancements-1")
+TARGET_BUILTIN(__builtin_s390_vfmssb, "V4fV4fV4fV4f", "nc", "vector-enhancements-1")
+TARGET_BUILTIN(__builtin_s390_vfnmasb, "V4fV4fV4fV4f", "nc", "vector-enhancements-1")
+TARGET_BUILTIN(__builtin_s390_vfnmssb, "V4fV4fV4fV4f", "nc", "vector-enhancements-1")
+TARGET_BUILTIN(__builtin_s390_vfsqsb, "V4fV4f", "nc", "vector-enhancements-1")
+TARGET_BUILTIN(__builtin_s390_vftcisb, "V4SiV4fIii*", "nc", "vector-enhancements-1")
+
+#undef BUILTIN
+#undef TARGET_BUILTIN
diff --git a/clang-r353983/include/clang/Basic/BuiltinsWebAssembly.def b/clang-r353983/include/clang/Basic/BuiltinsWebAssembly.def
new file mode 100644
index 00000000..0241436b
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/BuiltinsWebAssembly.def
@@ -0,0 +1,112 @@
+// BuiltinsWebAssembly.def - WebAssembly builtin function database -*- C++ -*-//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// This file defines the WebAssembly-specific builtin function database.
+/// Users of this file must define the BUILTIN macro to make use of this
+/// information.
+///
+//===----------------------------------------------------------------------===//
+
+// The format of this database matches clang/Basic/Builtins.def.
+
+#if defined(BUILTIN) && !defined(TARGET_BUILTIN)
+# define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BUILTIN(ID, TYPE, ATTRS)
+#endif
+
+// Query the current memory size, and increase the current memory size.
+// Note that memory.size is not "c" (readnone) because it must be sequenced
+// with respect to memory.grow calls.
+BUILTIN(__builtin_wasm_memory_size, "zIi", "n")
+BUILTIN(__builtin_wasm_memory_grow, "zIiz", "n")
+
+// Bulk memory builtins
+TARGET_BUILTIN(__builtin_wasm_memory_init, "vIUiIUiv*UiUi", "", "bulk-memory")
+TARGET_BUILTIN(__builtin_wasm_data_drop, "vIUi", "", "bulk-memory")
+
+// Floating point min/max
+BUILTIN(__builtin_wasm_min_f32, "fff", "nc")
+BUILTIN(__builtin_wasm_max_f32, "fff", "nc")
+BUILTIN(__builtin_wasm_min_f64, "ddd", "nc")
+BUILTIN(__builtin_wasm_max_f64, "ddd", "nc")
+
+// Exception handling builtins.
+TARGET_BUILTIN(__builtin_wasm_throw, "vUiv*", "r", "exception-handling")
+TARGET_BUILTIN(__builtin_wasm_rethrow, "v", "r", "exception-handling")
+
+// Atomic wait and notify.
+BUILTIN(__builtin_wasm_atomic_wait_i32, "ii*iLLi", "n")
+BUILTIN(__builtin_wasm_atomic_wait_i64, "iLLi*LLiLLi", "n")
+BUILTIN(__builtin_wasm_atomic_notify, "Uii*Ui", "n")
+
+// Saturating fp-to-int conversions
+TARGET_BUILTIN(__builtin_wasm_trunc_saturate_s_i32_f32, "if", "nc", "nontrapping-fptoint")
+TARGET_BUILTIN(__builtin_wasm_trunc_saturate_u_i32_f32, "if", "nc", "nontrapping-fptoint")
+TARGET_BUILTIN(__builtin_wasm_trunc_saturate_s_i32_f64, "id", "nc", "nontrapping-fptoint")
+TARGET_BUILTIN(__builtin_wasm_trunc_saturate_u_i32_f64, "id", "nc", "nontrapping-fptoint")
+TARGET_BUILTIN(__builtin_wasm_trunc_saturate_s_i64_f32, "LLif", "nc", "nontrapping-fptoint")
+TARGET_BUILTIN(__builtin_wasm_trunc_saturate_u_i64_f32, "LLif", "nc", "nontrapping-fptoint")
+TARGET_BUILTIN(__builtin_wasm_trunc_saturate_s_i64_f64, "LLid", "nc", "nontrapping-fptoint")
+TARGET_BUILTIN(__builtin_wasm_trunc_saturate_u_i64_f64, "LLid", "nc", "nontrapping-fptoint")
+
+// SIMD builtins
+TARGET_BUILTIN(__builtin_wasm_extract_lane_s_i8x16, "iV16cIi", "nc", "simd128")
+TARGET_BUILTIN(__builtin_wasm_extract_lane_u_i8x16, "iV16cIi", "nc", "unimplemented-simd128")
+TARGET_BUILTIN(__builtin_wasm_extract_lane_s_i16x8, "iV8sIi", "nc", "simd128")
+TARGET_BUILTIN(__builtin_wasm_extract_lane_u_i16x8, "iV8sIi", "nc", "unimplemented-simd128")
+TARGET_BUILTIN(__builtin_wasm_extract_lane_i32x4, "iV4iIi", "nc", "simd128")
+TARGET_BUILTIN(__builtin_wasm_extract_lane_i64x2, "LLiV2LLiIi", "nc", "unimplemented-simd128")
+TARGET_BUILTIN(__builtin_wasm_extract_lane_f32x4, "fV4fIi", "nc", "simd128")
+TARGET_BUILTIN(__builtin_wasm_extract_lane_f64x2, "dV2dIi", "nc", "unimplemented-simd128")
+
+TARGET_BUILTIN(__builtin_wasm_replace_lane_i8x16, "V16cV16cIii", "nc", "simd128")
+TARGET_BUILTIN(__builtin_wasm_replace_lane_i16x8, "V8sV8sIii", "nc", "simd128")
+TARGET_BUILTIN(__builtin_wasm_replace_lane_i32x4, "V4iV4iIii", "nc", "simd128")
+TARGET_BUILTIN(__builtin_wasm_replace_lane_i64x2, "V2LLiV2LLiIiLLi", "nc", "unimplemented-simd128")
+TARGET_BUILTIN(__builtin_wasm_replace_lane_f32x4, "V4fV4fIif", "nc", "simd128")
+TARGET_BUILTIN(__builtin_wasm_replace_lane_f64x2, "V2dV2dIid", "nc", "unimplemented-simd128")
+
+TARGET_BUILTIN(__builtin_wasm_add_saturate_s_i8x16, "V16cV16cV16c", "nc", "simd128")
+TARGET_BUILTIN(__builtin_wasm_add_saturate_u_i8x16, "V16cV16cV16c", "nc", "simd128")
+TARGET_BUILTIN(__builtin_wasm_add_saturate_s_i16x8, "V8sV8sV8s", "nc", "simd128")
+TARGET_BUILTIN(__builtin_wasm_add_saturate_u_i16x8, "V8sV8sV8s", "nc", "simd128")
+
+TARGET_BUILTIN(__builtin_wasm_sub_saturate_s_i8x16, "V16cV16cV16c", "nc", "simd128")
+TARGET_BUILTIN(__builtin_wasm_sub_saturate_u_i8x16, "V16cV16cV16c", "nc", "simd128")
+TARGET_BUILTIN(__builtin_wasm_sub_saturate_s_i16x8, "V8sV8sV8s", "nc", "simd128")
+TARGET_BUILTIN(__builtin_wasm_sub_saturate_u_i16x8, "V8sV8sV8s", "nc", "simd128")
+
+TARGET_BUILTIN(__builtin_wasm_bitselect, "V4iV4iV4iV4i", "nc", "simd128")
+
+TARGET_BUILTIN(__builtin_wasm_any_true_i8x16, "iV16c", "nc", "simd128")
+TARGET_BUILTIN(__builtin_wasm_any_true_i16x8, "iV8s", "nc", "simd128")
+TARGET_BUILTIN(__builtin_wasm_any_true_i32x4, "iV4i", "nc", "simd128")
+TARGET_BUILTIN(__builtin_wasm_any_true_i64x2, "iV2LLi", "nc", "unimplemented-simd128")
+TARGET_BUILTIN(__builtin_wasm_all_true_i8x16, "iV16c", "nc", "simd128")
+TARGET_BUILTIN(__builtin_wasm_all_true_i16x8, "iV8s", "nc", "simd128")
+TARGET_BUILTIN(__builtin_wasm_all_true_i32x4, "iV4i", "nc", "simd128")
+TARGET_BUILTIN(__builtin_wasm_all_true_i64x2, "iV2LLi", "nc", "unimplemented-simd128")
+
+TARGET_BUILTIN(__builtin_wasm_abs_f32x4, "V4fV4f", "nc", "simd128")
+TARGET_BUILTIN(__builtin_wasm_abs_f64x2, "V2dV2d", "nc", "unimplemented-simd128")
+
+TARGET_BUILTIN(__builtin_wasm_min_f32x4, "V4fV4fV4f", "nc", "simd128")
+TARGET_BUILTIN(__builtin_wasm_max_f32x4, "V4fV4fV4f", "nc", "simd128")
+TARGET_BUILTIN(__builtin_wasm_min_f64x2, "V2dV2dV2d", "nc", "unimplemented-simd128")
+TARGET_BUILTIN(__builtin_wasm_max_f64x2, "V2dV2dV2d", "nc", "unimplemented-simd128")
+
+TARGET_BUILTIN(__builtin_wasm_sqrt_f32x4, "V4fV4f", "nc", "unimplemented-simd128")
+TARGET_BUILTIN(__builtin_wasm_sqrt_f64x2, "V2dV2d", "nc", "unimplemented-simd128")
+
+TARGET_BUILTIN(__builtin_wasm_trunc_saturate_s_i32x4_f32x4, "V4iV4f", "nc", "simd128")
+TARGET_BUILTIN(__builtin_wasm_trunc_saturate_u_i32x4_f32x4, "V4iV4f", "nc", "simd128")
+TARGET_BUILTIN(__builtin_wasm_trunc_saturate_s_i64x2_f64x2, "V2LLiV2d", "nc", "unimplemented-simd128")
+TARGET_BUILTIN(__builtin_wasm_trunc_saturate_u_i64x2_f64x2, "V2LLiV2d", "nc", "unimplemented-simd128")
+
+#undef BUILTIN
+#undef TARGET_BUILTIN
diff --git a/clang-r353983/include/clang/Basic/BuiltinsX86.def b/clang-r353983/include/clang/Basic/BuiltinsX86.def
new file mode 100644
index 00000000..373ff247
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/BuiltinsX86.def
@@ -0,0 +1,1905 @@
+//===--- BuiltinsX86.def - X86 Builtin function database --------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the X86-specific builtin function database. Users of
+// this file must define the BUILTIN macro to make use of this information.
+//
+//===----------------------------------------------------------------------===//
+
+// The format of this database matches clang/Basic/Builtins.def.
+
+// FIXME: Ideally we would be able to pull this information from what
+// LLVM already knows about X86 builtins. We need to match the LLVM
+// definition anyway, since code generation will lower to the
+// intrinsic if one exists.
+
+#if defined(BUILTIN) && !defined(TARGET_BUILTIN)
+# define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BUILTIN(ID, TYPE, ATTRS)
+#endif
+
+#if defined(BUILTIN) && !defined(TARGET_HEADER_BUILTIN)
+# define TARGET_HEADER_BUILTIN(ID, TYPE, ATTRS, HEADER, LANG, FEATURE) BUILTIN(ID, TYPE, ATTRS)
+#endif
+
+// Miscellaneous builtin for checking x86 cpu features.
+// TODO: Make this somewhat generic so that other backends
+// can use it?
+BUILTIN(__builtin_cpu_init, "v", "n")
+BUILTIN(__builtin_cpu_supports, "bcC*", "nc")
+BUILTIN(__builtin_cpu_is, "bcC*", "nc")
+
+// Undefined Values
+//
+TARGET_BUILTIN(__builtin_ia32_undef128, "V2d", "ncV:128:", "")
+TARGET_BUILTIN(__builtin_ia32_undef256, "V4d", "ncV:256:", "")
+TARGET_BUILTIN(__builtin_ia32_undef512, "V8d", "ncV:512:", "")
+
+// FLAGS
+//
+TARGET_BUILTIN(__builtin_ia32_readeflags_u32, "Ui", "n", "")
+TARGET_BUILTIN(__builtin_ia32_writeeflags_u32, "vUi", "n", "")
+
+// 3DNow!
+//
+TARGET_BUILTIN(__builtin_ia32_femms, "v", "n", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pavgusb, "V8cV8cV8c", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pf2id, "V2iV2f", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pfacc, "V2fV2fV2f", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pfadd, "V2fV2fV2f", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pfcmpeq, "V2iV2fV2f", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pfcmpge, "V2iV2fV2f", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pfcmpgt, "V2iV2fV2f", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pfmax, "V2fV2fV2f", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pfmin, "V2fV2fV2f", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pfmul, "V2fV2fV2f", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pfrcp, "V2fV2f", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pfrcpit1, "V2fV2fV2f", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pfrcpit2, "V2fV2fV2f", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pfrsqrt, "V2fV2f", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pfrsqit1, "V2fV2fV2f", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pfsub, "V2fV2fV2f", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pfsubr, "V2fV2fV2f", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pi2fd, "V2fV2i", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pmulhrw, "V4sV4sV4s", "ncV:64:", "3dnow")
+// 3DNow! Extensions (3dnowa).
+TARGET_BUILTIN(__builtin_ia32_pf2iw, "V2iV2f", "ncV:64:", "3dnowa")
+TARGET_BUILTIN(__builtin_ia32_pfnacc, "V2fV2fV2f", "ncV:64:", "3dnowa")
+TARGET_BUILTIN(__builtin_ia32_pfpnacc, "V2fV2fV2f", "ncV:64:", "3dnowa")
+TARGET_BUILTIN(__builtin_ia32_pi2fw, "V2fV2i", "ncV:64:", "3dnowa")
+TARGET_BUILTIN(__builtin_ia32_pswapdsf, "V2fV2f", "ncV:64:", "3dnowa")
+TARGET_BUILTIN(__builtin_ia32_pswapdsi, "V2iV2i", "ncV:64:", "3dnowa")
+
+// MMX
+//
+// All MMX instructions will be generated via builtins. Any MMX vector
+// types (<1 x i64>, <2 x i32>, etc.) that aren't used by these builtins will be
+// expanded by the back-end.
+// FIXME: _mm_prefetch must be a built-in because it takes a compile-time constant
+// argument and our prior approach of using a #define to the current built-in
+// doesn't work in the presence of re-declaration of _mm_prefetch for windows.
+TARGET_BUILTIN(_mm_prefetch, "vcC*i", "nc", "mmx")
+TARGET_BUILTIN(__builtin_ia32_emms, "v", "n", "mmx")
+TARGET_BUILTIN(__builtin_ia32_paddb, "V8cV8cV8c", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_paddw, "V4sV4sV4s", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_paddd, "V2iV2iV2i", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_paddsb, "V8cV8cV8c", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_paddsw, "V4sV4sV4s", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_paddusb, "V8cV8cV8c", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_paddusw, "V4sV4sV4s", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psubb, "V8cV8cV8c", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psubw, "V4sV4sV4s", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psubd, "V2iV2iV2i", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psubsb, "V8cV8cV8c", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psubsw, "V4sV4sV4s", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psubusb, "V8cV8cV8c", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psubusw, "V4sV4sV4s", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_pmulhw, "V4sV4sV4s", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_pmullw, "V4sV4sV4s", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_pmaddwd, "V2iV4sV4s", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_pand, "V1LLiV1LLiV1LLi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_pandn, "V1LLiV1LLiV1LLi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_por, "V1LLiV1LLiV1LLi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_pxor, "V1LLiV1LLiV1LLi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psllw, "V4sV4sV1LLi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_pslld, "V2iV2iV1LLi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psllq, "V1LLiV1LLiV1LLi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psrlw, "V4sV4sV1LLi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psrld, "V2iV2iV1LLi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psrlq, "V1LLiV1LLiV1LLi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psraw, "V4sV4sV1LLi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psrad, "V2iV2iV1LLi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psllwi, "V4sV4si", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_pslldi, "V2iV2ii", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psllqi, "V1LLiV1LLii", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psrlwi, "V4sV4si", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psrldi, "V2iV2ii", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psrlqi, "V1LLiV1LLii", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psrawi, "V4sV4si", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psradi, "V2iV2ii", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_packsswb, "V8cV4sV4s", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_packssdw, "V4sV2iV2i", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_packuswb, "V8cV4sV4s", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_punpckhbw, "V8cV8cV8c", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_punpckhwd, "V4sV4sV4s", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_punpckhdq, "V2iV2iV2i", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_punpcklbw, "V8cV8cV8c", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_punpcklwd, "V4sV4sV4s", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_punpckldq, "V2iV2iV2i", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_pcmpeqb, "V8cV8cV8c", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_pcmpeqw, "V4sV4sV4s", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_pcmpeqd, "V2iV2iV2i", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_pcmpgtb, "V8cV8cV8c", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_pcmpgtw, "V4sV4sV4s", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_pcmpgtd, "V2iV2iV2i", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_maskmovq, "vV8cV8cc*", "nV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_movntq, "vV1LLi*V1LLi", "nV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_vec_init_v2si, "V2iii", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_vec_init_v4hi, "V4sssss", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_vec_init_v8qi, "V8ccccccccc", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_vec_ext_v2si, "iV2ii", "ncV:64:", "mmx")
+
+// MMX2 (MMX+SSE) intrinsics
+TARGET_BUILTIN(__builtin_ia32_cvtpi2ps, "V4fV4fV2i", "ncV:64:", "mmx,sse")
+TARGET_BUILTIN(__builtin_ia32_cvtps2pi, "V2iV4f", "ncV:64:", "mmx,sse")
+TARGET_BUILTIN(__builtin_ia32_cvttps2pi, "V2iV4f", "ncV:64:", "mmx,sse")
+TARGET_BUILTIN(__builtin_ia32_pavgb, "V8cV8cV8c", "ncV:64:", "mmx,sse")
+TARGET_BUILTIN(__builtin_ia32_pavgw, "V4sV4sV4s", "ncV:64:", "mmx,sse")
+TARGET_BUILTIN(__builtin_ia32_pmaxsw, "V4sV4sV4s", "ncV:64:", "mmx,sse")
+TARGET_BUILTIN(__builtin_ia32_pmaxub, "V8cV8cV8c", "ncV:64:", "mmx,sse")
+TARGET_BUILTIN(__builtin_ia32_pminsw, "V4sV4sV4s", "ncV:64:", "mmx,sse")
+TARGET_BUILTIN(__builtin_ia32_pminub, "V8cV8cV8c", "ncV:64:", "mmx,sse")
+TARGET_BUILTIN(__builtin_ia32_pmovmskb, "iV8c", "ncV:64:", "mmx,sse")
+TARGET_BUILTIN(__builtin_ia32_pmulhuw, "V4sV4sV4s", "ncV:64:", "mmx,sse")
+TARGET_BUILTIN(__builtin_ia32_psadbw, "V4sV8cV8c", "ncV:64:", "mmx,sse")
+TARGET_BUILTIN(__builtin_ia32_pshufw, "V4sV4sIc", "ncV:64:", "mmx,sse")
+TARGET_BUILTIN(__builtin_ia32_vec_ext_v4hi, "iV4sIi", "ncV:64:", "mmx,sse")
+TARGET_BUILTIN(__builtin_ia32_vec_set_v4hi, "V4sV4siIi", "ncV:64:", "mmx,sse")
+
+// MMX+SSE2
+TARGET_BUILTIN(__builtin_ia32_cvtpd2pi, "V2iV2d", "ncV:64:", "mmx,sse2")
+TARGET_BUILTIN(__builtin_ia32_cvtpi2pd, "V2dV2i", "ncV:64:", "mmx,sse2")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2pi, "V2iV2d", "ncV:64:", "mmx,sse2")
+TARGET_BUILTIN(__builtin_ia32_paddq, "V1LLiV1LLiV1LLi", "ncV:64:", "mmx,sse2")
+TARGET_BUILTIN(__builtin_ia32_pmuludq, "V1LLiV2iV2i", "ncV:64:", "mmx,sse2")
+TARGET_BUILTIN(__builtin_ia32_psubq, "V1LLiV1LLiV1LLi", "ncV:64:", "mmx,sse2")
+
+// MMX+SSSE3
+TARGET_BUILTIN(__builtin_ia32_pabsb, "V8cV8c", "ncV:64:", "mmx,ssse3")
+TARGET_BUILTIN(__builtin_ia32_pabsd, "V2iV2i", "ncV:64:", "mmx,ssse3")
+TARGET_BUILTIN(__builtin_ia32_pabsw, "V4sV4s", "ncV:64:", "mmx,ssse3")
+TARGET_BUILTIN(__builtin_ia32_palignr, "V8cV8cV8cIc", "ncV:64:", "mmx,ssse3")
+TARGET_BUILTIN(__builtin_ia32_phaddd, "V2iV2iV2i", "ncV:64:", "mmx,ssse3")
+TARGET_BUILTIN(__builtin_ia32_phaddsw, "V4sV4sV4s", "ncV:64:", "mmx,ssse3")
+TARGET_BUILTIN(__builtin_ia32_phaddw, "V4sV4sV4s", "ncV:64:", "mmx,ssse3")
+TARGET_BUILTIN(__builtin_ia32_phsubd, "V2iV2iV2i", "ncV:64:", "mmx,ssse3")
+TARGET_BUILTIN(__builtin_ia32_phsubsw, "V4sV4sV4s", "ncV:64:", "mmx,ssse3")
+TARGET_BUILTIN(__builtin_ia32_phsubw, "V4sV4sV4s", "ncV:64:", "mmx,ssse3")
+TARGET_BUILTIN(__builtin_ia32_pmaddubsw, "V8cV8cV8c", "ncV:64:", "mmx,ssse3")
+TARGET_BUILTIN(__builtin_ia32_pmulhrsw, "V4sV4sV4s", "ncV:64:", "mmx,ssse3")
+TARGET_BUILTIN(__builtin_ia32_pshufb, "V8cV8cV8c", "ncV:64:", "mmx,ssse3")
+TARGET_BUILTIN(__builtin_ia32_psignw, "V4sV4sV4s", "ncV:64:", "mmx,ssse3")
+TARGET_BUILTIN(__builtin_ia32_psignb, "V8cV8cV8c", "ncV:64:", "mmx,ssse3")
+TARGET_BUILTIN(__builtin_ia32_psignd, "V2iV2iV2i", "ncV:64:", "mmx,ssse3")
+
+// SSE intrinsics.
+TARGET_BUILTIN(__builtin_ia32_comieq, "iV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_comilt, "iV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_comile, "iV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_comigt, "iV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_comige, "iV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_comineq, "iV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_ucomieq, "iV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_ucomilt, "iV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_ucomile, "iV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_ucomigt, "iV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_ucomige, "iV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_ucomineq, "iV4fV4f", "ncV:128:", "sse")
+
+TARGET_BUILTIN(__builtin_ia32_comisdeq, "iV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_comisdlt, "iV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_comisdle, "iV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_comisdgt, "iV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_comisdge, "iV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_comisdneq, "iV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_ucomisdeq, "iV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_ucomisdlt, "iV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_ucomisdle, "iV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_ucomisdgt, "iV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_ucomisdge, "iV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_ucomisdneq, "iV2dV2d", "ncV:128:", "sse2")
+
+TARGET_BUILTIN(__builtin_ia32_cmpeqps, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cmpltps, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cmpleps, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cmpunordps, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cmpneqps, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cmpnltps, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cmpnleps, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cmpordps, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cmpeqss, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cmpltss, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cmpless, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cmpunordss, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cmpneqss, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cmpnltss, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cmpnless, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cmpordss, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_minps, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_maxps, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_minss, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_maxss, "V4fV4fV4f", "ncV:128:", "sse")
+
+TARGET_BUILTIN(__builtin_ia32_cmpeqpd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cmpltpd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cmplepd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cmpunordpd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cmpneqpd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cmpnltpd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cmpnlepd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cmpordpd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cmpeqsd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cmpltsd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cmplesd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cmpunordsd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cmpneqsd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cmpnltsd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cmpnlesd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cmpordsd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_minpd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_maxpd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_minsd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_maxsd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_paddsb128, "V16cV16cV16c", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_paddsw128, "V8sV8sV8s", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psubsb128, "V16cV16cV16c", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psubsw128, "V8sV8sV8s", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_paddusb128, "V16cV16cV16c", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_paddusw128, "V8sV8sV8s", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psubusb128, "V16cV16cV16c", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psubusw128, "V8sV8sV8s", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_pmulhw128, "V8sV8sV8s", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_pmaxub128, "V16cV16cV16c", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_pmaxsw128, "V8sV8sV8s", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_pminub128, "V16cV16cV16c", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_pminsw128, "V8sV8sV8s", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_packsswb128, "V16cV8sV8s", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_packssdw128, "V8sV4iV4i", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_packuswb128, "V16cV8sV8s", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_pmulhuw128, "V8sV8sV8s", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_vec_ext_v4si, "iV4iIi", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_vec_ext_v4sf, "fV4fIi", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_vec_ext_v8hi, "sV8sIi", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_vec_set_v8hi, "V8sV8ssIi", "ncV:128:", "sse2")
+
+TARGET_BUILTIN(__builtin_ia32_addsubps, "V4fV4fV4f", "ncV:128:", "sse3")
+TARGET_BUILTIN(__builtin_ia32_addsubpd, "V2dV2dV2d", "ncV:128:", "sse3")
+TARGET_BUILTIN(__builtin_ia32_haddps, "V4fV4fV4f", "ncV:128:", "sse3")
+TARGET_BUILTIN(__builtin_ia32_haddpd, "V2dV2dV2d", "ncV:128:", "sse3")
+TARGET_BUILTIN(__builtin_ia32_hsubps, "V4fV4fV4f", "ncV:128:", "sse3")
+TARGET_BUILTIN(__builtin_ia32_hsubpd, "V2dV2dV2d", "ncV:128:", "sse3")
+TARGET_BUILTIN(__builtin_ia32_phaddw128, "V8sV8sV8s", "ncV:128:", "ssse3")
+TARGET_BUILTIN(__builtin_ia32_phaddd128, "V4iV4iV4i", "ncV:128:", "ssse3")
+TARGET_BUILTIN(__builtin_ia32_phaddsw128, "V8sV8sV8s", "ncV:128:", "ssse3")
+TARGET_BUILTIN(__builtin_ia32_phsubw128, "V8sV8sV8s", "ncV:128:", "ssse3")
+TARGET_BUILTIN(__builtin_ia32_phsubd128, "V4iV4iV4i", "ncV:128:", "ssse3")
+TARGET_BUILTIN(__builtin_ia32_phsubsw128, "V8sV8sV8s", "ncV:128:", "ssse3")
+TARGET_BUILTIN(__builtin_ia32_pmaddubsw128, "V8sV16cV16c", "ncV:128:", "ssse3")
+TARGET_BUILTIN(__builtin_ia32_pmulhrsw128, "V8sV8sV8s", "ncV:128:", "ssse3")
+TARGET_BUILTIN(__builtin_ia32_pshufb128, "V16cV16cV16c", "ncV:128:", "ssse3")
+TARGET_BUILTIN(__builtin_ia32_psignb128, "V16cV16cV16c", "ncV:128:", "ssse3")
+TARGET_BUILTIN(__builtin_ia32_psignw128, "V8sV8sV8s", "ncV:128:", "ssse3")
+TARGET_BUILTIN(__builtin_ia32_psignd128, "V4iV4iV4i", "ncV:128:", "ssse3")
+TARGET_BUILTIN(__builtin_ia32_pabsb128, "V16cV16c", "ncV:128:", "ssse3")
+TARGET_BUILTIN(__builtin_ia32_pabsw128, "V8sV8s", "ncV:128:", "ssse3")
+TARGET_BUILTIN(__builtin_ia32_pabsd128, "V4iV4i", "ncV:128:", "ssse3")
+
+TARGET_BUILTIN(__builtin_ia32_ldmxcsr, "vUi", "n", "sse")
+TARGET_HEADER_BUILTIN(_mm_setcsr, "vUi", "nh","xmmintrin.h", ALL_LANGUAGES, "sse")
+TARGET_BUILTIN(__builtin_ia32_stmxcsr, "Ui", "n", "sse")
+TARGET_HEADER_BUILTIN(_mm_getcsr, "Ui", "nh", "xmmintrin.h", ALL_LANGUAGES, "sse")
+TARGET_BUILTIN(__builtin_ia32_cvtss2si, "iV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cvttss2si, "iV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_storehps, "vV2i*V4f", "nV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_storelps, "vV2i*V4f", "nV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_movmskps, "iV4f", "nV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_sfence, "v", "n", "sse")
+TARGET_HEADER_BUILTIN(_mm_sfence, "v", "nh", "xmmintrin.h", ALL_LANGUAGES, "sse")
+TARGET_BUILTIN(__builtin_ia32_rcpps, "V4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_rcpss, "V4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_rsqrtps, "V4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_rsqrtss, "V4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_sqrtps, "V4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_sqrtss, "V4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_shufps, "V4fV4fV4fIi", "ncV:128:", "sse")
+
+TARGET_BUILTIN(__builtin_ia32_maskmovdqu, "vV16cV16cc*", "nV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_movmskpd, "iV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_pmovmskb128, "iV16c", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_movnti, "vi*i", "n", "sse2")
+TARGET_BUILTIN(__builtin_ia32_pshufd, "V4iV4iIi", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_pshuflw, "V8sV8sIi", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_pshufhw, "V8sV8sIi", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psadbw128, "V2LLiV16cV16c", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_sqrtpd, "V2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_sqrtsd, "V2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_shufpd, "V2dV2dV2dIi", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2dq, "V2LLiV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2ps, "V4fV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2dq, "V4iV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cvtsd2si, "iV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cvttsd2si, "iV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cvtsd2ss, "V4fV4fV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cvtps2dq, "V4iV4f", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cvttps2dq, "V4iV4f", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_clflush, "vvC*", "n", "sse2")
+TARGET_HEADER_BUILTIN(_mm_clflush, "vvC*", "nh", "emmintrin.h", ALL_LANGUAGES, "sse2")
+TARGET_BUILTIN(__builtin_ia32_lfence, "v", "n", "sse2")
+TARGET_HEADER_BUILTIN(_mm_lfence, "v", "nh", "emmintrin.h", ALL_LANGUAGES, "sse2")
+TARGET_BUILTIN(__builtin_ia32_mfence, "v", "n", "sse2")
+TARGET_HEADER_BUILTIN(_mm_mfence, "v", "nh", "emmintrin.h", ALL_LANGUAGES, "sse2")
+TARGET_BUILTIN(__builtin_ia32_pause, "v", "n", "")
+TARGET_HEADER_BUILTIN(_mm_pause, "v", "nh", "emmintrin.h", ALL_LANGUAGES, "")
+TARGET_BUILTIN(__builtin_ia32_pmuludq128, "V2LLiV4iV4i", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psraw128, "V8sV8sV8s", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psrad128, "V4iV4iV4i", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psrlw128, "V8sV8sV8s", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psrld128, "V4iV4iV4i", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psrlq128, "V2LLiV2LLiV2LLi", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psllw128, "V8sV8sV8s", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_pslld128, "V4iV4iV4i", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psllq128, "V2LLiV2LLiV2LLi", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psllwi128, "V8sV8si", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_pslldi128, "V4iV4ii", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psllqi128, "V2LLiV2LLii", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psrlwi128, "V8sV8si", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psrldi128, "V4iV4ii", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psrlqi128, "V2LLiV2LLii", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psrawi128, "V8sV8si", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psradi128, "V4iV4ii", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_pmaddwd128, "V4iV8sV8s", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_pslldqi128_byteshift, "V2LLiV2LLiIi", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psrldqi128_byteshift, "V2LLiV2LLiIi", "ncV:128:", "sse2")
+
+TARGET_BUILTIN(__builtin_ia32_monitor, "vv*UiUi", "n", "sse3")
+TARGET_BUILTIN(__builtin_ia32_mwait, "vUiUi", "n", "sse3")
+TARGET_BUILTIN(__builtin_ia32_lddqu, "V16ccC*", "nV:128:", "sse3")
+
+TARGET_BUILTIN(__builtin_ia32_palignr128, "V16cV16cV16cIi", "ncV:128:", "ssse3")
+
+TARGET_BUILTIN(__builtin_ia32_insertps128, "V4fV4fV4fIc", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_pblendvb128, "V16cV16cV16cV16c", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_pblendw128, "V8sV8sV8sIi", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_blendpd, "V2dV2dV2dIi", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_blendps, "V4fV4fV4fIi", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_blendvpd, "V2dV2dV2dV2d", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_blendvps, "V4fV4fV4fV4f", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_packusdw128, "V8sV4iV4i", "ncV:128:", "sse4.1")
+
+TARGET_BUILTIN(__builtin_ia32_pmaxsb128, "V16cV16cV16c", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_pmaxsd128, "V4iV4iV4i", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_pmaxud128, "V4iV4iV4i", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_pmaxuw128, "V8sV8sV8s", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_pminsb128, "V16cV16cV16c", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_pminsd128, "V4iV4iV4i", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_pminud128, "V4iV4iV4i", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_pminuw128, "V8sV8sV8s", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_pmuldq128, "V2LLiV4iV4i", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_roundps, "V4fV4fIi", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_roundss, "V4fV4fV4fIi", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_roundsd, "V2dV2dV2dIi", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_roundpd, "V2dV2dIi", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_dpps, "V4fV4fV4fIc", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_dppd, "V2dV2dV2dIc", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_ptestz128, "iV2LLiV2LLi", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_ptestc128, "iV2LLiV2LLi", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_ptestnzc128, "iV2LLiV2LLi", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_mpsadbw128, "V16cV16cV16cIc", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_phminposuw128, "V8sV8s", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_vec_ext_v16qi, "cV16cIi", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_vec_set_v16qi, "V16cV16ccIi", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_vec_set_v4si, "V4iV4iiIi", "ncV:128:", "sse4.1")
+
+// SSE 4.2
+TARGET_BUILTIN(__builtin_ia32_pcmpistrm128, "V16cV16cV16cIc", "ncV:128:", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_pcmpistri128, "iV16cV16cIc", "ncV:128:", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_pcmpestrm128, "V16cV16ciV16ciIc", "ncV:128:", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_pcmpestri128, "iV16ciV16ciIc","ncV:128:", "sse4.2")
+
+TARGET_BUILTIN(__builtin_ia32_pcmpistria128, "iV16cV16cIc","ncV:128:", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_pcmpistric128, "iV16cV16cIc","ncV:128:", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_pcmpistrio128, "iV16cV16cIc","ncV:128:", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_pcmpistris128, "iV16cV16cIc","ncV:128:", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_pcmpistriz128, "iV16cV16cIc","ncV:128:", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_pcmpestria128, "iV16ciV16ciIc","ncV:128:", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_pcmpestric128, "iV16ciV16ciIc","ncV:128:", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_pcmpestrio128, "iV16ciV16ciIc","ncV:128:", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_pcmpestris128, "iV16ciV16ciIc","ncV:128:", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_pcmpestriz128, "iV16ciV16ciIc","ncV:128:", "sse4.2")
+
+TARGET_BUILTIN(__builtin_ia32_crc32qi, "UiUiUc", "nc", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_crc32hi, "UiUiUs", "nc", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_crc32si, "UiUiUi", "nc", "sse4.2")
+
+// SSE4a
+TARGET_BUILTIN(__builtin_ia32_extrqi, "V2LLiV2LLiIcIc", "ncV:128:", "sse4a")
+TARGET_BUILTIN(__builtin_ia32_extrq, "V2LLiV2LLiV16c", "ncV:128:", "sse4a")
+TARGET_BUILTIN(__builtin_ia32_insertqi, "V2LLiV2LLiV2LLiIcIc", "ncV:128:", "sse4a")
+TARGET_BUILTIN(__builtin_ia32_insertq, "V2LLiV2LLiV2LLi", "ncV:128:", "sse4a")
+TARGET_BUILTIN(__builtin_ia32_movntsd, "vd*V2d", "nV:128:", "sse4a")
+TARGET_BUILTIN(__builtin_ia32_movntss, "vf*V4f", "nV:128:", "sse4a")
+
+// AES
+TARGET_BUILTIN(__builtin_ia32_aesenc128, "V2LLiV2LLiV2LLi", "ncV:128:", "aes")
+TARGET_BUILTIN(__builtin_ia32_aesenclast128, "V2LLiV2LLiV2LLi", "ncV:128:", "aes")
+TARGET_BUILTIN(__builtin_ia32_aesdec128, "V2LLiV2LLiV2LLi", "ncV:128:", "aes")
+TARGET_BUILTIN(__builtin_ia32_aesdeclast128, "V2LLiV2LLiV2LLi", "ncV:128:", "aes")
+TARGET_BUILTIN(__builtin_ia32_aesimc128, "V2LLiV2LLi", "ncV:128:", "aes")
+TARGET_BUILTIN(__builtin_ia32_aeskeygenassist128, "V2LLiV2LLiIc", "ncV:128:", "aes")
+
+// VAES
+TARGET_BUILTIN(__builtin_ia32_aesenc256, "V4LLiV4LLiV4LLi", "ncV:256:", "vaes")
+TARGET_BUILTIN(__builtin_ia32_aesenc512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f,vaes")
+TARGET_BUILTIN(__builtin_ia32_aesenclast256, "V4LLiV4LLiV4LLi", "ncV:256:", "vaes")
+TARGET_BUILTIN(__builtin_ia32_aesenclast512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f,vaes")
+TARGET_BUILTIN(__builtin_ia32_aesdec256, "V4LLiV4LLiV4LLi", "ncV:256:", "vaes")
+TARGET_BUILTIN(__builtin_ia32_aesdec512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f,vaes")
+TARGET_BUILTIN(__builtin_ia32_aesdeclast256, "V4LLiV4LLiV4LLi", "ncV:256:", "vaes")
+TARGET_BUILTIN(__builtin_ia32_aesdeclast512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f,vaes")
+
+// GFNI
+TARGET_BUILTIN(__builtin_ia32_vgf2p8affineinvqb_v16qi, "V16cV16cV16cIc", "ncV:128:", "gfni")
+TARGET_BUILTIN(__builtin_ia32_vgf2p8affineinvqb_v32qi, "V32cV32cV32cIc", "ncV:256:", "avx,gfni")
+TARGET_BUILTIN(__builtin_ia32_vgf2p8affineinvqb_v64qi, "V64cV64cV64cIc", "ncV:512:", "avx512bw,gfni")
+TARGET_BUILTIN(__builtin_ia32_vgf2p8affineqb_v16qi, "V16cV16cV16cIc", "ncV:128:", "gfni")
+TARGET_BUILTIN(__builtin_ia32_vgf2p8affineqb_v32qi, "V32cV32cV32cIc", "ncV:256:", "avx,gfni")
+TARGET_BUILTIN(__builtin_ia32_vgf2p8affineqb_v64qi, "V64cV64cV64cIc", "ncV:512:", "avx512bw,gfni")
+TARGET_BUILTIN(__builtin_ia32_vgf2p8mulb_v16qi, "V16cV16cV16c", "ncV:128:", "gfni")
+TARGET_BUILTIN(__builtin_ia32_vgf2p8mulb_v32qi, "V32cV32cV32c", "ncV:256:", "avx,gfni")
+TARGET_BUILTIN(__builtin_ia32_vgf2p8mulb_v64qi, "V64cV64cV64c", "ncV:512:", "avx512bw,gfni")
+
+// CLMUL
+TARGET_BUILTIN(__builtin_ia32_pclmulqdq128, "V2LLiV2LLiV2LLiIc", "ncV:128:", "pclmul")
+
+// VPCLMULQDQ
+TARGET_BUILTIN(__builtin_ia32_pclmulqdq256, "V4LLiV4LLiV4LLiIc", "ncV:256:", "vpclmulqdq")
+TARGET_BUILTIN(__builtin_ia32_pclmulqdq512, "V8LLiV8LLiV8LLiIc", "ncV:512:", "avx512f,vpclmulqdq")
+
+// AVX
+TARGET_BUILTIN(__builtin_ia32_addsubpd256, "V4dV4dV4d", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_addsubps256, "V8fV8fV8f", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_haddpd256, "V4dV4dV4d", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_hsubps256, "V8fV8fV8f", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_hsubpd256, "V4dV4dV4d", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_haddps256, "V8fV8fV8f", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_maxpd256, "V4dV4dV4d", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_maxps256, "V8fV8fV8f", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_minpd256, "V4dV4dV4d", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_minps256, "V8fV8fV8f", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vpermilvarpd, "V2dV2dV2LLi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vpermilvarps, "V4fV4fV4i", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vpermilvarpd256, "V4dV4dV4LLi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vpermilvarps256, "V8fV8fV8i", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_blendpd256, "V4dV4dV4dIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_blendps256, "V8fV8fV8fIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_blendvpd256, "V4dV4dV4dV4d", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_blendvps256, "V8fV8fV8fV8f", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_shufpd256, "V4dV4dV4dIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_shufps256, "V8fV8fV8fIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_dpps256, "V8fV8fV8fIc", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_cmppd, "V2dV2dV2dIc", "ncV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_cmppd256, "V4dV4dV4dIc", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_cmpps, "V4fV4fV4fIc", "ncV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_cmpps256, "V8fV8fV8fIc", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_cmpsd, "V2dV2dV2dIc", "ncV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_cmpss, "V4fV4fV4fIc", "ncV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vextractf128_pd256, "V2dV4dIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vextractf128_ps256, "V4fV8fIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vextractf128_si256, "V4iV8iIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2ps256, "V4fV4d", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_cvtps2dq256, "V8iV8f", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2dq256, "V4iV4d", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2dq256, "V4iV4d", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_cvttps2dq256, "V8iV8f", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vperm2f128_pd256, "V4dV4dV4dIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vperm2f128_ps256, "V8fV8fV8fIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vperm2f128_si256, "V8iV8iV8iIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vpermilpd, "V2dV2dIi", "ncV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vpermilps, "V4fV4fIi", "ncV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vpermilpd256, "V4dV4dIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vpermilps256, "V8fV8fIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vinsertf128_pd256, "V4dV4dV2dIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vinsertf128_ps256, "V8fV8fV4fIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vinsertf128_si256, "V8iV8iV4iIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_sqrtpd256, "V4dV4d", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_sqrtps256, "V8fV8f", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_rsqrtps256, "V8fV8f", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_rcpps256, "V8fV8f", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_roundpd256, "V4dV4dIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_roundps256, "V8fV8fIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vtestzpd, "iV2dV2d", "ncV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vtestcpd, "iV2dV2d", "ncV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vtestnzcpd, "iV2dV2d", "ncV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vtestzps, "iV4fV4f", "ncV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vtestcps, "iV4fV4f", "ncV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vtestnzcps, "iV4fV4f", "ncV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vtestzpd256, "iV4dV4d", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vtestcpd256, "iV4dV4d", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vtestnzcpd256, "iV4dV4d", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vtestzps256, "iV8fV8f", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vtestcps256, "iV8fV8f", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vtestnzcps256, "iV8fV8f", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_ptestz256, "iV4LLiV4LLi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_ptestc256, "iV4LLiV4LLi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_ptestnzc256, "iV4LLiV4LLi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_movmskpd256, "iV4d", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_movmskps256, "iV8f", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vzeroall, "v", "n", "avx")
+TARGET_BUILTIN(__builtin_ia32_vzeroupper, "v", "n", "avx")
+TARGET_BUILTIN(__builtin_ia32_lddqu256, "V32ccC*", "nV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_maskloadpd, "V2dV2dC*V2LLi", "nV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_maskloadps, "V4fV4fC*V4i", "nV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_maskloadpd256, "V4dV4dC*V4LLi", "nV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_maskloadps256, "V8fV8fC*V8i", "nV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_maskstorepd, "vV2d*V2LLiV2d", "nV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_maskstoreps, "vV4f*V4iV4f", "nV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_maskstorepd256, "vV4d*V4LLiV4d", "nV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_maskstoreps256, "vV8f*V8iV8f", "nV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vec_ext_v32qi, "cV32cIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vec_ext_v16hi, "sV16sIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vec_ext_v8si, "iV8iIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vec_set_v32qi, "V32cV32ccIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vec_set_v16hi, "V16sV16ssIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vec_set_v8si, "V8iV8iiIi", "ncV:256:", "avx")
+
+// AVX2
+TARGET_BUILTIN(__builtin_ia32_mpsadbw256, "V32cV32cV32cIc", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pabsb256, "V32cV32c", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pabsw256, "V16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pabsd256, "V8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_packsswb256, "V32cV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_packssdw256, "V16sV8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_packuswb256, "V32cV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_packusdw256, "V16sV8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_paddsb256, "V32cV32cV32c", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_paddsw256, "V16sV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psubsb256, "V32cV32cV32c", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psubsw256, "V16sV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_paddusb256, "V32cV32cV32c", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_paddusw256, "V16sV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psubusb256, "V32cV32cV32c", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psubusw256, "V16sV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_palignr256, "V32cV32cV32cIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pblendvb256, "V32cV32cV32cV32c", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pblendw256, "V16sV16sV16sIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_phaddw256, "V16sV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_phaddd256, "V8iV8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_phaddsw256, "V16sV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_phsubw256, "V16sV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_phsubd256, "V8iV8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_phsubsw256, "V16sV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pmaddubsw256, "V16sV32cV32c", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pmaddwd256, "V8iV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pmaxub256, "V32cV32cV32c", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pmaxuw256, "V16sV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pmaxud256, "V8iV8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pmaxsb256, "V32cV32cV32c", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pmaxsw256, "V16sV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pmaxsd256, "V8iV8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pminub256, "V32cV32cV32c", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pminuw256, "V16sV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pminud256, "V8iV8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pminsb256, "V32cV32cV32c", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pminsw256, "V16sV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pminsd256, "V8iV8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pmovmskb256, "iV32c", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pmuldq256, "V4LLiV8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pmulhrsw256, "V16sV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pmulhuw256, "V16sV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pmulhw256, "V16sV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pmuludq256, "V4LLiV8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psadbw256, "V4LLiV32cV32c", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pshufb256, "V32cV32cV32c", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pshufd256, "V8iV8iIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pshuflw256, "V16sV16sIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pshufhw256, "V16sV16sIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psignb256, "V32cV32cV32c", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psignw256, "V16sV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psignd256, "V8iV8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psllwi256, "V16sV16si", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psllw256, "V16sV16sV8s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pslldqi256_byteshift, "V4LLiV4LLiIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pslldi256, "V8iV8ii", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pslld256, "V8iV8iV4i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psllqi256, "V4LLiV4LLii", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psllq256, "V4LLiV4LLiV2LLi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrawi256, "V16sV16si", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psraw256, "V16sV16sV8s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psradi256, "V8iV8ii", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrad256, "V8iV8iV4i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrldqi256_byteshift, "V4LLiV4LLiIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrlwi256, "V16sV16si", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrlw256, "V16sV16sV8s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrldi256, "V8iV8ii", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrld256, "V8iV8iV4i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrlqi256, "V4LLiV4LLii", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrlq256, "V4LLiV4LLiV2LLi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pblendd128, "V4iV4iV4iIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pblendd256, "V8iV8iV8iIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_permvarsi256, "V8iV8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_permdf256, "V4dV4dIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_permvarsf256, "V8fV8fV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_permti256, "V4LLiV4LLiV4LLiIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_permdi256, "V4LLiV4LLiIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_extract128i256, "V2LLiV4LLiIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_insert128i256, "V4LLiV4LLiV2LLiIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_maskloadd256, "V8iV8iC*V8i", "nV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_maskloadq256, "V4LLiV4LLiC*V4LLi", "nV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_maskloadd, "V4iV4iC*V4i", "nV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_maskloadq, "V2LLiV2LLiC*V2LLi", "nV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_maskstored256, "vV8i*V8iV8i", "nV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_maskstoreq256, "vV4LLi*V4LLiV4LLi", "nV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_maskstored, "vV4i*V4iV4i", "nV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_maskstoreq, "vV2LLi*V2LLiV2LLi", "nV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psllv8si, "V8iV8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psllv4si, "V4iV4iV4i", "ncV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psllv4di, "V4LLiV4LLiV4LLi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psllv2di, "V2LLiV2LLiV2LLi", "ncV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrav8si, "V8iV8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrav4si, "V4iV4iV4i", "ncV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrlv8si, "V8iV8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrlv4si, "V4iV4iV4i", "ncV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrlv4di, "V4LLiV4LLiV4LLi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrlv2di, "V2LLiV2LLiV2LLi", "ncV:128:", "avx2")
+
+// GATHER
+TARGET_BUILTIN(__builtin_ia32_gatherd_pd, "V2dV2ddC*V4iV2dIc", "nV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherd_pd256, "V4dV4ddC*V4iV4dIc", "nV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherq_pd, "V2dV2ddC*V2LLiV2dIc", "nV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherq_pd256, "V4dV4ddC*V4LLiV4dIc", "nV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherd_ps, "V4fV4ffC*V4iV4fIc", "nV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherd_ps256, "V8fV8ffC*V8iV8fIc", "nV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherq_ps, "V4fV4ffC*V2LLiV4fIc", "nV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherq_ps256, "V4fV4ffC*V4LLiV4fIc", "nV:256:", "avx2")
+
+TARGET_BUILTIN(__builtin_ia32_gatherd_q, "V2LLiV2LLiLLiC*V4iV2LLiIc", "nV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherd_q256, "V4LLiV4LLiLLiC*V4iV4LLiIc", "nV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherq_q, "V2LLiV2LLiLLiC*V2LLiV2LLiIc", "nV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherq_q256, "V4LLiV4LLiLLiC*V4LLiV4LLiIc", "nV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherd_d, "V4iV4iiC*V4iV4iIc", "nV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherd_d256, "V8iV8iiC*V8iV8iIc", "nV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherq_d, "V4iV4iiC*V2LLiV4iIc", "nV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherq_d256, "V4iV4iiC*V4LLiV4iIc", "nV:256:", "avx2")
+
+// F16C
+TARGET_BUILTIN(__builtin_ia32_vcvtps2ph, "V8sV4fIi", "ncV:128:", "f16c")
+TARGET_BUILTIN(__builtin_ia32_vcvtps2ph256, "V8sV8fIi", "ncV:256:", "f16c")
+TARGET_BUILTIN(__builtin_ia32_vcvtph2ps, "V4fV8s", "ncV:128:", "f16c")
+TARGET_BUILTIN(__builtin_ia32_vcvtph2ps256, "V8fV8s", "ncV:256:", "f16c")
+
+// RDRAND
+TARGET_BUILTIN(__builtin_ia32_rdrand16_step, "UiUs*", "n", "rdrnd")
+TARGET_BUILTIN(__builtin_ia32_rdrand32_step, "UiUi*", "n", "rdrnd")
+
+// FXSR
+TARGET_BUILTIN(__builtin_ia32_fxrstor, "vv*", "n", "fxsr")
+TARGET_BUILTIN(__builtin_ia32_fxsave, "vv*", "n", "fxsr")
+
+// XSAVE
+TARGET_BUILTIN(__builtin_ia32_xsave, "vv*ULLi", "n", "xsave")
+TARGET_BUILTIN(__builtin_ia32_xrstor, "vv*ULLi", "n", "xsave")
+TARGET_BUILTIN(__builtin_ia32_xgetbv, "ULLiUi", "n", "xsave")
+TARGET_HEADER_BUILTIN(_xgetbv, "UWiUi", "nh", "immintrin.h", ALL_MS_LANGUAGES, "")
+TARGET_BUILTIN(__builtin_ia32_xsetbv, "vUiULLi", "n", "xsave")
+TARGET_HEADER_BUILTIN(_xsetbv, "vUiUWi", "nh", "immintrin.h", ALL_MS_LANGUAGES, "")
+TARGET_BUILTIN(__builtin_ia32_xsaveopt, "vv*ULLi", "n", "xsaveopt")
+TARGET_BUILTIN(__builtin_ia32_xrstors, "vv*ULLi", "n", "xsaves")
+TARGET_BUILTIN(__builtin_ia32_xsavec, "vv*ULLi", "n", "xsavec")
+TARGET_BUILTIN(__builtin_ia32_xsaves, "vv*ULLi", "n", "xsaves")
+
+// SHSTK
+TARGET_BUILTIN(__builtin_ia32_incsspd, "vUi", "n", "shstk")
+TARGET_BUILTIN(__builtin_ia32_rdsspd, "UiUi", "n", "shstk")
+TARGET_BUILTIN(__builtin_ia32_saveprevssp, "v", "n", "shstk")
+TARGET_BUILTIN(__builtin_ia32_rstorssp, "vv*", "n", "shstk")
+TARGET_BUILTIN(__builtin_ia32_wrssd, "vUiv*", "n", "shstk")
+TARGET_BUILTIN(__builtin_ia32_wrussd, "vUiv*", "n", "shstk")
+TARGET_BUILTIN(__builtin_ia32_setssbsy, "v", "n", "shstk")
+TARGET_BUILTIN(__builtin_ia32_clrssbsy, "vv*", "n", "shstk")
+
+//CLFLUSHOPT
+TARGET_BUILTIN(__builtin_ia32_clflushopt, "vvC*", "n", "clflushopt")
+
+//CLWB
+TARGET_BUILTIN(__builtin_ia32_clwb, "vvC*", "n", "clwb")
+
+//WB[NO]INVD
+TARGET_BUILTIN(__builtin_ia32_wbinvd, "v", "n", "")
+TARGET_BUILTIN(__builtin_ia32_wbnoinvd, "v", "n", "wbnoinvd")
+
+// ADX
+TARGET_BUILTIN(__builtin_ia32_addcarryx_u32, "UcUcUiUiUi*", "n", "")
+TARGET_BUILTIN(__builtin_ia32_subborrow_u32, "UcUcUiUiUi*", "n", "")
+
+// RDSEED
+TARGET_BUILTIN(__builtin_ia32_rdseed16_step, "UiUs*", "n", "rdseed")
+TARGET_BUILTIN(__builtin_ia32_rdseed32_step, "UiUi*", "n", "rdseed")
+
+// LZCNT
+TARGET_BUILTIN(__builtin_ia32_lzcnt_u16, "UsUs", "nc", "lzcnt")
+TARGET_BUILTIN(__builtin_ia32_lzcnt_u32, "UiUi", "nc", "lzcnt")
+
+// BMI
+TARGET_BUILTIN(__builtin_ia32_bextr_u32, "UiUiUi", "nc", "bmi")
+TARGET_BUILTIN(__builtin_ia32_tzcnt_u16, "UsUs", "nc", "")
+TARGET_BUILTIN(__builtin_ia32_tzcnt_u32, "UiUi", "nc", "")
+
+// BMI2
+TARGET_BUILTIN(__builtin_ia32_bzhi_si, "UiUiUi", "nc", "bmi2")
+TARGET_BUILTIN(__builtin_ia32_pdep_si, "UiUiUi", "nc", "bmi2")
+TARGET_BUILTIN(__builtin_ia32_pext_si, "UiUiUi", "nc", "bmi2")
+
+// TBM
+TARGET_BUILTIN(__builtin_ia32_bextri_u32, "UiUiIUi", "nc", "tbm")
+
+// LWP
+TARGET_BUILTIN(__builtin_ia32_llwpcb, "vv*", "n", "lwp")
+TARGET_BUILTIN(__builtin_ia32_slwpcb, "v*", "n", "lwp")
+TARGET_BUILTIN(__builtin_ia32_lwpins32, "UcUiUiUi", "n", "lwp")
+TARGET_BUILTIN(__builtin_ia32_lwpval32, "vUiUiUi", "n", "lwp")
+
+// SHA
+TARGET_BUILTIN(__builtin_ia32_sha1rnds4, "V4iV4iV4iIc", "ncV:128:", "sha")
+TARGET_BUILTIN(__builtin_ia32_sha1nexte, "V4iV4iV4i", "ncV:128:", "sha")
+TARGET_BUILTIN(__builtin_ia32_sha1msg1, "V4iV4iV4i", "ncV:128:", "sha")
+TARGET_BUILTIN(__builtin_ia32_sha1msg2, "V4iV4iV4i", "ncV:128:", "sha")
+TARGET_BUILTIN(__builtin_ia32_sha256rnds2, "V4iV4iV4iV4i", "ncV:128:", "sha")
+TARGET_BUILTIN(__builtin_ia32_sha256msg1, "V4iV4iV4i", "ncV:128:", "sha")
+TARGET_BUILTIN(__builtin_ia32_sha256msg2, "V4iV4iV4i", "ncV:128:", "sha")
+
+// FMA
+TARGET_BUILTIN(__builtin_ia32_vfmaddps, "V4fV4fV4fV4f", "ncV:128:", "fma|fma4")
+TARGET_BUILTIN(__builtin_ia32_vfmaddpd, "V2dV2dV2dV2d", "ncV:128:", "fma|fma4")
+TARGET_BUILTIN(__builtin_ia32_vfmaddss3, "V4fV4fV4fV4f", "ncV:128:", "fma")
+TARGET_BUILTIN(__builtin_ia32_vfmaddsd3, "V2dV2dV2dV2d", "ncV:128:", "fma")
+TARGET_BUILTIN(__builtin_ia32_vfmaddss, "V4fV4fV4fV4f", "ncV:128:", "fma4")
+TARGET_BUILTIN(__builtin_ia32_vfmaddsd, "V2dV2dV2dV2d", "ncV:128:", "fma4")
+TARGET_BUILTIN(__builtin_ia32_vfmaddsubps, "V4fV4fV4fV4f", "ncV:128:", "fma|fma4")
+TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd, "V2dV2dV2dV2d", "ncV:128:", "fma|fma4")
+TARGET_BUILTIN(__builtin_ia32_vfmaddps256, "V8fV8fV8fV8f", "ncV:256:", "fma|fma4")
+TARGET_BUILTIN(__builtin_ia32_vfmaddpd256, "V4dV4dV4dV4d", "ncV:256:", "fma|fma4")
+TARGET_BUILTIN(__builtin_ia32_vfmaddsubps256, "V8fV8fV8fV8f", "ncV:256:", "fma|fma4")
+TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd256, "V4dV4dV4dV4d", "ncV:256:", "fma|fma4")
+
+TARGET_BUILTIN(__builtin_ia32_vfmaddpd512_mask, "V8dV8dV8dV8dUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddpd512_maskz, "V8dV8dV8dV8dUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddpd512_mask3, "V8dV8dV8dV8dUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmsubpd512_mask3, "V8dV8dV8dV8dUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddps512_mask, "V16fV16fV16fV16fUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddps512_maskz, "V16fV16fV16fV16fUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddps512_mask3, "V16fV16fV16fV16fUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmsubps512_mask3, "V16fV16fV16fV16fUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd512_mask, "V8dV8dV8dV8dUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd512_maskz, "V8dV8dV8dV8dUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd512_mask3, "V8dV8dV8dV8dUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmsubaddpd512_mask3, "V8dV8dV8dV8dUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddsubps512_mask, "V16fV16fV16fV16fUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddsubps512_maskz, "V16fV16fV16fV16fUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddsubps512_mask3, "V16fV16fV16fV16fUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmsubaddps512_mask3, "V16fV16fV16fV16fUsIi", "ncV:512:", "avx512f")
+
+// XOP
+TARGET_BUILTIN(__builtin_ia32_vpmacssww, "V8sV8sV8sV8s", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpmacsww, "V8sV8sV8sV8s", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpmacsswd, "V4iV8sV8sV4i", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpmacswd, "V4iV8sV8sV4i", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpmacssdd, "V4iV4iV4iV4i", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpmacsdd, "V4iV4iV4iV4i", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpmacssdql, "V2LLiV4iV4iV2LLi", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpmacsdql, "V2LLiV4iV4iV2LLi", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpmacssdqh, "V2LLiV4iV4iV2LLi", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpmacsdqh, "V2LLiV4iV4iV2LLi", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpmadcsswd, "V4iV8sV8sV4i", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpmadcswd, "V4iV8sV8sV4i", "ncV:128:", "xop")
+
+TARGET_BUILTIN(__builtin_ia32_vphaddbw, "V8sV16c", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphaddbd, "V4iV16c", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphaddbq, "V2LLiV16c", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphaddwd, "V4iV8s", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphaddwq, "V2LLiV8s", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphadddq, "V2LLiV4i", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphaddubw, "V8sV16c", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphaddubd, "V4iV16c", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphaddubq, "V2LLiV16c", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphadduwd, "V4iV8s", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphadduwq, "V2LLiV8s", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphaddudq, "V2LLiV4i", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphsubbw, "V8sV16c", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphsubwd, "V4iV8s", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphsubdq, "V2LLiV4i", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpperm, "V16cV16cV16cV16c", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vprotb, "V16cV16cV16c", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vprotw, "V8sV8sV8s", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vprotd, "V4iV4iV4i", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vprotq, "V2LLiV2LLiV2LLi", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vprotbi, "V16cV16cIc", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vprotwi, "V8sV8sIc", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vprotdi, "V4iV4iIc", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vprotqi, "V2LLiV2LLiIc", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpshlb, "V16cV16cV16c", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpshlw, "V8sV8sV8s", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpshld, "V4iV4iV4i", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpshlq, "V2LLiV2LLiV2LLi", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpshab, "V16cV16cV16c", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpshaw, "V8sV8sV8s", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpshad, "V4iV4iV4i", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpshaq, "V2LLiV2LLiV2LLi", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpcomub, "V16cV16cV16cIc", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpcomuw, "V8sV8sV8sIc", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpcomud, "V4iV4iV4iIc", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpcomuq, "V2LLiV2LLiV2LLiIc", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpcomb, "V16cV16cV16cIc", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpcomw, "V8sV8sV8sIc", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpcomd, "V4iV4iV4iIc", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpcomq, "V2LLiV2LLiV2LLiIc", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpermil2pd, "V2dV2dV2dV2LLiIc", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpermil2pd256, "V4dV4dV4dV4LLiIc", "ncV:256:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpermil2ps, "V4fV4fV4fV4iIc", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpermil2ps256, "V8fV8fV8fV8iIc", "ncV:256:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vfrczss, "V4fV4f", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vfrczsd, "V2dV2d", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vfrczps, "V4fV4f", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vfrczpd, "V2dV2d", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vfrczps256, "V8fV8f", "ncV:256:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vfrczpd256, "V4dV4d", "ncV:256:", "xop")
+
+TARGET_BUILTIN(__builtin_ia32_xbegin, "i", "n", "rtm")
+TARGET_BUILTIN(__builtin_ia32_xend, "v", "n", "rtm")
+TARGET_BUILTIN(__builtin_ia32_xabort, "vIc", "n", "rtm")
+TARGET_BUILTIN(__builtin_ia32_xtest, "i", "n", "rtm")
+
+BUILTIN(__builtin_ia32_rdpmc, "ULLii", "")
+BUILTIN(__builtin_ia32_rdtsc, "ULLi", "")
+BUILTIN(__rdtsc, "ULLi", "")
+BUILTIN(__builtin_ia32_rdtscp, "ULLiUi*", "")
+
+TARGET_BUILTIN(__builtin_ia32_rdpid, "Ui", "n", "rdpid")
+
+// PKU
+TARGET_BUILTIN(__builtin_ia32_rdpkru, "Ui", "n", "pku")
+TARGET_BUILTIN(__builtin_ia32_wrpkru, "vUi", "n", "pku")
+
+// AVX-512
+TARGET_BUILTIN(__builtin_ia32_sqrtpd512, "V8dV8dIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_sqrtps512, "V16fV16fIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_rsqrt14sd_mask, "V2dV2dV2dV2dUc", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_rsqrt14ss_mask, "V4fV4fV4fV4fUc", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_rsqrt14pd512_mask, "V8dV8dV8dUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_rsqrt14ps512_mask, "V16fV16fV16fUs", "ncV:512:", "avx512f")
+
+TARGET_BUILTIN(__builtin_ia32_rsqrt28sd_round_mask, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512er")
+TARGET_BUILTIN(__builtin_ia32_rsqrt28ss_round_mask, "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512er")
+TARGET_BUILTIN(__builtin_ia32_rsqrt28pd_mask, "V8dV8dV8dUcIi", "ncV:512:", "avx512er")
+TARGET_BUILTIN(__builtin_ia32_rsqrt28ps_mask, "V16fV16fV16fUsIi", "ncV:512:", "avx512er")
+
+TARGET_BUILTIN(__builtin_ia32_rcp14sd_mask, "V2dV2dV2dV2dUc", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_rcp14ss_mask, "V4fV4fV4fV4fUc", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_rcp14pd512_mask, "V8dV8dV8dUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_rcp14ps512_mask, "V16fV16fV16fUs", "ncV:512:", "avx512f")
+
+TARGET_BUILTIN(__builtin_ia32_rcp28sd_round_mask, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512er")
+TARGET_BUILTIN(__builtin_ia32_rcp28ss_round_mask, "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512er")
+TARGET_BUILTIN(__builtin_ia32_rcp28pd_mask, "V8dV8dV8dUcIi", "ncV:512:", "avx512er")
+TARGET_BUILTIN(__builtin_ia32_rcp28ps_mask, "V16fV16fV16fUsIi", "ncV:512:", "avx512er")
+TARGET_BUILTIN(__builtin_ia32_exp2pd_mask, "V8dV8dV8dUcIi", "ncV:512:", "avx512er")
+TARGET_BUILTIN(__builtin_ia32_exp2ps_mask, "V16fV16fV16fUsIi", "ncV:512:", "avx512er")
+
+TARGET_BUILTIN(__builtin_ia32_cvttps2dq512_mask, "V16iV16fV16iUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvttps2udq512_mask, "V16iV16fV16iUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2dq512_mask, "V8iV8dV8iUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2udq512_mask, "V8iV8dV8iUcIi", "ncV:512:", "avx512f")
+
+TARGET_BUILTIN(__builtin_ia32_cmpps512_mask, "UsV16fV16fIiUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cmpps256_mask, "UcV8fV8fIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cmpps128_mask, "UcV4fV4fIiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cmppd512_mask, "UcV8dV8dIiUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cmppd256_mask, "UcV4dV4dIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cmppd128_mask, "UcV2dV2dIiUc", "ncV:128:", "avx512vl")
+
+TARGET_BUILTIN(__builtin_ia32_rndscaleps_mask, "V16fV16fIiV16fUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_rndscalepd_mask, "V8dV8dIiV8dUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtps2dq512_mask, "V16iV16fV16iUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2dq512_mask, "V8iV8dV8iUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtps2udq512_mask, "V16iV16fV16iUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2udq512_mask, "V8iV8dV8iUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_minps512, "V16fV16fV16fIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_minpd512, "V8dV8dV8dIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_maxps512, "V16fV16fV16fIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_maxpd512, "V8dV8dV8dIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtdq2ps512_mask, "V16fV16iV16fUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtudq2ps512_mask, "V16fV16iV16fUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2ps512_mask, "V8fV8dV8fUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvtps2ph512_mask, "V16sV16fIiV16sUs", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvtph2ps512_mask, "V16fV16sV16fUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pabsd512, "V16iV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pabsq512, "V8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmaxsd512, "V16iV16iV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmaxsq512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmaxud512, "V16iV16iV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmaxuq512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pminsd512, "V16iV16iV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pminsq512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pminud512, "V16iV16iV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pminuq512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmuldq512, "V8LLiV16iV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmuludq512, "V8LLiV16iV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_loaddqusi512_mask, "V16iiC*V16iUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_loaddqudi512_mask, "V8LLiLLiC*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_loadups512_mask, "V16ffC*V16fUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_loadaps512_mask, "V16fV16fC*V16fUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_loadupd512_mask, "V8ddC*V8dUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_loadapd512_mask, "V8dV8dC*V8dUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_storedqudi512_mask, "vLLi*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_storedqusi512_mask, "vi*V16iUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_storeupd512_mask, "vd*V8dUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_storeapd512_mask, "vV8d*V8dUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_storeups512_mask, "vf*V16fUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_storeaps512_mask, "vV16f*V16fUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_alignq512, "V8LLiV8LLiV8LLiIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_alignd512, "V16iV16iV16iIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_alignd128, "V4iV4iV4iIi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_alignd256, "V8iV8iV8iIi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_alignq128, "V2LLiV2LLiV2LLiIi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_alignq256, "V4LLiV4LLiV4LLiIi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_extractf64x4_mask, "V4dV8dIiV4dUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_extractf32x4_mask, "V4fV16fIiV4fUc", "ncV:512:", "avx512f")
+
+TARGET_BUILTIN(__builtin_ia32_vpdpbusd128, "V4iV4iV4iV4i", "ncV:128:", "avx512vl,avx512vnni")
+TARGET_BUILTIN(__builtin_ia32_vpdpbusd256, "V8iV8iV8iV8i", "ncV:256:", "avx512vl,avx512vnni")
+TARGET_BUILTIN(__builtin_ia32_vpdpbusd512, "V16iV16iV16iV16i", "ncV:512:", "avx512vnni")
+TARGET_BUILTIN(__builtin_ia32_vpdpbusds128, "V4iV4iV4iV4i", "ncV:128:", "avx512vl,avx512vnni")
+TARGET_BUILTIN(__builtin_ia32_vpdpbusds256, "V8iV8iV8iV8i", "ncV:256:", "avx512vl,avx512vnni")
+TARGET_BUILTIN(__builtin_ia32_vpdpbusds512, "V16iV16iV16iV16i", "ncV:512:", "avx512vnni")
+TARGET_BUILTIN(__builtin_ia32_vpdpwssd128, "V4iV4iV4iV4i", "ncV:128:", "avx512vl,avx512vnni")
+TARGET_BUILTIN(__builtin_ia32_vpdpwssd256, "V8iV8iV8iV8i", "ncV:256:", "avx512vl,avx512vnni")
+TARGET_BUILTIN(__builtin_ia32_vpdpwssd512, "V16iV16iV16iV16i", "ncV:512:", "avx512vnni")
+TARGET_BUILTIN(__builtin_ia32_vpdpwssds128, "V4iV4iV4iV4i", "ncV:128:", "avx512vl,avx512vnni")
+TARGET_BUILTIN(__builtin_ia32_vpdpwssds256, "V8iV8iV8iV8i", "ncV:256:", "avx512vl,avx512vnni")
+TARGET_BUILTIN(__builtin_ia32_vpdpwssds512, "V16iV16iV16iV16i", "ncV:512:", "avx512vnni")
+
+TARGET_BUILTIN(__builtin_ia32_gather3div2df, "V2dV2dvC*V2LLiUcIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3div2di, "V2LLiV2LLivC*V2LLiUcIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3div4df, "V4dV4dvC*V4LLiUcIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3div4di, "V4LLiV4LLivC*V4LLiUcIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3div4sf, "V4fV4fvC*V2LLiUcIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3div4si, "V4iV4ivC*V2LLiUcIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3div8sf, "V4fV4fvC*V4LLiUcIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3div8si, "V4iV4ivC*V4LLiUcIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3siv2df, "V2dV2dvC*V4iUcIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3siv2di, "V2LLiV2LLivC*V4iUcIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3siv4df, "V4dV4dvC*V4iUcIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3siv4di, "V4LLiV4LLivC*V4iUcIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3siv4sf, "V4fV4fvC*V4iUcIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3siv4si, "V4iV4ivC*V4iUcIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3siv8sf, "V8fV8fvC*V8iUcIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3siv8si, "V8iV8ivC*V8iUcIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gathersiv8df, "V8dV8dvC*V8iUcIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_gathersiv16sf, "V16fV16fvC*V16iUsIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_gatherdiv8df, "V8dV8dvC*V8LLiUcIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_gatherdiv16sf, "V8fV8fvC*V8LLiUcIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_gathersiv8di, "V8LLiV8LLivC*V8iUcIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_gathersiv16si, "V16iV16ivC*V16iUsIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_gatherdiv8di, "V8LLiV8LLivC*V8LLiUcIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_gatherdiv16si, "V8iV8ivC*V8LLiUcIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_scattersiv8df, "vv*UcV8iV8dIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_scattersiv16sf, "vv*UsV16iV16fIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv8df, "vv*UcV8LLiV8dIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv16sf, "vv*UcV8LLiV8fIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_scattersiv8di, "vv*UcV8iV8LLiIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_scattersiv16si, "vv*UsV16iV16iIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv8di, "vv*UcV8LLiV8LLiIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv16si, "vv*UcV8LLiV8iIi", "nV:512:", "avx512f")
+
+TARGET_BUILTIN(__builtin_ia32_gatherpfdpd, "vUcV8ivC*IiIi", "nV:512:", "avx512pf")
+TARGET_BUILTIN(__builtin_ia32_gatherpfdps, "vUsV16ivC*IiIi", "nV:512:", "avx512pf")
+TARGET_BUILTIN(__builtin_ia32_gatherpfqpd, "vUcV8LLivC*IiIi", "nV:512:", "avx512pf")
+TARGET_BUILTIN(__builtin_ia32_gatherpfqps, "vUcV8LLivC*IiIi", "nV:512:", "avx512pf")
+TARGET_BUILTIN(__builtin_ia32_scatterpfdpd, "vUcV8iv*IiIi", "nV:512:", "avx512pf")
+TARGET_BUILTIN(__builtin_ia32_scatterpfdps, "vUsV16iv*IiIi", "nV:512:", "avx512pf")
+TARGET_BUILTIN(__builtin_ia32_scatterpfqpd, "vUcV8LLiv*IiIi", "nV:512:", "avx512pf")
+TARGET_BUILTIN(__builtin_ia32_scatterpfqps, "vUcV8LLiv*IiIi", "nV:512:", "avx512pf")
+
+TARGET_BUILTIN(__builtin_ia32_knotqi, "UcUc", "nc", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_knothi, "UsUs", "nc", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_knotsi, "UiUi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_knotdi, "ULLiULLi", "nc", "avx512bw")
+
+TARGET_BUILTIN(__builtin_ia32_cmpb128_mask, "UsV16cV16cIiUs", "ncV:128:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_cmpd128_mask, "UcV4iV4iIiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cmpq128_mask, "UcV2LLiV2LLiIiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cmpw128_mask, "UcV8sV8sIiUc", "ncV:128:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_cmpb256_mask, "UiV32cV32cIiUi", "ncV:256:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_cmpd256_mask, "UcV8iV8iIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cmpq256_mask, "UcV4LLiV4LLiIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cmpw256_mask, "UsV16sV16sIiUs", "ncV:256:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_cmpb512_mask, "ULLiV64cV64cIiULLi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_cmpd512_mask, "UsV16iV16iIiUs", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cmpq512_mask, "UcV8LLiV8LLiIiUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cmpw512_mask, "UiV32sV32sIiUi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_ucmpb128_mask, "UsV16cV16cIiUs", "ncV:128:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_ucmpd128_mask, "UcV4iV4iIiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_ucmpq128_mask, "UcV2LLiV2LLiIiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_ucmpw128_mask, "UcV8sV8sIiUc", "ncV:128:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_ucmpb256_mask, "UiV32cV32cIiUi", "ncV:256:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_ucmpd256_mask, "UcV8iV8iIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_ucmpq256_mask, "UcV4LLiV4LLiIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_ucmpw256_mask, "UsV16sV16sIiUs", "ncV:256:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_ucmpb512_mask, "ULLiV64cV64cIiULLi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_ucmpd512_mask, "UsV16iV16iIiUs", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_ucmpq512_mask, "UcV8LLiV8LLiIiUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_ucmpw512_mask, "UiV32sV32sIiUi", "ncV:512:", "avx512bw")
+
+TARGET_BUILTIN(__builtin_ia32_pabsb512, "V64cV64c", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pabsw512, "V32sV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_packssdw512, "V32sV16iV16i", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_packsswb512, "V64cV32sV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_packusdw512, "V32sV16iV16i", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_packuswb512, "V64cV32sV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_paddsb512, "V64cV64cV64c", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_paddsw512, "V32sV32sV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_paddusb512, "V64cV64cV64c", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_paddusw512, "V32sV32sV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmaxsb512, "V64cV64cV64c", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmaxsw512, "V32sV32sV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmaxub512, "V64cV64cV64c", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmaxuw512, "V32sV32sV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pminsb512, "V64cV64cV64c", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pminsw512, "V32sV32sV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pminub512, "V64cV64cV64c", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pminuw512, "V32sV32sV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pshufb512, "V64cV64cV64c", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_psubsb512, "V64cV64cV64c", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_psubsw512, "V32sV32sV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_psubusb512, "V64cV64cV64c", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_psubusw512, "V32sV32sV32s", "ncV:512:", "avx512bw")
+
+TARGET_BUILTIN(__builtin_ia32_vpconflictdi_128, "V2LLiV2LLi", "ncV:128:", "avx512cd,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpconflictdi_256, "V4LLiV4LLi", "ncV:256:", "avx512cd,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpconflictsi_128, "V4iV4i", "ncV:128:", "avx512cd,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpconflictsi_256, "V8iV8i", "ncV:256:", "avx512cd,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpconflictdi_512, "V8LLiV8LLi", "ncV:512:", "avx512cd")
+TARGET_BUILTIN(__builtin_ia32_vpconflictsi_512, "V16iV16i", "ncV:512:", "avx512cd")
+TARGET_BUILTIN(__builtin_ia32_vplzcntd_512, "V16iV16i", "ncV:512:", "avx512cd")
+TARGET_BUILTIN(__builtin_ia32_vplzcntq_512, "V8LLiV8LLi", "ncV:512:", "avx512cd")
+
+TARGET_BUILTIN(__builtin_ia32_vpopcntd_128, "V4iV4i", "ncV:128:", "avx512vpopcntdq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpopcntq_128, "V2LLiV2LLi", "ncV:128:", "avx512vpopcntdq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpopcntd_256, "V8iV8i", "ncV:256:", "avx512vpopcntdq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpopcntq_256, "V4LLiV4LLi", "ncV:256:", "avx512vpopcntdq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpopcntd_512, "V16iV16i", "ncV:512:", "avx512vpopcntdq")
+TARGET_BUILTIN(__builtin_ia32_vpopcntq_512, "V8LLiV8LLi", "ncV:512:", "avx512vpopcntdq")
+
+TARGET_BUILTIN(__builtin_ia32_vpopcntb_128, "V16cV16c", "ncV:128:", "avx512vl,avx512bitalg")
+TARGET_BUILTIN(__builtin_ia32_vpopcntw_128, "V8sV8s", "ncV:128:", "avx512vl,avx512bitalg")
+TARGET_BUILTIN(__builtin_ia32_vpopcntb_256, "V32cV32c", "ncV:256:", "avx512vl,avx512bitalg")
+TARGET_BUILTIN(__builtin_ia32_vpopcntw_256, "V16sV16s", "ncV:256:", "avx512vl,avx512bitalg")
+TARGET_BUILTIN(__builtin_ia32_vpopcntb_512, "V64cV64c", "ncV:512:", "avx512bitalg")
+TARGET_BUILTIN(__builtin_ia32_vpopcntw_512, "V32sV32s", "ncV:512:", "avx512bitalg")
+
+TARGET_BUILTIN(__builtin_ia32_vpshufbitqmb128_mask, "UsV16cV16cUs", "ncV:128:", "avx512vl,avx512bitalg")
+TARGET_BUILTIN(__builtin_ia32_vpshufbitqmb256_mask, "UiV32cV32cUi", "ncV:256:", "avx512vl,avx512bitalg")
+TARGET_BUILTIN(__builtin_ia32_vpshufbitqmb512_mask, "ULLiV64cV64cULLi", "ncV:512:", "avx512bitalg")
+
+TARGET_BUILTIN(__builtin_ia32_pmulhrsw512, "V32sV32sV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmulhuw512, "V32sV32sV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmulhw512, "V32sV32sV32s", "ncV:512:", "avx512bw")
+
+TARGET_BUILTIN(__builtin_ia32_addpd512, "V8dV8dV8dIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_addps512, "V16fV16fV16fIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_divpd512, "V8dV8dV8dIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_divps512, "V16fV16fV16fIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_mulpd512, "V8dV8dV8dIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_mulps512, "V16fV16fV16fIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_subpd512, "V8dV8dV8dIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_subps512, "V16fV16fV16fIi", "ncV:512:", "avx512f")
+
+TARGET_BUILTIN(__builtin_ia32_pmaddubsw512, "V32sV64cV64c", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmaddwd512, "V16iV32sV32s", "ncV:512:", "avx512bw")
+
+TARGET_BUILTIN(__builtin_ia32_addss_round_mask, "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_divss_round_mask, "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_mulss_round_mask, "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_subss_round_mask, "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_maxss_round_mask, "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_minss_round_mask, "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_addsd_round_mask, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_divsd_round_mask, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_mulsd_round_mask, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_subsd_round_mask, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_maxsd_round_mask, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_minsd_round_mask, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512f")
+
+TARGET_BUILTIN(__builtin_ia32_compressdf128_mask, "V2dV2dV2dUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_compressdf256_mask, "V4dV4dV4dUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_compressdi128_mask, "V2LLiV2LLiV2LLiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_compressdi256_mask, "V4LLiV4LLiV4LLiUc", "ncV:256:", "avx512vl")
+
+TARGET_BUILTIN(__builtin_ia32_compresshi128_mask, "V8sV8sV8sUc", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_compresshi256_mask, "V16sV16sV16sUs", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_compressqi128_mask, "V16cV16cV16cUs", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_compressqi256_mask, "V32cV32cV32cUi", "ncV:256:", "avx512vl,avx512vbmi2")
+
+TARGET_BUILTIN(__builtin_ia32_compresssf128_mask, "V4fV4fV4fUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_compresssf256_mask, "V8fV8fV8fUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_compresssi128_mask, "V4iV4iV4iUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_compresssi256_mask, "V8iV8iV8iUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_compressstoredf128_mask, "vV2d*V2dUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_compressstoredf256_mask, "vV4d*V4dUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_compressstoredi128_mask, "vV2LLi*V2LLiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_compressstoredi256_mask, "vV4LLi*V4LLiUc", "nV:256:", "avx512vl")
+
+TARGET_BUILTIN(__builtin_ia32_compressstorehi128_mask, "vV8s*V8sUc", "nV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_compressstorehi256_mask, "vV16s*V16sUs", "nV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_compressstoreqi128_mask, "vV16c*V16cUs", "nV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_compressstoreqi256_mask, "vV32c*V32cUi", "nV:256:", "avx512vl,avx512vbmi2")
+
+TARGET_BUILTIN(__builtin_ia32_compressstoresf128_mask, "vV4f*V4fUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_compressstoresf256_mask, "vV8f*V8fUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_compressstoresi128_mask, "vV4i*V4iUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_compressstoresi256_mask, "vV8i*V8iUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2dq128_mask, "V4iV2dV4iUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2ps_mask, "V4fV2dV4fUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2udq128_mask, "V4iV2dV4iUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2udq256_mask, "V4iV4dV4iUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtps2udq128_mask, "V4iV4fV4iUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtps2udq256_mask, "V8iV8fV8iUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2dq128_mask, "V4iV2dV4iUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2udq128_mask, "V4iV2dV4iUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2udq256_mask, "V4iV4dV4iUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvttps2udq128_mask, "V4iV4fV4iUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvttps2udq256_mask, "V8iV8fV8iUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expanddf128_mask, "V2dV2dV2dUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expanddf256_mask, "V4dV4dV4dUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expanddi128_mask, "V2LLiV2LLiV2LLiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expanddi256_mask, "V4LLiV4LLiV4LLiUc", "ncV:256:", "avx512vl")
+
+TARGET_BUILTIN(__builtin_ia32_expandhi128_mask, "V8sV8sV8sUc", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_expandhi256_mask, "V16sV16sV16sUs", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_expandqi128_mask, "V16cV16cV16cUs", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_expandqi256_mask, "V32cV32cV32cUi", "ncV:256:", "avx512vl,avx512vbmi2")
+
+TARGET_BUILTIN(__builtin_ia32_expandloaddf128_mask, "V2dV2dC*V2dUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expandloaddf256_mask, "V4dV4dC*V4dUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expandloaddi128_mask, "V4iV2LLiC*V2LLiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expandloaddi256_mask, "V4LLiV4LLiC*V4LLiUc", "nV:256:", "avx512vl")
+
+TARGET_BUILTIN(__builtin_ia32_expandloadhi128_mask, "V8sV8sC*V8sUc", "nV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_expandloadhi256_mask, "V16sV16sC*V16sUs", "nV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_expandloadqi128_mask, "V16cV16cC*V16cUs", "nV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_expandloadqi256_mask, "V32cV32cC*V32cUi", "nV:256:", "avx512vl,avx512vbmi2")
+
+TARGET_BUILTIN(__builtin_ia32_expandloadsf128_mask, "V4fV4fC*V4fUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expandloadsf256_mask, "V8fV8fC*V8fUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expandloadsi128_mask, "V4iV4iC*V4iUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expandloadsi256_mask, "V8iV8iC*V8iUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expandsf128_mask, "V4fV4fV4fUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expandsf256_mask, "V8fV8fV8fUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expandsi128_mask, "V4iV4iV4iUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expandsi256_mask, "V8iV8iV8iUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_getexppd128_mask, "V2dV2dV2dUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_getexppd256_mask, "V4dV4dV4dUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_getexpps128_mask, "V4fV4fV4fUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_getexpps256_mask, "V8fV8fV8fUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pabsq128, "V2LLiV2LLi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pabsq256, "V4LLiV4LLi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmaxsq128, "V2LLiV2LLiV2LLi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmaxsq256, "V4LLiV4LLiV4LLi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmaxuq128, "V2LLiV2LLiV2LLi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmaxuq256, "V4LLiV4LLiV4LLi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pminsq128, "V2LLiV2LLiV2LLi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pminsq256, "V4LLiV4LLiV4LLi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pminuq128, "V2LLiV2LLiV2LLi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pminuq256, "V4LLiV4LLiV4LLi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_rndscalepd_128_mask, "V2dV2dIiV2dUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_rndscalepd_256_mask, "V4dV4dIiV4dUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_rndscaleps_128_mask, "V4fV4fIiV4fUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_rndscaleps_256_mask, "V8fV8fIiV8fUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scalefpd128_mask, "V2dV2dV2dV2dUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scalefpd256_mask, "V4dV4dV4dV4dUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scalefps128_mask, "V4fV4fV4fV4fUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scalefps256_mask, "V8fV8fV8fV8fUc", "ncV:256:", "avx512vl")
+
+TARGET_BUILTIN(__builtin_ia32_scatterdiv2df, "vv*UcV2LLiV2dIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv2di, "vv*UcV2LLiV2LLiIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv4df, "vv*UcV4LLiV4dIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv4di, "vv*UcV4LLiV4LLiIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv4sf, "vv*UcV2LLiV4fIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv4si, "vv*UcV2LLiV4iIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv8sf, "vv*UcV4LLiV4fIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv8si, "vv*UcV4LLiV4iIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scattersiv2df, "vv*UcV4iV2dIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scattersiv2di, "vv*UcV4iV2LLiIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scattersiv4df, "vv*UcV4iV4dIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scattersiv4di, "vv*UcV4iV4LLiIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scattersiv4sf, "vv*UcV4iV4fIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scattersiv4si, "vv*UcV4iV4iIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scattersiv8sf, "vv*UcV8iV8fIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scattersiv8si, "vv*UcV8iV8iIi", "nV:256:", "avx512vl")
+
+TARGET_BUILTIN(__builtin_ia32_vpermi2vard128, "V4iV4iV4iV4i", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpermi2vard256, "V8iV8iV8iV8i", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpermi2vard512, "V16iV16iV16iV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varpd128, "V2dV2dV2LLiV2d", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varpd256, "V4dV4dV4LLiV4d", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varpd512, "V8dV8dV8LLiV8d", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varps128, "V4fV4fV4iV4f", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varps256, "V8fV8fV8iV8f", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varps512, "V16fV16fV16iV16f", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varq128, "V2LLiV2LLiV2LLiV2LLi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varq256, "V4LLiV4LLiV4LLiV4LLi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varq512, "V8LLiV8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varqi128, "V16cV16cV16cV16c", "ncV:128:", "avx512vbmi,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varqi256, "V32cV32cV32cV32c", "ncV:256:", "avx512vbmi,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varqi512, "V64cV64cV64cV64c", "ncV:512:", "avx512vbmi")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varhi128, "V8sV8sV8sV8s", "ncV:128:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varhi256, "V16sV16sV16sV16s", "ncV:256:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varhi512, "V32sV32sV32sV32s", "ncV:512:", "avx512bw")
+
+TARGET_BUILTIN(__builtin_ia32_vpshldd128, "V4iV4iV4iIi", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldd256, "V8iV8iV8iIi", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldd512, "V16iV16iV16iIi", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldq128, "V2LLiV2LLiV2LLiIi", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldq256, "V4LLiV4LLiV4LLiIi", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldq512, "V8LLiV8LLiV8LLiIi", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldw128, "V8sV8sV8sIi", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldw256, "V16sV16sV16sIi", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldw512, "V32sV32sV32sIi", "ncV:512:", "avx512vbmi2")
+
+TARGET_BUILTIN(__builtin_ia32_vpshldvd128, "V4iV4iV4iV4i", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldvd256, "V8iV8iV8iV8i", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldvd512, "V16iV16iV16iV16i", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldvq128, "V2LLiV2LLiV2LLiV2LLi", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldvq256, "V4LLiV4LLiV4LLiV4LLi", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldvq512, "V8LLiV8LLiV8LLiV8LLi", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldvw128, "V8sV8sV8sV8s", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldvw256, "V16sV16sV16sV16s", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldvw512, "V32sV32sV32sV32s", "ncV:512:", "avx512vbmi2")
+
+TARGET_BUILTIN(__builtin_ia32_vpshrdvd128, "V4iV4iV4iV4i", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdvd256, "V8iV8iV8iV8i", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdvd512, "V16iV16iV16iV16i", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdvq128, "V2LLiV2LLiV2LLiV2LLi", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdvq256, "V4LLiV4LLiV4LLiV4LLi", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdvq512, "V8LLiV8LLiV8LLiV8LLi", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdvw128, "V8sV8sV8sV8s", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdvw256, "V16sV16sV16sV16s", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdvw512, "V32sV32sV32sV32s", "ncV:512:", "avx512vbmi2")
+
+TARGET_BUILTIN(__builtin_ia32_vpshrdd128, "V4iV4iV4iIi", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdd256, "V8iV8iV8iIi", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdd512, "V16iV16iV16iIi", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdq128, "V2LLiV2LLiV2LLiIi", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdq256, "V4LLiV4LLiV4LLiIi", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdq512, "V8LLiV8LLiV8LLiIi", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdw128, "V8sV8sV8sIi", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdw256, "V16sV16sV16sIi", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdw512, "V32sV32sV32sIi", "ncV:512:", "avx512vbmi2")
+
+TARGET_BUILTIN(__builtin_ia32_pmovswb512_mask, "V32cV32sV32cUi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmovuswb512_mask, "V32cV32sV32cUi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmovwb512_mask, "V32cV32sV32cUi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2qq128_mask, "V2LLiV2dV2LLiUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2qq256_mask, "V4LLiV4dV4LLiUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2uqq128_mask, "V2LLiV2dV2LLiUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2uqq256_mask, "V4LLiV4dV4LLiUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtps2qq128_mask, "V2LLiV4fV2LLiUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtps2qq256_mask, "V4LLiV4fV4LLiUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtps2uqq128_mask, "V2LLiV4fV2LLiUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtps2uqq256_mask, "V4LLiV4fV4LLiUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtqq2ps128_mask, "V4fV2LLiV4fUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2qq128_mask, "V2LLiV2dV2LLiUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2qq256_mask, "V4LLiV4dV4LLiUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2uqq128_mask, "V2LLiV2dV2LLiUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2uqq256_mask, "V4LLiV4dV4LLiUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttps2qq128_mask, "V2LLiV4fV2LLiUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttps2qq256_mask, "V4LLiV4fV4LLiUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttps2uqq128_mask, "V2LLiV4fV2LLiUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttps2uqq256_mask, "V4LLiV4fV4LLiUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtuqq2ps128_mask, "V4fV2LLiV4fUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_rangepd128_mask, "V2dV2dV2dIiV2dUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_rangepd256_mask, "V4dV4dV4dIiV4dUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_rangeps128_mask, "V4fV4fV4fIiV4fUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_rangeps256_mask, "V8fV8fV8fIiV8fUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_rangesd128_round_mask, "V2dV2dV2dV2dUcIiIi", "ncV:128:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_rangess128_round_mask, "V4fV4fV4fV4fUcIiIi", "ncV:128:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_reducepd128_mask, "V2dV2dIiV2dUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_reducepd256_mask, "V4dV4dIiV4dUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_reduceps128_mask, "V4fV4fIiV4fUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_reduceps256_mask, "V8fV8fIiV8fUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_reducesd_mask, "V2dV2dV2dV2dUcIiIi", "ncV:128:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_reducess_mask, "V4fV4fV4fV4fUcIiIi", "ncV:128:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_pmovswb128_mask, "V16cV8sV16cUc", "ncV:128:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmovswb256_mask, "V16cV16sV16cUs", "ncV:256:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmovuswb128_mask, "V16cV8sV16cUc", "ncV:128:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmovuswb256_mask, "V16cV16sV16cUs", "ncV:256:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmovwb128_mask, "V16cV8sV16cUc", "ncV:128:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2qq512_mask, "V8LLiV8dV8LLiUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2uqq512_mask, "V8LLiV8dV8LLiUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtps2qq512_mask, "V8LLiV8fV8LLiUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtps2uqq512_mask, "V8LLiV8fV8LLiUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtqq2pd512_mask, "V8dV8LLiV8dUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtqq2ps512_mask, "V8fV8LLiV8fUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2qq512_mask, "V8LLiV8dV8LLiUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2uqq512_mask, "V8LLiV8dV8LLiUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttps2qq512_mask, "V8LLiV8fV8LLiUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttps2uqq512_mask, "V8LLiV8fV8LLiUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtuqq2pd512_mask, "V8dV8LLiV8dUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtuqq2ps512_mask, "V8fV8LLiV8fUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_rangepd512_mask, "V8dV8dV8dIiV8dUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_rangeps512_mask, "V16fV16fV16fIiV16fUsIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_reducepd512_mask, "V8dV8dIiV8dUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_reduceps512_mask, "V16fV16fIiV16fUsIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_prold512, "V16iV16iIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_prolq512, "V8LLiV8LLiIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_prold128, "V4iV4iIi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prold256, "V8iV8iIi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prolq128, "V2LLiV2LLiIi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prolq256, "V4LLiV4LLiIi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prolvd512, "V16iV16iV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_prolvq512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_prord512, "V16iV16iIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_prorq512, "V8LLiV8LLiIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_prolvd128, "V4iV4iV4i", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prolvd256, "V8iV8iV8i", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prolvq128, "V2LLiV2LLiV2LLi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prolvq256, "V4LLiV4LLiV4LLi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prord128, "V4iV4iIi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prord256, "V8iV8iIi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prorq128, "V2LLiV2LLiIi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prorq256, "V4LLiV4LLiIi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prorvd512, "V16iV16iV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_prorvq512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_prorvd128, "V4iV4iV4i", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prorvd256, "V8iV8iV8i", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prorvq128, "V2LLiV2LLiV2LLi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prorvq256, "V4LLiV4LLiV4LLi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pshufhw512, "V32sV32sIi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pshuflw512, "V32sV32sIi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_psllv32hi, "V32sV32sV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_psllw512, "V32sV32sV8s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_psllwi512, "V32sV32si", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_psllv16hi, "V16sV16sV16s", "ncV:256:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_psllv8hi, "V8sV8sV8s", "ncV:128:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pslldi512, "V16iV16ii", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psllqi512, "V8LLiV8LLii", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psrlv32hi, "V32sV32sV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_psrlv16hi, "V16sV16sV16s", "ncV:256:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_psrlv8hi, "V8sV8sV8s", "ncV:128:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_psrldi512, "V16iV16ii", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psrlqi512, "V8LLiV8LLii", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psrav32hi, "V32sV32sV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_psrav16hi, "V16sV16sV16s", "ncV:256:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_psrav8hi, "V8sV8sV8s", "ncV:128:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_psravq128, "V2LLiV2LLiV2LLi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_psravq256, "V4LLiV4LLiV4LLi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_psraw512, "V32sV32sV8s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_psrawi512, "V32sV32si", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_psrlw512, "V32sV32sV8s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_psrlwi512, "V32sV32si", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pslldqi512_byteshift, "V8LLiV8LLiIi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_psrldqi512_byteshift, "V8LLiV8LLiIi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_movdqa32load128_mask, "V4iV4i*V4iUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_movdqa32load256_mask, "V8iV8i*V8iUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_movdqa32load512_mask, "V16iV16iC*V16iUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_movdqa32store512_mask, "vV16i*V16iUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_movdqa64load512_mask, "V8LLiV8LLiC*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_movdqa64store512_mask, "vV8LLi*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_movdqa32store128_mask, "vV4i*V4iUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_movdqa32store256_mask, "vV8i*V8iUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_movdqa64load128_mask, "V2LLiV2LLiC*V2LLiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_movdqa64load256_mask, "V4LLiV4LLiC*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_movdqa64store128_mask, "vV2LLi*V2LLiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_movdqa64store256_mask, "vV4LLi*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpmadd52huq512, "V8LLiV8LLiV8LLiV8LLi", "ncV:512:", "avx512ifma")
+TARGET_BUILTIN(__builtin_ia32_vpmadd52luq512, "V8LLiV8LLiV8LLiV8LLi", "ncV:512:", "avx512ifma")
+TARGET_BUILTIN(__builtin_ia32_vpmadd52huq128, "V2LLiV2LLiV2LLiV2LLi", "ncV:128:", "avx512ifma,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpmadd52huq256, "V4LLiV4LLiV4LLiV4LLi", "ncV:256:", "avx512ifma,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpmadd52luq128, "V2LLiV2LLiV2LLiV2LLi", "ncV:128:", "avx512ifma,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpmadd52luq256, "V4LLiV4LLiV4LLiV4LLi", "ncV:256:", "avx512ifma,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vcomisd, "iV2dV2dIiIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcomiss, "iV4fV4fIiIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_kunpckdi, "ULLiULLiULLi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kunpcksi, "UiUiUi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_loaddquhi512_mask, "V32sV32s*V32sUi", "nV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_loaddquqi512_mask, "V64cV64c*V64cULLi", "nV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_fixupimmpd512_mask, "V8dV8dV8dV8LLiIiUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_fixupimmpd512_maskz, "V8dV8dV8dV8LLiIiUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_fixupimmps512_mask, "V16fV16fV16fV16iIiUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_fixupimmps512_maskz, "V16fV16fV16fV16iIiUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_fixupimmsd_mask, "V2dV2dV2dV2LLiIiUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_fixupimmsd_maskz, "V2dV2dV2dV2LLiIiUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_fixupimmss_mask, "V4fV4fV4fV4iIiUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_fixupimmss_maskz, "V4fV4fV4fV4iIiUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_getexpsd128_round_mask, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_getexpss128_round_mask, "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_getmantsd_round_mask, "V2dV2dV2dIiV2dUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_getmantss_round_mask, "V4fV4fV4fIiV4fUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_loaddquhi128_mask, "V8sV8s*V8sUc", "nV:128:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_loaddquhi256_mask, "V16sV16s*V16sUs", "nV:256:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_loaddquqi128_mask, "V16cV16c*V16cUs", "nV:128:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_loaddquqi256_mask, "V32cV32c*V32cUi", "nV:256:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_fixupimmpd128_mask, "V2dV2dV2dV2LLiIiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_fixupimmpd128_maskz, "V2dV2dV2dV2LLiIiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_fixupimmpd256_mask, "V4dV4dV4dV4LLiIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_fixupimmpd256_maskz, "V4dV4dV4dV4LLiIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_fixupimmps128_mask, "V4fV4fV4fV4iIiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_fixupimmps128_maskz, "V4fV4fV4fV4iIiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_fixupimmps256_mask, "V8fV8fV8fV8iIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_fixupimmps256_maskz, "V8fV8fV8fV8iIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_loadapd128_mask, "V2dV2d*V2dUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_loadsd128_mask, "V2dV2d*V2dUc", "nV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_loadapd256_mask, "V4dV4d*V4dUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_loadaps128_mask, "V4fV4f*V4fUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_loadss128_mask, "V4fV4f*V4fUc", "nV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_loadaps256_mask, "V8fV8f*V8fUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_loaddqudi128_mask, "V2LLiV2LLi*V2LLiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_loaddqudi256_mask, "V4LLiV4LLi*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_loaddqusi128_mask, "V4iV4i*V4iUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_loaddqusi256_mask, "V8iV8i*V8iUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_loadupd128_mask, "V2dV2d*V2dUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_loadupd256_mask, "V4dV4d*V4dUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_loadups128_mask, "V4fV4f*V4fUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_loadups256_mask, "V8fV8f*V8fUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_storedquhi512_mask, "vV32s*V32sUi", "nV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_storedquqi512_mask, "vV64c*V64cULLi", "nV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_storedquhi128_mask, "vV8s*V8sUc", "nV:128:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_storedquhi256_mask, "vV16s*V16sUs", "nV:256:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_storedquqi128_mask, "vV16c*V16cUs", "nV:128:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_storedquqi256_mask, "vV32c*V32cUi", "nV:256:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_storeapd128_mask, "vV2d*V2dUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_storesd128_mask, "vV2d*V2dUc", "nV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_storeapd256_mask, "vV4d*V4dUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_storeaps128_mask, "vV4f*V4fUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_storess128_mask, "vV4f*V4fUc", "nV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_storeaps256_mask, "vV8f*V8fUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_storedqudi128_mask, "vV2LLi*V2LLiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_storedqudi256_mask, "vV4LLi*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_storedqusi128_mask, "vV4i*V4iUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_storedqusi256_mask, "vV8i*V8iUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_storeupd128_mask, "vV2d*V2dUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_storeupd256_mask, "vV4d*V4dUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_storeups128_mask, "vV4f*V4fUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_storeups256_mask, "vV8f*V8fUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_rcp14pd128_mask, "V2dV2dV2dUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_rcp14pd256_mask, "V4dV4dV4dUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_rcp14ps128_mask, "V4fV4fV4fUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_rcp14ps256_mask, "V8fV8fV8fUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vplzcntd_128, "V4iV4i", "ncV:128:", "avx512cd,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vplzcntd_256, "V8iV8i", "ncV:256:", "avx512cd,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vplzcntq_128, "V2LLiV2LLi", "ncV:128:", "avx512cd,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vplzcntq_256, "V4LLiV4LLi", "ncV:256:", "avx512cd,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vcvtsd2si32, "iV2dIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvtsd2usi32, "UiV2dIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvtss2si32, "iV4fIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvtss2usi32, "UiV4fIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvttsd2si32, "iV2dIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvttsd2usi32, "UiV2dIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvttss2si32, "iV4fIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvttss2usi32, "UiV4fIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vpermilpd512, "V8dV8dIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vpermilps512, "V16fV16fIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vpermilvarpd512, "V8dV8dV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vpermilvarps512, "V16fV16fV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_rndscalesd_round_mask, "V2dV2dV2dV2dUcIiIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_rndscaless_round_mask, "V4fV4fV4fV4fUcIiIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_scalefpd512_mask, "V8dV8dV8dV8dUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_scalefps512_mask, "V16fV16fV16fV16fUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_scalefsd_round_mask, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_scalefss_round_mask, "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psradi512, "V16iV16ii", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psraqi512, "V8LLiV8LLii", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psraq128, "V2LLiV2LLiV2LLi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_psraq256, "V4LLiV4LLiV2LLi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_psraqi128, "V2LLiV2LLii", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_psraqi256, "V4LLiV4LLii", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pslld512, "V16iV16iV4i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psllq512, "V8LLiV8LLiV2LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psllv16si, "V16iV16iV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psllv8di, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psrad512, "V16iV16iV4i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psraq512, "V8LLiV8LLiV2LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psrav16si, "V16iV16iV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psrav8di, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psrld512, "V16iV16iV4i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psrlq512, "V8LLiV8LLiV2LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psrlv16si, "V16iV16iV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psrlv8di, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pternlogd512_mask, "V16iV16iV16iV16iIiUs", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pternlogd512_maskz, "V16iV16iV16iV16iIiUs", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pternlogq512_mask, "V8LLiV8LLiV8LLiV8LLiIiUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pternlogq512_maskz, "V8LLiV8LLiV8LLiV8LLiIiUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pternlogd128_mask, "V4iV4iV4iV4iIiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pternlogd128_maskz, "V4iV4iV4iV4iIiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pternlogd256_mask, "V8iV8iV8iV8iIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pternlogd256_maskz, "V8iV8iV8iV8iIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pternlogq128_mask, "V2LLiV2LLiV2LLiV2LLiIiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pternlogq128_maskz, "V2LLiV2LLiV2LLiV2LLiIiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pternlogq256_mask, "V4LLiV4LLiV4LLiV4LLiIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pternlogq256_maskz, "V4LLiV4LLiV4LLiV4LLiIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_shuf_f32x4, "V16fV16fV16fIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_shuf_f64x2, "V8dV8dV8dIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_shuf_i32x4, "V16iV16iV16iIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_shuf_i64x2, "V8LLiV8LLiV8LLiIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_shufpd512, "V8dV8dV8dIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_shufps512, "V16fV16fV16fIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_shuf_f32x4_256, "V8fV8fV8fIi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_shuf_f64x2_256, "V4dV4dV4dIi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_shuf_i32x4_256, "V8iV8iV8iIi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_shuf_i64x2_256, "V4LLiV4LLiV4LLiIi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_sqrtsd_round_mask, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_sqrtss_round_mask, "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_rsqrt14pd128_mask, "V2dV2dV2dUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_rsqrt14pd256_mask, "V4dV4dV4dUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_rsqrt14ps128_mask, "V4fV4fV4fUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_rsqrt14ps256_mask, "V8fV8fV8fUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtb2mask512, "ULLiV64c", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_cvtmask2b512, "V64cULLi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_cvtmask2w512, "V32sUi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_cvtd2mask512, "UsV16i", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtmask2d512, "V16iUs", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtmask2q512, "V8LLiUc", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtq2mask512, "UcV8LLi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtb2mask128, "UsV16c", "ncV:128:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtb2mask256, "UiV32c", "ncV:256:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtmask2b128, "V16cUs", "ncV:128:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtmask2b256, "V32cUi", "ncV:256:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtmask2w128, "V8sUc", "ncV:128:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtmask2w256, "V16sUs", "ncV:256:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtd2mask128, "UcV4i", "ncV:128:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtd2mask256, "UcV8i", "ncV:256:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtmask2d128, "V4iUc", "ncV:128:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtmask2d256, "V8iUc", "ncV:256:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtmask2q128, "V2LLiUc", "ncV:128:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtmask2q256, "V4LLiUc", "ncV:256:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtq2mask128, "UcV2LLi", "ncV:128:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtq2mask256, "UcV4LLi", "ncV:256:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsdb512_mask, "V16cV16iV16cUs", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovsdb512mem_mask, "vV16c*V16iUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovswb512mem_mask, "vV32c*V32sUi", "nV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmovsdw512_mask, "V16sV16iV16sUs", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovsdw512mem_mask, "vV16s*V16iUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovsqb512_mask, "V16cV8LLiV16cUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovsqb512mem_mask, "vV16c*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovsqd512_mask, "V8iV8LLiV8iUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovsqd512mem_mask, "vV8i*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovsqw512_mask, "V8sV8LLiV8sUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovsqw512mem_mask, "vV8s*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovsdb128_mask, "V16cV4iV16cUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsdb128mem_mask, "vV16c*V4iUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovswb128mem_mask, "vV16c*V8sUc", "nV:128:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmovsdb256_mask, "V16cV8iV16cUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsdb256mem_mask, "vV16c*V8iUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovswb256mem_mask, "vV16c*V16sUs", "nV:256:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmovsdw128_mask, "V8sV4iV8sUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsdw128mem_mask, "vV8s*V4iUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsdw256_mask, "V8sV8iV8sUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsdw256mem_mask, "vV8s*V8iUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqb128_mask, "V16cV2LLiV16cUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqb128mem_mask, "vV16c*V2LLiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqb256_mask, "V16cV4LLiV16cUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqb256mem_mask, "vV16c*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqd128_mask, "V4iV2LLiV4iUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqd128mem_mask, "vV4i*V2LLiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqd256_mask, "V4iV4LLiV4iUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqd256mem_mask, "vV4i*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqw128_mask, "V8sV2LLiV8sUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqw128mem_mask, "vV8s*V2LLiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqw256_mask, "V8sV4LLiV8sUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqw256mem_mask, "vV8s*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusdb512_mask, "V16cV16iV16cUs", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovusdb512mem_mask, "vV16c*V16iUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovuswb512mem_mask, "vV32c*V32sUi", "nV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmovusdw512_mask, "V16sV16iV16sUs", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovusdw512mem_mask, "vV16s*V16iUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovusqb512_mask, "V16cV8LLiV16cUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovusqb512mem_mask, "vV16c*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovusqd512_mask, "V8iV8LLiV8iUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovusqd512mem_mask, "vV8i*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovusqw512_mask, "V8sV8LLiV8sUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovusqw512mem_mask, "vV8s*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovusdb128_mask, "V16cV4iV16cUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusdb128mem_mask, "vV16c*V4iUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovuswb128mem_mask, "vV16c*V8sUc", "nV:128:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmovusdb256_mask, "V16cV8iV16cUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusdb256mem_mask, "vV16c*V8iUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovuswb256mem_mask, "vV16c*V16sUs", "nV:256:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmovusdw128_mask, "V8sV4iV8sUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusdw128mem_mask, "vV8s*V4iUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusdw256_mask, "V8sV8iV8sUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusdw256mem_mask, "vV8s*V8iUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqb128_mask, "V16cV2LLiV16cUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqb128mem_mask, "vV16c*V2LLiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqb256_mask, "V16cV4LLiV16cUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqb256mem_mask, "vV16c*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqd128_mask, "V4iV2LLiV4iUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqd128mem_mask, "vV4i*V2LLiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqd256_mask, "V4iV4LLiV4iUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqd256mem_mask, "vV4i*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqw128_mask, "V8sV2LLiV8sUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqw128mem_mask, "vV8s*V2LLiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqw256_mask, "V8sV4LLiV8sUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqw256mem_mask, "vV8s*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovdb512_mask, "V16cV16iV16cUs", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovdb512mem_mask, "vV16c*V16iUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovwb512mem_mask, "vV32c*V32sUi", "nV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmovdw512_mask, "V16sV16iV16sUs", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovdw512mem_mask, "vV16s*V16iUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovqb512_mask, "V16cV8LLiV16cUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovqb512mem_mask, "vV16c*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovqd512_mask, "V8iV8LLiV8iUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovqd512mem_mask, "vV8i*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovqw512_mask, "V8sV8LLiV8sUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovqw512mem_mask, "vV8s*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovdb128_mask, "V16cV4iV16cUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovwb128mem_mask, "vV16c*V8sUc", "nV:128:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmovdb128mem_mask, "vV16c*V4iUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovdb256_mask, "V16cV8iV16cUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovdb256mem_mask, "vV16c*V8iUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovwb256mem_mask, "vV16c*V16sUs", "nV:256:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmovdw128_mask, "V8sV4iV8sUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovdw128mem_mask, "vV8s*V4iUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovdw256_mask, "V8sV8iV8sUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovdw256mem_mask, "vV8s*V8iUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqb128_mask, "V16cV2LLiV16cUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqb128mem_mask, "vV16c*V2LLiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqb256_mask, "V16cV4LLiV16cUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqb256mem_mask, "vV16c*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqd128_mask, "V4iV2LLiV4iUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqd128mem_mask, "vV4i*V2LLiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqd256mem_mask, "vV4i*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqw128_mask, "V8sV2LLiV8sUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqw128mem_mask, "vV8s*V2LLiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqw256_mask, "V8sV4LLiV8sUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqw256mem_mask, "vV8s*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_extractf32x8_mask, "V8fV16fIiV8fUc", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_extractf64x2_512_mask, "V2dV8dIiV2dUc", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_extracti32x8_mask, "V8iV16iIiV8iUc", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_extracti64x2_512_mask, "V2LLiV8LLiIiV2LLiUc", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_extracti32x4_mask, "V4iV16iIiV4iUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_extracti64x4_mask, "V4LLiV8LLiIiV4LLiUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_extractf64x2_256_mask, "V2dV4dIiV2dUc", "ncV:256:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_extracti64x2_256_mask, "V2LLiV4LLiIiV2LLiUc", "ncV:256:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_extractf32x4_256_mask, "V4fV8fIiV4fUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_extracti32x4_256_mask, "V4iV8iIiV4iUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_insertf32x8, "V16fV16fV8fIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_insertf64x2_512, "V8dV8dV2dIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_inserti32x8, "V16iV16iV8iIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_inserti64x2_512, "V8LLiV8LLiV2LLiIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_insertf64x4, "V8dV8dV4dIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_inserti64x4, "V8LLiV8LLiV4LLiIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_insertf64x2_256, "V4dV4dV2dIi", "ncV:256:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_inserti64x2_256, "V4LLiV4LLiV2LLiIi", "ncV:256:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_insertf32x4_256, "V8fV8fV4fIi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_inserti32x4_256, "V8iV8iV4iIi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_insertf32x4, "V16fV16fV4fIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_inserti32x4, "V16iV16iV4iIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_getmantpd128_mask, "V2dV2dIiV2dUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_getmantpd256_mask, "V4dV4dIiV4dUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_getmantps128_mask, "V4fV4fIiV4fUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_getmantps256_mask, "V8fV8fIiV8fUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_getmantpd512_mask, "V8dV8dIiV8dUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_getmantps512_mask, "V16fV16fIiV16fUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_getexppd512_mask, "V8dV8dV8dUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_getexpps512_mask, "V16fV16fV16fUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddss3_mask, "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddss3_maskz, "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddss3_mask3, "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddsd3_mask, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddsd3_maskz, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddsd3_mask3, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmsubsd3_mask3, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmsubss3_mask3, "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_permdf512, "V8dV8dIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_permdi512, "V8LLiV8LLiIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_permvarhi512, "V32sV32sV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_permvardf512, "V8dV8dV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_permvardi512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_permvarsf512, "V16fV16fV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_permvarsi512, "V16iV16iV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_permvarqi512, "V64cV64cV64c", "ncV:512:", "avx512vbmi")
+TARGET_BUILTIN(__builtin_ia32_permvarqi128, "V16cV16cV16c", "ncV:128:", "avx512vbmi,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_permvarqi256, "V32cV32cV32c", "ncV:256:", "avx512vbmi,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_permvarhi128, "V8sV8sV8s", "ncV:128:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_permvarhi256, "V16sV16sV16s", "ncV:256:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_permvardf256, "V4dV4dV4LLi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_permvardi256, "V4LLiV4LLiV4LLi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_fpclasspd128_mask, "UcV2dIiUc", "ncV:128:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_fpclasspd256_mask, "UcV4dIiUc", "ncV:256:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_fpclassps128_mask, "UcV4fIiUc", "ncV:128:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_fpclassps256_mask, "UcV8fIiUc", "ncV:256:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_fpclassps512_mask, "UsV16fIiUs", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_fpclasspd512_mask, "UcV8dIiUc", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_fpclasssd_mask, "UcV2dIiUc", "ncV:128:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_fpclassss_mask, "UcV4fIiUc", "ncV:128:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_kaddqi, "UcUcUc", "nc", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_kaddhi, "UsUsUs", "nc", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_kaddsi, "UiUiUi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kadddi, "ULLiULLiULLi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kandqi, "UcUcUc", "nc", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_kandhi, "UsUsUs", "nc", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_kandsi, "UiUiUi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kanddi, "ULLiULLiULLi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kandnqi, "UcUcUc", "nc", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_kandnhi, "UsUsUs", "nc", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_kandnsi, "UiUiUi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kandndi, "ULLiULLiULLi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_korqi, "UcUcUc", "nc", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_korhi, "UsUsUs", "nc", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_korsi, "UiUiUi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kordi, "ULLiULLiULLi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kortestcqi, "iUcUc", "nc", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_kortestzqi, "iUcUc", "nc", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_kortestchi, "iUsUs", "nc", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_kortestzhi, "iUsUs", "nc", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_kortestcsi, "iUiUi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kortestzsi, "iUiUi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kortestcdi, "iULLiULLi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kortestzdi, "iULLiULLi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_ktestcqi, "iUcUc", "nc", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_ktestzqi, "iUcUc", "nc", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_ktestchi, "iUsUs", "nc", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_ktestzhi, "iUsUs", "nc", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_ktestcsi, "iUiUi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_ktestzsi, "iUiUi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_ktestcdi, "iULLiULLi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_ktestzdi, "iULLiULLi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kunpckhi, "UsUsUs", "nc", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_kxnorqi, "UcUcUc", "nc", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_kxnorhi, "UsUsUs", "nc", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_kxnorsi, "UiUiUi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kxnordi, "ULLiULLiULLi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kxorqi, "UcUcUc", "nc", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_kxorhi, "UsUsUs", "nc", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_kxorsi, "UiUiUi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kxordi, "ULLiULLiULLi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kshiftliqi, "UcUcIUi", "nc", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_kshiftlihi, "UsUsIUi", "nc", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_kshiftlisi, "UiUiIUi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kshiftlidi, "ULLiULLiIUi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kshiftriqi, "UcUcIUi", "nc", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_kshiftrihi, "UsUsIUi", "nc", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_kshiftrisi, "UiUiIUi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kshiftridi, "ULLiULLiIUi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kmovb, "UcUc", "nc", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_kmovw, "UsUs", "nc", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_kmovd, "UiUi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kmovq, "ULLiULLi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_palignr512, "V64cV64cV64cIi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_dbpsadbw128, "V8sV16cV16cIi", "ncV:128:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_dbpsadbw256, "V16sV32cV32cIi", "ncV:256:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_dbpsadbw512, "V32sV64cV64cIi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_psadbw512, "V8LLiV64cV64c", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_compressdf512_mask, "V8dV8dV8dUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_compressdi512_mask, "V8LLiV8LLiV8LLiUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_compresshi512_mask, "V32sV32sV32sUi", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_compressqi512_mask, "V64cV64cV64cULLi", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_compresssf512_mask, "V16fV16fV16fUs", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_compresssi512_mask, "V16iV16iV16iUs", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cmpsd_mask, "UcV2dV2dIiUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cmpss_mask, "UcV4fV4fIiUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pshufd512, "V16iV16iIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_expanddf512_mask, "V8dV8dV8dUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_expanddi512_mask, "V8LLiV8LLiV8LLiUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_expandhi512_mask, "V32sV32sV32sUi", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_expandqi512_mask, "V64cV64cV64cULLi", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_expandloaddf512_mask, "V8dV8dC*V8dUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_expandloaddi512_mask, "V8LLiV8LLiC*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_expandloadhi512_mask, "V32sV32sC*V32sUi", "nV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_expandloadqi512_mask, "V64cV64cC*V64cULLi", "nV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_expandloadsf512_mask, "V16fV16fC*V16fUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_expandloadsi512_mask, "V16iV16iC*V16iUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_expandsf512_mask, "V16fV16fV16fUs", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_expandsi512_mask, "V16iV16iV16iUs", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtps2pd512_mask, "V8dV8fV8dUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_compressstoredf512_mask, "vV8d*V8dUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_compressstoredi512_mask, "vV8LLi*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_compressstorehi512_mask, "vV32s*V32sUi", "nV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_compressstoreqi512_mask, "vV64c*V64cULLi", "nV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_compressstoresf512_mask, "vV16f*V16fUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_compressstoresi512_mask, "vV16i*V16iUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvtph2ps_mask, "V4fV8sV4fUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vcvtph2ps256_mask, "V8fV8sV8fUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vcvtps2ph_mask, "V8sV4fIiV8sUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vcvtps2ph256_mask, "V8sV8fIiV8sUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtw2mask512, "UiV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_cvtw2mask128, "UcV8s", "ncV:128:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtw2mask256, "UsV16s", "ncV:256:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtsd2ss_round_mask, "V4fV4fV2dV4fUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtsi2ss32, "V4fV4fiIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtss2sd_round_mask, "V2dV2dV4fV2dUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtusi2ss32, "V4fV4fUiIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vpmultishiftqb512, "V64cV64cV64c", "ncV:512:", "avx512vbmi")
+TARGET_BUILTIN(__builtin_ia32_vpmultishiftqb128, "V16cV16cV16c", "ncV:128:", "avx512vbmi,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpmultishiftqb256, "V32cV32cV32c", "ncV:256:", "avx512vbmi,avx512vl")
+
+// generic select intrinsics
+TARGET_BUILTIN(__builtin_ia32_selectb_128, "V16cUsV16cV16c", "ncV:128:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_selectb_256, "V32cUiV32cV32c", "ncV:256:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_selectb_512, "V64cULLiV64cV64c", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_selectw_128, "V8sUcV8sV8s", "ncV:128:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_selectw_256, "V16sUsV16sV16s", "ncV:256:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_selectw_512, "V32sUiV32sV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_selectd_128, "V4iUcV4iV4i", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_selectd_256, "V8iUcV8iV8i", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_selectd_512, "V16iUsV16iV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_selectq_128, "V2LLiUcV2LLiV2LLi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_selectq_256, "V4LLiUcV4LLiV4LLi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_selectq_512, "V8LLiUcV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_selectps_128, "V4fUcV4fV4f", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_selectps_256, "V8fUcV8fV8f", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_selectps_512, "V16fUsV16fV16f", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_selectpd_128, "V2dUcV2dV2d", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_selectpd_256, "V4dUcV4dV4d", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_selectpd_512, "V8dUcV8dV8d", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_selectss_128, "V4fUcV4fV4f", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_selectsd_128, "V2dUcV2dV2d", "ncV:128:", "avx512f")
+
+// MONITORX/MWAITX
+TARGET_BUILTIN(__builtin_ia32_monitorx, "vv*UiUi", "n", "mwaitx")
+TARGET_BUILTIN(__builtin_ia32_mwaitx, "vUiUiUi", "n", "mwaitx")
+
+// WAITPKG
+TARGET_BUILTIN(__builtin_ia32_umonitor, "vv*", "n", "waitpkg")
+TARGET_BUILTIN(__builtin_ia32_umwait, "UcUiUiUi", "n", "waitpkg")
+TARGET_BUILTIN(__builtin_ia32_tpause, "UcUiUiUi", "n", "waitpkg")
+
+// CLZERO
+TARGET_BUILTIN(__builtin_ia32_clzero, "vv*", "n", "clzero")
+
+// CLDEMOTE
+TARGET_BUILTIN(__builtin_ia32_cldemote, "vvC*", "n", "cldemote")
+
+// Direct Move
+TARGET_BUILTIN(__builtin_ia32_directstore_u32, "vUi*Ui", "n", "movdiri")
+TARGET_BUILTIN(__builtin_ia32_movdir64b, "vv*vC*", "n", "movdir64b")
+
+// PTWRITE
+TARGET_BUILTIN(__builtin_ia32_ptwrite32, "vUi", "n", "ptwrite")
+
+// INVPCID
+TARGET_BUILTIN(__builtin_ia32_invpcid, "vUiv*", "nc", "invpcid")
+
+// MSVC
+TARGET_HEADER_BUILTIN(_BitScanForward, "UcUNi*UNi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_BitScanReverse, "UcUNi*UNi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+
+TARGET_HEADER_BUILTIN(_ReadWriteBarrier, "v", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_ReadBarrier, "v", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_WriteBarrier, "v", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+
+TARGET_HEADER_BUILTIN(__emul, "LLiii", "nch", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__emulu, "ULLiUiUi", "nch", "intrin.h", ALL_MS_LANGUAGES, "")
+
+TARGET_HEADER_BUILTIN(_AddressOfReturnAddress, "v*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+
+TARGET_HEADER_BUILTIN(__stosb, "vUc*Ucz", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__int2c, "v", "nhr", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__ud2, "v", "nhr", "intrin.h", ALL_MS_LANGUAGES, "")
+
+TARGET_HEADER_BUILTIN(__readfsbyte, "UcUNi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__readfsword, "UsUNi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__readfsdword, "UNiUNi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__readfsqword, "ULLiUNi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+
+TARGET_HEADER_BUILTIN(__readgsbyte, "UcUNi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__readgsword, "UsUNi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__readgsdword, "UNiUNi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__readgsqword, "ULLiUNi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+
+#undef BUILTIN
+#undef TARGET_BUILTIN
+#undef TARGET_HEADER_BUILTIN
diff --git a/clang-r353983/include/clang/Basic/BuiltinsX86_64.def b/clang-r353983/include/clang/Basic/BuiltinsX86_64.def
new file mode 100644
index 00000000..59b60c3b
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/BuiltinsX86_64.def
@@ -0,0 +1,108 @@
+//===--- BuiltinsX86_64.def - X86-64 Builtin function database --*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the X86-64-specific builtin function database. Users of
+// this file must define the BUILTIN macro to make use of this information.
+//
+//===----------------------------------------------------------------------===//
+
+// The format of this database matches clang/Basic/Builtins.def.
+
+#if defined(BUILTIN) && !defined(TARGET_BUILTIN)
+# define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BUILTIN(ID, TYPE, ATTRS)
+#endif
+
+#if defined(BUILTIN) && !defined(TARGET_HEADER_BUILTIN)
+# define TARGET_HEADER_BUILTIN(ID, TYPE, ATTRS, HEADER, LANG, FEATURE) BUILTIN(ID, TYPE, ATTRS)
+#endif
+
+TARGET_HEADER_BUILTIN(_BitScanForward64, "UcUNi*ULLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_BitScanReverse64, "UcUNi*ULLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+
+TARGET_HEADER_BUILTIN(__mulh, "LLiLLiLLi", "nch", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__umulh, "ULLiULLiULLi", "nch", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_mul128, "LLiLLiLLiLLi*", "nch", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_umul128, "ULLiULLiULLiULLi*", "nch", "intrin.h", ALL_MS_LANGUAGES, "")
+
+TARGET_HEADER_BUILTIN(__faststorefence, "v", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__shiftleft128, "ULLiULLiULLiUc", "nch", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__shiftright128, "ULLiULLiULLiUc", "nch", "intrin.h", ALL_MS_LANGUAGES, "")
+
+TARGET_HEADER_BUILTIN(_InterlockedAnd64, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedDecrement64, "LLiLLiD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchange64, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd64, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchangeSub64, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedIncrement64, "LLiLLiD*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedOr64, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedXor64, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedCompareExchange128, "UcLLiD*LLiLLiLLi*", "nh", "intrin.h", ALL_MS_LANGUAGES, "cx16")
+
+TARGET_BUILTIN(__builtin_ia32_readeflags_u64, "ULLi", "n", "")
+TARGET_BUILTIN(__builtin_ia32_writeeflags_u64, "vULLi", "n", "")
+TARGET_BUILTIN(__builtin_ia32_cvtss2si64, "LLiV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cvttss2si64, "LLiV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cvtsd2si64, "LLiV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cvttsd2si64, "LLiV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_movnti64, "vLLi*LLi", "n", "sse2")
+TARGET_BUILTIN(__builtin_ia32_vec_ext_v2di, "LLiV2LLiIi", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_vec_set_v2di, "V2LLiV2LLiLLiIi", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_crc32di, "ULLiULLiULLi", "nc", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_vec_ext_v4di, "LLiV4LLiIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vec_set_v4di, "V4LLiV4LLiLLiIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_rdfsbase32, "Ui", "n", "fsgsbase")
+TARGET_BUILTIN(__builtin_ia32_rdfsbase64, "ULLi", "n", "fsgsbase")
+TARGET_BUILTIN(__builtin_ia32_rdgsbase32, "Ui", "n", "fsgsbase")
+TARGET_BUILTIN(__builtin_ia32_rdgsbase64, "ULLi", "n", "fsgsbase")
+TARGET_BUILTIN(__builtin_ia32_wrfsbase32, "vUi", "n", "fsgsbase")
+TARGET_BUILTIN(__builtin_ia32_wrfsbase64, "vULLi", "n", "fsgsbase")
+TARGET_BUILTIN(__builtin_ia32_wrgsbase32, "vUi", "n", "fsgsbase")
+TARGET_BUILTIN(__builtin_ia32_wrgsbase64, "vULLi", "n", "fsgsbase")
+TARGET_BUILTIN(__builtin_ia32_fxrstor64, "vv*", "n", "fxsr")
+TARGET_BUILTIN(__builtin_ia32_fxsave64, "vv*", "n", "fxsr")
+TARGET_BUILTIN(__builtin_ia32_xsave64, "vv*ULLi", "n", "xsave")
+TARGET_BUILTIN(__builtin_ia32_xrstor64, "vv*ULLi", "n", "xsave")
+TARGET_BUILTIN(__builtin_ia32_xsaveopt64, "vv*ULLi", "n", "xsaveopt")
+TARGET_BUILTIN(__builtin_ia32_xrstors64, "vv*ULLi", "n", "xsaves")
+TARGET_BUILTIN(__builtin_ia32_xsavec64, "vv*ULLi", "n", "xsavec")
+TARGET_BUILTIN(__builtin_ia32_xsaves64, "vv*ULLi", "n", "xsaves")
+TARGET_BUILTIN(__builtin_ia32_incsspq, "vULLi", "n", "shstk")
+TARGET_BUILTIN(__builtin_ia32_rdsspq, "ULLiULLi", "n", "shstk")
+TARGET_BUILTIN(__builtin_ia32_wrssq, "vULLiv*", "n", "shstk")
+TARGET_BUILTIN(__builtin_ia32_wrussq, "vULLiv*", "n", "shstk")
+TARGET_BUILTIN(__builtin_ia32_addcarryx_u64, "UcUcULLiULLiULLi*", "n", "")
+TARGET_BUILTIN(__builtin_ia32_subborrow_u64, "UcUcULLiULLiULLi*", "n", "")
+TARGET_BUILTIN(__builtin_ia32_rdrand64_step, "UiULLi*", "n", "rdrnd")
+TARGET_BUILTIN(__builtin_ia32_rdseed64_step, "UiULLi*", "n", "rdseed")
+TARGET_BUILTIN(__builtin_ia32_lzcnt_u64, "ULLiULLi", "nc", "lzcnt")
+TARGET_BUILTIN(__builtin_ia32_bextr_u64, "ULLiULLiULLi", "nc", "bmi")
+TARGET_BUILTIN(__builtin_ia32_tzcnt_u64, "ULLiULLi", "nc", "")
+TARGET_BUILTIN(__builtin_ia32_bzhi_di, "ULLiULLiULLi", "nc", "bmi2")
+TARGET_BUILTIN(__builtin_ia32_pdep_di, "ULLiULLiULLi", "nc", "bmi2")
+TARGET_BUILTIN(__builtin_ia32_pext_di, "ULLiULLiULLi", "nc", "bmi2")
+TARGET_BUILTIN(__builtin_ia32_bextri_u64, "ULLiULLiIULLi", "nc", "tbm")
+TARGET_BUILTIN(__builtin_ia32_lwpins64, "UcULLiUiUi", "n", "lwp")
+TARGET_BUILTIN(__builtin_ia32_lwpval64, "vULLiUiUi", "n", "lwp")
+TARGET_BUILTIN(__builtin_ia32_vcvtsd2si64, "LLiV2dIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvtsd2usi64, "ULLiV2dIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvtss2si64, "LLiV4fIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvtss2usi64, "ULLiV4fIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvttsd2si64, "LLiV2dIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvttsd2usi64, "ULLiV2dIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvttss2si64, "LLiV4fIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvttss2usi64, "ULLiV4fIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtsi2sd64, "V2dV2dLLiIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtsi2ss64, "V4fV4fLLiIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtusi2sd64, "V2dV2dULLiIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtusi2ss64, "V4fV4fULLiIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_directstore_u64, "vULi*ULi", "n", "movdiri")
+TARGET_BUILTIN(__builtin_ia32_ptwrite64, "vULLi", "n", "ptwrite")
+
+#undef BUILTIN
+#undef TARGET_BUILTIN
+#undef TARGET_HEADER_BUILTIN
diff --git a/clang-r353983/include/clang/Basic/BuiltinsXCore.def b/clang-r353983/include/clang/Basic/BuiltinsXCore.def
new file mode 100644
index 00000000..c99b7ced
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/BuiltinsXCore.def
@@ -0,0 +1,21 @@
+//===--- BuiltinsXCore.def - XCore Builtin function database ----*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the XCore-specific builtin function database. Users of
+// this file must define the BUILTIN macro to make use of this information.
+//
+//===----------------------------------------------------------------------===//
+
+// The format of this database matches clang/Basic/Builtins.def.
+
+BUILTIN(__builtin_bitrev, "UiUi", "nc")
+BUILTIN(__builtin_getid, "Si", "nc")
+BUILTIN(__builtin_getps, "UiUi", "n")
+BUILTIN(__builtin_setps, "vUiUi", "n")
+
+#undef BUILTIN
diff --git a/clang-r353983/include/clang/Basic/CapturedStmt.h b/clang-r353983/include/clang/Basic/CapturedStmt.h
new file mode 100644
index 00000000..029e1144
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/CapturedStmt.h
@@ -0,0 +1,24 @@
+//===--- CapturedStmt.h - Types for CapturedStmts ---------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+
+#ifndef LLVM_CLANG_BASIC_CAPTUREDSTMT_H
+#define LLVM_CLANG_BASIC_CAPTUREDSTMT_H
+
+namespace clang {
+
+/// The different kinds of captured statement.
+enum CapturedRegionKind {
+ CR_Default,
+ CR_ObjCAtFinally,
+ CR_OpenMP
+};
+
+} // end namespace clang
+
+#endif // LLVM_CLANG_BASIC_CAPTUREDSTMT_H
diff --git a/clang-r353983/include/clang/Basic/CharInfo.h b/clang-r353983/include/clang/Basic/CharInfo.h
new file mode 100644
index 00000000..8577475f
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/CharInfo.h
@@ -0,0 +1,198 @@
+//===--- clang/Basic/CharInfo.h - Classifying ASCII Characters --*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_CHARINFO_H
+#define LLVM_CLANG_BASIC_CHARINFO_H
+
+#include "clang/Basic/LLVM.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Compiler.h"
+#include "llvm/Support/DataTypes.h"
+
+namespace clang {
+namespace charinfo {
+ extern const uint16_t InfoTable[256];
+
+ enum {
+ CHAR_HORZ_WS = 0x0001, // '\t', '\f', '\v'. Note, no '\0'
+ CHAR_VERT_WS = 0x0002, // '\r', '\n'
+ CHAR_SPACE = 0x0004, // ' '
+ CHAR_DIGIT = 0x0008, // 0-9
+ CHAR_XLETTER = 0x0010, // a-f,A-F
+ CHAR_UPPER = 0x0020, // A-Z
+ CHAR_LOWER = 0x0040, // a-z
+ CHAR_UNDER = 0x0080, // _
+ CHAR_PERIOD = 0x0100, // .
+ CHAR_RAWDEL = 0x0200, // {}[]#<>%:;?*+-/^&|~!=,"'
+ CHAR_PUNCT = 0x0400 // `$@()
+ };
+
+ enum {
+ CHAR_XUPPER = CHAR_XLETTER | CHAR_UPPER,
+ CHAR_XLOWER = CHAR_XLETTER | CHAR_LOWER
+ };
+} // end namespace charinfo
+
+/// Returns true if this is an ASCII character.
+LLVM_READNONE inline bool isASCII(char c) {
+ return static_cast<unsigned char>(c) <= 127;
+}
+
+/// Returns true if this is a valid first character of a C identifier,
+/// which is [a-zA-Z_].
+LLVM_READONLY inline bool isIdentifierHead(unsigned char c,
+ bool AllowDollar = false) {
+ using namespace charinfo;
+ if (InfoTable[c] & (CHAR_UPPER|CHAR_LOWER|CHAR_UNDER))
+ return true;
+ return AllowDollar && c == '$';
+}
+
+/// Returns true if this is a body character of a C identifier,
+/// which is [a-zA-Z0-9_].
+LLVM_READONLY inline bool isIdentifierBody(unsigned char c,
+ bool AllowDollar = false) {
+ using namespace charinfo;
+ if (InfoTable[c] & (CHAR_UPPER|CHAR_LOWER|CHAR_DIGIT|CHAR_UNDER))
+ return true;
+ return AllowDollar && c == '$';
+}
+
+/// Returns true if this character is horizontal ASCII whitespace:
+/// ' ', '\\t', '\\f', '\\v'.
+///
+/// Note that this returns false for '\\0'.
+LLVM_READONLY inline bool isHorizontalWhitespace(unsigned char c) {
+ using namespace charinfo;
+ return (InfoTable[c] & (CHAR_HORZ_WS|CHAR_SPACE)) != 0;
+}
+
+/// Returns true if this character is vertical ASCII whitespace: '\\n', '\\r'.
+///
+/// Note that this returns false for '\\0'.
+LLVM_READONLY inline bool isVerticalWhitespace(unsigned char c) {
+ using namespace charinfo;
+ return (InfoTable[c] & CHAR_VERT_WS) != 0;
+}
+
+/// Return true if this character is horizontal or vertical ASCII whitespace:
+/// ' ', '\\t', '\\f', '\\v', '\\n', '\\r'.
+///
+/// Note that this returns false for '\\0'.
+LLVM_READONLY inline bool isWhitespace(unsigned char c) {
+ using namespace charinfo;
+ return (InfoTable[c] & (CHAR_HORZ_WS|CHAR_VERT_WS|CHAR_SPACE)) != 0;
+}
+
+/// Return true if this character is an ASCII digit: [0-9]
+LLVM_READONLY inline bool isDigit(unsigned char c) {
+ using namespace charinfo;
+ return (InfoTable[c] & CHAR_DIGIT) != 0;
+}
+
+/// Return true if this character is a lowercase ASCII letter: [a-z]
+LLVM_READONLY inline bool isLowercase(unsigned char c) {
+ using namespace charinfo;
+ return (InfoTable[c] & CHAR_LOWER) != 0;
+}
+
+/// Return true if this character is an uppercase ASCII letter: [A-Z]
+LLVM_READONLY inline bool isUppercase(unsigned char c) {
+ using namespace charinfo;
+ return (InfoTable[c] & CHAR_UPPER) != 0;
+}
+
+/// Return true if this character is an ASCII letter: [a-zA-Z]
+LLVM_READONLY inline bool isLetter(unsigned char c) {
+ using namespace charinfo;
+ return (InfoTable[c] & (CHAR_UPPER|CHAR_LOWER)) != 0;
+}
+
+/// Return true if this character is an ASCII letter or digit: [a-zA-Z0-9]
+LLVM_READONLY inline bool isAlphanumeric(unsigned char c) {
+ using namespace charinfo;
+ return (InfoTable[c] & (CHAR_DIGIT|CHAR_UPPER|CHAR_LOWER)) != 0;
+}
+
+/// Return true if this character is an ASCII hex digit: [0-9a-fA-F]
+LLVM_READONLY inline bool isHexDigit(unsigned char c) {
+ using namespace charinfo;
+ return (InfoTable[c] & (CHAR_DIGIT|CHAR_XLETTER)) != 0;
+}
+
+/// Return true if this character is an ASCII punctuation character.
+///
+/// Note that '_' is both a punctuation character and an identifier character!
+LLVM_READONLY inline bool isPunctuation(unsigned char c) {
+ using namespace charinfo;
+ return (InfoTable[c] & (CHAR_UNDER|CHAR_PERIOD|CHAR_RAWDEL|CHAR_PUNCT)) != 0;
+}
+
+/// Return true if this character is an ASCII printable character; that is, a
+/// character that should take exactly one column to print in a fixed-width
+/// terminal.
+LLVM_READONLY inline bool isPrintable(unsigned char c) {
+ using namespace charinfo;
+ return (InfoTable[c] & (CHAR_UPPER|CHAR_LOWER|CHAR_PERIOD|CHAR_PUNCT|
+ CHAR_DIGIT|CHAR_UNDER|CHAR_RAWDEL|CHAR_SPACE)) != 0;
+}
+
+/// Return true if this is the body character of a C preprocessing number,
+/// which is [a-zA-Z0-9_.].
+LLVM_READONLY inline bool isPreprocessingNumberBody(unsigned char c) {
+ using namespace charinfo;
+ return (InfoTable[c] &
+ (CHAR_UPPER|CHAR_LOWER|CHAR_DIGIT|CHAR_UNDER|CHAR_PERIOD)) != 0;
+}
+
+/// Return true if this is the body character of a C++ raw string delimiter.
+LLVM_READONLY inline bool isRawStringDelimBody(unsigned char c) {
+ using namespace charinfo;
+ return (InfoTable[c] & (CHAR_UPPER|CHAR_LOWER|CHAR_PERIOD|
+ CHAR_DIGIT|CHAR_UNDER|CHAR_RAWDEL)) != 0;
+}
+
+
+/// Converts the given ASCII character to its lowercase equivalent.
+///
+/// If the character is not an uppercase character, it is returned as is.
+LLVM_READONLY inline char toLowercase(char c) {
+ if (isUppercase(c))
+ return c + 'a' - 'A';
+ return c;
+}
+
+/// Converts the given ASCII character to its uppercase equivalent.
+///
+/// If the character is not a lowercase character, it is returned as is.
+LLVM_READONLY inline char toUppercase(char c) {
+ if (isLowercase(c))
+ return c + 'A' - 'a';
+ return c;
+}
+
+
+/// Return true if this is a valid ASCII identifier.
+///
+/// Note that this is a very simple check; it does not accept UCNs as valid
+/// identifier characters.
+LLVM_READONLY inline bool isValidIdentifier(StringRef S,
+ bool AllowDollar = false) {
+ if (S.empty() || !isIdentifierHead(S[0], AllowDollar))
+ return false;
+
+ for (StringRef::iterator I = S.begin(), E = S.end(); I != E; ++I)
+ if (!isIdentifierBody(*I, AllowDollar))
+ return false;
+
+ return true;
+}
+
+} // end namespace clang
+
+#endif
diff --git a/clang-r353983/include/clang/Basic/CodeGenOptions.def b/clang-r353983/include/clang/Basic/CodeGenOptions.def
new file mode 100644
index 00000000..2a8574e6
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/CodeGenOptions.def
@@ -0,0 +1,369 @@
+//===--- CodeGenOptions.def - Code generation option database ----- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the code generation options. Users of this file
+// must define the CODEGENOPT macro to make use of this information.
+// Optionally, the user may also define ENUM_CODEGENOPT (for options
+// that have enumeration type and VALUE_CODEGENOPT is a code
+// generation option that describes a value rather than a flag.
+//
+//===----------------------------------------------------------------------===//
+#ifndef CODEGENOPT
+# error Define the CODEGENOPT macro to handle language options
+#endif
+
+#ifndef VALUE_CODEGENOPT
+# define VALUE_CODEGENOPT(Name, Bits, Default) \
+CODEGENOPT(Name, Bits, Default)
+#endif
+
+#ifndef ENUM_CODEGENOPT
+# define ENUM_CODEGENOPT(Name, Type, Bits, Default) \
+CODEGENOPT(Name, Bits, Default)
+#endif
+
+CODEGENOPT(DisableIntegratedAS, 1, 0) ///< -no-integrated-as
+ENUM_CODEGENOPT(CompressDebugSections, llvm::DebugCompressionType, 2,
+ llvm::DebugCompressionType::None)
+CODEGENOPT(RelaxELFRelocations, 1, 0) ///< -Wa,--mrelax-relocations
+CODEGENOPT(AsmVerbose , 1, 0) ///< -dA, -fverbose-asm.
+CODEGENOPT(PreserveAsmComments, 1, 1) ///< -dA, -fno-preserve-as-comments.
+CODEGENOPT(AssumeSaneOperatorNew , 1, 1) ///< implicit __attribute__((malloc)) operator new
+CODEGENOPT(Autolink , 1, 1) ///< -fno-autolink
+CODEGENOPT(ObjCAutoRefCountExceptions , 1, 0) ///< Whether ARC should be EH-safe.
+CODEGENOPT(Backchain , 1, 0) ///< -mbackchain
+CODEGENOPT(ControlFlowGuard , 1, 0) ///< -cfguard
+CODEGENOPT(CoverageExtraChecksum, 1, 0) ///< Whether we need a second checksum for functions in GCNO files.
+CODEGENOPT(CoverageNoFunctionNamesInData, 1, 0) ///< Do not include function names in GCDA files.
+CODEGENOPT(CoverageExitBlockBeforeBody, 1, 0) ///< Whether to emit the exit block before the body blocks in GCNO files.
+CODEGENOPT(CXAAtExit , 1, 1) ///< Use __cxa_atexit for calling destructors.
+CODEGENOPT(RegisterGlobalDtorsWithAtExit, 1, 1) ///< Use atexit or __cxa_atexit to register global destructors.
+CODEGENOPT(CXXCtorDtorAliases, 1, 0) ///< Emit complete ctors/dtors as linker
+ ///< aliases to base ctors when possible.
+CODEGENOPT(DataSections , 1, 0) ///< Set when -fdata-sections is enabled.
+CODEGENOPT(UniqueSectionNames, 1, 1) ///< Set for -funique-section-names.
+CODEGENOPT(DisableFPElim , 1, 0) ///< Set when -fomit-frame-pointer is enabled.
+CODEGENOPT(DisableFree , 1, 0) ///< Don't free memory.
+CODEGENOPT(DiscardValueNames , 1, 0) ///< Discard Value Names from the IR (LLVMContext flag)
+CODEGENOPT(DisableGCov , 1, 0) ///< Don't run the GCov pass, for testing.
+CODEGENOPT(DisableLLVMPasses , 1, 0) ///< Don't run any LLVM IR passes to get
+ ///< the pristine IR generated by the
+ ///< frontend.
+CODEGENOPT(DisableLifetimeMarkers, 1, 0) ///< Don't emit any lifetime markers
+CODEGENOPT(DisableO0ImplyOptNone , 1, 0) ///< Don't annonate function with optnone at O0
+CODEGENOPT(ExperimentalNewPassManager, 1, 0) ///< Enables the new, experimental
+ ///< pass manager.
+CODEGENOPT(DebugPassManager, 1, 0) ///< Prints debug information for the new
+ ///< pass manager.
+CODEGENOPT(DisableRedZone , 1, 0) ///< Set when -mno-red-zone is enabled.
+CODEGENOPT(IndirectTlsSegRefs, 1, 0) ///< Set when -mno-tls-direct-seg-refs
+ ///< is specified.
+CODEGENOPT(DisableTailCalls , 1, 0) ///< Do not emit tail calls.
+CODEGENOPT(NoEscapingBlockTailCalls, 1, 0) ///< Do not emit tail calls from
+ ///< escaping blocks.
+CODEGENOPT(EmitDeclMetadata , 1, 0) ///< Emit special metadata indicating what
+ ///< Decl* various IR entities came from.
+ ///< Only useful when running CodeGen as a
+ ///< subroutine.
+CODEGENOPT(EmitVersionIdentMetadata , 1, 1) ///< Emit compiler version metadata.
+CODEGENOPT(EmitGcovArcs , 1, 0) ///< Emit coverage data files, aka. GCDA.
+CODEGENOPT(EmitGcovNotes , 1, 0) ///< Emit coverage "notes" files, aka GCNO.
+CODEGENOPT(EmitOpenCLArgMetadata , 1, 0) ///< Emit OpenCL kernel arg metadata.
+CODEGENOPT(EmulatedTLS , 1, 0) ///< Set by default or -f[no-]emulated-tls.
+CODEGENOPT(ExplicitEmulatedTLS , 1, 0) ///< Set if -f[no-]emulated-tls is used.
+/// Embed Bitcode mode (off/all/bitcode/marker).
+ENUM_CODEGENOPT(EmbedBitcode, EmbedBitcodeKind, 2, Embed_Off)
+CODEGENOPT(ForbidGuardVariables , 1, 0) ///< Issue errors if C++ guard variables
+ ///< are required.
+CODEGENOPT(FunctionSections , 1, 0) ///< Set when -ffunction-sections is enabled.
+CODEGENOPT(InstrumentFunctions , 1, 0) ///< Set when -finstrument-functions is
+ ///< enabled.
+CODEGENOPT(InstrumentFunctionsAfterInlining , 1, 0) ///< Set when
+ ///< -finstrument-functions-after-inlining is enabled.
+CODEGENOPT(InstrumentFunctionEntryBare , 1, 0) ///< Set when
+ ///< -finstrument-function-entry-bare is enabled.
+CODEGENOPT(CFProtectionReturn , 1, 0) ///< if -fcf-protection is
+ ///< set to full or return.
+CODEGENOPT(CFProtectionBranch , 1, 0) ///< if -fcf-protection is
+ ///< set to full or branch.
+CODEGENOPT(XRayInstrumentFunctions , 1, 0) ///< Set when -fxray-instrument is
+ ///< enabled.
+CODEGENOPT(StackSizeSection , 1, 0) ///< Set when -fstack-size-section is enabled.
+
+///< Set when -fxray-always-emit-customevents is enabled.
+CODEGENOPT(XRayAlwaysEmitCustomEvents , 1, 0)
+
+///< Set when -fxray-always-emit-typedevents is enabled.
+CODEGENOPT(XRayAlwaysEmitTypedEvents , 1, 0)
+
+///< Set the minimum number of instructions in a function to determine selective
+///< XRay instrumentation.
+VALUE_CODEGENOPT(XRayInstructionThreshold , 32, 200)
+
+CODEGENOPT(InstrumentForProfiling , 1, 0) ///< Set when -pg is enabled.
+CODEGENOPT(CallFEntry , 1, 0) ///< Set when -mfentry is enabled.
+CODEGENOPT(LessPreciseFPMAD , 1, 0) ///< Enable less precise MAD instructions to
+ ///< be generated.
+CODEGENOPT(PrepareForLTO , 1, 0) ///< Set when -flto is enabled on the
+ ///< compile step.
+CODEGENOPT(EmitSummaryIndex, 1, 0) ///< Set when -flto=thin is enabled on the
+ ///< compile step.
+CODEGENOPT(LTOUnit, 1, 0) ///< Emit IR to support LTO unit features (CFI, whole
+ ///< program vtable opt).
+CODEGENOPT(EnableSplitLTOUnit, 1, 0) ///< Enable LTO unit splitting to support
+ /// CFI and traditional whole program
+ /// devirtualization that require whole
+ /// program IR support.
+CODEGENOPT(IncrementalLinkerCompatible, 1, 0) ///< Emit an object file which can
+ ///< be used with an incremental
+ ///< linker.
+CODEGENOPT(MergeAllConstants , 1, 1) ///< Merge identical constants.
+CODEGENOPT(MergeFunctions , 1, 0) ///< Set when -fmerge-functions is enabled.
+CODEGENOPT(MSVolatile , 1, 0) ///< Set when /volatile:ms is enabled.
+CODEGENOPT(NoCommon , 1, 0) ///< Set when -fno-common or C++ is enabled.
+CODEGENOPT(NoDwarfDirectoryAsm , 1, 0) ///< Set when -fno-dwarf-directory-asm is
+ ///< enabled.
+CODEGENOPT(NoExecStack , 1, 0) ///< Set when -Wa,--noexecstack is enabled.
+CODEGENOPT(FatalWarnings , 1, 0) ///< Set when -Wa,--fatal-warnings is
+ ///< enabled.
+CODEGENOPT(EnableSegmentedStacks , 1, 0) ///< Set when -fsplit-stack is enabled.
+CODEGENOPT(NoImplicitFloat , 1, 0) ///< Set when -mno-implicit-float is enabled.
+CODEGENOPT(NoInfsFPMath , 1, 0) ///< Assume FP arguments, results not +-Inf.
+CODEGENOPT(NoSignedZeros , 1, 0) ///< Allow ignoring the signedness of FP zero
+CODEGENOPT(NullPointerIsValid , 1, 0) ///< Assume Null pointer deference is defined.
+CODEGENOPT(Reassociate , 1, 0) ///< Allow reassociation of FP math ops
+CODEGENOPT(ReciprocalMath , 1, 0) ///< Allow FP divisions to be reassociated.
+CODEGENOPT(NoTrappingMath , 1, 0) ///< Set when -fno-trapping-math is enabled.
+CODEGENOPT(NoNaNsFPMath , 1, 0) ///< Assume FP arguments, results not NaN.
+CODEGENOPT(FlushDenorm , 1, 0) ///< Allow FP denorm numbers to be flushed to zero
+CODEGENOPT(CorrectlyRoundedDivSqrt, 1, 0) ///< -cl-fp32-correctly-rounded-divide-sqrt
+
+/// When false, this attempts to generate code as if the result of an
+/// overflowing conversion matches the overflowing behavior of a target's native
+/// float-to-int conversion instructions.
+CODEGENOPT(StrictFloatCastOverflow, 1, 1)
+
+CODEGENOPT(UniformWGSize , 1, 0) ///< -cl-uniform-work-group-size
+CODEGENOPT(NoZeroInitializedInBSS , 1, 0) ///< -fno-zero-initialized-in-bss.
+/// Method of Objective-C dispatch to use.
+ENUM_CODEGENOPT(ObjCDispatchMethod, ObjCDispatchMethodKind, 2, Legacy)
+/// Replace certain message sends with calls to ObjC runtime entrypoints
+CODEGENOPT(ObjCConvertMessagesToRuntimeCalls , 1, 1)
+CODEGENOPT(OmitLeafFramePointer , 1, 0) ///< Set when -momit-leaf-frame-pointer is
+ ///< enabled.
+
+VALUE_CODEGENOPT(OptimizationLevel, 2, 0) ///< The -O[0-3] option specified.
+VALUE_CODEGENOPT(OptimizeSize, 2, 0) ///< If -Os (==1) or -Oz (==2) is specified.
+
+/// Choose profile instrumenation kind or no instrumentation.
+ENUM_CODEGENOPT(ProfileInstr, ProfileInstrKind, 2, ProfileNone)
+/// Choose profile kind for PGO use compilation.
+ENUM_CODEGENOPT(ProfileUse, ProfileInstrKind, 2, ProfileNone)
+CODEGENOPT(CoverageMapping , 1, 0) ///< Generate coverage mapping regions to
+ ///< enable code coverage analysis.
+CODEGENOPT(DumpCoverageMapping , 1, 0) ///< Dump the generated coverage mapping
+ ///< regions.
+
+ /// If -fpcc-struct-return or -freg-struct-return is specified.
+ENUM_CODEGENOPT(StructReturnConvention, StructReturnConventionKind, 2, SRCK_Default)
+
+CODEGENOPT(RelaxAll , 1, 0) ///< Relax all machine code instructions.
+CODEGENOPT(RelaxedAliasing , 1, 0) ///< Set when -fno-strict-aliasing is enabled.
+CODEGENOPT(StructPathTBAA , 1, 0) ///< Whether or not to use struct-path TBAA.
+CODEGENOPT(NewStructPathTBAA , 1, 0) ///< Whether or not to use enhanced struct-path TBAA.
+CODEGENOPT(SaveTempLabels , 1, 0) ///< Save temporary labels.
+CODEGENOPT(SanitizeAddressUseAfterScope , 1, 0) ///< Enable use-after-scope detection
+ ///< in AddressSanitizer
+CODEGENOPT(SanitizeAddressPoisonCustomArrayCookie, 1,
+ 0) ///< Enable poisoning operator new[] which is not a replaceable
+ ///< global allocation function in AddressSanitizer
+CODEGENOPT(SanitizeAddressGlobalsDeadStripping, 1, 0) ///< Enable linker dead stripping
+ ///< of globals in AddressSanitizer
+CODEGENOPT(SanitizeAddressUseOdrIndicator, 1, 0) ///< Enable ODR indicator globals
+CODEGENOPT(SanitizeMemoryTrackOrigins, 2, 0) ///< Enable tracking origins in
+ ///< MemorySanitizer
+CODEGENOPT(SanitizeMemoryUseAfterDtor, 1, 0) ///< Enable use-after-delete detection
+ ///< in MemorySanitizer
+CODEGENOPT(SanitizeCfiCrossDso, 1, 0) ///< Enable cross-dso support in CFI.
+CODEGENOPT(SanitizeMinimalRuntime, 1, 0) ///< Use "_minimal" sanitizer runtime for
+ ///< diagnostics.
+CODEGENOPT(SanitizeCfiICallGeneralizePointers, 1, 0) ///< Generalize pointer types in
+ ///< CFI icall function signatures
+CODEGENOPT(SanitizeCoverageType, 2, 0) ///< Type of sanitizer coverage
+ ///< instrumentation.
+CODEGENOPT(SanitizeCoverageIndirectCalls, 1, 0) ///< Enable sanitizer coverage
+ ///< for indirect calls.
+CODEGENOPT(SanitizeCoverageTraceBB, 1, 0) ///< Enable basic block tracing in
+ ///< in sanitizer coverage.
+CODEGENOPT(SanitizeCoverageTraceCmp, 1, 0) ///< Enable cmp instruction tracing
+ ///< in sanitizer coverage.
+CODEGENOPT(SanitizeCoverageTraceDiv, 1, 0) ///< Enable div instruction tracing
+ ///< in sanitizer coverage.
+CODEGENOPT(SanitizeCoverageTraceGep, 1, 0) ///< Enable GEP instruction tracing
+ ///< in sanitizer coverage.
+CODEGENOPT(SanitizeCoverage8bitCounters, 1, 0) ///< Use 8-bit frequency counters
+ ///< in sanitizer coverage.
+CODEGENOPT(SanitizeCoverageTracePC, 1, 0) ///< Enable PC tracing
+ ///< in sanitizer coverage.
+CODEGENOPT(SanitizeCoverageTracePCGuard, 1, 0) ///< Enable PC tracing with guard
+ ///< in sanitizer coverage.
+CODEGENOPT(SanitizeCoverageInline8bitCounters, 1, 0) ///< Use inline 8bit counters.
+CODEGENOPT(SanitizeCoveragePCTable, 1, 0) ///< Create a PC Table.
+CODEGENOPT(SanitizeCoverageNoPrune, 1, 0) ///< Disable coverage pruning.
+CODEGENOPT(SanitizeCoverageStackDepth, 1, 0) ///< Enable max stack depth tracing
+CODEGENOPT(SanitizeStats , 1, 0) ///< Collect statistics for sanitizers.
+CODEGENOPT(SimplifyLibCalls , 1, 1) ///< Set when -fbuiltin is enabled.
+CODEGENOPT(SoftFloat , 1, 0) ///< -soft-float.
+CODEGENOPT(SpeculativeLoadHardening, 1, 0) ///< Enable speculative load hardening.
+CODEGENOPT(FineGrainedBitfieldAccesses, 1, 0) ///< Enable fine-grained bitfield accesses.
+CODEGENOPT(StrictEnums , 1, 0) ///< Optimize based on strict enum definition.
+CODEGENOPT(StrictVTablePointers, 1, 0) ///< Optimize based on the strict vtable pointers
+CODEGENOPT(TimePasses , 1, 0) ///< Set when -ftime-report is enabled.
+CODEGENOPT(UnrollLoops , 1, 0) ///< Control whether loops are unrolled.
+CODEGENOPT(RerollLoops , 1, 0) ///< Control whether loops are rerolled.
+CODEGENOPT(NoUseJumpTables , 1, 0) ///< Set when -fno-jump-tables is enabled.
+CODEGENOPT(UnsafeFPMath , 1, 0) ///< Allow unsafe floating point optzns.
+CODEGENOPT(UnwindTables , 1, 0) ///< Emit unwind tables.
+CODEGENOPT(VectorizeLoop , 1, 0) ///< Run loop vectorizer.
+CODEGENOPT(VectorizeSLP , 1, 0) ///< Run SLP vectorizer.
+CODEGENOPT(ProfileSampleAccurate, 1, 0) ///< Sample profile is accurate.
+
+ /// Attempt to use register sized accesses to bit-fields in structures, when
+ /// possible.
+CODEGENOPT(UseRegisterSizedBitfieldAccess , 1, 0)
+
+CODEGENOPT(VerifyModule , 1, 1) ///< Control whether the module should be run
+ ///< through the LLVM Verifier.
+
+CODEGENOPT(StackRealignment , 1, 0) ///< Control whether to force stack
+ ///< realignment.
+CODEGENOPT(UseInitArray , 1, 0) ///< Control whether to use .init_array or
+ ///< .ctors.
+VALUE_CODEGENOPT(StackAlignment , 32, 0) ///< Overrides default stack
+ ///< alignment, if not 0.
+VALUE_CODEGENOPT(StackProbeSize , 32, 4096) ///< Overrides default stack
+ ///< probe size, even if 0.
+CODEGENOPT(NoStackArgProbe, 1, 0) ///< Set when -mno-stack-arg-probe is used
+CODEGENOPT(DebugColumnInfo, 1, 0) ///< Whether or not to use column information
+ ///< in debug info.
+
+CODEGENOPT(DebugTypeExtRefs, 1, 0) ///< Whether or not debug info should contain
+ ///< external references to a PCH or module.
+
+CODEGENOPT(DebugExplicitImport, 1, 0) ///< Whether or not debug info should
+ ///< contain explicit imports for
+ ///< anonymous namespaces
+
+ENUM_CODEGENOPT(SplitDwarfMode, DwarfFissionKind, 2, NoFission) ///< DWARF fission mode to use.
+
+CODEGENOPT(SplitDwarfInlining, 1, 1) ///< Whether to include inlining info in the
+ ///< skeleton CU to allow for symbolication
+ ///< of inline stack frames without .dwo files.
+CODEGENOPT(DebugFwdTemplateParams, 1, 0) ///< Whether to emit complete
+ ///< template parameter descriptions in
+ ///< forward declarations (versus just
+ ///< including them in the name).
+
+CODEGENOPT(EmitLLVMUseLists, 1, 0) ///< Control whether to serialize use-lists.
+
+CODEGENOPT(WholeProgramVTables, 1, 0) ///< Whether to apply whole-program
+ /// vtable optimization.
+
+/// Whether to use public LTO visibility for entities in std and stdext
+/// namespaces. This is enabled by clang-cl's /MT and /MTd flags.
+CODEGENOPT(LTOVisibilityPublicStd, 1, 0)
+
+/// The user specified number of registers to be used for integral arguments,
+/// or 0 if unspecified.
+VALUE_CODEGENOPT(NumRegisterParameters, 32, 0)
+
+/// The lower bound for a buffer to be considered for stack protection.
+VALUE_CODEGENOPT(SSPBufferSize, 32, 0)
+
+/// The kind of generated debug info.
+ENUM_CODEGENOPT(DebugInfo, codegenoptions::DebugInfoKind, 3, codegenoptions::NoDebugInfo)
+
+/// Whether to generate macro debug info.
+CODEGENOPT(MacroDebugInfo, 1, 0)
+
+/// Tune the debug info for this debugger.
+ENUM_CODEGENOPT(DebuggerTuning, llvm::DebuggerKind, 2,
+ llvm::DebuggerKind::Default)
+
+/// Dwarf version. Version zero indicates to LLVM that no DWARF should be
+/// emitted.
+VALUE_CODEGENOPT(DwarfVersion, 3, 0)
+
+/// Whether we should emit CodeView debug information. It's possible to emit
+/// CodeView and DWARF into the same object.
+CODEGENOPT(EmitCodeView, 1, 0)
+
+/// Whether to emit the .debug$H section containing hashes of CodeView types.
+CODEGENOPT(CodeViewGHash, 1, 0)
+
+/// The kind of inlining to perform.
+ENUM_CODEGENOPT(Inlining, InliningMethod, 2, NormalInlining)
+
+// Vector functions library to use.
+ENUM_CODEGENOPT(VecLib, VectorLibrary, 2, NoLibrary)
+
+/// The default TLS model to use.
+ENUM_CODEGENOPT(DefaultTLSModel, TLSModel, 2, GeneralDynamicTLSModel)
+
+/// Number of path components to strip when emitting checks. (0 == full
+/// filename)
+VALUE_CODEGENOPT(EmitCheckPathComponentsToStrip, 32, 0)
+
+/// Whether to report the hotness of the code region for optimization remarks.
+CODEGENOPT(DiagnosticsWithHotness, 1, 0)
+
+/// The minimum hotness value a diagnostic needs in order to be included in
+/// optimization diagnostics.
+VALUE_CODEGENOPT(DiagnosticsHotnessThreshold, 32, 0)
+
+/// Whether copy relocations support is available when building as PIE.
+CODEGENOPT(PIECopyRelocations, 1, 0)
+
+/// Whether we should use the undefined behaviour optimization for control flow
+/// paths that reach the end of a function without executing a required return.
+CODEGENOPT(StrictReturn, 1, 1)
+
+/// Whether emit extra debug info for sample pgo profile collection.
+CODEGENOPT(DebugInfoForProfiling, 1, 0)
+
+/// Whether 3-component vector type is preserved.
+CODEGENOPT(PreserveVec3Type, 1, 0)
+
+/// Whether to emit .debug_gnu_pubnames section instead of .debug_pubnames.
+CODEGENOPT(DebugNameTable, 2, 0)
+
+/// Whether to use DWARF base address specifiers in .debug_ranges.
+CODEGENOPT(DebugRangesBaseAddress, 1, 0)
+
+CODEGENOPT(NoPLT, 1, 0)
+
+/// Whether to embed source in DWARF debug line section.
+CODEGENOPT(EmbedSource, 1, 0)
+
+/// Whether to emit all vtables
+CODEGENOPT(ForceEmitVTables, 1, 0)
+
+/// Whether to emit an address-significance table into the object file.
+CODEGENOPT(Addrsig, 1, 0)
+
+ENUM_CODEGENOPT(SignReturnAddress, SignReturnAddressScope, 2, None)
+ENUM_CODEGENOPT(SignReturnAddressKey, SignReturnAddressKeyValue, 1, AKey)
+CODEGENOPT(BranchTargetEnforcement, 1, 0)
+
+/// Whether to emit unused static constants.
+CODEGENOPT(KeepStaticConsts, 1, 0)
+
+#undef CODEGENOPT
+#undef ENUM_CODEGENOPT
+#undef VALUE_CODEGENOPT
+
diff --git a/clang-r353983/include/clang/Basic/CodeGenOptions.h b/clang-r353983/include/clang/Basic/CodeGenOptions.h
new file mode 100644
index 00000000..5c8abe35
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/CodeGenOptions.h
@@ -0,0 +1,335 @@
+//===--- CodeGenOptions.h ---------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the CodeGenOptions interface.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_CODEGENOPTIONS_H
+#define LLVM_CLANG_BASIC_CODEGENOPTIONS_H
+
+#include "clang/Basic/DebugInfoOptions.h"
+#include "clang/Basic/Sanitizers.h"
+#include "clang/Basic/XRayInstr.h"
+#include "llvm/Support/CodeGen.h"
+#include "llvm/Support/Regex.h"
+#include "llvm/Target/TargetOptions.h"
+#include <map>
+#include <memory>
+#include <string>
+#include <vector>
+
+namespace clang {
+
+/// Bitfields of CodeGenOptions, split out from CodeGenOptions to ensure
+/// that this large collection of bitfields is a trivial class type.
+class CodeGenOptionsBase {
+public:
+#define CODEGENOPT(Name, Bits, Default) unsigned Name : Bits;
+#define ENUM_CODEGENOPT(Name, Type, Bits, Default)
+#include "clang/Basic/CodeGenOptions.def"
+
+protected:
+#define CODEGENOPT(Name, Bits, Default)
+#define ENUM_CODEGENOPT(Name, Type, Bits, Default) unsigned Name : Bits;
+#include "clang/Basic/CodeGenOptions.def"
+};
+
+/// CodeGenOptions - Track various options which control how the code
+/// is optimized and passed to the backend.
+class CodeGenOptions : public CodeGenOptionsBase {
+public:
+ enum InliningMethod {
+ NormalInlining, // Use the standard function inlining pass.
+ OnlyHintInlining, // Inline only (implicitly) hinted functions.
+ OnlyAlwaysInlining // Only run the always inlining pass.
+ };
+
+ enum VectorLibrary {
+ NoLibrary, // Don't use any vector library.
+ Accelerate, // Use the Accelerate framework.
+ SVML // Intel short vector math library.
+ };
+
+
+ enum ObjCDispatchMethodKind {
+ Legacy = 0,
+ NonLegacy = 1,
+ Mixed = 2
+ };
+
+ enum TLSModel {
+ GeneralDynamicTLSModel,
+ LocalDynamicTLSModel,
+ InitialExecTLSModel,
+ LocalExecTLSModel
+ };
+
+ enum DwarfFissionKind { NoFission, SplitFileFission, SingleFileFission };
+
+ /// Clang versions with different platform ABI conformance.
+ enum class ClangABI {
+ /// Attempt to be ABI-compatible with code generated by Clang 3.8.x
+ /// (SVN r257626). This causes <1 x long long> to be passed in an
+ /// integer register instead of an SSE register on x64_64.
+ Ver3_8,
+
+ /// Attempt to be ABI-compatible with code generated by Clang 4.0.x
+ /// (SVN r291814). This causes move operations to be ignored when
+ /// determining whether a class type can be passed or returned directly.
+ Ver4,
+
+ /// Conform to the underlying platform's C and C++ ABIs as closely
+ /// as we can.
+ Latest
+ };
+
+ enum StructReturnConventionKind {
+ SRCK_Default, // No special option was passed.
+ SRCK_OnStack, // Small structs on the stack (-fpcc-struct-return).
+ SRCK_InRegs // Small structs in registers (-freg-struct-return).
+ };
+
+ enum ProfileInstrKind {
+ ProfileNone, // Profile instrumentation is turned off.
+ ProfileClangInstr, // Clang instrumentation to generate execution counts
+ // to use with PGO.
+ ProfileIRInstr, // IR level PGO instrumentation in LLVM.
+ };
+
+ enum EmbedBitcodeKind {
+ Embed_Off, // No embedded bitcode.
+ Embed_All, // Embed both bitcode and commandline in the output.
+ Embed_Bitcode, // Embed just the bitcode in the output.
+ Embed_Marker // Embed a marker as a placeholder for bitcode.
+ };
+
+ enum SignReturnAddressScope {
+ None, // No signing for any function
+ NonLeaf, // Sign the return address of functions that spill LR
+ All // Sign the return address of all functions
+ };
+
+ enum SignReturnAddressKeyValue { AKey, BKey };
+
+ /// The code model to use (-mcmodel).
+ std::string CodeModel;
+
+ /// The filename with path we use for coverage data files. The runtime
+ /// allows further manipulation with the GCOV_PREFIX and GCOV_PREFIX_STRIP
+ /// environment variables.
+ std::string CoverageDataFile;
+
+ /// The filename with path we use for coverage notes files.
+ std::string CoverageNotesFile;
+
+ /// Regexes separated by a semi-colon to filter the files to instrument.
+ std::string ProfileFilterFiles;
+
+ /// Regexes separated by a semi-colon to filter the files to not instrument.
+ std::string ProfileExcludeFiles;
+
+ /// The version string to put into coverage files.
+ char CoverageVersion[4];
+
+ /// Enable additional debugging information.
+ std::string DebugPass;
+
+ /// The string to embed in debug information as the current working directory.
+ std::string DebugCompilationDir;
+
+ /// The string to embed in the debug information for the compile unit, if
+ /// non-empty.
+ std::string DwarfDebugFlags;
+
+ /// The string containing the commandline for the llvm.commandline metadata,
+ /// if non-empty.
+ std::string RecordCommandLine;
+
+ std::map<std::string, std::string> DebugPrefixMap;
+
+ /// The ABI to use for passing floating point arguments.
+ std::string FloatABI;
+
+ /// The floating-point denormal mode to use.
+ std::string FPDenormalMode;
+
+ /// The float precision limit to use, if non-empty.
+ std::string LimitFloatPrecision;
+
+ struct BitcodeFileToLink {
+ /// The filename of the bitcode file to link in.
+ std::string Filename;
+ /// If true, we set attributes functions in the bitcode library according to
+ /// our CodeGenOptions, much as we set attrs on functions that we generate
+ /// ourselves.
+ bool PropagateAttrs = false;
+ /// If true, we use LLVM module internalizer.
+ bool Internalize = false;
+ /// Bitwise combination of llvm::Linker::Flags, passed to the LLVM linker.
+ unsigned LinkFlags = 0;
+ };
+
+ /// The files specified here are linked in to the module before optimizations.
+ std::vector<BitcodeFileToLink> LinkBitcodeFiles;
+
+ /// The user provided name for the "main file", if non-empty. This is useful
+ /// in situations where the input file name does not match the original input
+ /// file, for example with -save-temps.
+ std::string MainFileName;
+
+ /// The name for the split debug info file that we'll break out. This is used
+ /// in the backend for setting the name in the skeleton cu.
+ std::string SplitDwarfFile;
+
+ /// The name of the relocation model to use.
+ llvm::Reloc::Model RelocationModel;
+
+ /// The thread model to use
+ std::string ThreadModel;
+
+ /// If not an empty string, trap intrinsics are lowered to calls to this
+ /// function instead of to trap instructions.
+ std::string TrapFuncName;
+
+ /// A list of dependent libraries.
+ std::vector<std::string> DependentLibraries;
+
+ /// A list of linker options to embed in the object file.
+ std::vector<std::string> LinkerOptions;
+
+ /// Name of the profile file to use as output for -fprofile-instr-generate
+ /// and -fprofile-generate.
+ std::string InstrProfileOutput;
+
+ /// Name of the profile file to use with -fprofile-sample-use.
+ std::string SampleProfileFile;
+
+ /// Name of the profile file to use as input for -fprofile-instr-use
+ std::string ProfileInstrumentUsePath;
+
+ /// Name of the profile remapping file to apply to the profile data supplied
+ /// by -fprofile-sample-use or -fprofile-instr-use.
+ std::string ProfileRemappingFile;
+
+ /// Name of the function summary index file to use for ThinLTO function
+ /// importing.
+ std::string ThinLTOIndexFile;
+
+ /// Name of a file that can optionally be written with minimized bitcode
+ /// to be used as input for the ThinLTO thin link step, which only needs
+ /// the summary and module symbol table (and not, e.g. any debug metadata).
+ std::string ThinLinkBitcodeFile;
+
+ /// Prefix to use for -save-temps output.
+ std::string SaveTempsFilePrefix;
+
+ /// Name of file passed with -fcuda-include-gpubinary option to forward to
+ /// CUDA runtime back-end for incorporating them into host-side object file.
+ std::string CudaGpuBinaryFileName;
+
+ /// The name of the file to which the backend should save YAML optimization
+ /// records.
+ std::string OptRecordFile;
+
+ /// Regular expression to select optimizations for which we should enable
+ /// optimization remarks. Transformation passes whose name matches this
+ /// expression (and support this feature), will emit a diagnostic
+ /// whenever they perform a transformation. This is enabled by the
+ /// -Rpass=regexp flag.
+ std::shared_ptr<llvm::Regex> OptimizationRemarkPattern;
+
+ /// Regular expression to select optimizations for which we should enable
+ /// missed optimization remarks. Transformation passes whose name matches this
+ /// expression (and support this feature), will emit a diagnostic
+ /// whenever they tried but failed to perform a transformation. This is
+ /// enabled by the -Rpass-missed=regexp flag.
+ std::shared_ptr<llvm::Regex> OptimizationRemarkMissedPattern;
+
+ /// Regular expression to select optimizations for which we should enable
+ /// optimization analyses. Transformation passes whose name matches this
+ /// expression (and support this feature), will emit a diagnostic
+ /// whenever they want to explain why they decided to apply or not apply
+ /// a given transformation. This is enabled by the -Rpass-analysis=regexp
+ /// flag.
+ std::shared_ptr<llvm::Regex> OptimizationRemarkAnalysisPattern;
+
+ /// Set of files defining the rules for the symbol rewriting.
+ std::vector<std::string> RewriteMapFiles;
+
+ /// Set of sanitizer checks that are non-fatal (i.e. execution should be
+ /// continued when possible).
+ SanitizerSet SanitizeRecover;
+
+ /// Set of sanitizer checks that trap rather than diagnose.
+ SanitizerSet SanitizeTrap;
+
+ /// List of backend command-line options for -fembed-bitcode.
+ std::vector<uint8_t> CmdArgs;
+
+ /// A list of all -fno-builtin-* function names (e.g., memset).
+ std::vector<std::string> NoBuiltinFuncs;
+
+ std::vector<std::string> Reciprocals;
+
+ /// The preferred width for auto-vectorization transforms. This is intended to
+ /// override default transforms based on the width of the architected vector
+ /// registers.
+ std::string PreferVectorWidth;
+
+ /// Set of XRay instrumentation kinds to emit.
+ XRayInstrSet XRayInstrumentationBundle;
+
+ std::vector<std::string> DefaultFunctionAttrs;
+
+ /// List of dynamic shared object files to be loaded as pass plugins.
+ std::vector<std::string> PassPlugins;
+
+public:
+ // Define accessors/mutators for code generation options of enumeration type.
+#define CODEGENOPT(Name, Bits, Default)
+#define ENUM_CODEGENOPT(Name, Type, Bits, Default) \
+ Type get##Name() const { return static_cast<Type>(Name); } \
+ void set##Name(Type Value) { Name = static_cast<unsigned>(Value); }
+#include "clang/Basic/CodeGenOptions.def"
+
+ CodeGenOptions();
+
+ /// Is this a libc/libm function that is no longer recognized as a
+ /// builtin because a -fno-builtin-* option has been specified?
+ bool isNoBuiltinFunc(const char *Name) const;
+
+ const std::vector<std::string> &getNoBuiltinFuncs() const {
+ return NoBuiltinFuncs;
+ }
+
+ /// Check if Clang profile instrumenation is on.
+ bool hasProfileClangInstr() const {
+ return getProfileInstr() == ProfileClangInstr;
+ }
+
+ /// Check if IR level profile instrumentation is on.
+ bool hasProfileIRInstr() const {
+ return getProfileInstr() == ProfileIRInstr;
+ }
+
+ /// Check if Clang profile use is on.
+ bool hasProfileClangUse() const {
+ return getProfileUse() == ProfileClangInstr;
+ }
+
+ /// Check if IR level profile use is on.
+ bool hasProfileIRUse() const {
+ return getProfileUse() == ProfileIRInstr;
+ }
+
+};
+
+} // end namespace clang
+
+#endif
diff --git a/clang-r353983/include/clang/Basic/CommentOptions.h b/clang-r353983/include/clang/Basic/CommentOptions.h
new file mode 100644
index 00000000..7d142fc3
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/CommentOptions.h
@@ -0,0 +1,38 @@
+//===- CommentOptions.h - Options for parsing comments ----------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+/// \file
+/// Defines the clang::CommentOptions interface.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_COMMENTOPTIONS_H
+#define LLVM_CLANG_BASIC_COMMENTOPTIONS_H
+
+#include <string>
+#include <vector>
+
+namespace clang {
+
+/// Options for controlling comment parsing.
+struct CommentOptions {
+ using BlockCommandNamesTy = std::vector<std::string>;
+
+ /// Command names to treat as block commands in comments.
+ /// Should not include the leading backslash.
+ BlockCommandNamesTy BlockCommandNames;
+
+ /// Treat ordinary comments as documentation comments.
+ bool ParseAllComments = false;
+
+ CommentOptions() = default;
+};
+
+} // namespace clang
+
+#endif // LLVM_CLANG_BASIC_COMMENTOPTIONS_H
diff --git a/clang-r353983/include/clang/Basic/Cuda.h b/clang-r353983/include/clang/Basic/Cuda.h
new file mode 100644
index 00000000..d96c7e09
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/Cuda.h
@@ -0,0 +1,120 @@
+//===--- Cuda.h - Utilities for compiling CUDA code ------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_CUDA_H
+#define LLVM_CLANG_BASIC_CUDA_H
+
+namespace llvm {
+class StringRef;
+class VersionTuple;
+} // namespace llvm
+
+namespace clang {
+
+enum class CudaVersion {
+ UNKNOWN,
+ CUDA_70,
+ CUDA_75,
+ CUDA_80,
+ CUDA_90,
+ CUDA_91,
+ CUDA_92,
+ CUDA_100,
+ CUDA_101,
+ LATEST = CUDA_101,
+};
+const char *CudaVersionToString(CudaVersion V);
+// Input is "Major.Minor"
+CudaVersion CudaStringToVersion(llvm::StringRef S);
+
+enum class CudaArch {
+ UNKNOWN,
+ SM_20,
+ SM_21,
+ SM_30,
+ SM_32,
+ SM_35,
+ SM_37,
+ SM_50,
+ SM_52,
+ SM_53,
+ SM_60,
+ SM_61,
+ SM_62,
+ SM_70,
+ SM_72,
+ SM_75,
+ GFX600,
+ GFX601,
+ GFX700,
+ GFX701,
+ GFX702,
+ GFX703,
+ GFX704,
+ GFX801,
+ GFX802,
+ GFX803,
+ GFX810,
+ GFX900,
+ GFX902,
+ GFX904,
+ GFX906,
+ GFX909,
+ LAST,
+};
+const char *CudaArchToString(CudaArch A);
+
+// The input should have the form "sm_20".
+CudaArch StringToCudaArch(llvm::StringRef S);
+
+enum class CudaVirtualArch {
+ UNKNOWN,
+ COMPUTE_20,
+ COMPUTE_30,
+ COMPUTE_32,
+ COMPUTE_35,
+ COMPUTE_37,
+ COMPUTE_50,
+ COMPUTE_52,
+ COMPUTE_53,
+ COMPUTE_60,
+ COMPUTE_61,
+ COMPUTE_62,
+ COMPUTE_70,
+ COMPUTE_72,
+ COMPUTE_75,
+ COMPUTE_AMDGCN,
+};
+const char *CudaVirtualArchToString(CudaVirtualArch A);
+
+// The input should have the form "compute_20".
+CudaVirtualArch StringToCudaVirtualArch(llvm::StringRef S);
+
+/// Get the compute_xx corresponding to an sm_yy.
+CudaVirtualArch VirtualArchForCudaArch(CudaArch A);
+
+/// Get the earliest CudaVersion that supports the given CudaArch.
+CudaVersion MinVersionForCudaArch(CudaArch A);
+
+/// Get the latest CudaVersion that supports the given CudaArch.
+CudaVersion MaxVersionForCudaArch(CudaArch A);
+
+// Various SDK-dependent features that affect CUDA compilation
+enum class CudaFeature {
+ // CUDA-9.2+ uses a new API for launching kernels.
+ CUDA_USES_NEW_LAUNCH,
+ // CUDA-10.1+ needs explicit end of GPU binary registration.
+ CUDA_USES_FATBIN_REGISTER_END,
+};
+
+bool CudaFeatureEnabled(llvm::VersionTuple, CudaFeature);
+bool CudaFeatureEnabled(CudaVersion, CudaFeature);
+
+} // namespace clang
+
+#endif
diff --git a/clang-r353983/include/clang/Basic/DebugInfoOptions.h b/clang-r353983/include/clang/Basic/DebugInfoOptions.h
new file mode 100644
index 00000000..91d33321
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/DebugInfoOptions.h
@@ -0,0 +1,44 @@
+//===--- DebugInfoOptions.h - Debug Info Emission Types ---------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_DEBUGINFOOPTIONS_H
+#define LLVM_CLANG_BASIC_DEBUGINFOOPTIONS_H
+
+namespace clang {
+namespace codegenoptions {
+
+enum DebugInfoFormat {
+ DIF_DWARF,
+ DIF_CodeView,
+};
+
+enum DebugInfoKind {
+ NoDebugInfo, /// Don't generate debug info.
+ LocTrackingOnly, /// Emit location information but do not generate
+ /// debug info in the output. This is useful in
+ /// cases where the backend wants to track source
+ /// locations for instructions without actually
+ /// emitting debug info for them (e.g., when -Rpass
+ /// is used).
+ DebugDirectivesOnly, /// Emit only debug directives with the line numbers data
+ DebugLineTablesOnly, /// Emit only debug info necessary for generating
+ /// line number tables (-gline-tables-only).
+ LimitedDebugInfo, /// Limit generated debug info to reduce size
+ /// (-fno-standalone-debug). This emits
+ /// forward decls for types that could be
+ /// replaced with forward decls in the source
+ /// code. For dynamic C++ classes type info
+ /// is only emitted into the module that
+ /// contains the classe's vtable.
+ FullDebugInfo /// Generate complete debug info.
+};
+
+} // end namespace codegenoptions
+} // end namespace clang
+
+#endif
diff --git a/clang-r353983/include/clang/Basic/Diagnostic.h b/clang-r353983/include/clang/Basic/Diagnostic.h
new file mode 100644
index 00000000..88947b7e
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/Diagnostic.h
@@ -0,0 +1,1593 @@
+//===- Diagnostic.h - C Language Family Diagnostic Handling -----*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+/// \file
+/// Defines the Diagnostic-related interfaces.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_DIAGNOSTIC_H
+#define LLVM_CLANG_BASIC_DIAGNOSTIC_H
+
+#include "clang/Basic/DiagnosticIDs.h"
+#include "clang/Basic/DiagnosticOptions.h"
+#include "clang/Basic/SourceLocation.h"
+#include "clang/Basic/Specifiers.h"
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/IntrusiveRefCntPtr.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/ADT/iterator_range.h"
+#include "llvm/Support/Compiler.h"
+#include <cassert>
+#include <cstdint>
+#include <limits>
+#include <list>
+#include <map>
+#include <memory>
+#include <string>
+#include <type_traits>
+#include <utility>
+#include <vector>
+
+namespace clang {
+
+class DeclContext;
+class DiagnosticBuilder;
+class DiagnosticConsumer;
+class IdentifierInfo;
+class LangOptions;
+class Preprocessor;
+class SourceManager;
+class StoredDiagnostic;
+
+namespace tok {
+
+enum TokenKind : unsigned short;
+
+} // namespace tok
+
+/// Annotates a diagnostic with some code that should be
+/// inserted, removed, or replaced to fix the problem.
+///
+/// This kind of hint should be used when we are certain that the
+/// introduction, removal, or modification of a particular (small!)
+/// amount of code will correct a compilation error. The compiler
+/// should also provide full recovery from such errors, such that
+/// suppressing the diagnostic output can still result in successful
+/// compilation.
+class FixItHint {
+public:
+ /// Code that should be replaced to correct the error. Empty for an
+ /// insertion hint.
+ CharSourceRange RemoveRange;
+
+ /// Code in the specific range that should be inserted in the insertion
+ /// location.
+ CharSourceRange InsertFromRange;
+
+ /// The actual code to insert at the insertion location, as a
+ /// string.
+ std::string CodeToInsert;
+
+ bool BeforePreviousInsertions = false;
+
+ /// Empty code modification hint, indicating that no code
+ /// modification is known.
+ FixItHint() = default;
+
+ bool isNull() const {
+ return !RemoveRange.isValid();
+ }
+
+ /// Create a code modification hint that inserts the given
+ /// code string at a specific location.
+ static FixItHint CreateInsertion(SourceLocation InsertionLoc,
+ StringRef Code,
+ bool BeforePreviousInsertions = false) {
+ FixItHint Hint;
+ Hint.RemoveRange =
+ CharSourceRange::getCharRange(InsertionLoc, InsertionLoc);
+ Hint.CodeToInsert = Code;
+ Hint.BeforePreviousInsertions = BeforePreviousInsertions;
+ return Hint;
+ }
+
+ /// Create a code modification hint that inserts the given
+ /// code from \p FromRange at a specific location.
+ static FixItHint CreateInsertionFromRange(SourceLocation InsertionLoc,
+ CharSourceRange FromRange,
+ bool BeforePreviousInsertions = false) {
+ FixItHint Hint;
+ Hint.RemoveRange =
+ CharSourceRange::getCharRange(InsertionLoc, InsertionLoc);
+ Hint.InsertFromRange = FromRange;
+ Hint.BeforePreviousInsertions = BeforePreviousInsertions;
+ return Hint;
+ }
+
+ /// Create a code modification hint that removes the given
+ /// source range.
+ static FixItHint CreateRemoval(CharSourceRange RemoveRange) {
+ FixItHint Hint;
+ Hint.RemoveRange = RemoveRange;
+ return Hint;
+ }
+ static FixItHint CreateRemoval(SourceRange RemoveRange) {
+ return CreateRemoval(CharSourceRange::getTokenRange(RemoveRange));
+ }
+
+ /// Create a code modification hint that replaces the given
+ /// source range with the given code string.
+ static FixItHint CreateReplacement(CharSourceRange RemoveRange,
+ StringRef Code) {
+ FixItHint Hint;
+ Hint.RemoveRange = RemoveRange;
+ Hint.CodeToInsert = Code;
+ return Hint;
+ }
+
+ static FixItHint CreateReplacement(SourceRange RemoveRange,
+ StringRef Code) {
+ return CreateReplacement(CharSourceRange::getTokenRange(RemoveRange), Code);
+ }
+};
+
+/// Concrete class used by the front-end to report problems and issues.
+///
+/// This massages the diagnostics (e.g. handling things like "report warnings
+/// as errors" and passes them off to the DiagnosticConsumer for reporting to
+/// the user. DiagnosticsEngine is tied to one translation unit and one
+/// SourceManager.
+class DiagnosticsEngine : public RefCountedBase<DiagnosticsEngine> {
+public:
+ /// The level of the diagnostic, after it has been through mapping.
+ enum Level {
+ Ignored = DiagnosticIDs::Ignored,
+ Note = DiagnosticIDs::Note,
+ Remark = DiagnosticIDs::Remark,
+ Warning = DiagnosticIDs::Warning,
+ Error = DiagnosticIDs::Error,
+ Fatal = DiagnosticIDs::Fatal
+ };
+
+ enum ArgumentKind {
+ /// std::string
+ ak_std_string,
+
+ /// const char *
+ ak_c_string,
+
+ /// int
+ ak_sint,
+
+ /// unsigned
+ ak_uint,
+
+ /// enum TokenKind : unsigned
+ ak_tokenkind,
+
+ /// IdentifierInfo
+ ak_identifierinfo,
+
+ /// Qualifiers
+ ak_qual,
+
+ /// QualType
+ ak_qualtype,
+
+ /// DeclarationName
+ ak_declarationname,
+
+ /// NamedDecl *
+ ak_nameddecl,
+
+ /// NestedNameSpecifier *
+ ak_nestednamespec,
+
+ /// DeclContext *
+ ak_declcontext,
+
+ /// pair<QualType, QualType>
+ ak_qualtype_pair,
+
+ /// Attr *
+ ak_attr
+ };
+
+ /// Represents on argument value, which is a union discriminated
+ /// by ArgumentKind, with a value.
+ using ArgumentValue = std::pair<ArgumentKind, intptr_t>;
+
+private:
+ // Used by __extension__
+ unsigned char AllExtensionsSilenced = 0;
+
+ // Suppress diagnostics after a fatal error?
+ bool SuppressAfterFatalError = true;
+
+ // Suppress all diagnostics.
+ bool SuppressAllDiagnostics = false;
+
+ // Elide common types of templates.
+ bool ElideType = true;
+
+ // Print a tree when comparing templates.
+ bool PrintTemplateTree = false;
+
+ // Color printing is enabled.
+ bool ShowColors = false;
+
+ // Which overload candidates to show.
+ OverloadsShown ShowOverloads = Ovl_All;
+
+ // Cap of # errors emitted, 0 -> no limit.
+ unsigned ErrorLimit = 0;
+
+ // Cap on depth of template backtrace stack, 0 -> no limit.
+ unsigned TemplateBacktraceLimit = 0;
+
+ // Cap on depth of constexpr evaluation backtrace stack, 0 -> no limit.
+ unsigned ConstexprBacktraceLimit = 0;
+
+ IntrusiveRefCntPtr<DiagnosticIDs> Diags;
+ IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts;
+ DiagnosticConsumer *Client = nullptr;
+ std::unique_ptr<DiagnosticConsumer> Owner;
+ SourceManager *SourceMgr = nullptr;
+
+ /// Mapping information for diagnostics.
+ ///
+ /// Mapping info is packed into four bits per diagnostic. The low three
+ /// bits are the mapping (an instance of diag::Severity), or zero if unset.
+ /// The high bit is set when the mapping was established as a user mapping.
+ /// If the high bit is clear, then the low bits are set to the default
+ /// value, and should be mapped with -pedantic, -Werror, etc.
+ ///
+ /// A new DiagState is created and kept around when diagnostic pragmas modify
+ /// the state so that we know what is the diagnostic state at any given
+ /// source location.
+ class DiagState {
+ llvm::DenseMap<unsigned, DiagnosticMapping> DiagMap;
+
+ public:
+ // "Global" configuration state that can actually vary between modules.
+
+ // Ignore all warnings: -w
+ unsigned IgnoreAllWarnings : 1;
+
+ // Enable all warnings.
+ unsigned EnableAllWarnings : 1;
+
+ // Treat warnings like errors.
+ unsigned WarningsAsErrors : 1;
+
+ // Treat errors like fatal errors.
+ unsigned ErrorsAsFatal : 1;
+
+ // Suppress warnings in system headers.
+ unsigned SuppressSystemWarnings : 1;
+
+ // Map extensions to warnings or errors?
+ diag::Severity ExtBehavior = diag::Severity::Ignored;
+
+ DiagState()
+ : IgnoreAllWarnings(false), EnableAllWarnings(false),
+ WarningsAsErrors(false), ErrorsAsFatal(false),
+ SuppressSystemWarnings(false) {}
+
+ using iterator = llvm::DenseMap<unsigned, DiagnosticMapping>::iterator;
+ using const_iterator =
+ llvm::DenseMap<unsigned, DiagnosticMapping>::const_iterator;
+
+ void setMapping(diag::kind Diag, DiagnosticMapping Info) {
+ DiagMap[Diag] = Info;
+ }
+
+ DiagnosticMapping lookupMapping(diag::kind Diag) const {
+ return DiagMap.lookup(Diag);
+ }
+
+ DiagnosticMapping &getOrAddMapping(diag::kind Diag);
+
+ const_iterator begin() const { return DiagMap.begin(); }
+ const_iterator end() const { return DiagMap.end(); }
+ };
+
+ /// Keeps and automatically disposes all DiagStates that we create.
+ std::list<DiagState> DiagStates;
+
+ /// A mapping from files to the diagnostic states for those files. Lazily
+ /// built on demand for files in which the diagnostic state has not changed.
+ class DiagStateMap {
+ public:
+ /// Add an initial diagnostic state.
+ void appendFirst(DiagState *State);
+
+ /// Add a new latest state point.
+ void append(SourceManager &SrcMgr, SourceLocation Loc, DiagState *State);
+
+ /// Look up the diagnostic state at a given source location.
+ DiagState *lookup(SourceManager &SrcMgr, SourceLocation Loc) const;
+
+ /// Determine whether this map is empty.
+ bool empty() const { return Files.empty(); }
+
+ /// Clear out this map.
+ void clear() {
+ Files.clear();
+ FirstDiagState = CurDiagState = nullptr;
+ CurDiagStateLoc = SourceLocation();
+ }
+
+ /// Produce a debugging dump of the diagnostic state.
+ LLVM_DUMP_METHOD void dump(SourceManager &SrcMgr,
+ StringRef DiagName = StringRef()) const;
+
+ /// Grab the most-recently-added state point.
+ DiagState *getCurDiagState() const { return CurDiagState; }
+
+ /// Get the location at which a diagnostic state was last added.
+ SourceLocation getCurDiagStateLoc() const { return CurDiagStateLoc; }
+
+ private:
+ friend class ASTReader;
+ friend class ASTWriter;
+
+ /// Represents a point in source where the diagnostic state was
+ /// modified because of a pragma.
+ ///
+ /// 'Loc' can be null if the point represents the diagnostic state
+ /// modifications done through the command-line.
+ struct DiagStatePoint {
+ DiagState *State;
+ unsigned Offset;
+
+ DiagStatePoint(DiagState *State, unsigned Offset)
+ : State(State), Offset(Offset) {}
+ };
+
+ /// Description of the diagnostic states and state transitions for a
+ /// particular FileID.
+ struct File {
+ /// The diagnostic state for the parent file. This is strictly redundant,
+ /// as looking up the DecomposedIncludedLoc for the FileID in the Files
+ /// map would give us this, but we cache it here for performance.
+ File *Parent = nullptr;
+
+ /// The offset of this file within its parent.
+ unsigned ParentOffset = 0;
+
+ /// Whether this file has any local (not imported from an AST file)
+ /// diagnostic state transitions.
+ bool HasLocalTransitions = false;
+
+ /// The points within the file where the state changes. There will always
+ /// be at least one of these (the state on entry to the file).
+ llvm::SmallVector<DiagStatePoint, 4> StateTransitions;
+
+ DiagState *lookup(unsigned Offset) const;
+ };
+
+ /// The diagnostic states for each file.
+ mutable std::map<FileID, File> Files;
+
+ /// The initial diagnostic state.
+ DiagState *FirstDiagState;
+
+ /// The current diagnostic state.
+ DiagState *CurDiagState;
+
+ /// The location at which the current diagnostic state was established.
+ SourceLocation CurDiagStateLoc;
+
+ /// Get the diagnostic state information for a file.
+ File *getFile(SourceManager &SrcMgr, FileID ID) const;
+ };
+
+ DiagStateMap DiagStatesByLoc;
+
+ /// Keeps the DiagState that was active during each diagnostic 'push'
+ /// so we can get back at it when we 'pop'.
+ std::vector<DiagState *> DiagStateOnPushStack;
+
+ DiagState *GetCurDiagState() const {
+ return DiagStatesByLoc.getCurDiagState();
+ }
+
+ void PushDiagStatePoint(DiagState *State, SourceLocation L);
+
+ /// Finds the DiagStatePoint that contains the diagnostic state of
+ /// the given source location.
+ DiagState *GetDiagStateForLoc(SourceLocation Loc) const {
+ return SourceMgr ? DiagStatesByLoc.lookup(*SourceMgr, Loc)
+ : DiagStatesByLoc.getCurDiagState();
+ }
+
+ /// Sticky flag set to \c true when an error is emitted.
+ bool ErrorOccurred;
+
+ /// Sticky flag set to \c true when an "uncompilable error" occurs.
+ /// I.e. an error that was not upgraded from a warning by -Werror.
+ bool UncompilableErrorOccurred;
+
+ /// Sticky flag set to \c true when a fatal error is emitted.
+ bool FatalErrorOccurred;
+
+ /// Indicates that an unrecoverable error has occurred.
+ bool UnrecoverableErrorOccurred;
+
+ /// Counts for DiagnosticErrorTrap to check whether an error occurred
+ /// during a parsing section, e.g. during parsing a function.
+ unsigned TrapNumErrorsOccurred;
+ unsigned TrapNumUnrecoverableErrorsOccurred;
+
+ /// The level of the last diagnostic emitted.
+ ///
+ /// This is used to emit continuation diagnostics with the same level as the
+ /// diagnostic that they follow.
+ DiagnosticIDs::Level LastDiagLevel;
+
+ /// Number of warnings reported
+ unsigned NumWarnings;
+
+ /// Number of errors reported
+ unsigned NumErrors;
+
+ /// A function pointer that converts an opaque diagnostic
+ /// argument to a strings.
+ ///
+ /// This takes the modifiers and argument that was present in the diagnostic.
+ ///
+ /// The PrevArgs array indicates the previous arguments formatted for this
+ /// diagnostic. Implementations of this function can use this information to
+ /// avoid redundancy across arguments.
+ ///
+ /// This is a hack to avoid a layering violation between libbasic and libsema.
+ using ArgToStringFnTy = void (*)(
+ ArgumentKind Kind, intptr_t Val,
+ StringRef Modifier, StringRef Argument,
+ ArrayRef<ArgumentValue> PrevArgs,
+ SmallVectorImpl<char> &Output,
+ void *Cookie,
+ ArrayRef<intptr_t> QualTypeVals);
+
+ void *ArgToStringCookie = nullptr;
+ ArgToStringFnTy ArgToStringFn;
+
+ /// ID of the "delayed" diagnostic, which is a (typically
+ /// fatal) diagnostic that had to be delayed because it was found
+ /// while emitting another diagnostic.
+ unsigned DelayedDiagID;
+
+ /// First string argument for the delayed diagnostic.
+ std::string DelayedDiagArg1;
+
+ /// Second string argument for the delayed diagnostic.
+ std::string DelayedDiagArg2;
+
+ /// Optional flag value.
+ ///
+ /// Some flags accept values, for instance: -Wframe-larger-than=<value> and
+ /// -Rpass=<value>. The content of this string is emitted after the flag name
+ /// and '='.
+ std::string FlagValue;
+
+public:
+ explicit DiagnosticsEngine(IntrusiveRefCntPtr<DiagnosticIDs> Diags,
+ IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts,
+ DiagnosticConsumer *client = nullptr,
+ bool ShouldOwnClient = true);
+ DiagnosticsEngine(const DiagnosticsEngine &) = delete;
+ DiagnosticsEngine &operator=(const DiagnosticsEngine &) = delete;
+ ~DiagnosticsEngine();
+
+ LLVM_DUMP_METHOD void dump() const;
+ LLVM_DUMP_METHOD void dump(StringRef DiagName) const;
+
+ const IntrusiveRefCntPtr<DiagnosticIDs> &getDiagnosticIDs() const {
+ return Diags;
+ }
+
+ /// Retrieve the diagnostic options.
+ DiagnosticOptions &getDiagnosticOptions() const { return *DiagOpts; }
+
+ using diag_mapping_range = llvm::iterator_range<DiagState::const_iterator>;
+
+ /// Get the current set of diagnostic mappings.
+ diag_mapping_range getDiagnosticMappings() const {
+ const DiagState &DS = *GetCurDiagState();
+ return diag_mapping_range(DS.begin(), DS.end());
+ }
+
+ DiagnosticConsumer *getClient() { return Client; }
+ const DiagnosticConsumer *getClient() const { return Client; }
+
+ /// Determine whether this \c DiagnosticsEngine object own its client.
+ bool ownsClient() const { return Owner != nullptr; }
+
+ /// Return the current diagnostic client along with ownership of that
+ /// client.
+ std::unique_ptr<DiagnosticConsumer> takeClient() { return std::move(Owner); }
+
+ bool hasSourceManager() const { return SourceMgr != nullptr; }
+
+ SourceManager &getSourceManager() const {
+ assert(SourceMgr && "SourceManager not set!");
+ return *SourceMgr;
+ }
+
+ void setSourceManager(SourceManager *SrcMgr) {
+ assert(DiagStatesByLoc.empty() &&
+ "Leftover diag state from a different SourceManager.");
+ SourceMgr = SrcMgr;
+ }
+
+ //===--------------------------------------------------------------------===//
+ // DiagnosticsEngine characterization methods, used by a client to customize
+ // how diagnostics are emitted.
+ //
+
+ /// Copies the current DiagMappings and pushes the new copy
+ /// onto the top of the stack.
+ void pushMappings(SourceLocation Loc);
+
+ /// Pops the current DiagMappings off the top of the stack,
+ /// causing the new top of the stack to be the active mappings.
+ ///
+ /// \returns \c true if the pop happens, \c false if there is only one
+ /// DiagMapping on the stack.
+ bool popMappings(SourceLocation Loc);
+
+ /// Set the diagnostic client associated with this diagnostic object.
+ ///
+ /// \param ShouldOwnClient true if the diagnostic object should take
+ /// ownership of \c client.
+ void setClient(DiagnosticConsumer *client, bool ShouldOwnClient = true);
+
+ /// Specify a limit for the number of errors we should
+ /// emit before giving up.
+ ///
+ /// Zero disables the limit.
+ void setErrorLimit(unsigned Limit) { ErrorLimit = Limit; }
+
+ /// Specify the maximum number of template instantiation
+ /// notes to emit along with a given diagnostic.
+ void setTemplateBacktraceLimit(unsigned Limit) {
+ TemplateBacktraceLimit = Limit;
+ }
+
+ /// Retrieve the maximum number of template instantiation
+ /// notes to emit along with a given diagnostic.
+ unsigned getTemplateBacktraceLimit() const {
+ return TemplateBacktraceLimit;
+ }
+
+ /// Specify the maximum number of constexpr evaluation
+ /// notes to emit along with a given diagnostic.
+ void setConstexprBacktraceLimit(unsigned Limit) {
+ ConstexprBacktraceLimit = Limit;
+ }
+
+ /// Retrieve the maximum number of constexpr evaluation
+ /// notes to emit along with a given diagnostic.
+ unsigned getConstexprBacktraceLimit() const {
+ return ConstexprBacktraceLimit;
+ }
+
+ /// When set to true, any unmapped warnings are ignored.
+ ///
+ /// If this and WarningsAsErrors are both set, then this one wins.
+ void setIgnoreAllWarnings(bool Val) {
+ GetCurDiagState()->IgnoreAllWarnings = Val;
+ }
+ bool getIgnoreAllWarnings() const {
+ return GetCurDiagState()->IgnoreAllWarnings;
+ }
+
+ /// When set to true, any unmapped ignored warnings are no longer
+ /// ignored.
+ ///
+ /// If this and IgnoreAllWarnings are both set, then that one wins.
+ void setEnableAllWarnings(bool Val) {
+ GetCurDiagState()->EnableAllWarnings = Val;
+ }
+ bool getEnableAllWarnings() const {
+ return GetCurDiagState()->EnableAllWarnings;
+ }
+
+ /// When set to true, any warnings reported are issued as errors.
+ void setWarningsAsErrors(bool Val) {
+ GetCurDiagState()->WarningsAsErrors = Val;
+ }
+ bool getWarningsAsErrors() const {
+ return GetCurDiagState()->WarningsAsErrors;
+ }
+
+ /// When set to true, any error reported is made a fatal error.
+ void setErrorsAsFatal(bool Val) { GetCurDiagState()->ErrorsAsFatal = Val; }
+ bool getErrorsAsFatal() const { return GetCurDiagState()->ErrorsAsFatal; }
+
+ /// When set to true (the default), suppress further diagnostics after
+ /// a fatal error.
+ void setSuppressAfterFatalError(bool Val) { SuppressAfterFatalError = Val; }
+
+ /// When set to true mask warnings that come from system headers.
+ void setSuppressSystemWarnings(bool Val) {
+ GetCurDiagState()->SuppressSystemWarnings = Val;
+ }
+ bool getSuppressSystemWarnings() const {
+ return GetCurDiagState()->SuppressSystemWarnings;
+ }
+
+ /// Suppress all diagnostics, to silence the front end when we
+ /// know that we don't want any more diagnostics to be passed along to the
+ /// client
+ void setSuppressAllDiagnostics(bool Val = true) {
+ SuppressAllDiagnostics = Val;
+ }
+ bool getSuppressAllDiagnostics() const { return SuppressAllDiagnostics; }
+
+ /// Set type eliding, to skip outputting same types occurring in
+ /// template types.
+ void setElideType(bool Val = true) { ElideType = Val; }
+ bool getElideType() { return ElideType; }
+
+ /// Set tree printing, to outputting the template difference in a
+ /// tree format.
+ void setPrintTemplateTree(bool Val = false) { PrintTemplateTree = Val; }
+ bool getPrintTemplateTree() { return PrintTemplateTree; }
+
+ /// Set color printing, so the type diffing will inject color markers
+ /// into the output.
+ void setShowColors(bool Val = false) { ShowColors = Val; }
+ bool getShowColors() { return ShowColors; }
+
+ /// Specify which overload candidates to show when overload resolution
+ /// fails.
+ ///
+ /// By default, we show all candidates.
+ void setShowOverloads(OverloadsShown Val) {
+ ShowOverloads = Val;
+ }
+ OverloadsShown getShowOverloads() const { return ShowOverloads; }
+
+ /// Pretend that the last diagnostic issued was ignored, so any
+ /// subsequent notes will be suppressed, or restore a prior ignoring
+ /// state after ignoring some diagnostics and their notes, possibly in
+ /// the middle of another diagnostic.
+ ///
+ /// This can be used by clients who suppress diagnostics themselves.
+ void setLastDiagnosticIgnored(bool Ignored = true) {
+ if (LastDiagLevel == DiagnosticIDs::Fatal)
+ FatalErrorOccurred = true;
+ LastDiagLevel = Ignored ? DiagnosticIDs::Ignored : DiagnosticIDs::Warning;
+ }
+
+ /// Determine whether the previous diagnostic was ignored. This can
+ /// be used by clients that want to determine whether notes attached to a
+ /// diagnostic will be suppressed.
+ bool isLastDiagnosticIgnored() const {
+ return LastDiagLevel == DiagnosticIDs::Ignored;
+ }
+
+ /// Controls whether otherwise-unmapped extension diagnostics are
+ /// mapped onto ignore/warning/error.
+ ///
+ /// This corresponds to the GCC -pedantic and -pedantic-errors option.
+ void setExtensionHandlingBehavior(diag::Severity H) {
+ GetCurDiagState()->ExtBehavior = H;
+ }
+ diag::Severity getExtensionHandlingBehavior() const {
+ return GetCurDiagState()->ExtBehavior;
+ }
+
+ /// Counter bumped when an __extension__ block is/ encountered.
+ ///
+ /// When non-zero, all extension diagnostics are entirely silenced, no
+ /// matter how they are mapped.
+ void IncrementAllExtensionsSilenced() { ++AllExtensionsSilenced; }
+ void DecrementAllExtensionsSilenced() { --AllExtensionsSilenced; }
+ bool hasAllExtensionsSilenced() { return AllExtensionsSilenced != 0; }
+
+ /// This allows the client to specify that certain warnings are
+ /// ignored.
+ ///
+ /// Notes can never be mapped, errors can only be mapped to fatal, and
+ /// WARNINGs and EXTENSIONs can be mapped arbitrarily.
+ ///
+ /// \param Loc The source location that this change of diagnostic state should
+ /// take affect. It can be null if we are setting the latest state.
+ void setSeverity(diag::kind Diag, diag::Severity Map, SourceLocation Loc);
+
+ /// Change an entire diagnostic group (e.g. "unknown-pragmas") to
+ /// have the specified mapping.
+ ///
+ /// \returns true (and ignores the request) if "Group" was unknown, false
+ /// otherwise.
+ ///
+ /// \param Flavor The flavor of group to affect. -Rfoo does not affect the
+ /// state of the -Wfoo group and vice versa.
+ ///
+ /// \param Loc The source location that this change of diagnostic state should
+ /// take affect. It can be null if we are setting the state from command-line.
+ bool setSeverityForGroup(diag::Flavor Flavor, StringRef Group,
+ diag::Severity Map,
+ SourceLocation Loc = SourceLocation());
+
+ /// Set the warning-as-error flag for the given diagnostic group.
+ ///
+ /// This function always only operates on the current diagnostic state.
+ ///
+ /// \returns True if the given group is unknown, false otherwise.
+ bool setDiagnosticGroupWarningAsError(StringRef Group, bool Enabled);
+
+ /// Set the error-as-fatal flag for the given diagnostic group.
+ ///
+ /// This function always only operates on the current diagnostic state.
+ ///
+ /// \returns True if the given group is unknown, false otherwise.
+ bool setDiagnosticGroupErrorAsFatal(StringRef Group, bool Enabled);
+
+ /// Add the specified mapping to all diagnostics of the specified
+ /// flavor.
+ ///
+ /// Mainly to be used by -Wno-everything to disable all warnings but allow
+ /// subsequent -W options to enable specific warnings.
+ void setSeverityForAll(diag::Flavor Flavor, diag::Severity Map,
+ SourceLocation Loc = SourceLocation());
+
+ bool hasErrorOccurred() const { return ErrorOccurred; }
+
+ /// Errors that actually prevent compilation, not those that are
+ /// upgraded from a warning by -Werror.
+ bool hasUncompilableErrorOccurred() const {
+ return UncompilableErrorOccurred;
+ }
+ bool hasFatalErrorOccurred() const { return FatalErrorOccurred; }
+
+ /// Determine whether any kind of unrecoverable error has occurred.
+ bool hasUnrecoverableErrorOccurred() const {
+ return FatalErrorOccurred || UnrecoverableErrorOccurred;
+ }
+
+ unsigned getNumWarnings() const { return NumWarnings; }
+
+ void setNumWarnings(unsigned NumWarnings) {
+ this->NumWarnings = NumWarnings;
+ }
+
+ /// Return an ID for a diagnostic with the specified format string and
+ /// level.
+ ///
+ /// If this is the first request for this diagnostic, it is registered and
+ /// created, otherwise the existing ID is returned.
+ ///
+ /// \param FormatString A fixed diagnostic format string that will be hashed
+ /// and mapped to a unique DiagID.
+ template <unsigned N>
+ unsigned getCustomDiagID(Level L, const char (&FormatString)[N]) {
+ return Diags->getCustomDiagID((DiagnosticIDs::Level)L,
+ StringRef(FormatString, N - 1));
+ }
+
+ /// Converts a diagnostic argument (as an intptr_t) into the string
+ /// that represents it.
+ void ConvertArgToString(ArgumentKind Kind, intptr_t Val,
+ StringRef Modifier, StringRef Argument,
+ ArrayRef<ArgumentValue> PrevArgs,
+ SmallVectorImpl<char> &Output,
+ ArrayRef<intptr_t> QualTypeVals) const {
+ ArgToStringFn(Kind, Val, Modifier, Argument, PrevArgs, Output,
+ ArgToStringCookie, QualTypeVals);
+ }
+
+ void SetArgToStringFn(ArgToStringFnTy Fn, void *Cookie) {
+ ArgToStringFn = Fn;
+ ArgToStringCookie = Cookie;
+ }
+
+ /// Note that the prior diagnostic was emitted by some other
+ /// \c DiagnosticsEngine, and we may be attaching a note to that diagnostic.
+ void notePriorDiagnosticFrom(const DiagnosticsEngine &Other) {
+ LastDiagLevel = Other.LastDiagLevel;
+ }
+
+ /// Reset the state of the diagnostic object to its initial
+ /// configuration.
+ void Reset();
+
+ //===--------------------------------------------------------------------===//
+ // DiagnosticsEngine classification and reporting interfaces.
+ //
+
+ /// Determine whether the diagnostic is known to be ignored.
+ ///
+ /// This can be used to opportunistically avoid expensive checks when it's
+ /// known for certain that the diagnostic has been suppressed at the
+ /// specified location \p Loc.
+ ///
+ /// \param Loc The source location we are interested in finding out the
+ /// diagnostic state. Can be null in order to query the latest state.
+ bool isIgnored(unsigned DiagID, SourceLocation Loc) const {
+ return Diags->getDiagnosticSeverity(DiagID, Loc, *this) ==
+ diag::Severity::Ignored;
+ }
+
+ /// Based on the way the client configured the DiagnosticsEngine
+ /// object, classify the specified diagnostic ID into a Level, consumable by
+ /// the DiagnosticConsumer.
+ ///
+ /// To preserve invariant assumptions, this function should not be used to
+ /// influence parse or semantic analysis actions. Instead consider using
+ /// \c isIgnored().
+ ///
+ /// \param Loc The source location we are interested in finding out the
+ /// diagnostic state. Can be null in order to query the latest state.
+ Level getDiagnosticLevel(unsigned DiagID, SourceLocation Loc) const {
+ return (Level)Diags->getDiagnosticLevel(DiagID, Loc, *this);
+ }
+
+ /// Issue the message to the client.
+ ///
+ /// This actually returns an instance of DiagnosticBuilder which emits the
+ /// diagnostics (through @c ProcessDiag) when it is destroyed.
+ ///
+ /// \param DiagID A member of the @c diag::kind enum.
+ /// \param Loc Represents the source location associated with the diagnostic,
+ /// which can be an invalid location if no position information is available.
+ inline DiagnosticBuilder Report(SourceLocation Loc, unsigned DiagID);
+ inline DiagnosticBuilder Report(unsigned DiagID);
+
+ void Report(const StoredDiagnostic &storedDiag);
+
+ /// Determine whethere there is already a diagnostic in flight.
+ bool isDiagnosticInFlight() const {
+ return CurDiagID != std::numeric_limits<unsigned>::max();
+ }
+
+ /// Set the "delayed" diagnostic that will be emitted once
+ /// the current diagnostic completes.
+ ///
+ /// If a diagnostic is already in-flight but the front end must
+ /// report a problem (e.g., with an inconsistent file system
+ /// state), this routine sets a "delayed" diagnostic that will be
+ /// emitted after the current diagnostic completes. This should
+ /// only be used for fatal errors detected at inconvenient
+ /// times. If emitting a delayed diagnostic causes a second delayed
+ /// diagnostic to be introduced, that second delayed diagnostic
+ /// will be ignored.
+ ///
+ /// \param DiagID The ID of the diagnostic being delayed.
+ ///
+ /// \param Arg1 A string argument that will be provided to the
+ /// diagnostic. A copy of this string will be stored in the
+ /// DiagnosticsEngine object itself.
+ ///
+ /// \param Arg2 A string argument that will be provided to the
+ /// diagnostic. A copy of this string will be stored in the
+ /// DiagnosticsEngine object itself.
+ void SetDelayedDiagnostic(unsigned DiagID, StringRef Arg1 = "",
+ StringRef Arg2 = "");
+
+ /// Clear out the current diagnostic.
+ void Clear() { CurDiagID = std::numeric_limits<unsigned>::max(); }
+
+ /// Return the value associated with this diagnostic flag.
+ StringRef getFlagValue() const { return FlagValue; }
+
+private:
+ // This is private state used by DiagnosticBuilder. We put it here instead of
+ // in DiagnosticBuilder in order to keep DiagnosticBuilder a small lightweight
+ // object. This implementation choice means that we can only have one
+ // diagnostic "in flight" at a time, but this seems to be a reasonable
+ // tradeoff to keep these objects small. Assertions verify that only one
+ // diagnostic is in flight at a time.
+ friend class Diagnostic;
+ friend class DiagnosticBuilder;
+ friend class DiagnosticErrorTrap;
+ friend class DiagnosticIDs;
+ friend class PartialDiagnostic;
+
+ /// Report the delayed diagnostic.
+ void ReportDelayed();
+
+ /// The location of the current diagnostic that is in flight.
+ SourceLocation CurDiagLoc;
+
+ /// The ID of the current diagnostic that is in flight.
+ ///
+ /// This is set to std::numeric_limits<unsigned>::max() when there is no
+ /// diagnostic in flight.
+ unsigned CurDiagID;
+
+ enum {
+ /// The maximum number of arguments we can hold.
+ ///
+ /// We currently only support up to 10 arguments (%0-%9). A single
+ /// diagnostic with more than that almost certainly has to be simplified
+ /// anyway.
+ MaxArguments = 10,
+ };
+
+ /// The number of entries in Arguments.
+ signed char NumDiagArgs;
+
+ /// Specifies whether an argument is in DiagArgumentsStr or
+ /// in DiagArguments.
+ ///
+ /// This is an array of ArgumentKind::ArgumentKind enum values, one for each
+ /// argument.
+ unsigned char DiagArgumentsKind[MaxArguments];
+
+ /// Holds the values of each string argument for the current
+ /// diagnostic.
+ ///
+ /// This is only used when the corresponding ArgumentKind is ak_std_string.
+ std::string DiagArgumentsStr[MaxArguments];
+
+ /// The values for the various substitution positions.
+ ///
+ /// This is used when the argument is not an std::string. The specific
+ /// value is mangled into an intptr_t and the interpretation depends on
+ /// exactly what sort of argument kind it is.
+ intptr_t DiagArgumentsVal[MaxArguments];
+
+ /// The list of ranges added to this diagnostic.
+ SmallVector<CharSourceRange, 8> DiagRanges;
+
+ /// If valid, provides a hint with some code to insert, remove,
+ /// or modify at a particular position.
+ SmallVector<FixItHint, 8> DiagFixItHints;
+
+ DiagnosticMapping makeUserMapping(diag::Severity Map, SourceLocation L) {
+ bool isPragma = L.isValid();
+ DiagnosticMapping Mapping =
+ DiagnosticMapping::Make(Map, /*IsUser=*/true, isPragma);
+
+ // If this is a pragma mapping, then set the diagnostic mapping flags so
+ // that we override command line options.
+ if (isPragma) {
+ Mapping.setNoWarningAsError(true);
+ Mapping.setNoErrorAsFatal(true);
+ }
+
+ return Mapping;
+ }
+
+ /// Used to report a diagnostic that is finally fully formed.
+ ///
+ /// \returns true if the diagnostic was emitted, false if it was suppressed.
+ bool ProcessDiag() {
+ return Diags->ProcessDiag(*this);
+ }
+
+ /// @name Diagnostic Emission
+ /// @{
+protected:
+ friend class ASTReader;
+ friend class ASTWriter;
+
+ // Sema requires access to the following functions because the current design
+ // of SFINAE requires it to use its own SemaDiagnosticBuilder, which needs to
+ // access us directly to ensure we minimize the emitted code for the common
+ // Sema::Diag() patterns.
+ friend class Sema;
+
+ /// Emit the current diagnostic and clear the diagnostic state.
+ ///
+ /// \param Force Emit the diagnostic regardless of suppression settings.
+ bool EmitCurrentDiagnostic(bool Force = false);
+
+ unsigned getCurrentDiagID() const { return CurDiagID; }
+
+ SourceLocation getCurrentDiagLoc() const { return CurDiagLoc; }
+
+ /// @}
+};
+
+/// RAII class that determines when any errors have occurred
+/// between the time the instance was created and the time it was
+/// queried.
+class DiagnosticErrorTrap {
+ DiagnosticsEngine &Diag;
+ unsigned NumErrors;
+ unsigned NumUnrecoverableErrors;
+
+public:
+ explicit DiagnosticErrorTrap(DiagnosticsEngine &Diag)
+ : Diag(Diag) { reset(); }
+
+ /// Determine whether any errors have occurred since this
+ /// object instance was created.
+ bool hasErrorOccurred() const {
+ return Diag.TrapNumErrorsOccurred > NumErrors;
+ }
+
+ /// Determine whether any unrecoverable errors have occurred since this
+ /// object instance was created.
+ bool hasUnrecoverableErrorOccurred() const {
+ return Diag.TrapNumUnrecoverableErrorsOccurred > NumUnrecoverableErrors;
+ }
+
+ /// Set to initial state of "no errors occurred".
+ void reset() {
+ NumErrors = Diag.TrapNumErrorsOccurred;
+ NumUnrecoverableErrors = Diag.TrapNumUnrecoverableErrorsOccurred;
+ }
+};
+
+//===----------------------------------------------------------------------===//
+// DiagnosticBuilder
+//===----------------------------------------------------------------------===//
+
+/// A little helper class used to produce diagnostics.
+///
+/// This is constructed by the DiagnosticsEngine::Report method, and
+/// allows insertion of extra information (arguments and source ranges) into
+/// the currently "in flight" diagnostic. When the temporary for the builder
+/// is destroyed, the diagnostic is issued.
+///
+/// Note that many of these will be created as temporary objects (many call
+/// sites), so we want them to be small and we never want their address taken.
+/// This ensures that compilers with somewhat reasonable optimizers will promote
+/// the common fields to registers, eliminating increments of the NumArgs field,
+/// for example.
+class DiagnosticBuilder {
+ friend class DiagnosticsEngine;
+ friend class PartialDiagnostic;
+
+ mutable DiagnosticsEngine *DiagObj = nullptr;
+ mutable unsigned NumArgs = 0;
+
+ /// Status variable indicating if this diagnostic is still active.
+ ///
+ // NOTE: This field is redundant with DiagObj (IsActive iff (DiagObj == 0)),
+ // but LLVM is not currently smart enough to eliminate the null check that
+ // Emit() would end up with if we used that as our status variable.
+ mutable bool IsActive = false;
+
+ /// Flag indicating that this diagnostic is being emitted via a
+ /// call to ForceEmit.
+ mutable bool IsForceEmit = false;
+
+ DiagnosticBuilder() = default;
+
+ explicit DiagnosticBuilder(DiagnosticsEngine *diagObj)
+ : DiagObj(diagObj), IsActive(true) {
+ assert(diagObj && "DiagnosticBuilder requires a valid DiagnosticsEngine!");
+ diagObj->DiagRanges.clear();
+ diagObj->DiagFixItHints.clear();
+ }
+
+protected:
+ void FlushCounts() {
+ DiagObj->NumDiagArgs = NumArgs;
+ }
+
+ /// Clear out the current diagnostic.
+ void Clear() const {
+ DiagObj = nullptr;
+ IsActive = false;
+ IsForceEmit = false;
+ }
+
+ /// Determine whether this diagnostic is still active.
+ bool isActive() const { return IsActive; }
+
+ /// Force the diagnostic builder to emit the diagnostic now.
+ ///
+ /// Once this function has been called, the DiagnosticBuilder object
+ /// should not be used again before it is destroyed.
+ ///
+ /// \returns true if a diagnostic was emitted, false if the
+ /// diagnostic was suppressed.
+ bool Emit() {
+ // If this diagnostic is inactive, then its soul was stolen by the copy ctor
+ // (or by a subclass, as in SemaDiagnosticBuilder).
+ if (!isActive()) return false;
+
+ // When emitting diagnostics, we set the final argument count into
+ // the DiagnosticsEngine object.
+ FlushCounts();
+
+ // Process the diagnostic.
+ bool Result = DiagObj->EmitCurrentDiagnostic(IsForceEmit);
+
+ // This diagnostic is dead.
+ Clear();
+
+ return Result;
+ }
+
+public:
+ /// Copy constructor. When copied, this "takes" the diagnostic info from the
+ /// input and neuters it.
+ DiagnosticBuilder(const DiagnosticBuilder &D) {
+ DiagObj = D.DiagObj;
+ IsActive = D.IsActive;
+ IsForceEmit = D.IsForceEmit;
+ D.Clear();
+ NumArgs = D.NumArgs;
+ }
+
+ DiagnosticBuilder &operator=(const DiagnosticBuilder &) = delete;
+
+ /// Emits the diagnostic.
+ ~DiagnosticBuilder() {
+ Emit();
+ }
+
+ /// Retrieve an empty diagnostic builder.
+ static DiagnosticBuilder getEmpty() {
+ return {};
+ }
+
+ /// Forces the diagnostic to be emitted.
+ const DiagnosticBuilder &setForceEmit() const {
+ IsForceEmit = true;
+ return *this;
+ }
+
+ /// Conversion of DiagnosticBuilder to bool always returns \c true.
+ ///
+ /// This allows is to be used in boolean error contexts (where \c true is
+ /// used to indicate that an error has occurred), like:
+ /// \code
+ /// return Diag(...);
+ /// \endcode
+ operator bool() const { return true; }
+
+ void AddString(StringRef S) const {
+ assert(isActive() && "Clients must not add to cleared diagnostic!");
+ assert(NumArgs < DiagnosticsEngine::MaxArguments &&
+ "Too many arguments to diagnostic!");
+ DiagObj->DiagArgumentsKind[NumArgs] = DiagnosticsEngine::ak_std_string;
+ DiagObj->DiagArgumentsStr[NumArgs++] = S;
+ }
+
+ void AddTaggedVal(intptr_t V, DiagnosticsEngine::ArgumentKind Kind) const {
+ assert(isActive() && "Clients must not add to cleared diagnostic!");
+ assert(NumArgs < DiagnosticsEngine::MaxArguments &&
+ "Too many arguments to diagnostic!");
+ DiagObj->DiagArgumentsKind[NumArgs] = Kind;
+ DiagObj->DiagArgumentsVal[NumArgs++] = V;
+ }
+
+ void AddSourceRange(const CharSourceRange &R) const {
+ assert(isActive() && "Clients must not add to cleared diagnostic!");
+ DiagObj->DiagRanges.push_back(R);
+ }
+
+ void AddFixItHint(const FixItHint &Hint) const {
+ assert(isActive() && "Clients must not add to cleared diagnostic!");
+ if (!Hint.isNull())
+ DiagObj->DiagFixItHints.push_back(Hint);
+ }
+
+ void addFlagValue(StringRef V) const { DiagObj->FlagValue = V; }
+};
+
+struct AddFlagValue {
+ StringRef Val;
+
+ explicit AddFlagValue(StringRef V) : Val(V) {}
+};
+
+/// Register a value for the flag in the current diagnostic. This
+/// value will be shown as the suffix "=value" after the flag name. It is
+/// useful in cases where the diagnostic flag accepts values (e.g.,
+/// -Rpass or -Wframe-larger-than).
+inline const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB,
+ const AddFlagValue V) {
+ DB.addFlagValue(V.Val);
+ return DB;
+}
+
+inline const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB,
+ StringRef S) {
+ DB.AddString(S);
+ return DB;
+}
+
+inline const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB,
+ const char *Str) {
+ DB.AddTaggedVal(reinterpret_cast<intptr_t>(Str),
+ DiagnosticsEngine::ak_c_string);
+ return DB;
+}
+
+inline const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB, int I) {
+ DB.AddTaggedVal(I, DiagnosticsEngine::ak_sint);
+ return DB;
+}
+
+// We use enable_if here to prevent that this overload is selected for
+// pointers or other arguments that are implicitly convertible to bool.
+template <typename T>
+inline
+typename std::enable_if<std::is_same<T, bool>::value,
+ const DiagnosticBuilder &>::type
+operator<<(const DiagnosticBuilder &DB, T I) {
+ DB.AddTaggedVal(I, DiagnosticsEngine::ak_sint);
+ return DB;
+}
+
+inline const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB,
+ unsigned I) {
+ DB.AddTaggedVal(I, DiagnosticsEngine::ak_uint);
+ return DB;
+}
+
+inline const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB,
+ tok::TokenKind I) {
+ DB.AddTaggedVal(static_cast<unsigned>(I), DiagnosticsEngine::ak_tokenkind);
+ return DB;
+}
+
+inline const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB,
+ const IdentifierInfo *II) {
+ DB.AddTaggedVal(reinterpret_cast<intptr_t>(II),
+ DiagnosticsEngine::ak_identifierinfo);
+ return DB;
+}
+
+// Adds a DeclContext to the diagnostic. The enable_if template magic is here
+// so that we only match those arguments that are (statically) DeclContexts;
+// other arguments that derive from DeclContext (e.g., RecordDecls) will not
+// match.
+template <typename T>
+inline typename std::enable_if<
+ std::is_same<typename std::remove_const<T>::type, DeclContext>::value,
+ const DiagnosticBuilder &>::type
+operator<<(const DiagnosticBuilder &DB, T *DC) {
+ DB.AddTaggedVal(reinterpret_cast<intptr_t>(DC),
+ DiagnosticsEngine::ak_declcontext);
+ return DB;
+}
+
+inline const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB,
+ SourceRange R) {
+ DB.AddSourceRange(CharSourceRange::getTokenRange(R));
+ return DB;
+}
+
+inline const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB,
+ ArrayRef<SourceRange> Ranges) {
+ for (SourceRange R : Ranges)
+ DB.AddSourceRange(CharSourceRange::getTokenRange(R));
+ return DB;
+}
+
+inline const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB,
+ const CharSourceRange &R) {
+ DB.AddSourceRange(R);
+ return DB;
+}
+
+inline const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB,
+ const FixItHint &Hint) {
+ DB.AddFixItHint(Hint);
+ return DB;
+}
+
+inline const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB,
+ ArrayRef<FixItHint> Hints) {
+ for (const FixItHint &Hint : Hints)
+ DB.AddFixItHint(Hint);
+ return DB;
+}
+
+/// A nullability kind paired with a bit indicating whether it used a
+/// context-sensitive keyword.
+using DiagNullabilityKind = std::pair<NullabilityKind, bool>;
+
+const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB,
+ DiagNullabilityKind nullability);
+
+inline DiagnosticBuilder DiagnosticsEngine::Report(SourceLocation Loc,
+ unsigned DiagID) {
+ assert(CurDiagID == std::numeric_limits<unsigned>::max() &&
+ "Multiple diagnostics in flight at once!");
+ CurDiagLoc = Loc;
+ CurDiagID = DiagID;
+ FlagValue.clear();
+ return DiagnosticBuilder(this);
+}
+
+inline DiagnosticBuilder DiagnosticsEngine::Report(unsigned DiagID) {
+ return Report(SourceLocation(), DiagID);
+}
+
+//===----------------------------------------------------------------------===//
+// Diagnostic
+//===----------------------------------------------------------------------===//
+
+/// A little helper class (which is basically a smart pointer that forwards
+/// info from DiagnosticsEngine) that allows clients to enquire about the
+/// currently in-flight diagnostic.
+class Diagnostic {
+ const DiagnosticsEngine *DiagObj;
+ StringRef StoredDiagMessage;
+
+public:
+ explicit Diagnostic(const DiagnosticsEngine *DO) : DiagObj(DO) {}
+ Diagnostic(const DiagnosticsEngine *DO, StringRef storedDiagMessage)
+ : DiagObj(DO), StoredDiagMessage(storedDiagMessage) {}
+
+ const DiagnosticsEngine *getDiags() const { return DiagObj; }
+ unsigned getID() const { return DiagObj->CurDiagID; }
+ const SourceLocation &getLocation() const { return DiagObj->CurDiagLoc; }
+ bool hasSourceManager() const { return DiagObj->hasSourceManager(); }
+ SourceManager &getSourceManager() const { return DiagObj->getSourceManager();}
+
+ unsigned getNumArgs() const { return DiagObj->NumDiagArgs; }
+
+ /// Return the kind of the specified index.
+ ///
+ /// Based on the kind of argument, the accessors below can be used to get
+ /// the value.
+ ///
+ /// \pre Idx < getNumArgs()
+ DiagnosticsEngine::ArgumentKind getArgKind(unsigned Idx) const {
+ assert(Idx < getNumArgs() && "Argument index out of range!");
+ return (DiagnosticsEngine::ArgumentKind)DiagObj->DiagArgumentsKind[Idx];
+ }
+
+ /// Return the provided argument string specified by \p Idx.
+ /// \pre getArgKind(Idx) == DiagnosticsEngine::ak_std_string
+ const std::string &getArgStdStr(unsigned Idx) const {
+ assert(getArgKind(Idx) == DiagnosticsEngine::ak_std_string &&
+ "invalid argument accessor!");
+ return DiagObj->DiagArgumentsStr[Idx];
+ }
+
+ /// Return the specified C string argument.
+ /// \pre getArgKind(Idx) == DiagnosticsEngine::ak_c_string
+ const char *getArgCStr(unsigned Idx) const {
+ assert(getArgKind(Idx) == DiagnosticsEngine::ak_c_string &&
+ "invalid argument accessor!");
+ return reinterpret_cast<const char*>(DiagObj->DiagArgumentsVal[Idx]);
+ }
+
+ /// Return the specified signed integer argument.
+ /// \pre getArgKind(Idx) == DiagnosticsEngine::ak_sint
+ int getArgSInt(unsigned Idx) const {
+ assert(getArgKind(Idx) == DiagnosticsEngine::ak_sint &&
+ "invalid argument accessor!");
+ return (int)DiagObj->DiagArgumentsVal[Idx];
+ }
+
+ /// Return the specified unsigned integer argument.
+ /// \pre getArgKind(Idx) == DiagnosticsEngine::ak_uint
+ unsigned getArgUInt(unsigned Idx) const {
+ assert(getArgKind(Idx) == DiagnosticsEngine::ak_uint &&
+ "invalid argument accessor!");
+ return (unsigned)DiagObj->DiagArgumentsVal[Idx];
+ }
+
+ /// Return the specified IdentifierInfo argument.
+ /// \pre getArgKind(Idx) == DiagnosticsEngine::ak_identifierinfo
+ const IdentifierInfo *getArgIdentifier(unsigned Idx) const {
+ assert(getArgKind(Idx) == DiagnosticsEngine::ak_identifierinfo &&
+ "invalid argument accessor!");
+ return reinterpret_cast<IdentifierInfo*>(DiagObj->DiagArgumentsVal[Idx]);
+ }
+
+ /// Return the specified non-string argument in an opaque form.
+ /// \pre getArgKind(Idx) != DiagnosticsEngine::ak_std_string
+ intptr_t getRawArg(unsigned Idx) const {
+ assert(getArgKind(Idx) != DiagnosticsEngine::ak_std_string &&
+ "invalid argument accessor!");
+ return DiagObj->DiagArgumentsVal[Idx];
+ }
+
+ /// Return the number of source ranges associated with this diagnostic.
+ unsigned getNumRanges() const {
+ return DiagObj->DiagRanges.size();
+ }
+
+ /// \pre Idx < getNumRanges()
+ const CharSourceRange &getRange(unsigned Idx) const {
+ assert(Idx < getNumRanges() && "Invalid diagnostic range index!");
+ return DiagObj->DiagRanges[Idx];
+ }
+
+ /// Return an array reference for this diagnostic's ranges.
+ ArrayRef<CharSourceRange> getRanges() const {
+ return DiagObj->DiagRanges;
+ }
+
+ unsigned getNumFixItHints() const {
+ return DiagObj->DiagFixItHints.size();
+ }
+
+ const FixItHint &getFixItHint(unsigned Idx) const {
+ assert(Idx < getNumFixItHints() && "Invalid index!");
+ return DiagObj->DiagFixItHints[Idx];
+ }
+
+ ArrayRef<FixItHint> getFixItHints() const {
+ return DiagObj->DiagFixItHints;
+ }
+
+ /// Format this diagnostic into a string, substituting the
+ /// formal arguments into the %0 slots.
+ ///
+ /// The result is appended onto the \p OutStr array.
+ void FormatDiagnostic(SmallVectorImpl<char> &OutStr) const;
+
+ /// Format the given format-string into the output buffer using the
+ /// arguments stored in this diagnostic.
+ void FormatDiagnostic(const char *DiagStr, const char *DiagEnd,
+ SmallVectorImpl<char> &OutStr) const;
+};
+
+/**
+ * Represents a diagnostic in a form that can be retained until its
+ * corresponding source manager is destroyed.
+ */
+class StoredDiagnostic {
+ unsigned ID;
+ DiagnosticsEngine::Level Level;
+ FullSourceLoc Loc;
+ std::string Message;
+ std::vector<CharSourceRange> Ranges;
+ std::vector<FixItHint> FixIts;
+
+public:
+ StoredDiagnostic() = default;
+ StoredDiagnostic(DiagnosticsEngine::Level Level, const Diagnostic &Info);
+ StoredDiagnostic(DiagnosticsEngine::Level Level, unsigned ID,
+ StringRef Message);
+ StoredDiagnostic(DiagnosticsEngine::Level Level, unsigned ID,
+ StringRef Message, FullSourceLoc Loc,
+ ArrayRef<CharSourceRange> Ranges,
+ ArrayRef<FixItHint> Fixits);
+
+ /// Evaluates true when this object stores a diagnostic.
+ explicit operator bool() const { return !Message.empty(); }
+
+ unsigned getID() const { return ID; }
+ DiagnosticsEngine::Level getLevel() const { return Level; }
+ const FullSourceLoc &getLocation() const { return Loc; }
+ StringRef getMessage() const { return Message; }
+
+ void setLocation(FullSourceLoc Loc) { this->Loc = Loc; }
+
+ using range_iterator = std::vector<CharSourceRange>::const_iterator;
+
+ range_iterator range_begin() const { return Ranges.begin(); }
+ range_iterator range_end() const { return Ranges.end(); }
+ unsigned range_size() const { return Ranges.size(); }
+
+ ArrayRef<CharSourceRange> getRanges() const {
+ return llvm::makeArrayRef(Ranges);
+ }
+
+ using fixit_iterator = std::vector<FixItHint>::const_iterator;
+
+ fixit_iterator fixit_begin() const { return FixIts.begin(); }
+ fixit_iterator fixit_end() const { return FixIts.end(); }
+ unsigned fixit_size() const { return FixIts.size(); }
+
+ ArrayRef<FixItHint> getFixIts() const {
+ return llvm::makeArrayRef(FixIts);
+ }
+};
+
+/// Abstract interface, implemented by clients of the front-end, which
+/// formats and prints fully processed diagnostics.
+class DiagnosticConsumer {
+protected:
+ unsigned NumWarnings = 0; ///< Number of warnings reported
+ unsigned NumErrors = 0; ///< Number of errors reported
+
+public:
+ DiagnosticConsumer() = default;
+ virtual ~DiagnosticConsumer();
+
+ unsigned getNumErrors() const { return NumErrors; }
+ unsigned getNumWarnings() const { return NumWarnings; }
+ virtual void clear() { NumWarnings = NumErrors = 0; }
+
+ /// Callback to inform the diagnostic client that processing
+ /// of a source file is beginning.
+ ///
+ /// Note that diagnostics may be emitted outside the processing of a source
+ /// file, for example during the parsing of command line options. However,
+ /// diagnostics with source range information are required to only be emitted
+ /// in between BeginSourceFile() and EndSourceFile().
+ ///
+ /// \param LangOpts The language options for the source file being processed.
+ /// \param PP The preprocessor object being used for the source; this is
+ /// optional, e.g., it may not be present when processing AST source files.
+ virtual void BeginSourceFile(const LangOptions &LangOpts,
+ const Preprocessor *PP = nullptr) {}
+
+ /// Callback to inform the diagnostic client that processing
+ /// of a source file has ended.
+ ///
+ /// The diagnostic client should assume that any objects made available via
+ /// BeginSourceFile() are inaccessible.
+ virtual void EndSourceFile() {}
+
+ /// Callback to inform the diagnostic client that processing of all
+ /// source files has ended.
+ virtual void finish() {}
+
+ /// Indicates whether the diagnostics handled by this
+ /// DiagnosticConsumer should be included in the number of diagnostics
+ /// reported by DiagnosticsEngine.
+ ///
+ /// The default implementation returns true.
+ virtual bool IncludeInDiagnosticCounts() const;
+
+ /// Handle this diagnostic, reporting it to the user or
+ /// capturing it to a log as needed.
+ ///
+ /// The default implementation just keeps track of the total number of
+ /// warnings and errors.
+ virtual void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel,
+ const Diagnostic &Info);
+};
+
+/// A diagnostic client that ignores all diagnostics.
+class IgnoringDiagConsumer : public DiagnosticConsumer {
+ virtual void anchor();
+
+ void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel,
+ const Diagnostic &Info) override {
+ // Just ignore it.
+ }
+};
+
+/// Diagnostic consumer that forwards diagnostics along to an
+/// existing, already-initialized diagnostic consumer.
+///
+class ForwardingDiagnosticConsumer : public DiagnosticConsumer {
+ DiagnosticConsumer &Target;
+
+public:
+ ForwardingDiagnosticConsumer(DiagnosticConsumer &Target) : Target(Target) {}
+ ~ForwardingDiagnosticConsumer() override;
+
+ void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel,
+ const Diagnostic &Info) override;
+ void clear() override;
+
+ bool IncludeInDiagnosticCounts() const override;
+};
+
+// Struct used for sending info about how a type should be printed.
+struct TemplateDiffTypes {
+ intptr_t FromType;
+ intptr_t ToType;
+ unsigned PrintTree : 1;
+ unsigned PrintFromType : 1;
+ unsigned ElideType : 1;
+ unsigned ShowColors : 1;
+
+ // The printer sets this variable to true if the template diff was used.
+ unsigned TemplateDiffUsed : 1;
+};
+
+/// Special character that the diagnostic printer will use to toggle the bold
+/// attribute. The character itself will be not be printed.
+const char ToggleHighlight = 127;
+
+/// ProcessWarningOptions - Initialize the diagnostic client and process the
+/// warning options specified on the command line.
+void ProcessWarningOptions(DiagnosticsEngine &Diags,
+ const DiagnosticOptions &Opts,
+ bool ReportDiags = true);
+
+} // namespace clang
+
+#endif // LLVM_CLANG_BASIC_DIAGNOSTIC_H
diff --git a/clang-r353983/include/clang/Basic/DiagnosticAST.h b/clang-r353983/include/clang/Basic/DiagnosticAST.h
new file mode 100644
index 00000000..afe5f62e
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/DiagnosticAST.h
@@ -0,0 +1,28 @@
+//===--- DiagnosticAST.h - Diagnostics for the AST library ------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_DIAGNOSTICAST_H
+#define LLVM_CLANG_BASIC_DIAGNOSTICAST_H
+
+#include "clang/Basic/Diagnostic.h"
+
+namespace clang {
+namespace diag {
+enum {
+#define DIAG(ENUM, FLAGS, DEFAULT_MAPPING, DESC, GROUP, SFINAE, NOWERROR, \
+ SHOWINSYSHEADER, CATEGORY) \
+ ENUM,
+#define ASTSTART
+#include "clang/Basic/DiagnosticASTKinds.inc"
+#undef DIAG
+ NUM_BUILTIN_AST_DIAGNOSTICS
+};
+} // end namespace diag
+} // end namespace clang
+
+#endif // LLVM_CLANG_BASIC_DIAGNOSTICAST_H
diff --git a/clang-r353983/include/clang/Basic/DiagnosticASTKinds.inc b/clang-r353983/include/clang/Basic/DiagnosticASTKinds.inc
new file mode 100644
index 00000000..bb6dc262
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/DiagnosticASTKinds.inc
@@ -0,0 +1,131 @@
+#ifdef ASTSTART
+__ASTSTART = DIAG_START_AST,
+#undef ASTSTART
+#endif
+
+DIAG(err_asm_empty_symbolic_operand_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "empty symbolic operand name in inline assembly string", 0, SFINAE_SubstitutionFailure, false, true, 12)
+DIAG(err_asm_invalid_escape, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid %% escape in inline assembly string", 0, SFINAE_SubstitutionFailure, false, true, 12)
+DIAG(err_asm_invalid_operand_number, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid operand number in inline asm string", 0, SFINAE_SubstitutionFailure, false, true, 12)
+DIAG(err_asm_unknown_symbolic_operand_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "unknown symbolic operand name in inline assembly string", 0, SFINAE_SubstitutionFailure, false, true, 12)
+DIAG(err_asm_unterminated_symbolic_operand_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "unterminated symbolic operand name in inline assembly string", 0, SFINAE_SubstitutionFailure, false, true, 12)
+DIAG(err_odr_different_num_template_parameters, CLASS_ERROR, (unsigned)diag::Severity::Error, "template parameter lists have a different number of parameters (%0 vs %1)", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_odr_different_template_parameter_kind, CLASS_ERROR, (unsigned)diag::Severity::Error, "template parameter has different kinds in different translation units", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_odr_field_type_inconsistent, CLASS_ERROR, (unsigned)diag::Severity::Error, "field %0 declared with incompatible types in different translation units (%1 vs. %2)", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_odr_function_type_inconsistent, CLASS_ERROR, (unsigned)diag::Severity::Error, "external function %0 declared with incompatible types in different translation units (%1 vs. %2)", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_odr_ivar_type_inconsistent, CLASS_ERROR, (unsigned)diag::Severity::Error, "instance variable %0 declared with incompatible types in different translation units (%1 vs. %2)", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_odr_non_type_parameter_type_inconsistent, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-type template parameter declared with incompatible types in different translation units (%0 vs. %1)", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_odr_objc_method_num_params_inconsistent, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{class|instance}0 method %1 has a different number of parameters in different translation units (%2 vs. %3)", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_odr_objc_method_param_type_inconsistent, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{class|instance}0 method %1 has a parameter with a different types in different translation units (%2 vs. %3)", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_odr_objc_method_result_type_inconsistent, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{class|instance}0 method %1 has incompatible result types in different translation units (%2 vs. %3)", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_odr_objc_method_variadic_inconsistent, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{class|instance}0 method %1 is variadic in one translation unit and not variadic in another", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_odr_objc_property_impl_kind_inconsistent, CLASS_ERROR, (unsigned)diag::Severity::Error, "property %0 is implemented with %select{@synthesize|@dynamic}1 in one translation but %select{@dynamic|@synthesize}1 in another translation unit", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_odr_objc_property_type_inconsistent, CLASS_ERROR, (unsigned)diag::Severity::Error, "property %0 declared with incompatible types in different translation units (%1 vs. %2)", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_odr_objc_superclass_inconsistent, CLASS_ERROR, (unsigned)diag::Severity::Error, "class %0 has incompatible superclasses", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_odr_objc_synthesize_ivar_inconsistent, CLASS_ERROR, (unsigned)diag::Severity::Error, "property %0 is synthesized to different ivars in different translation units (%1 vs. %2)", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_odr_parameter_pack_non_pack, CLASS_ERROR, (unsigned)diag::Severity::Error, "parameter kind mismatch; parameter is %select{not a|a}0 parameter pack", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_odr_tag_type_inconsistent, CLASS_ERROR, (unsigned)diag::Severity::Error, "type %0 has incompatible definitions in different translation units", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_odr_variable_multiple_def, CLASS_ERROR, (unsigned)diag::Severity::Error, "external variable %0 defined in multiple translation units", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_odr_variable_type_inconsistent, CLASS_ERROR, (unsigned)diag::Severity::Error, "external variable %0 declared with incompatible types in different translation units (%1 vs. %2)", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_unsupported_ast_node, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot import unsupported AST node %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_vftable_ambiguous_component, CLASS_ERROR, (unsigned)diag::Severity::Error, "ambiguous vftable component for %0 introduced via covariant thunks; this is an inherent limitation of the ABI", 0, SFINAE_SubstitutionFailure, false, true, 23)
+DIAG(note_constexpr_access_inactive_union_member, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{read of|assignment to|increment of|decrement of}0 member %1 of union with %select{active member %3|no active member}2 is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_access_null, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{read of|assignment to|increment of|decrement of}0 dereferenced null pointer is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_access_past_end, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{read of|assignment to|increment of|decrement of}0 dereferenced one-past-the-end pointer is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_access_static_temporary, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{read of|assignment to|increment of|decrement of}0 temporary is not allowed in a constant expression outside the expression that created the temporary", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_access_uninit, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{read of|assignment to|increment of|decrement of}0 object outside its lifetime is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_access_unsized_array, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{read of|assignment to|increment of|decrement of}0 pointer to element of array without known bound is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_access_volatile_obj, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{read of|assignment to|increment of|decrement of}0 volatile %select{temporary|object %2|member %2}1 is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_access_volatile_type, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{read of|assignment to|increment of|decrement of}0 volatile-qualified type %1 is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_array_index, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "cannot refer to element %0 of %select{array of %2 element%plural{1:|:s}2|non-array object}1 in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_baa_insufficient_alignment, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{alignment of|offset of the aligned pointer from}0 the base pointee object (%1 %plural{1:byte|:bytes}1) is %select{less than|not a multiple of}0 the asserted %2 %plural{1:byte|:bytes}2", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_baa_value_insufficient_alignment, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "value of the aligned pointer (%0) is not a multiple of the asserted %1 %plural{1:byte|:bytes}1", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_call_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in call to '%0'", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_call_limit_exceeded, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "constexpr evaluation hit maximum call limit", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_calls_suppressed, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "(skipping %0 call%s0 in backtrace; use -fconstexpr-backtrace-limit=0 to see all)", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_compare_virtual_mem_ptr, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "comparison of pointer to virtual member function %0 has unspecified value", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_conditional_never_const, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "both arms of conditional operator are unable to produce a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_depth_limit_exceeded, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "constexpr evaluation exceeded maximum depth of %0 calls", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_float_arithmetic, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "floating point arithmetic produces %select{an infinity|a NaN}0", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_inherited_ctor_call_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in implicit initialization for inherited constructor of %0", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_invalid_cast, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{reinterpret_cast|dynamic_cast|cast that performs the conversions of a reinterpret_cast|cast from %1}0 is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_invalid_downcast, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "cannot cast object of dynamic type %0 to type %1", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_invalid_function, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{non-constexpr|undefined}0 %select{function|constructor}1 %2 cannot be used in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_invalid_inhctor, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "constructor inherited from base class %0 cannot be used in a constant expression; derived class cannot be implicitly initialized", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_large_shift, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "shift count %0 >= width of type %1 (%2 bit%s2)", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_lifetime_ended, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{read of|assignment to|increment of|decrement of}0 %select{temporary|variable}1 whose lifetime has ended", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_lshift_discards, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "signed left shift discards bits", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_lshift_of_negative, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "left shift of negative value %0", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_ltor_incomplete_type, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "read of incomplete type %0 is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_ltor_mutable, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "read of mutable member %0 is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_ltor_non_const_int, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "read of non-const variable %0 is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_ltor_non_constexpr, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "read of non-constexpr variable %0 is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_memcpy_incomplete_type, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "cannot constant evaluate '%select{memcpy|memmove}0' between objects of incomplete type %1", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_memcpy_nontrivial, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "cannot constant evaluate '%select{memcpy|memmove}0' between objects of non-trivially-copyable type %1", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_memcpy_null, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{source|destination}2 of '%select{%select{memcpy|wmemcpy}1|%select{memmove|wmemmove}1}0' is %3", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_memcpy_overlap, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "'%select{memcpy|wmemcpy}0' between overlapping memory regions", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_memcpy_type_pun, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "cannot constant evaluate '%select{memcpy|memmove}0' from object of type %1 to object of type %2", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_memcpy_unsupported, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "'%select{%select{memcpy|wmemcpy}1|%select{memmove|wmemmove}1}0' not supported: %select{size to copy (%4) is not a multiple of size of element type %3 (%5)|source is not a contiguous array of at least %4 elements of type %3|destination is not a contiguous array of at least %4 elements of type %3}2", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_modify_const_type, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "modification of object of const-qualified type %0 is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_modify_global, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "a constant expression cannot modify an object that is visible outside that expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_negative_shift, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "negative shift count %0", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_no_return, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "control reached end of constexpr function", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_non_global, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{pointer|reference}0 to %select{|subobject of }1%select{temporary|%3}2 is not a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_nonliteral, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "non-literal type %0 cannot be used in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_null_subobject, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "cannot %select{access base class of|access derived class of|access field of|access array element of|perform pointer arithmetic on|call member function on|access real component of|access imaginary component of}0 null pointer", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_overflow, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "value %0 is outside the range of representable values of type %1", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_past_end, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "dereferenced pointer past the end of %select{|subobject of }0%select{temporary|%2}1 is not a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_past_end_subobject, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "cannot %select{access base class of|access derived class of|access field of|access array element of|ERROR|call member function on|access real component of|access imaginary component of}0 pointer past the end of object", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_pointer_comparison_base_classes, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "comparison of addresses of subobjects of different base classes has unspecified value", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_pointer_comparison_base_field, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "comparison of address of base class subobject %0 of class %1 to field %2 has unspecified value", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_pointer_comparison_differing_access, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "comparison of address of fields %0 and %2 of %4 with differing access specifiers (%1 vs %3) has unspecified value", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_pointer_subtraction_not_same_array, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "subtracted pointers are not elements of the same array", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_pointer_subtraction_zero_size, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "subtraction of pointers to type %0 of zero size", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_step_limit_exceeded, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "constexpr evaluation hit maximum step limit; possible infinite loop?", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_stmt_expr_unsupported, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "this use of statement expressions is not supported in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_temporary_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "temporary created here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_this, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{|implicit }0use of 'this' pointer is only allowed within the evaluation of a call to a 'constexpr' member function", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_typeid_polymorphic, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "typeid applied to expression of polymorphic type %0 is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_uninitialized, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{|sub}0object of type %1 is not initialized", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_unsized_array_indexed, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "indexing of array without known bound is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_unsupported_unsized_array, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "array-to-pointer decay of array member without known bound is not supported", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_use_uninit_reference, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use of reference outside its lifetime is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_var_init_non_constant, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "initializer of %0 is not a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_virtual_base, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "cannot construct object of type %0 with virtual base class in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_virtual_call, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "cannot evaluate virtual function call in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_void_comparison, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "comparison between unequal pointers to void has unspecified result", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_covariant_thunk, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "covariant thunk required by %0", 0, SFINAE_Suppress, false, false, 23)
+DIAG(note_expr_divide_by_zero, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "division by zero", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_odr_base, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "class has base type %0", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_odr_bit_field, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "bit-field %0 with type %1 and length %2 here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_odr_defined_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "also defined here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_odr_enumerator, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "enumerator %0 with value %1 here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_odr_field, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "field %0 has type %1 here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_odr_field_name, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "field has name %0 here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_odr_friend, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "friend declared here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_odr_missing_base, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "no corresponding base class here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_odr_missing_enumerator, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "no corresponding enumerator here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_odr_missing_field, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "no corresponding field here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_odr_missing_friend, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "no corresponding friend here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_odr_not_bit_field, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "field %0 is not a bit-field", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_odr_number_of_bases, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "class has %0 base %plural{1:class|:classes}0", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_odr_objc_method_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{class|instance}0 method %1 also declared here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_odr_objc_missing_superclass, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "no corresponding superclass here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_odr_objc_property_impl_kind, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "property %0 is implemented with %select{@synthesize|@dynamic}1 here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_odr_objc_superclass, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "inherits from superclass %0 here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_odr_objc_synthesize_ivar_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "property is synthesized to ivar %0 here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_odr_parameter_pack_non_pack, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{parameter|parameter pack}0 declared here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_odr_tag_kind_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 is a %select{struct|interface|union|class|enum}1 here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_odr_template_parameter_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "template parameter declared here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_odr_template_parameter_list, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "template parameter list also declared here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_odr_value_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declared here with type %0", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_odr_virtual_base, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{non-virtual|virtual}0 derivation here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_unimplemented_constexpr_lambda_feature_ast, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "unimplemented constexpr lambda feature: %0 (coming soon!)", 0, SFINAE_Suppress, false, false, 0)
+DIAG(remark_sanitize_address_insert_extra_padding_accepted, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "-fsanitize-address-field-padding applied to %0", 577, SFINAE_Suppress, false, true, 0)
+DIAG(remark_sanitize_address_insert_extra_padding_rejected, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "-fsanitize-address-field-padding ignored for %0 because it %select{is not C++|is packed|is a union|is trivially copyable|has trivial destructor|is standard layout|is in a blacklisted file|is blacklisted}1", 577, SFINAE_Suppress, false, true, 0)
+DIAG(warn_integer_constant_overflow, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overflow in expression; result is %0 with type %1", 334, SFINAE_Suppress, false, false, 0)
+DIAG(warn_npot_ms_struct, CLASS_WARNING, (unsigned)diag::Severity::Error, "ms_struct may not produce Microsoft-compatible layouts with fundamental data types with sizes that aren't a power of two", 309, SFINAE_Suppress, false, false, 0)
+DIAG(warn_odr_tag_type_inconsistent, CLASS_WARNING, (unsigned)diag::Severity::Warning, "type %0 has incompatible definitions in different translation units", 497, SFINAE_Suppress, false, false, 0)
+DIAG(warn_padded_struct_anon_field, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "padding %select{struct|interface|class}0 %1 with %2 %select{byte|bit}3%s2 to align anonymous bit-field", 518, SFINAE_Suppress, false, false, 0)
+DIAG(warn_padded_struct_field, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "padding %select{struct|interface|class}0 %1 with %2 %select{byte|bit}3%s2 to align %4", 518, SFINAE_Suppress, false, false, 0)
+DIAG(warn_padded_struct_size, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "padding size of %0 with %1 %select{byte|bit}2%s1 to alignment boundary", 518, SFINAE_Suppress, false, false, 0)
+DIAG(warn_unnecessary_packed, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "packed attribute is unnecessary for %0", 517, SFINAE_Suppress, false, false, 0)
diff --git a/clang-r353983/include/clang/Basic/DiagnosticAnalysis.h b/clang-r353983/include/clang/Basic/DiagnosticAnalysis.h
new file mode 100644
index 00000000..eea35a4d
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/DiagnosticAnalysis.h
@@ -0,0 +1,28 @@
+//===--- DiagnosticAnalysis.h - Diagnostics for libanalysis -----*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_DIAGNOSTICANALYSIS_H
+#define LLVM_CLANG_BASIC_DIAGNOSTICANALYSIS_H
+
+#include "clang/Basic/Diagnostic.h"
+
+namespace clang {
+namespace diag {
+enum {
+#define DIAG(ENUM, FLAGS, DEFAULT_MAPPING, DESC, GROUP, SFINAE, NOWERROR, \
+ SHOWINSYSHEADER, CATEGORY) \
+ ENUM,
+#define ANALYSISSTART
+#include "clang/Basic/DiagnosticAnalysisKinds.inc"
+#undef DIAG
+ NUM_BUILTIN_ANALYSIS_DIAGNOSTICS
+};
+} // end namespace diag
+} // end namespace clang
+
+#endif // LLVM_CLANG_BASIC_DIAGNOSTICANALYSIS_H
diff --git a/clang-r353983/include/clang/Basic/DiagnosticAnalysisKinds.inc b/clang-r353983/include/clang/Basic/DiagnosticAnalysisKinds.inc
new file mode 100644
index 00000000..a6ff0e21
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/DiagnosticAnalysisKinds.inc
@@ -0,0 +1,5 @@
+#ifdef ANALYSISSTART
+__ANALYSISSTART = DIAG_START_ANALYSIS,
+#undef ANALYSISSTART
+#endif
+
diff --git a/clang-r353983/include/clang/Basic/DiagnosticCategories.h b/clang-r353983/include/clang/Basic/DiagnosticCategories.h
new file mode 100644
index 00000000..0decf150
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/DiagnosticCategories.h
@@ -0,0 +1,25 @@
+//===- DiagnosticCategories.h - Diagnostic Categories Enumerators-*- C++ -*===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_DIAGNOSTICCATEGORIES_H
+#define LLVM_CLANG_BASIC_DIAGNOSTICCATEGORIES_H
+
+namespace clang {
+ namespace diag {
+ enum {
+#define GET_CATEGORY_TABLE
+#define CATEGORY(X, ENUM) ENUM,
+#include "clang/Basic/DiagnosticGroups.inc"
+#undef CATEGORY
+#undef GET_CATEGORY_TABLE
+ DiagCat_NUM_CATEGORIES
+ };
+ } // end namespace diag
+} // end namespace clang
+
+#endif
diff --git a/clang-r353983/include/clang/Basic/DiagnosticComment.h b/clang-r353983/include/clang/Basic/DiagnosticComment.h
new file mode 100644
index 00000000..a87bafa8
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/DiagnosticComment.h
@@ -0,0 +1,28 @@
+//===--- DiagnosticComment.h - Diagnostics for the AST library --*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_DIAGNOSTICCOMMENT_H
+#define LLVM_CLANG_BASIC_DIAGNOSTICCOMMENT_H
+
+#include "clang/Basic/Diagnostic.h"
+
+namespace clang {
+namespace diag {
+enum {
+#define DIAG(ENUM, FLAGS, DEFAULT_MAPPING, DESC, GROUP, SFINAE, NOWERROR, \
+ SHOWINSYSHEADER, CATEGORY) \
+ ENUM,
+#define COMMENTSTART
+#include "clang/Basic/DiagnosticCommentKinds.inc"
+#undef DIAG
+ NUM_BUILTIN_COMMENT_DIAGNOSTICS
+};
+} // end namespace diag
+} // end namespace clang
+
+#endif // LLVM_CLANG_BASIC_DIAGNOSTICCOMMENT_H
diff --git a/clang-r353983/include/clang/Basic/DiagnosticCommentKinds.inc b/clang-r353983/include/clang/Basic/DiagnosticCommentKinds.inc
new file mode 100644
index 00000000..4ea5853a
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/DiagnosticCommentKinds.inc
@@ -0,0 +1,39 @@
+#ifdef COMMENTSTART
+__COMMENTSTART = DIAG_START_COMMENT,
+#undef COMMENTSTART
+#endif
+
+DIAG(note_add_deprecation_attr, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "add a deprecation attribute to the declaration to silence this warning", 0, SFINAE_Suppress, false, false, 25)
+DIAG(note_doc_block_command_previous, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous command '%select{\\|@}0%1' here", 0, SFINAE_Suppress, false, false, 25)
+DIAG(note_doc_block_command_previous_alias, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous command '%select{\\|@}0%1' (an alias of '\\%2') here", 0, SFINAE_Suppress, false, false, 25)
+DIAG(note_doc_html_end_tag, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "end tag", 0, SFINAE_Suppress, false, false, 25)
+DIAG(note_doc_html_tag_started_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "HTML tag started here", 0, SFINAE_Suppress, false, false, 25)
+DIAG(note_doc_param_name_suggestion, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "did you mean '%0'?", 0, SFINAE_Suppress, false, false, 25)
+DIAG(note_doc_param_previous, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous documentation", 0, SFINAE_Suppress, false, false, 25)
+DIAG(note_doc_tparam_name_suggestion, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "did you mean '%0'?", 0, SFINAE_Suppress, false, false, 25)
+DIAG(note_doc_tparam_previous, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous documentation", 0, SFINAE_Suppress, false, false, 25)
+DIAG(warn_correct_comment_command_name, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unknown command tag name '%0'; did you mean '%1'?", 190, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_api_container_decl_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0%select{class|interface|protocol|struct|union}1' command should not be used in a comment attached to a non-%select{class|interface|protocol|struct|union}2 declaration", 186, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_block_command_duplicate, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "duplicated command '%select{\\|@}0%1'", 186, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_block_command_empty_paragraph, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "empty paragraph passed to '%select{\\|@}0%1' command", 186, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_container_decl_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0%select{classdesign|coclass|dependency|helper|helperclass|helps|instancesize|ownership|performance|security|superclass}1' command should not be used in a comment attached to a non-container declaration", 186, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_deprecated_not_sync, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration is marked with '\\deprecated' command but does not have a deprecation attribute", 187, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_function_method_decl_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0%select{function|functiongroup|method|methodgroup|callback}1' command should be used in a comment attached to %select{a function|a function|an Objective-C method|an Objective-C method|a pointer to function}2 declaration", 186, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_html_end_forbidden, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "HTML end tag '%0' is forbidden", 188, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_html_end_unbalanced, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "HTML end tag does not match any start tag", 188, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_html_missing_end_tag, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "HTML tag '%0' requires an end tag", 188, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_html_start_end_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "HTML start tag '%0' closed by '%1'", 188, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_html_start_tag_expected_ident_or_greater, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "HTML start tag prematurely ended, expected attribute name or '>'", 186, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_html_start_tag_expected_quoted_string, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "expected quoted string after equals sign", 186, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_param_duplicate, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "parameter '%0' is already documented", 186, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_param_invalid_direction, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unrecognized parameter passing direction, valid directions are '[in]', '[out]' and '[in,out]'", 186, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_param_not_attached_to_a_function_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0param' command used in a comment that is not attached to a function declaration", 186, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_param_not_found, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "parameter '%0' not found in the function declaration", 186, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_param_spaces_in_direction, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "whitespace is not allowed in parameter passing direction", 189, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_returns_attached_to_a_void_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0%1' command used in a comment that is attached to a %select{function returning void|constructor|destructor|method returning void}2", 186, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_returns_not_attached_to_a_function_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0%1' command used in a comment that is not attached to a function or method declaration", 186, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_tparam_duplicate, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "template parameter '%0' is already documented", 186, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_tparam_not_attached_to_a_template_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0tparam' command used in a comment that is not attached to a template declaration", 186, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_tparam_not_found, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "template parameter '%0' not found in the template declaration", 186, SFINAE_Suppress, false, false, 25)
+DIAG(warn_unknown_comment_command_name, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unknown command tag name", 190, SFINAE_Suppress, false, false, 25)
+DIAG(warn_verbatim_block_end_without_start, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0%1' command does not terminate a verbatim text block", 186, SFINAE_Suppress, false, false, 25)
diff --git a/clang-r353983/include/clang/Basic/DiagnosticCommonKinds.inc b/clang-r353983/include/clang/Basic/DiagnosticCommonKinds.inc
new file mode 100644
index 00000000..9fd34f65
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/DiagnosticCommonKinds.inc
@@ -0,0 +1,114 @@
+#ifdef COMMONSTART
+__COMMONSTART = DIAG_START_COMMON,
+#undef COMMONSTART
+#endif
+
+DIAG(err_arcmt_nsinvocation_ownership, CLASS_ERROR, (unsigned)diag::Severity::Error, "NSInvocation's %0 is not safe to be used with an object with ownership other than __unsafe_unretained", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_asm_invalid_type_in_input, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid type %0 in asm input for constraint '%1'", 0, SFINAE_SubstitutionFailure, false, true, 12)
+DIAG(err_attribute_not_type_attr, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute cannot be applied to types", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_attribute_uuid_malformed_guid, CLASS_ERROR, (unsigned)diag::Severity::Error, "uuid attribute contains a malformed GUID", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_cannot_open_file, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "cannot open file '%0': %1", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_default_special_members, CLASS_ERROR, (unsigned)diag::Severity::Error, "only special member functions may be defaulted", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_deleted_non_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "only functions can have deleted definitions", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_enum_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "enumeration cannot be a template", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected %0", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_after, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected %1 after %0", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_colon_after_setter_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "method name referenced in property setter attribute must end with ':'", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_expected_either, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected %0 or %1", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_namespace_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected namespace name", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_string_literal, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected string literal %select{in %1|for diagnostic message in static_assert|for optional message in 'availability' attribute|for %select{language|source container}1 name in 'external_source_symbol' attribute}0", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_file_modified, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "file '%0' modified since it was first processed", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_fixed_point_not_enabled, CLASS_ERROR, (unsigned)diag::Severity::Error, "compile with '-ffixed-point' to enable fixed point types", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_friend_decl_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' is invalid in friend declarations", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_integer_literal_too_large, CLASS_ERROR, (unsigned)diag::Severity::Error, "integer literal is too large to be represented in any %select{signed |}0integer type", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_invalid_character_udl, CLASS_ERROR, (unsigned)diag::Severity::Error, "character literal with user-defined suffix cannot be used here", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_invalid_member_in_interface, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{data member |non-public member function |static member function |user-declared constructor|user-declared destructor|operator |nested class }0%1 is not permitted within an interface type", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_invalid_numeric_udl, CLASS_ERROR, (unsigned)diag::Severity::Error, "numeric literal with user-defined suffix cannot be used here", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_invalid_storage_class_in_func_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid storage class specifier in function declarator", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_invalid_string_udl, CLASS_ERROR, (unsigned)diag::Severity::Error, "string literal with user-defined suffix cannot be used here", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mips_fp64_req, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' can only be used if the target supports the mfhc1 and mthc1 instructions", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_module_build_disabled, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "module '%0' is needed but has not been provided, and implicit use of module files is disabled", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_module_build_shadowed_submodule, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "build a shadowed submodule '%0'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_module_cycle, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "cyclic dependency in module '%0': %1", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_module_format_unhandled, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "no handler registered for module format '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_module_header_missing, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{|umbrella }0header '%1' not found", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_module_not_built, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "could not build module '%0'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_module_not_found, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "module '%0' not found", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_module_prebuilt, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "error in loading module '%0' from prebuilt module path", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_module_shadowed, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "import of shadowed module '%0'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_module_unavailable, CLASS_ERROR, (unsigned)diag::Severity::Error, "module '%0' %select{is incompatible with|requires}1 feature '%2'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_mt_message, CLASS_ERROR, (unsigned)diag::Severity::Error, "[rewriter] %0", 0, SFINAE_SubstitutionFailure, false, false, 0)
+DIAG(err_nullability_conflicting, CLASS_ERROR, (unsigned)diag::Severity::Error, "nullability specifier %0 conflicts with existing specifier %1", 0, SFINAE_SubstitutionFailure, false, true, 19)
+DIAG(err_omp_more_one_clause, CLASS_ERROR, (unsigned)diag::Severity::Error, "directive '#pragma omp %0' cannot contain more than one '%1' clause%select{| with '%3' name modifier| with 'source' dependence}2", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_opencl_unknown_type_specifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "OpenCL %select{C|C++}0 version %1 does not support the '%2' %select{type qualifier|storage class specifier}3", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_openclcxx_not_supported, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' is not supported in OpenCL C++", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_opt_not_valid_on_target, CLASS_ERROR, (unsigned)diag::Severity::Error, "option '%0' cannot be specified on this target", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_opt_not_valid_with_opt, CLASS_ERROR, (unsigned)diag::Severity::Error, "option '%0' cannot be specified with '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_opt_not_valid_without_opt, CLASS_ERROR, (unsigned)diag::Severity::Error, "option '%0' cannot be specified without '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_param_redefinition, CLASS_ERROR, (unsigned)diag::Severity::Error, "redefinition of parameter %0", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_seh___except_block, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 only allowed in __except block or filter expression", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_seh___except_filter, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 only allowed in __except filter expression", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_seh___finally_block, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 only allowed in __finally block", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_seh_expected_handler, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected '__except' or '__finally' block", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_target_unknown_abi, CLASS_ERROR, (unsigned)diag::Severity::Error, "unknown target ABI '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_target_unknown_cpu, CLASS_ERROR, (unsigned)diag::Severity::Error, "unknown target CPU '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_target_unknown_fpmath, CLASS_ERROR, (unsigned)diag::Severity::Error, "unknown FP unit '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_target_unknown_triple, CLASS_ERROR, (unsigned)diag::Severity::Error, "unknown target triple '%0', please use -triple or -arch", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_target_unsupported_abi, CLASS_ERROR, (unsigned)diag::Severity::Error, "ABI '%0' is not supported on CPU '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_target_unsupported_abi_for_triple, CLASS_ERROR, (unsigned)diag::Severity::Error, "ABI '%0' is not supported for '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_target_unsupported_cpu_for_micromips, CLASS_ERROR, (unsigned)diag::Severity::Error, "micromips is not supported for target CPU '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_target_unsupported_execute_only, CLASS_ERROR, (unsigned)diag::Severity::Error, "execute only is not supported for the %0 sub-architecture", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_target_unsupported_fpmath, CLASS_ERROR, (unsigned)diag::Severity::Error, "the '%0' unit is not supported with this instruction set", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_target_unsupported_unaligned, CLASS_ERROR, (unsigned)diag::Severity::Error, "the %0 sub-architecture does not support unaligned accesses", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_too_large_for_fixed_point, CLASS_ERROR, (unsigned)diag::Severity::Error, "this value is too large for this fixed point type", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_unable_to_make_temp, CLASS_ERROR, (unsigned)diag::Severity::Error, "unable to make temporary file: %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_unable_to_rename_temp, CLASS_ERROR, (unsigned)diag::Severity::Error, "unable to rename temporary '%0' to output file '%1': '%2'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_unimplemented_conversion_with_fixed_point_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "conversion between fixed point and %0 is not yet supported", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_unknown_analyzer_checker, CLASS_ERROR, (unsigned)diag::Severity::Error, "no analyzer checkers are associated with '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_unsupported_abi_for_opt, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' can only be used with the '%1' ABI", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_unsupported_bom, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "%0 byte order mark detected in '%1', but encoding is not supported", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_use_of_tag_name_without_tag, CLASS_ERROR, (unsigned)diag::Severity::Error, "must use '%1' tag to refer to type %0%select{| in this scope}2", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(ext_c99_longlong, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'long long' is an extension when C99 mode is not enabled", 360, SFINAE_Suppress, false, false, 0)
+DIAG(ext_clang_diagnose_if, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'diagnose_if' is a clang extension", 250, SFINAE_Suppress, false, false, 0)
+DIAG(ext_clang_enable_if, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'enable_if' is a clang extension", 250, SFINAE_Suppress, false, false, 0)
+DIAG(ext_cxx11_longlong, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'long long' is a C++11 extension", 82, SFINAE_Suppress, false, false, 0)
+DIAG(ext_duplicate_declspec, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "duplicate '%0' declaration specifier", 193, SFINAE_Suppress, false, false, 0)
+DIAG(ext_integer_literal_too_large_for_signed, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "integer literal is too large to be represented in a signed integer type, interpreting as unsigned", 300, SFINAE_Suppress, false, false, 0)
+DIAG(ext_old_implicitly_unsigned_long_cxx, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "integer literal is too large to be represented in type 'long' and is subject to undefined behavior under C++98, interpreting as 'unsigned long'; this literal will %select{have type 'long long'|be ill-formed}0 in C++11 onwards", 75, SFINAE_Suppress, false, false, 0)
+DIAG(ext_variadic_templates, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "variadic templates are a C++11 extension", 79, SFINAE_Suppress, false, false, 4)
+DIAG(ext_warn_duplicate_declspec, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "duplicate '%0' declaration specifier", 193, SFINAE_Suppress, false, false, 0)
+DIAG(fatal_too_many_errors, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "too many errors emitted, stopping now", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(note_also_found, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "also found", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_decl_hiding_tag_type, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%1 %0 is hidden by a non-type declaration of %0 here", 0, SFINAE_Suppress, false, false, 4)
+DIAG(note_declared_at, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declared here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_duplicate_case_prev, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous case defined here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_forward_declaration, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "forward declaration of %0", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_invalid_subexpr_in_const_expr, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "subexpression not valid in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_matching, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "to match this %0", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_mt_message, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "[rewriter] %0", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_possibility, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "one possibility", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_pragma_entered_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "#pragma entered here", 0, SFINAE_Suppress, false, false, 4)
+DIAG(note_previous_declaration, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous declaration is here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_previous_definition, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous definition is here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_previous_implicit_declaration, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous implicit declaration is here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_previous_use, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous use is here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_suggest_disabling_all_checkers, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use -analyzer-disable-all-checks to disable all static analyzer checkers", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_type_being_defined, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "definition of %0 is not complete until the closing '}'", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_using, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "using", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_valid_options, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "valid target CPU values are: %0", 0, SFINAE_Suppress, false, false, 0)
+DIAG(remark_module_lock_failure, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "could not acquire lock file for module '%0': %1", 418, SFINAE_Suppress, false, false, 4)
+DIAG(remark_module_lock_timeout, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "timed out waiting to acquire lock file for module '%0'", 418, SFINAE_Suppress, false, false, 4)
+DIAG(warn_arcmt_nsalloc_realloc, CLASS_WARNING, (unsigned)diag::Severity::Warning, "[rewriter] call returns pointer to GC managed memory; it will become unmanaged in ARC", 0, SFINAE_Suppress, false, false, 0)
+DIAG(warn_conflicting_nullability_attr_overriding_param_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting nullability specifier on parameter types, %0 conflicts with existing specifier %1", 457, SFINAE_Suppress, false, false, 19)
+DIAG(warn_conflicting_nullability_attr_overriding_ret_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting nullability specifier on return types, %0 conflicts with existing specifier %1", 457, SFINAE_Suppress, false, false, 19)
+DIAG(warn_cxx98_compat_longlong, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'long long' is incompatible with C++98", 110, SFINAE_Suppress, false, false, 0)
+DIAG(warn_cxx98_compat_variadic_templates, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variadic templates are incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
+DIAG(warn_dup_category_def, CLASS_WARNING, (unsigned)diag::Severity::Warning, "duplicate definition of category %1 on interface %0", 0, SFINAE_Suppress, false, false, 0)
+DIAG(warn_duplicate_declspec, CLASS_WARNING, (unsigned)diag::Severity::Warning, "duplicate '%0' declaration specifier", 193, SFINAE_Suppress, false, false, 0)
+DIAG(warn_method_param_declaration, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "redeclaration of method parameter %0", 195, SFINAE_Suppress, false, false, 4)
+DIAG(warn_method_param_redefinition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "redefinition of method parameter %0", 0, SFINAE_Suppress, false, false, 4)
+DIAG(warn_mt_message, CLASS_WARNING, (unsigned)diag::Severity::Warning, "[rewriter] %0", 0, SFINAE_Suppress, false, false, 0)
+DIAG(warn_nullability_duplicate, CLASS_WARNING, (unsigned)diag::Severity::Warning, "duplicate nullability specifier %0", 457, SFINAE_Suppress, false, false, 19)
+DIAG(warn_old_implicitly_unsigned_long, CLASS_WARNING, (unsigned)diag::Severity::Warning, "integer literal is too large to be represented in type 'long', interpreting as 'unsigned long' per C89; this literal will %select{have type 'long long'|be ill-formed}0 in C99 onwards", 113, SFINAE_Suppress, false, false, 0)
+DIAG(warn_old_implicitly_unsigned_long_cxx, CLASS_WARNING, (unsigned)diag::Severity::Warning, "integer literal is too large to be represented in type 'long', interpreting as 'unsigned long' per C++98; this literal will %select{have type 'long long'|be ill-formed}0 in C++11 onwards", 75, SFINAE_Suppress, false, false, 0)
+DIAG(warn_unknown_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown attribute %0 ignored", 694, SFINAE_Suppress, false, false, 0)
diff --git a/clang-r353983/include/clang/Basic/DiagnosticCrossTU.h b/clang-r353983/include/clang/Basic/DiagnosticCrossTU.h
new file mode 100644
index 00000000..c1c582bd
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/DiagnosticCrossTU.h
@@ -0,0 +1,28 @@
+//===--- DiagnosticCrossTU.h - Diagnostics for Cross TU ---------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_DIAGNOSTICCROSSTU_H
+#define LLVM_CLANG_BASIC_DIAGNOSTICCROSSTU_H
+
+#include "clang/Basic/Diagnostic.h"
+
+namespace clang {
+namespace diag {
+enum {
+#define DIAG(ENUM, FLAGS, DEFAULT_MAPPING, DESC, GROUP, SFINAE, NOWERROR, \
+ SHOWINSYSHEADER, CATEGORY) \
+ ENUM,
+#define CROSSTUSTART
+#include "clang/Basic/DiagnosticCrossTUKinds.inc"
+#undef DIAG
+ NUM_BUILTIN_CROSSTU_DIAGNOSTICS
+};
+} // end namespace diag
+} // end namespace clang
+
+#endif // LLVM_CLANG_BASIC_DIAGNOSTICCROSSTU_H
diff --git a/clang-r353983/include/clang/Basic/DiagnosticCrossTUKinds.inc b/clang-r353983/include/clang/Basic/DiagnosticCrossTUKinds.inc
new file mode 100644
index 00000000..e02de3db
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/DiagnosticCrossTUKinds.inc
@@ -0,0 +1,9 @@
+#ifdef CROSSTUSTART
+__CROSSTUSTART = DIAG_START_CROSSTU,
+#undef CROSSTUSTART
+#endif
+
+DIAG(err_ctu_error_opening, CLASS_ERROR, (unsigned)diag::Severity::Error, "error opening '%0': required by the CrossTU functionality", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_extdefmap_parsing, CLASS_ERROR, (unsigned)diag::Severity::Error, "error parsing index file: '%0' line: %1 'UniqueID filename' format expected", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_multiple_def_index, CLASS_ERROR, (unsigned)diag::Severity::Error, "multiple definitions are found for the same key in index ", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(warn_ctu_incompat_triple, CLASS_WARNING, (unsigned)diag::Severity::Warning, "imported AST from '%0' had been generated for a different target, current: %1, imported: %2", 146, SFINAE_Suppress, false, false, 0)
diff --git a/clang-r353983/include/clang/Basic/DiagnosticDriver.h b/clang-r353983/include/clang/Basic/DiagnosticDriver.h
new file mode 100644
index 00000000..63913df4
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/DiagnosticDriver.h
@@ -0,0 +1,28 @@
+//===--- DiagnosticDriver.h - Diagnostics for libdriver ---------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_DIAGNOSTICDRIVER_H
+#define LLVM_CLANG_BASIC_DIAGNOSTICDRIVER_H
+
+#include "clang/Basic/Diagnostic.h"
+
+namespace clang {
+namespace diag {
+enum {
+#define DIAG(ENUM, FLAGS, DEFAULT_MAPPING, DESC, GROUP, SFINAE, NOWERROR, \
+ SHOWINSYSHEADER, CATEGORY) \
+ ENUM,
+#define DRIVERSTART
+#include "clang/Basic/DiagnosticDriverKinds.inc"
+#undef DIAG
+ NUM_BUILTIN_DRIVER_DIAGNOSTICS
+};
+} // end namespace diag
+} // end namespace clang
+
+#endif // LLVM_CLANG_BASIC_DIAGNOSTICDRIVER_H
diff --git a/clang-r353983/include/clang/Basic/DiagnosticDriverKinds.inc b/clang-r353983/include/clang/Basic/DiagnosticDriverKinds.inc
new file mode 100644
index 00000000..3285c870
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/DiagnosticDriverKinds.inc
@@ -0,0 +1,179 @@
+#ifdef DRIVERSTART
+__DRIVERSTART = DIAG_START_DRIVER,
+#undef DRIVERSTART
+#endif
+
+DIAG(err_analyzer_config_invalid_input, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid input for analyzer-config option '%0', that expects %1 value", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_analyzer_config_multiple_values, CLASS_ERROR, (unsigned)diag::Severity::Error, "analyzer-config option '%0' should contain only one '='", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_analyzer_config_no_value, CLASS_ERROR, (unsigned)diag::Severity::Error, "analyzer-config option '%0' has a key but no value", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_analyzer_config_unknown, CLASS_ERROR, (unsigned)diag::Severity::Error, "unknown analyzer-config '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_arc_unsupported_on_runtime, CLASS_ERROR, (unsigned)diag::Severity::Error, "-fobjc-arc is not supported on platforms using the legacy runtime", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_arc_unsupported_on_toolchain, CLASS_ERROR, (unsigned)diag::Severity::Error, "-fobjc-arc is not supported on versions of OS X prior to 10.6", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_arch_unsupported_isa, CLASS_ERROR, (unsigned)diag::Severity::Error, "Architecture '%0' does not support '%1' execution mode", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_cpu_unsupported_isa, CLASS_ERROR, (unsigned)diag::Severity::Error, "CPU '%0' does not support '%1' execution mode", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_I_dash_not_supported, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' not supported, please use -iquote instead", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_Xopenmp_target_missing_triple, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot deduce implicit triple value for -Xopenmp-target, specify triple using -Xopenmp-target=<triple>", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_argument_not_allowed_with, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid argument '%0' not allowed with '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_argument_only_allowed_with, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid argument '%0' only allowed with '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_bitcode_unsupported_on_toolchain, CLASS_ERROR, (unsigned)diag::Severity::Error, "-fembed-bitcode is not supported on versions of iOS prior to 6.0", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_cannot_read_config_file, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot read configuration file '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_cc_print_options_failure, CLASS_ERROR, (unsigned)diag::Severity::Error, "unable to open CC_PRINT_OPTIONS file: %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_clang_unsupported, CLASS_ERROR, (unsigned)diag::Severity::Error, "the clang compiler does not support '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_clang_unsupported_opt_cxx_darwin_i386, CLASS_ERROR, (unsigned)diag::Severity::Error, "the clang compiler does not support '%0' for C++ on Darwin/i386", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_clang_unsupported_opt_faltivec, CLASS_ERROR, (unsigned)diag::Severity::Error, "the clang compiler does not support '%0', %1", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_command_failed, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 command failed with exit code %1 (use -v to see invocation)", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_command_failure, CLASS_ERROR, (unsigned)diag::Severity::Error, "unable to execute command: %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_command_signalled, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 command failed due to signal (use -v to see invocation)", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_compilationdatabase, CLASS_ERROR, (unsigned)diag::Severity::Error, "compilation database '%0' could not be opened: %1", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_config_file_not_exist, CLASS_ERROR, (unsigned)diag::Severity::Error, "configuration file '%0' does not exist", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_config_file_not_found, CLASS_ERROR, (unsigned)diag::Severity::Error, "configuration file '%0' cannot be found", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_conflicting_deployment_targets, CLASS_ERROR, (unsigned)diag::Severity::Error, "conflicting deployment targets, both '%0' and '%1' are present in environment", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_cuda_bad_gpu_arch, CLASS_ERROR, (unsigned)diag::Severity::Error, "Unsupported CUDA gpu architecture: %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_cuda_host_arch, CLASS_ERROR, (unsigned)diag::Severity::Error, "unsupported architecture '%0' for host compilation.", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_cuda_version_unsupported, CLASS_ERROR, (unsigned)diag::Severity::Error, "GPU arch %0 is supported by CUDA versions between %1 and %2 (inclusive), but installation at %3 is %4. Use --cuda-path to specify a different CUDA install, pass a different GPU arch with --cuda-gpu-arch, or pass --no-cuda-version-check.", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_defsym_invalid_format, CLASS_ERROR, (unsigned)diag::Severity::Error, "defsym must be of the form: sym=value: %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_defsym_invalid_symval, CLASS_ERROR, (unsigned)diag::Severity::Error, "Value is not an integer: %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_dllexport_inlines_and_fallback, CLASS_ERROR, (unsigned)diag::Severity::Error, "option '/Zc:dllexportInlines-' is ABI-changing and not compatible with '/fallback'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_duplicate_config, CLASS_ERROR, (unsigned)diag::Severity::Error, "no more than one option '--config' is allowed", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_emit_llvm_link, CLASS_ERROR, (unsigned)diag::Severity::Error, "-emit-llvm cannot be used when linking", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_expecting_fopenmp_with_fopenmp_targets, CLASS_ERROR, (unsigned)diag::Severity::Error, "The option -fopenmp-targets must be used in conjunction with a -fopenmp option compatible with offloading, please use -fopenmp=libomp or -fopenmp=libiomp5.", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_force_crash, CLASS_ERROR, (unsigned)diag::Severity::Error, "failing because %select{environment variable 'FORCE_CLANG_DIAGNOSTICS_CRASH' is set|'-gen-reproducer' is used}0", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_gnustep_objc_runtime_incompatible_binary, CLASS_ERROR, (unsigned)diag::Severity::Error, "GNUstep Objective-C runtime version %0 incompatible with target binary format", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_invalid_Xarch_argument_isdriver, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid Xarch argument: '%0', cannot change driver behavior inside Xarch argument", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_invalid_Xarch_argument_with_args, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid Xarch argument: '%0', options requiring arguments are unsupported", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_invalid_Xopenmp_target_with_args, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid -Xopenmp-target argument: '%0', options requiring arguments are unsupported", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_invalid_arch_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid arch name '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_invalid_argument_to_fdebug_prefix_map, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid argument '%0' to -fdebug-prefix-map", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_invalid_cf_runtime_abi, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid CoreFoundation Runtime ABI '%0'; must be one of 'objc', 'standalone', 'swift', 'swift-5.0', 'swift-4.2', 'swift-4.1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_invalid_darwin_version, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid Darwin version number: %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_invalid_gcc_output_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid output type '%0' for use with gcc tool", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_invalid_hvx_length, CLASS_ERROR, (unsigned)diag::Severity::Error, "-mhvx-length is not supported without a -mhvx/-mhvx= flag", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_invalid_int_value, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid integral value '%1' in '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_invalid_libcxx_deployment, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid deployment target for -stdlib=libc++ (requires %0 or later)", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_invalid_linker_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid linker name in argument '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_invalid_mfloat_abi, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid float ABI '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_invalid_mtp, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid thread pointer reading mode '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_invalid_omp_target, CLASS_ERROR, (unsigned)diag::Severity::Error, "OpenMP target is invalid: '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_invalid_output_with_multiple_archs, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot use '%0' output with multiple -arch options", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_invalid_pgo_instrumentor, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid PGO instrumentor in argument '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_invalid_remap_file, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid option '%0' not of the form <from-file>;<to-file>", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_invalid_riscv_arch_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid arch name '%0', %1", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_invalid_riscv_ext_arch_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid arch name '%0', %1 '%2'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_invalid_rtlib_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid runtime library name in argument '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_invalid_stdlib_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid library name in argument '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_invalid_thread_model_for_target, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid thread model '%0' in '%1' for this target", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_invalid_value, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid value '%1' in '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_invalid_version_number, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid version number in '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_lto_without_lld, CLASS_ERROR, (unsigned)diag::Severity::Error, "LTO requires -fuse-ld=lld", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_malformed_sanitizer_blacklist, CLASS_ERROR, (unsigned)diag::Severity::Error, "malformed sanitizer blacklist: '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_mg_requires_m_or_mm, CLASS_ERROR, (unsigned)diag::Severity::Error, "option '-MG' requires '-M' or '-MM'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_missing_arg_mtp, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing argument to '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_missing_argument, CLASS_ERROR, (unsigned)diag::Severity::Error, "argument to '%0' is missing (expected %1 value%s1)", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_mix_cuda_hip, CLASS_ERROR, (unsigned)diag::Severity::Error, "Mixed Cuda and HIP compilation is not supported.", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_module_header_wrong_kind, CLASS_ERROR, (unsigned)diag::Severity::Error, "header file '%0' input type '%1' does not match type of prior input in module compilation; use '-x %2' to override", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_modules_validate_once_requires_timestamp, CLASS_ERROR, (unsigned)diag::Severity::Error, "option '-fmodules-validate-once-per-build-session' requires '-fbuild-session-timestamp=<seconds since Epoch>' or '-fbuild-session-file=<file>'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_nested_config_file, CLASS_ERROR, (unsigned)diag::Severity::Error, "option '--config' is not allowed inside configuration file", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_no_ast_support, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0': unable to use AST files with this tool", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_no_cuda_installation, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot find CUDA installation. Provide its path via --cuda-path, or pass -nocudainc to build without CUDA includes.", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_no_cuda_libdevice, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot find libdevice for %0. Provide path to different CUDA installation via --cuda-path, or pass -nocudalib to build without linking with libdevice.", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_no_input_files, CLASS_ERROR, (unsigned)diag::Severity::Error, "no input files", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_no_linker_llvm_support, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0': unable to pass LLVM bit-code files to linker", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_no_module_support, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0': unable to use module files with this tool", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_no_neon_modifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "[no]neon is not accepted as modifier, please use [no]simd instead", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_no_such_file, CLASS_ERROR, (unsigned)diag::Severity::Error, "no such file or directory: '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_omp_host_ir_file_not_found, CLASS_ERROR, (unsigned)diag::Severity::Error, "The provided host compiler IR file '%0' is required to generate code for OpenMP target regions but cannot be found.", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_omp_host_target_not_supported, CLASS_ERROR, (unsigned)diag::Severity::Error, "The target '%0' is not a supported OpenMP host target.", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_optimization_remark_pattern, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 in '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_out_file_argument_with_multiple_sources, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot specify '%0%1' when compiling multiple source files", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_output_argument_with_multiple_files, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot specify -o when generating multiple output files", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_preamble_format, CLASS_ERROR, (unsigned)diag::Severity::Error, "incorrect format for -preamble-bytes=N,END", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_ropi_incompatible_with_cxx, CLASS_ERROR, (unsigned)diag::Severity::Error, "ROPI is not compatible with c++", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_ropi_rwpi_incompatible_with_pic, CLASS_ERROR, (unsigned)diag::Severity::Error, "embedded and GOT-based position independence are incompatible", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_trivial_auto_var_init_zero_disabled, CLASS_ERROR, (unsigned)diag::Severity::Error, "-ftrivial-auto-var-init=zero hasn't been enabled. Enable it at your own peril for benchmarking purpose only with -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_unable_to_remove_file, CLASS_ERROR, (unsigned)diag::Severity::Error, "unable to remove file: %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_unknown_argument, CLASS_ERROR, (unsigned)diag::Severity::Error, "unknown argument: '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_unknown_argument_with_suggestion, CLASS_ERROR, (unsigned)diag::Severity::Error, "unknown argument '%0', did you mean '%1'?", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_unknown_indirect_jump_opt, CLASS_ERROR, (unsigned)diag::Severity::Error, "unknown '-mindirect-jump=' option '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_unknown_language, CLASS_ERROR, (unsigned)diag::Severity::Error, "language not recognized: '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_unknown_objc_runtime, CLASS_ERROR, (unsigned)diag::Severity::Error, "unknown or ill-formed Objective-C runtime '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_unknown_stdin_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "-E or -x required when input is from standard input", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_unknown_stdin_type_clang_cl, CLASS_ERROR, (unsigned)diag::Severity::Error, "use /Tc or /Tp to set input type for standard input", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_unsupported_embed_bitcode, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 is not supported with -fembed-bitcode", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_unsupported_indirect_jump_opt, CLASS_ERROR, (unsigned)diag::Severity::Error, "'-mindirect-jump=%0' is unsupported with the '%1' architecture", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_unsupported_linker, CLASS_ERROR, (unsigned)diag::Severity::Error, "unsupported value '%0' for -linker option", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_unsupported_noabicalls_pic, CLASS_ERROR, (unsigned)diag::Severity::Error, "position-independent code requires '-mabicalls'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_unsupported_opt, CLASS_ERROR, (unsigned)diag::Severity::Error, "unsupported option '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_unsupported_opt_for_target, CLASS_ERROR, (unsigned)diag::Severity::Error, "unsupported option '%0' for target '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_unsupported_opt_with_suggestion, CLASS_ERROR, (unsigned)diag::Severity::Error, "unsupported option '%0', did you mean '%1'?", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_unsupported_option_argument, CLASS_ERROR, (unsigned)diag::Severity::Error, "unsupported argument '%1' to option '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_unsupported_rtlib_for_platform, CLASS_ERROR, (unsigned)diag::Severity::Error, "unsupported runtime library '%0' for platform '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_use_of_Z_option, CLASS_ERROR, (unsigned)diag::Severity::Error, "unsupported use of internal gcc -Z option '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_invalid_branch_protection, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid branch protection option '%0' in '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_no_external_assembler, CLASS_ERROR, (unsigned)diag::Severity::Error, "there is no external assembler that can be used on this platform", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_objc_weak_unsupported, CLASS_ERROR, (unsigned)diag::Severity::Error, "-fobjc-weak is not supported on the current deployment target", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_objc_weak_with_gc, CLASS_ERROR, (unsigned)diag::Severity::Error, "-fobjc-weak is not supported in Objective-C garbage collection", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_target_unsupported_arch, CLASS_ERROR, (unsigned)diag::Severity::Error, "the target architecture '%0' is not supported by the target '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_test_module_file_extension_format, CLASS_ERROR, (unsigned)diag::Severity::Error, "-ftest-module-file-extension argument '%0' is not of the required form 'blockname:major:minor:hashed:user info'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(note_drv_address_sanitizer_debug_runtime, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "AddressSanitizer doesn't support linking with debug runtime libraries yet", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_drv_command_failed_diag_msg, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "diagnostic msg: %0", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_drv_config_file_searched_in, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "was searched for in the directory: %0", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_drv_t_option_is_global, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "The last /TC or /TP option takes precedence over earlier instances", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_drv_use_standard, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use '%0'%select{| or '%3'|, '%3', or '%4'|, '%3', '%4', or '%5'}2 for '%1' standard", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_drv_verify_prefix_spelling, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "-verify prefixes must start with a letter and contain only alphanumeric characters, hyphens, and underscores", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_use_dashdash, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "Use '--' to treat subsequent arguments as filenames", 0, SFINAE_Suppress, false, false, 0)
+DIAG(warn_O4_is_O3, CLASS_WARNING, (unsigned)diag::Severity::Warning, "-O4 is equivalent to -O3", 164, SFINAE_Suppress, false, false, 27)
+DIAG(warn_c_kext, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring -fapple-kext which is valid for C++ and Objective-C++ only", 0, SFINAE_Suppress, false, false, 0)
+DIAG(warn_debug_compression_unavailable, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cannot compress debug sections (zlib not installed)", 156, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_assuming_mfloat_abi_is, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown platform, assuming -mfloat-abi=%0", 0, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_clang_unsupported, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the clang compiler does not support '%0'", 0, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_darwin_sdk_invalid_settings, CLASS_WARNING, (unsigned)diag::Severity::Warning, "SDK settings were ignored as 'SDKSettings.json' could not be parsed", 153, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_deprecated_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "argument '%0' is deprecated, use '%1' instead", 164, SFINAE_Suppress, false, false, 27)
+DIAG(warn_drv_diagnostics_hotness_requires_pgo, CLASS_WARNING, (unsigned)diag::Severity::Warning, "argument '%0' requires profile-guided optimization information", 720, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_disabling_vptr_no_rtti_default, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicitly disabling vptr sanitizer because rtti wasn't enabled", 48, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_empty_joined_argument, CLASS_WARNING, (unsigned)diag::Severity::Warning, "joined argument expects additional value: '%0'", 720, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_experimental_isel_incomplete, CLASS_WARNING, (unsigned)diag::Severity::Warning, "-fexperimental-isel support for the '%0' architecture is incomplete", 215, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_experimental_isel_incomplete_opt, CLASS_WARNING, (unsigned)diag::Severity::Warning, "-fexperimental-isel support is incomplete for this architecture at the current optimization level", 215, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_fine_grained_bitfield_accesses_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "option '-ffine-grained-bitfield-accesses' cannot be enabled together with a sanitizer; flag ignored", 504, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_input_file_unused, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0: '%1' input unused%select{ when '%3' is present|}2", 720, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_input_file_unused_by_cpp, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0: '%1' input unused in cpp mode", 720, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_invoking_fallback, CLASS_WARNING, (unsigned)diag::Severity::Warning, "falling back to %0", 225, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_moutline_unsupported_opt, CLASS_WARNING, (unsigned)diag::Severity::Warning, "The '%0' architecture does not support -moutline; flag ignored", 504, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_msp430_hwmult_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the given MCU supports %0 hardware multiply, but -mhwmult is set to %1.", 335, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_msp430_hwmult_no_device, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no MCU device specified, but '-mhwmult' is set to 'auto', assuming no hardware multiply. Use -mmcu to specify a MSP430 device, or -mhwmult to set hardware multiply type explicitly.", 335, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_msp430_hwmult_unsupported, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the given MCU does not support hardware multiply, but -mhwmult is set to %0.", 335, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_msvc_not_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unable to find a Visual Studio installation; try running Clang from a developer command prompt", 428, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_object_size_disabled_O0, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the object size sanitizer has no effect at -O0, but is explicitly enabled: %0", 335, SFINAE_Suppress, true, false, 0)
+DIAG(warn_drv_omp_offload_target_duplicate, CLASS_WARNING, (unsigned)diag::Severity::Warning, "The OpenMP offloading target '%0' is similar to target '%1' already specified - will be ignored.", 503, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_omp_offload_target_missingbcruntime, CLASS_WARNING, (unsigned)diag::Severity::Warning, "No library '%0' found in the default clang lib directory or in LIBRARY_PATH. Expect degraded performance due to no inlining of runtime functions on target devices.", 503, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_optimization_value, CLASS_WARNING, (unsigned)diag::Severity::Warning, "optimization level '%0' is not supported; using '%1%2' instead", 335, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_overriding_flag_option, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overriding '%0' option with '%1'", 516, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_pch_not_first_include, CLASS_WARNING, (unsigned)diag::Severity::Warning, "precompiled header '%0' was ignored because '%1' is not first '-include'", 0, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_preprocessed_input_file_unused, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0: previously preprocessed input%select{ unused when '%2' is present|}1", 720, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_ps4_force_pic, CLASS_WARNING, (unsigned)diag::Severity::Warning, "option '%0' was ignored by the PS4 toolchain, using '-fPIC'", 504, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_ps4_sdk_dir, CLASS_WARNING, (unsigned)diag::Severity::Warning, "environment variable SCE_ORBIS_SDK_DIR is set, but points to invalid or nonexistent directory '%0'", 342, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_treating_input_as_cxx, CLASS_WARNING, (unsigned)diag::Severity::Warning, "treating '%0' input as '%1' when in C++ mode, this behavior is deprecated", 164, SFINAE_Suppress, false, false, 27)
+DIAG(warn_drv_unable_to_find_directory_expected, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unable to find %0 directory, expected to be in '%1'", 342, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_unknown_argument_clang_cl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown argument ignored in clang-cl: '%0'", 693, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_unknown_argument_clang_cl_with_suggestion, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown argument ignored in clang-cl '%0' (did you mean '%1'?)", 693, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_unsupported_debug_info_opt_for_target, CLASS_WARNING, (unsigned)diag::Severity::Warning, "debug information option '%0' is not supported for target '%1'", 715, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_unsupported_gpopt, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mgpopt' option as it cannot be used with %select{|the implicit usage of }0-mabicalls", 713, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_unsupported_longcalls, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mlong-calls' option as it is not currently supported with %select{|the implicit usage of }0-mabicalls", 504, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_unsupported_opt_for_target, CLASS_WARNING, (unsigned)diag::Severity::Warning, "optimization flag '%0' is not supported for target '%1'", 283, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_unsupported_pic_with_mabicalls, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '%0' option as it cannot be used with %select{implicit usage of|}1 -mabicalls and the N64 ABI", 504, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_unused_argument, CLASS_WARNING, (unsigned)diag::Severity::Warning, "argument unused during compilation: '%0'", 720, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_vectorize_needs_hvx, CLASS_WARNING, (unsigned)diag::Severity::Warning, "auto-vectorization requires HVX, use -mhvx to enable it", 504, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_yc_multiple_inputs_clang_cl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "support for '/Yc' with more than one source file not implemented yet; flag ignored", 123, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_ycyu_different_arg_clang_cl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "support for '/Yc' and '/Yu' with different filenames not implemented yet; flags ignored", 123, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_ycyu_no_fi_arg_clang_cl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "support for '%0' without a corresponding /FI flag not implemented yet; flag ignored", 123, SFINAE_Suppress, false, false, 0)
+DIAG(warn_ignored_clang_option, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the flag '%0' has been deprecated and will be ignored", 720, SFINAE_Suppress, false, false, 0)
+DIAG(warn_ignored_gcc_optimization, CLASS_WARNING, (unsigned)diag::Severity::Warning, "optimization flag '%0' is not supported", 283, SFINAE_Suppress, false, false, 0)
+DIAG(warn_ignoring_ftabstop_value, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring invalid -ftabstop value '%0', using default value %1", 0, SFINAE_Suppress, false, false, 0)
+DIAG(warn_incompatible_sysroot, CLASS_WARNING, (unsigned)diag::Severity::Warning, "using sysroot for '%0' but targeting '%1'", 313, SFINAE_Suppress, false, false, 0)
+DIAG(warn_invalid_ios_deployment_target, CLASS_WARNING, (unsigned)diag::Severity::Error, "invalid iOS deployment version '%0', iOS 10 is the maximum deployment target for 32-bit targets", 339, SFINAE_Suppress, false, false, 0)
+DIAG(warn_missing_sysroot, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no such sysroot directory: '%0'", 416, SFINAE_Suppress, false, false, 0)
+DIAG(warn_slash_u_filename, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'/U%0' treated as the '/U' option", 611, SFINAE_Suppress, false, false, 0)
+DIAG(warn_target_unsupported_abs2008, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mabs=2008' option because the '%0' architecture does not support it", 708, SFINAE_Suppress, false, false, 0)
+DIAG(warn_target_unsupported_abslegacy, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mabs=legacy' option because the '%0' architecture does not support it", 708, SFINAE_Suppress, false, false, 0)
+DIAG(warn_target_unsupported_compact_branches, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mcompact-branches=' option because the '%0' architecture does not support it", 710, SFINAE_Suppress, false, false, 0)
+DIAG(warn_target_unsupported_nan2008, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mnan=2008' option because the '%0' architecture does not support it", 714, SFINAE_Suppress, false, false, 0)
+DIAG(warn_target_unsupported_nanlegacy, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mnan=legacy' option because the '%0' architecture does not support it", 714, SFINAE_Suppress, false, false, 0)
diff --git a/clang-r353983/include/clang/Basic/DiagnosticError.h b/clang-r353983/include/clang/Basic/DiagnosticError.h
new file mode 100644
index 00000000..430da6f7
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/DiagnosticError.h
@@ -0,0 +1,60 @@
+//===--- DiagnosticError.h - Diagnostic payload for llvm::Error -*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_DIAGNOSTIC_ERROR_H
+#define LLVM_CLANG_BASIC_DIAGNOSTIC_ERROR_H
+
+#include "clang/Basic/PartialDiagnostic.h"
+#include "llvm/Support/Error.h"
+
+namespace clang {
+
+/// Carries a Clang diagnostic in an llvm::Error.
+///
+/// Users should emit the stored diagnostic using the DiagnosticsEngine.
+class DiagnosticError : public llvm::ErrorInfo<DiagnosticError> {
+public:
+ DiagnosticError(PartialDiagnosticAt Diag) : Diag(std::move(Diag)) {}
+
+ void log(raw_ostream &OS) const override { OS << "clang diagnostic"; }
+
+ PartialDiagnosticAt &getDiagnostic() { return Diag; }
+ const PartialDiagnosticAt &getDiagnostic() const { return Diag; }
+
+ /// Creates a new \c DiagnosticError that contains the given diagnostic at
+ /// the given location.
+ static llvm::Error create(SourceLocation Loc, PartialDiagnostic Diag) {
+ return llvm::make_error<DiagnosticError>(
+ PartialDiagnosticAt(Loc, std::move(Diag)));
+ }
+
+ /// Extracts and returns the diagnostic payload from the given \c Error if
+ /// the error is a \c DiagnosticError. Returns none if the given error is not
+ /// a \c DiagnosticError.
+ static Optional<PartialDiagnosticAt> take(llvm::Error &Err) {
+ Optional<PartialDiagnosticAt> Result;
+ Err = llvm::handleErrors(std::move(Err), [&](DiagnosticError &E) {
+ Result = std::move(E.getDiagnostic());
+ });
+ return Result;
+ }
+
+ static char ID;
+
+private:
+ // Users are not expected to use error_code.
+ std::error_code convertToErrorCode() const override {
+ return llvm::inconvertibleErrorCode();
+ }
+
+ PartialDiagnosticAt Diag;
+};
+
+} // end namespace clang
+
+#endif // LLVM_CLANG_BASIC_DIAGNOSTIC_ERROR_H
diff --git a/clang-r353983/include/clang/Basic/DiagnosticFrontend.h b/clang-r353983/include/clang/Basic/DiagnosticFrontend.h
new file mode 100644
index 00000000..57f00e73
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/DiagnosticFrontend.h
@@ -0,0 +1,28 @@
+//===--- DiagnosticFrontend.h - Diagnostics for frontend --------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_DIAGNOSTICFRONTEND_H
+#define LLVM_CLANG_BASIC_DIAGNOSTICFRONTEND_H
+
+#include "clang/Basic/Diagnostic.h"
+
+namespace clang {
+namespace diag {
+enum {
+#define DIAG(ENUM, FLAGS, DEFAULT_MAPPING, DESC, GROUP, SFINAE, NOWERROR, \
+ SHOWINSYSHEADER, CATEGORY) \
+ ENUM,
+#define FRONTENDSTART
+#include "clang/Basic/DiagnosticFrontendKinds.inc"
+#undef DIAG
+ NUM_BUILTIN_FRONTEND_DIAGNOSTICS
+};
+} // end namespace diag
+} // end namespace clang
+
+#endif // LLVM_CLANG_BASIC_DIAGNOSTICFRONTEND_H
diff --git a/clang-r353983/include/clang/Basic/DiagnosticFrontendKinds.inc b/clang-r353983/include/clang/Basic/DiagnosticFrontendKinds.inc
new file mode 100644
index 00000000..25f684a1
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/DiagnosticFrontendKinds.inc
@@ -0,0 +1,113 @@
+#ifdef FRONTENDSTART
+__FRONTENDSTART = DIAG_START_FRONTEND,
+#undef FRONTENDSTART
+#endif
+
+DIAG(err_alias_to_undefined, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{alias|ifunc}0 must point to a defined %select{variable or |}1function", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_builtin_needs_feature, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 needs target feature %1", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_cyclic_alias, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{alias|ifunc}0 definition is part of a cycle", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_duplicate_mangled_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "definition with same mangled name '%0' as another definition", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_fe_action_not_available, CLASS_ERROR, (unsigned)diag::Severity::Error, "action %0 not compiled in", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_fe_backend_frame_larger_than, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_fe_backend_plugin, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_fe_backend_unsupported, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0", 0, SFINAE_SubstitutionFailure, false, true, 16)
+DIAG(err_fe_cannot_link_module, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "cannot link module '%0': %1", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_fe_dependency_file_requires_MT, CLASS_ERROR, (unsigned)diag::Severity::Error, "-dependency-file requires at least one -MT or -MQ option", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_fe_error_backend, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "error in backend: %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_fe_error_opening, CLASS_ERROR, (unsigned)diag::Severity::Error, "error opening '%0': %1", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_fe_error_reading, CLASS_ERROR, (unsigned)diag::Severity::Error, "error reading '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_fe_error_reading_stdin, CLASS_ERROR, (unsigned)diag::Severity::Error, "error reading stdin: %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_fe_expected_clang_command, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected a clang compiler command", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_fe_expected_compiler_job, CLASS_ERROR, (unsigned)diag::Severity::Error, "unable to handle compilation, expected exactly one compiler job in '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_fe_inline_asm, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0", 0, SFINAE_SubstitutionFailure, false, true, 12)
+DIAG(err_fe_invalid_alignment, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid value '%1' in '%0'; alignment must be a power of 2", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_fe_invalid_code_complete_file, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "cannot locate code-completion file %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_fe_invalid_exception_model, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid exception model '%0' for target '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_fe_invalid_plugin_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "unable to find plugin '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_fe_invalid_wchar_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid wchar_t type '%0'; must be one of 'char', 'short', 'int'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_fe_no_pch_in_dir, CLASS_ERROR, (unsigned)diag::Severity::Error, "no suitable precompiled header file found in directory '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_fe_remap_missing_from_file, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "could not remap from missing file '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_fe_remap_missing_to_file, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "could not remap file '%0' to the contents of file '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_fe_stdout_binary, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "unable to change standard output to binary", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_fe_unable_to_create_target, CLASS_ERROR, (unsigned)diag::Severity::Error, "unable to create target: '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_fe_unable_to_interface_with_target, CLASS_ERROR, (unsigned)diag::Severity::Error, "unable to interface with target machine", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_fe_unable_to_load_pch, CLASS_ERROR, (unsigned)diag::Severity::Error, "unable to load PCH file", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_fe_unable_to_load_plugin, CLASS_ERROR, (unsigned)diag::Severity::Error, "unable to load plugin '%0': '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_fe_unable_to_open_output, CLASS_ERROR, (unsigned)diag::Severity::Error, "unable to open output file '%0': '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_function_needs_feature, CLASS_ERROR, (unsigned)diag::Severity::Error, "always_inline function %1 requires target feature '%2', but would be inlined into function %0 that is compiled without support for '%2'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_header_module_requires_modules, CLASS_ERROR, (unsigned)diag::Severity::Error, "header module compilation requires '-fmodules' or '-fmodules-ts'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_ifunc_resolver_return, CLASS_ERROR, (unsigned)diag::Severity::Error, "ifunc resolver function must return a pointer", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_invalid_vfs_overlay, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "invalid virtual filesystem overlay file '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_missing_module, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "no module named '%0' declared in module map file '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_missing_module_name, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "no module name provided; specify one with -fmodule-name=", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_missing_vfs_overlay_file, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "virtual filesystem overlay file '%0' not found", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_module_build_requires_fmodules, CLASS_ERROR, (unsigned)diag::Severity::Error, "module compilation requires '-fmodules'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_module_cannot_create_includes, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot create includes file for module %0: %1", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_module_header_file_invalid, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "unexpected module header file input '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_module_header_file_not_found, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "module header file '%0' not found", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_module_interface_requires_modules_ts, CLASS_ERROR, (unsigned)diag::Severity::Error, "module interface compilation requires '-fmodules-ts'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_module_map_not_found, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "module map file '%0' not found", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_modules_embed_file_not_found, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "file '%0' specified by '-fmodules-embed-file=' not found", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_no_submodule, CLASS_ERROR, (unsigned)diag::Severity::Error, "no submodule named %0 in module '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_no_submodule_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "no submodule named %0 in module '%1'; did you mean '%2'?", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_relocatable_without_isysroot, CLASS_ERROR, (unsigned)diag::Severity::Error, "must specify system root with -isysroot when building a relocatable PCH file", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_test_module_file_extension_version, CLASS_ERROR, (unsigned)diag::Severity::Error, "test module file extension '%0' has different version (%1.%2) than expected (%3.%4)", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_verify_inconsistent_diags, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' diagnostics %select{expected|seen}1 but not %select{seen|expected}1: %2", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_verify_invalid_content, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid expected %0: %1", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_verify_invalid_no_diags, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{expected|'expected-no-diagnostics'}0 directive cannot follow %select{'expected-no-diagnostics' directive|other expected directives}0", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_verify_invalid_range, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid range following '-' in expected %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_verify_missing_end, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot find end ('}}') of expected %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_verify_missing_file, CLASS_ERROR, (unsigned)diag::Severity::Error, "file '%0' could not be located in expected %1", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_verify_missing_line, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing or invalid line number following '@' in expected %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_verify_missing_regex, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot find start of regex ('{{') in %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_verify_missing_start, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot find start ('{{') of expected %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_verify_no_directives, CLASS_ERROR, (unsigned)diag::Severity::Error, "no expected directives found: consider use of 'expected-no-diagnostics'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(note_fe_backend_frame_larger_than, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0", 0, SFINAE_Suppress, false, true, 16)
+DIAG(note_fe_backend_invalid_loc, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "could not determine the original source location for %0:%1:%2", 0, SFINAE_Suppress, false, true, 16)
+DIAG(note_fe_backend_plugin, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0", 0, SFINAE_Suppress, false, true, 16)
+DIAG(note_fe_inline_asm, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0", 0, SFINAE_Suppress, false, false, 12)
+DIAG(note_fe_inline_asm_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "instantiated into assembly here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_fixit_applied, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "FIX-IT applied suggested code changes", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_fixit_failed, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "FIX-IT unable to apply suggested code changes", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_fixit_in_macro, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "FIX-IT unable to apply suggested code changes in a macro", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_fixit_unfixed_error, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "FIX-IT detected an error it cannot fix", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_incompatible_analyzer_plugin_api, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "current API version is '%0', but plugin was compiled with version '%1'", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_module_def_undef_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "macro was %select{defined|#undef'd}0 here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_module_import_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "module imported here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_private_top_level_defined, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "module defined here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(remark_fe_backend_optimization_remark, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "%0", 522, SFINAE_Suppress, false, true, 16)
+DIAG(remark_fe_backend_optimization_remark_analysis, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "%0", 523, SFINAE_Suppress, false, true, 16)
+DIAG(remark_fe_backend_optimization_remark_analysis_aliasing, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "%0; allow reordering by specifying '#pragma clang loop vectorize(enable)' before the loop. If the arrays will always be independent specify '#pragma clang loop vectorize(assume_safety)' before the loop or provide the '__restrict__' qualifier with the independent array arguments. Erroneous results will occur if these options are incorrectly applied!", 523, SFINAE_Suppress, false, true, 16)
+DIAG(remark_fe_backend_optimization_remark_analysis_fpcommute, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "%0; allow reordering by specifying '#pragma clang loop vectorize(enable)' before the loop or by providing the compiler option '-ffast-math'.", 523, SFINAE_Suppress, false, true, 16)
+DIAG(remark_fe_backend_optimization_remark_missed, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "%0", 525, SFINAE_Suppress, false, true, 16)
+DIAG(remark_fe_backend_plugin, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "%0", 566, SFINAE_Suppress, false, true, 16)
+DIAG(remark_module_build, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "building module '%0' as '%1'", 418, SFINAE_Suppress, false, false, 0)
+DIAG(remark_module_build_done, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "finished building module '%0'", 418, SFINAE_Suppress, false, false, 0)
+DIAG(warn_alias_to_weak_alias, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{alias|ifunc}2 will always resolve to %0 even if weak definition of %1 is overridden", 282, SFINAE_Suppress, false, false, 0)
+DIAG(warn_alias_with_section, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{alias|ifunc}1 will not be in section '%0' but in the same section as the %select{aliasee|resolver}2", 282, SFINAE_Suppress, false, false, 0)
+DIAG(warn_atomic_op_misaligned, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{large|misaligned}0 atomic operation may incur significant performance penalty", 41, SFINAE_Suppress, false, false, 0)
+DIAG(warn_fe_backend_frame_larger_than, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 245, SFINAE_Suppress, false, true, 16)
+DIAG(warn_fe_backend_optimization_failure, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 524, SFINAE_Suppress, false, true, 16)
+DIAG(warn_fe_backend_plugin, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 53, SFINAE_Suppress, false, true, 16)
+DIAG(warn_fe_cc_log_diagnostics_failure, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unable to open CC_LOG_DIAGNOSTICS file: %0 (using stderr)", 0, SFINAE_Suppress, false, false, 0)
+DIAG(warn_fe_cc_print_header_failure, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unable to open CC_PRINT_HEADERS file: %0 (using stderr)", 0, SFINAE_Suppress, false, false, 0)
+DIAG(warn_fe_frame_larger_than, CLASS_WARNING, (unsigned)diag::Severity::Warning, "stack frame size of %0 bytes in %q1", 245, SFINAE_Suppress, false, true, 16)
+DIAG(warn_fe_inline_asm, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 327, SFINAE_Suppress, false, false, 12)
+DIAG(warn_fe_macro_contains_embedded_newline, CLASS_WARNING, (unsigned)diag::Severity::Warning, "macro '%0' contains embedded newline; text after the newline is ignored", 0, SFINAE_Suppress, false, false, 0)
+DIAG(warn_fe_override_module, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overriding the module target triple with %0", 514, SFINAE_Suppress, false, false, 0)
+DIAG(warn_fe_serialized_diag_failure, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unable to open file %0 for serializing diagnostics (%1)", 588, SFINAE_Suppress, false, false, 0)
+DIAG(warn_fe_serialized_diag_merge_failure, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unable to merge a subprocess's serialized diagnostics", 588, SFINAE_Suppress, false, false, 0)
+DIAG(warn_fe_unable_to_open_stats_file, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unable to open statistics output file '%0': '%1'", 674, SFINAE_Suppress, false, false, 0)
+DIAG(warn_fixit_no_changes, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "FIX-IT detected errors it could not fix; no output will be generated", 0, SFINAE_Suppress, false, false, 0)
+DIAG(warn_incompatible_analyzer_plugin_api, CLASS_WARNING, (unsigned)diag::Severity::Warning, "checker plugin '%0' is not compatible with this version of the analyzer", 21, SFINAE_Suppress, false, false, 0)
+DIAG(warn_missing_submodule, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing submodule '%0'", 317, SFINAE_Suppress, false, false, 0)
+DIAG(warn_module_config_macro_undef, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{definition|#undef}0 of configuration macro '%1' has no effect on the import of '%2'; pass '%select{-D%1=...|-U%1}0' on the command line to configure the module", 132, SFINAE_Suppress, false, false, 0)
+DIAG(warn_module_config_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Error, "module file %0 cannot be loaded due to a configuration mismatch with the current compilation", 420, SFINAE_Suppress, false, false, 0)
+DIAG(warn_no_priv_submodule_use_toplevel, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no submodule named %0 in module '%1'; using top level '%2'", 546, SFINAE_Suppress, false, false, 0)
+DIAG(warn_option_invalid_ocl_version, CLASS_WARNING, (unsigned)diag::Severity::Warning, "OpenCL version %0 does not support the option '%1'", 164, SFINAE_Suppress, false, false, 27)
+DIAG(warn_profile_data_missing, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "profile data may be incomplete: of %0 function%s0, %1 %plural{1:has|:have}1 no data", 547, SFINAE_Suppress, false, false, 31)
+DIAG(warn_profile_data_out_of_date, CLASS_WARNING, (unsigned)diag::Severity::Warning, "profile data may be out of date: of %0 function%s0, %1 %plural{1:has|:have}1 mismatched data that will be ignored", 548, SFINAE_Suppress, false, false, 31)
+DIAG(warn_profile_data_unprofiled, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no profile data available for file \"%0\"", 549, SFINAE_Suppress, false, false, 31)
+DIAG(warn_stdlibcxx_not_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "include path for stdlibc++ headers not found; pass '-stdlib=libc++' on the command line to use the libc++ standard library instead", 621, SFINAE_Suppress, false, false, 0)
+DIAG(warn_unknown_diag_option, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown %select{warning|remark}0 option '%1'%select{|; did you mean '%3'?}2", 698, SFINAE_Suppress, false, false, 0)
+DIAG(warn_unknown_warning_specifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown %0 warning specifier: '%1'", 698, SFINAE_Suppress, false, false, 0)
diff --git a/clang-r353983/include/clang/Basic/DiagnosticGroups.inc b/clang-r353983/include/clang/Basic/DiagnosticGroups.inc
new file mode 100644
index 00000000..6b74a08f
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/DiagnosticGroups.inc
@@ -0,0 +1,1847 @@
+
+#ifdef GET_DIAG_ARRAYS
+static const int16_t DiagArrays[] = {
+ /* Empty */ -1,
+ /* DiagArray1 */ diag::warn_pragma_message, -1,
+ /* DiagArray2 */ diag::pp_hash_warning, -1,
+ /* DiagArray3 */ diag::warn_cfstring_truncated, -1,
+ /* DiagArray5 */ diag::warn_independentclass_attribute, diag::warn_ptr_independentclass_attribute, -1,
+ /* DiagArray6 */ diag::warn_nsobject_attribute, -1,
+ /* DiagArray8 */ diag::warn_abs_too_small, diag::warn_pointer_abs, diag::warn_unsigned_abs, diag::warn_wrong_absolute_value_type, -1,
+ /* DiagArray9 */ diag::warn_abstract_final_class, -1,
+ /* DiagArray10 */ diag::warn_abstract_vbase_init_ignored, -1,
+ /* DiagArray12 */ diag::warn_taking_address_of_packed_member, -1,
+ /* DiagArray13 */ diag::ext_typecheck_addrof_temporary, -1,
+ /* DiagArray16 */ diag::warn_alloca_align_alignof, -1,
+ /* DiagArray17 */ diag::warn_ambiguous_suitable_delete_function_found, -1,
+ /* DiagArray18 */ diag::warn_misplaced_ellipsis_vararg, -1,
+ /* DiagArray19 */ diag::warn_pp_ambiguous_macro, -1,
+ /* DiagArray20 */ diag::ext_nested_name_member_ref_lookup_ambiguous, -1,
+ /* DiagArray21 */ diag::warn_incompatible_analyzer_plugin_api, -1,
+ /* DiagArray22 */ diag::ext_abstract_pack_declarator_parens, -1,
+ /* DiagArray24 */ diag::warn_arc_bridge_cast_nonarc, -1,
+ /* DiagArray25 */ diag::warn_arc_possible_repeated_use_of_weak, -1,
+ /* DiagArray26 */ diag::warn_arc_object_memaccess, -1,
+ /* DiagArray27 */ diag::warn_arc_perform_selector_leaks, -1,
+ /* DiagArray28 */ diag::warn_arc_repeated_use_of_weak, -1,
+ /* DiagArray29 */ diag::warn_arc_retain_cycle, -1,
+ /* DiagArray30 */ diag::warn_arc_literal_assign, diag::warn_arc_retained_assign, diag::warn_arc_retained_property_assign, -1,
+ /* DiagArray31 */ diag::warn_argument_invalid_range, -1,
+ /* DiagArray32 */ diag::warn_array_index_exceeds_bounds, diag::warn_array_index_precedes_bounds, diag::warn_static_array_too_small, diag::warn_typecheck_zero_static_array_size, -1,
+ /* DiagArray33 */ diag::warn_ptr_arith_exceeds_bounds, diag::warn_ptr_arith_precedes_bounds, -1,
+ /* DiagArray35 */ diag::warn_asm_qualifier_ignored, diag::warn_file_asm_volatile, -1,
+ /* DiagArray36 */ diag::warn_asm_mismatched_size_modifier, -1,
+ /* DiagArray37 */ diag::warn_not_in_enum_assignment, -1,
+ /* DiagArray38 */ diag::warn_assume_side_effects, -1,
+ /* DiagArray40 */ diag::warn_atimport_in_framework_header, -1,
+ /* DiagArray41 */ diag::warn_atomic_op_misaligned, -1,
+ /* DiagArray42 */ diag::warn_atomic_implicit_seq_cst, -1,
+ /* DiagArray43 */ diag::warn_atomic_op_has_invalid_memory_order, -1,
+ /* DiagArray45 */ diag::warn_atomic_property_rule, -1,
+ /* DiagArray46 */ diag::warn_attribute_packed_for_bitfield, -1,
+ /* DiagArray48 */ diag::warn_drv_disabling_vptr_no_rtti_default, -1,
+ /* DiagArray49 */ diag::warn_auto_module_import, -1,
+ /* DiagArray50 */ diag::ext_auto_storage_class, -1,
+ /* DiagArray51 */ diag::warn_auto_var_is_id, -1,
+ /* DiagArray52 */ diag::warn_availability_and_unavailable, diag::warn_availability_on_static_initializer, diag::warn_availability_swift_unavailable_deprecated_only, diag::warn_availability_unknown_platform, diag::warn_availability_version_ordering, diag::warn_expected_consistent_version_separator, diag::warn_mismatched_availability, diag::warn_mismatched_availability_override, diag::warn_mismatched_availability_override_unavail, -1,
+ /* DiagArray53 */ diag::warn_fe_backend_plugin, -1,
+ /* DiagArray54 */ diag::backslash_newline_space, -1,
+ /* DiagArray55 */ diag::warn_bad_function_cast, -1,
+ /* DiagArray57 */ diag::ext_rvalue_to_reference_access_ctor, diag::ext_rvalue_to_reference_temp_copy_no_viable, -1,
+ /* DiagArray58 */ diag::ext_decomp_decl_cond, -1,
+ /* DiagArray59 */ diag::warn_impcast_bitfield_precision_constant, -1,
+ /* DiagArray60 */ diag::warn_bitfield_too_small_for_enum, diag::warn_signed_bitfield_enum_conversion, diag::warn_unsigned_bitfield_assigned_signed_enum, -1,
+ /* DiagArray61 */ diag::warn_anon_bitfield_width_exceeds_type_width, diag::warn_bitfield_width_exceeds_type_width, -1,
+ /* DiagArray62 */ diag::warn_bitwise_op_in_bitwise_op, -1,
+ /* DiagArray63 */ diag::warn_block_capture_autoreleasing, -1,
+ /* DiagArray64 */ diag::warn_impcast_bool_to_null_pointer, -1,
+ /* DiagArray66 */ diag::warn_braces_around_scalar_init, -1,
+ /* DiagArray67 */ diag::warn_objc_invalid_bridge, diag::warn_objc_invalid_bridge_to_cf, -1,
+ /* DiagArray68 */ diag::ext_pp_redef_builtin_macro, diag::ext_pp_undef_builtin_macro, -1,
+ /* DiagArray69 */ diag::warn_memcpy_chk_overflow, -1,
+ /* DiagArray70 */ diag::warn_implicit_decl_requires_sysheader, -1,
+ /* DiagArray71 */ diag::warn_zero_size_struct_union_compat, -1,
+ /* DiagArray75 */ diag::ext_old_implicitly_unsigned_long_cxx, diag::warn_auto_storage_class, diag::warn_cxx11_compat_user_defined_literal, diag::warn_cxx11_keyword, diag::warn_cxx11_right_shift_in_template_arg, diag::warn_explicit_instantiation_inline_0x, diag::warn_explicit_instantiation_must_be_global_0x, diag::warn_explicit_instantiation_out_of_scope_0x, diag::warn_explicit_instantiation_unqualified_wrong_namespace_0x, diag::warn_old_implicitly_unsigned_long_cxx, -1,
+ /* DiagArray76 */ diag::warn_deprecated_string_literal_conversion, -1,
+ /* DiagArray78 */ diag::warn_cxx11_compat_reserved_user_defined_literal, -1,
+ /* DiagArray79 */ diag::ext_alias_declaration, diag::ext_array_size_conversion, diag::ext_auto_type_specifier, diag::ext_cxx11_enum_fixed_underlying_type, diag::ext_defaulted_deleted_function, diag::ext_enum_friend, diag::ext_enumerator_list_comma_cxx, diag::ext_explicit_conversion_functions, diag::ext_extern_template, diag::ext_for_range, diag::ext_generalized_initializer_lists, diag::ext_nested_name_spec_is_enum, diag::ext_nonclass_type_friend, diag::ext_nonstatic_member_init, diag::ext_override_control_keyword, diag::ext_ref_qualifier, diag::ext_rvalue_reference, diag::ext_scoped_enum, diag::ext_static_data_member_in_union, diag::ext_template_arg_object_internal, diag::ext_template_outside_of_template, diag::ext_template_parameter_default_in_function_template, diag::ext_typename_outside_of_template, diag::ext_unelaborated_friend_type, diag::ext_variadic_templates, -1,
+ /* DiagArray80 */ diag::ext_extra_semi_cxx11, -1,
+ /* DiagArray81 */ diag::ext_inline_namespace, -1,
+ /* DiagArray82 */ diag::ext_cxx11_longlong, -1,
+ /* DiagArray83 */ diag::ext_cce_narrowing, diag::ext_init_list_constant_narrowing, diag::ext_init_list_type_narrowing, diag::ext_init_list_variable_narrowing, diag::warn_init_list_constant_narrowing, diag::warn_init_list_type_narrowing, diag::warn_init_list_variable_narrowing, -1,
+ /* DiagArray84 */ diag::ext_binary_literal_cxx14, -1,
+ /* DiagArray87 */ diag::ext_constexpr_body_invalid_stmt, diag::ext_constexpr_body_multiple_return, diag::ext_constexpr_local_var, diag::ext_constexpr_type_definition, diag::ext_cxx14_attr, diag::ext_decltype_auto_type_specifier, diag::ext_init_capture, diag::ext_variable_template, -1,
+ /* DiagArray89 */ diag::warn_cxx17_compat_exception_spec_in_signature, -1,
+ /* DiagArray91 */ diag::ext_auto_new_list_init, diag::ext_constexpr_if, diag::ext_constexpr_on_lambda_cxx17, diag::ext_cxx17_attr, diag::ext_decomp_decl, diag::ext_fold_expression, diag::ext_for_range_begin_end_types_differ, diag::ext_hex_literal_invalid, diag::ext_init_statement, diag::ext_inline_variable, diag::ext_multi_using_declaration, diag::ext_nested_namespace_definition, diag::ext_ns_enum_attribute, diag::ext_star_this_lambda_capture_cxx17, diag::ext_static_assert_no_message, diag::ext_template_template_param_typename, diag::ext_using_attribute_ns, diag::ext_using_declaration_pack, -1,
+ /* DiagArray96 */ diag::warn_cxx2a_compat_aggregate_init_with_ctors, diag::warn_cxx2a_compat_spaceship, diag::warn_cxx2a_compat_utf8_string, diag::warn_cxx2a_keyword, -1,
+ /* DiagArray98 */ diag::ext_bitfield_member_init, diag::ext_constexpr_body_invalid_stmt_cxx2a, diag::ext_constexpr_function_try_block_cxx2a, diag::ext_equals_this_lambda_capture_cxx2a, diag::ext_for_range_init_stmt, diag::ext_inline_nested_namespace_definition, diag::ext_pointer_to_const_ref_member_on_rvalue, -1,
+ /* DiagArray99 */ diag::warn_cxx17_compat_bitfield_member_init, diag::warn_cxx17_compat_constexpr_body_invalid_stmt, diag::warn_cxx17_compat_constexpr_function_try_block, diag::warn_cxx17_compat_defaulted_method_type_mismatch, diag::warn_cxx17_compat_equals_this_lambda_capture, diag::warn_cxx17_compat_for_range_init_stmt, diag::warn_cxx17_compat_inline_nested_namespace_definition, diag::warn_cxx17_compat_lambda_def_ctor_assign, diag::warn_cxx17_compat_spaceship, diag::warn_cxx17_compat_unicode_type, -1,
+ /* DiagArray100 */ diag::warn_cxx17_compat_pointer_to_const_ref_member_on_rvalue, -1,
+ /* DiagArray101 */ diag::warn_cxx14_compat_class_template_argument_deduction, diag::warn_cxx14_compat_constexpr_if, diag::warn_cxx14_compat_constexpr_on_lambda, diag::warn_cxx14_compat_decomp_decl, diag::warn_cxx14_compat_fold_expression, diag::warn_cxx14_compat_init_statement, diag::warn_cxx14_compat_inline_variable, diag::warn_cxx14_compat_nested_namespace_definition, diag::warn_cxx14_compat_star_this_lambda_capture, diag::warn_cxx14_compat_static_assert_no_message, diag::warn_cxx14_compat_template_nontype_parm_auto_type, diag::warn_cxx14_compat_template_template_param_typename, diag::warn_cxx14_compat_u8_character_literal, diag::warn_cxx14_compat_using_attribute_ns, diag::warn_cxx17_compat_multi_using_declaration, diag::warn_cxx17_compat_using_declaration_pack, diag::warn_for_range_begin_end_types_differ, -1,
+ /* DiagArray102 */ diag::warn_cxx14_compat_ns_enum_attribute, diag::warn_cxx17_hex_literal, -1,
+ /* DiagArray103 */ diag::warn_cxx11_compat_constexpr_body_invalid_stmt, diag::warn_cxx11_compat_constexpr_body_multiple_return, diag::warn_cxx11_compat_constexpr_body_no_return, diag::warn_cxx11_compat_constexpr_local_var, diag::warn_cxx11_compat_constexpr_type_definition, diag::warn_cxx11_compat_decltype_auto_type_specifier, diag::warn_cxx11_compat_deduced_return_type, diag::warn_cxx11_compat_digit_separator, diag::warn_cxx11_compat_generic_lambda, diag::warn_cxx11_compat_init_capture, diag::warn_cxx11_compat_variable_template, -1,
+ /* DiagArray104 */ diag::warn_cxx11_compat_binary_literal, -1,
+ /* DiagArray106 */ diag::warn_cxx98_compat_alias_declaration, diag::warn_cxx98_compat_alignas, diag::warn_cxx98_compat_alignof, diag::warn_cxx98_compat_attribute, diag::warn_cxx98_compat_auto_type_specifier, diag::warn_cxx98_compat_constexpr, diag::warn_cxx98_compat_ctor_list_init, diag::warn_cxx98_compat_decltype, diag::warn_cxx98_compat_defaulted_deleted_function, diag::warn_cxx98_compat_delegating_ctor, diag::warn_cxx98_compat_empty_scalar_initializer, diag::warn_cxx98_compat_enum_fixed_underlying_type, diag::warn_cxx98_compat_enum_friend, diag::warn_cxx98_compat_enum_nested_name_spec, diag::warn_cxx98_compat_explicit_conversion_functions, diag::warn_cxx98_compat_for_range, diag::warn_cxx98_compat_friend_is_member, diag::warn_cxx98_compat_generalized_initializer_lists, diag::warn_cxx98_compat_goto_into_protected_scope, diag::warn_cxx98_compat_indirect_goto_in_protected_scope, diag::warn_cxx98_compat_initializer_list_init, diag::warn_cxx98_compat_inline_namespace, diag::warn_cxx98_compat_lambda, diag::warn_cxx98_compat_less_colon_colon, diag::warn_cxx98_compat_literal_operator, diag::warn_cxx98_compat_literal_ucn_control_character, diag::warn_cxx98_compat_literal_ucn_escape_basic_scs, diag::warn_cxx98_compat_noexcept_decl, diag::warn_cxx98_compat_noexcept_expr, diag::warn_cxx98_compat_non_static_member_use, diag::warn_cxx98_compat_nonclass_type_friend, diag::warn_cxx98_compat_nonstatic_member_init, diag::warn_cxx98_compat_nontrivial_union_or_anon_struct_member, diag::warn_cxx98_compat_nullptr, diag::warn_cxx98_compat_override_control_keyword, diag::warn_cxx98_compat_pass_non_pod_arg_to_vararg, diag::warn_cxx98_compat_raw_string_literal, diag::warn_cxx98_compat_ref_qualifier, diag::warn_cxx98_compat_reference_list_init, diag::warn_cxx98_compat_rvalue_reference, diag::warn_cxx98_compat_scoped_enum, diag::warn_cxx98_compat_sfinae_access_control, diag::warn_cxx98_compat_static_assert, diag::warn_cxx98_compat_static_data_member_in_union, diag::warn_cxx98_compat_switch_into_protected_scope, diag::warn_cxx98_compat_template_arg_extra_parens, diag::warn_cxx98_compat_template_arg_null, diag::warn_cxx98_compat_template_arg_object_internal, diag::warn_cxx98_compat_template_outside_of_template, diag::warn_cxx98_compat_template_parameter_default_in_function_template, diag::warn_cxx98_compat_trailing_return_type, diag::warn_cxx98_compat_two_right_angle_brackets, diag::warn_cxx98_compat_typename_outside_of_template, diag::warn_cxx98_compat_unelaborated_friend_type, diag::warn_cxx98_compat_unicode_id, diag::warn_cxx98_compat_unicode_literal, diag::warn_cxx98_compat_unicode_type, diag::warn_cxx98_compat_using_decl_constructor, diag::warn_cxx98_compat_variadic_templates, -1,
+ /* DiagArray107 */ diag::warn_cxx98_compat_temp_copy, -1,
+ /* DiagArray108 */ diag::warn_cxx98_compat_top_level_semi, -1,
+ /* DiagArray109 */ diag::warn_cxx98_compat_template_arg_local_type, -1,
+ /* DiagArray110 */ diag::warn_cxx98_compat_array_size_conversion, diag::warn_cxx98_compat_cast_fn_obj, diag::warn_cxx98_compat_empty_fnmacro_arg, diag::warn_cxx98_compat_enumerator_list_comma, diag::warn_cxx98_compat_extern_template, diag::warn_cxx98_compat_longlong, diag::warn_cxx98_compat_no_newline_eof, diag::warn_cxx98_compat_pp_line_too_big, diag::warn_cxx98_compat_variadic_macro, -1,
+ /* DiagArray111 */ diag::warn_cxx98_compat_template_arg_unnamed_type, -1,
+ /* DiagArray112 */ diag::ext_anonymous_union, diag::ext_c11_alignment, diag::ext_c11_anonymous_struct, diag::ext_c11_generic_selection, diag::ext_c11_noreturn, diag::ext_c11_static_assert, -1,
+ /* DiagArray113 */ diag::warn_c99_compat_unicode_id, diag::warn_c99_compat_unicode_literal, diag::warn_old_implicitly_unsigned_long, -1,
+ /* DiagArray114 */ diag::ext_aggregate_init_not_constant, diag::ext_c99_array_usage, diag::ext_c99_compound_literal, diag::ext_c99_flexible_array_member, diag::ext_c99_variable_decl_in_for_loop, diag::ext_c99_whitespace_required_after_macro_name, diag::ext_designated_init, diag::ext_empty_fnmacro_arg, diag::ext_enumerator_list_comma_c, diag::ext_hex_constant_invalid, -1,
+ /* DiagArray115 */ diag::warn_call_to_pure_virtual_member_function_from_ctor_dtor, -1,
+ /* DiagArray116 */ diag::warn_cast_align, -1,
+ /* DiagArray117 */ diag::warn_cast_calling_conv, -1,
+ /* DiagArray118 */ diag::warn_cast_pointer_from_sel, -1,
+ /* DiagArray119 */ diag::warn_cast_qual, diag::warn_cast_qual2, -1,
+ /* DiagArray120 */ diag::ext_bad_cxx_cast_qualifiers_away_incoherent, -1,
+ /* DiagArray122 */ diag::warn_omp_section_is_char, diag::warn_subscript_is_char, -1,
+ /* DiagArray123 */ diag::warn_drv_yc_multiple_inputs_clang_cl, diag::warn_drv_ycyu_different_arg_clang_cl, diag::warn_drv_ycyu_no_fi_arg_clang_cl, diag::warn_pp_hdrstop_filename_ignored, diag::warn_pp_macro_def_mismatch_with_pch, -1,
+ /* DiagArray124 */ diag::warn_pass_class_arg_to_vararg, -1,
+ /* DiagArray125 */ diag::warn_comma_operator, -1,
+ /* DiagArray126 */ diag::escaped_newline_block_comment_end, diag::ext_line_comment, diag::ext_multi_line_line_comment, diag::warn_nested_block_comment, -1,
+ /* DiagArray128 */ diag::ext_typecheck_comparison_of_distinct_pointers, -1,
+ /* DiagArray129 */ diag::ext_complex_component_init, -1,
+ /* DiagArray130 */ diag::ext_typecheck_cond_pointer_integer_mismatch, -1,
+ /* DiagArray131 */ diag::warn_maybe_uninit_var, -1,
+ /* DiagArray132 */ diag::warn_module_config_macro_undef, -1,
+ /* DiagArray133 */ diag::warn_impcast_integer_precision_constant, -1,
+ /* DiagArray134 */ diag::warn_logical_instead_of_bitwise, -1,
+ /* DiagArray135 */ diag::warn_cxx14_compat_constexpr_not_const, -1,
+ /* DiagArray136 */ diag::warn_attr_on_unconsumable_class, diag::warn_loop_state_mismatch, diag::warn_param_return_typestate_mismatch, diag::warn_param_typestate_mismatch, diag::warn_return_typestate_for_unconsumable_type, diag::warn_return_typestate_mismatch, diag::warn_use_in_invalid_state, diag::warn_use_of_temp_in_invalid_state, -1,
+ /* DiagArray137 */ diag::warn_impcast_complex_scalar, diag::warn_impcast_vector_scalar, diag::warn_opencl_generic_address_space_arg, diag::warn_template_arg_negative, diag::warn_template_arg_too_large, -1,
+ /* DiagArray140 */ diag::warn_coroutine_promise_unhandled_exception_required_with_exceptions, -1,
+ /* DiagArray141 */ diag::warn_unreachable_default, -1,
+ /* DiagArray143 */ diag::warn_objc_cdirective_format_string, -1,
+ /* DiagArray144 */ diag::warn_ctad_maybe_unsupported, -1,
+ /* DiagArray146 */ diag::warn_ctu_incompat_triple, -1,
+ /* DiagArray147 */ diag::warn_attribute_argument_n_negative, diag::warn_cuda_attr_lambda_position, diag::warn_kern_is_inline, diag::warn_kern_is_method, diag::warn_pragma_unroll_cuda_value_in_parens, -1,
+ /* DiagArray148 */ diag::warn_default_atomic_custom_getter_setter, -1,
+ /* DiagArray149 */ diag::warn_dangling_variable, diag::warn_unsupported_lifetime_extension, -1,
+ /* DiagArray150 */ diag::warn_dangling_else, -1,
+ /* DiagArray151 */ diag::warn_bind_ref_member_to_parameter, diag::warn_dangling_member, diag::warn_init_ptr_member_to_parameter_addr, diag::warn_new_dangling_reference, -1,
+ /* DiagArray152 */ diag::warn_new_dangling_initializer_list, -1,
+ /* DiagArray153 */ diag::warn_drv_darwin_sdk_invalid_settings, -1,
+ /* DiagArray154 */ diag::warn_pp_date_time, -1,
+ /* DiagArray155 */ diag::warn_dealloc_in_category, -1,
+ /* DiagArray156 */ diag::warn_debug_compression_unavailable, -1,
+ /* DiagArray157 */ diag::ext_mixed_decls_code, -1,
+ /* DiagArray158 */ diag::warn_defaulted_method_deleted, -1,
+ /* DiagArray159 */ diag::warn_delegating_ctor_cycle, -1,
+ /* DiagArray160 */ diag::warn_delete_abstract_non_virtual_dtor, -1,
+ /* DiagArray161 */ diag::ext_delete_void_ptr_operand, diag::warn_delete_incomplete, -1,
+ /* DiagArray162 */ diag::warn_delete_non_virtual_dtor, -1,
+ /* DiagArray164 */ diag::warn_O4_is_O3, diag::warn_access_decl_deprecated, diag::warn_deprecated_copy_operation, diag::warn_deprecated_redundant_constexpr_static_def, diag::warn_drv_deprecated_arg, diag::warn_drv_treating_input_as_cxx, diag::warn_option_invalid_ocl_version, diag::warn_vector_long_decl_spec_combination, -1,
+ /* DiagArray165 */ diag::warn_vector_mode_deprecated, -1,
+ /* DiagArray166 */ diag::warn_atl_uuid_deprecated, diag::warn_cstyle_param, diag::warn_deprecated, diag::warn_deprecated_fwdclass_message, diag::warn_deprecated_message, diag::warn_property_method_deprecated, -1,
+ /* DiagArray167 */ diag::warn_exception_spec_deprecated, -1,
+ /* DiagArray168 */ diag::warn_deprecated_def, diag::warn_unavailable_def, -1,
+ /* DiagArray169 */ diag::warn_increment_bool, -1,
+ /* DiagArray170 */ diag::warn_objc_isa_assign, diag::warn_objc_isa_use, -1,
+ /* DiagArray171 */ diag::warn_objc_pointer_masking, -1,
+ /* DiagArray172 */ diag::warn_objc_pointer_masking_performSelector, -1,
+ /* DiagArray173 */ diag::warn_deprecated_register, -1,
+ /* DiagArray174 */ diag::warn_deprecated_this_capture, -1,
+ /* DiagArray176 */ diag::warn_direct_ivar_access, -1,
+ /* DiagArray177 */ diag::pp_disabled_macro_expansion, -1,
+ /* DiagArray180 */ diag::warn_conflicting_param_modifiers, diag::warn_conflicting_ret_type_modifiers, -1,
+ /* DiagArray182 */ diag::warn_remainder_division_by_zero, -1,
+ /* DiagArray183 */ diag::warn_attribute_dll_redeclaration, -1,
+ /* DiagArray184 */ diag::warn_attribute_dllexport_explicit_instantiation_decl, -1,
+ /* DiagArray185 */ diag::warn_attribute_dllimport_static_field_definition, -1,
+ /* DiagArray186 */ diag::warn_doc_api_container_decl_mismatch, diag::warn_doc_block_command_duplicate, diag::warn_doc_block_command_empty_paragraph, diag::warn_doc_container_decl_mismatch, diag::warn_doc_function_method_decl_mismatch, diag::warn_doc_html_start_tag_expected_ident_or_greater, diag::warn_doc_html_start_tag_expected_quoted_string, diag::warn_doc_param_duplicate, diag::warn_doc_param_invalid_direction, diag::warn_doc_param_not_attached_to_a_function_decl, diag::warn_doc_param_not_found, diag::warn_doc_returns_attached_to_a_void_function, diag::warn_doc_returns_not_attached_to_a_function_decl, diag::warn_doc_tparam_duplicate, diag::warn_doc_tparam_not_attached_to_a_template_decl, diag::warn_doc_tparam_not_found, diag::warn_not_a_doxygen_trailing_member_comment, diag::warn_verbatim_block_end_without_start, -1,
+ /* DiagArray187 */ diag::warn_doc_deprecated_not_sync, -1,
+ /* DiagArray188 */ diag::warn_doc_html_end_forbidden, diag::warn_doc_html_end_unbalanced, diag::warn_doc_html_missing_end_tag, diag::warn_doc_html_start_end_mismatch, -1,
+ /* DiagArray189 */ diag::warn_doc_param_spaces_in_direction, -1,
+ /* DiagArray190 */ diag::warn_correct_comment_command_name, diag::warn_unknown_comment_command_name, -1,
+ /* DiagArray191 */ diag::ext_dollar_in_identifier, -1,
+ /* DiagArray192 */ diag::warn_impcast_double_promotion, -1,
+ /* DiagArray193 */ diag::ext_duplicate_declspec, diag::ext_warn_duplicate_declspec, diag::warn_attribute_address_multiple_identical_qualifiers, diag::warn_duplicate_declspec, -1,
+ /* DiagArray194 */ diag::warn_duplicate_enum_values, -1,
+ /* DiagArray195 */ diag::warn_method_param_declaration, -1,
+ /* DiagArray196 */ diag::warn_duplicate_method_decl, -1,
+ /* DiagArray197 */ diag::warn_duplicate_protocol_def, -1,
+ /* DiagArray198 */ diag::warn_dyn_class_memaccess, -1,
+ /* DiagArray199 */ diag::ext_dynamic_exception_spec, -1,
+ /* DiagArray201 */ diag::ext_embedded_directive, -1,
+ /* DiagArray202 */ diag::warn_empty_for_body, diag::warn_empty_if_body, diag::warn_empty_range_based_for_body, diag::warn_empty_switch_body, diag::warn_empty_while_body, -1,
+ /* DiagArray203 */ diag::ext_decomp_decl_empty, -1,
+ /* DiagArray204 */ diag::warn_empty_init_statement, -1,
+ /* DiagArray205 */ diag::ext_empty_translation_unit, -1,
+ /* DiagArray206 */ diag::warn_incomplete_encoded_type, -1,
+ /* DiagArray208 */ diag::warn_comparison_of_mixed_enum_types, -1,
+ /* DiagArray209 */ diag::warn_comparison_of_mixed_enum_types_switch, -1,
+ /* DiagArray210 */ diag::warn_impcast_different_enum_types, -1,
+ /* DiagArray211 */ diag::ext_enum_too_large, diag::ext_enumerator_increment_too_large, -1,
+ /* DiagArray212 */ diag::warn_cdtor_function_try_handler_mem_expr, diag::warn_exception_caught_by_earlier_handler, diag::warn_throw_in_noexcept_func, -1,
+ /* DiagArray213 */ diag::warn_exit_time_destructor, -1,
+ /* DiagArray214 */ diag::warn_defined_in_function_type_macro, diag::warn_defined_in_object_type_macro, -1,
+ /* DiagArray215 */ diag::warn_drv_experimental_isel_incomplete, diag::warn_drv_experimental_isel_incomplete_opt, -1,
+ /* DiagArray216 */ diag::warn_direct_initialize_call, diag::warn_direct_super_initialize_call, -1,
+ /* DiagArray217 */ diag::warn_arc_strong_pointer_objc_pointer, -1,
+ /* DiagArray218 */ diag::warn_zero_size_struct_union_in_extern_c, -1,
+ /* DiagArray219 */ diag::warn_extern_init, -1,
+ /* DiagArray220 */ diag::warn_arm_interrupt_calling_convention, -1,
+ /* DiagArray221 */ diag::warn_namespace_member_extra_qualification, -1,
+ /* DiagArray222 */ diag::ext_extra_semi, diag::warn_extra_semi_after_mem_fn_def, -1,
+ /* DiagArray223 */ diag::warn_null_statement, -1,
+ /* DiagArray224 */ diag::ext_pp_extra_tokens_at_eol, diag::warn_omp_extra_tokens_at_eol, -1,
+ /* DiagArray225 */ diag::warn_drv_invoking_fallback, -1,
+ /* DiagArray226 */ diag::ext_clang_c_enum_fixed_underlying_type, -1,
+ /* DiagArray227 */ diag::warn_flag_enum_constant_out_of_range, -1,
+ /* DiagArray228 */ diag::ext_flexible_array_in_array, diag::ext_flexible_array_in_struct, -1,
+ /* DiagArray229 */ diag::warn_impcast_float_integer, -1,
+ /* DiagArray230 */ diag::warn_floatingpoint_eq, -1,
+ /* DiagArray231 */ diag::warn_impcast_float_to_integer, diag::warn_impcast_float_to_integer_out_of_range, -1,
+ /* DiagArray232 */ diag::warn_impcast_float_to_integer_zero, -1,
+ /* DiagArray233 */ diag::warn_redundant_loop_iteration, diag::warn_variables_not_in_loop_body, -1,
+ /* DiagArray234 */ diag::warn_format_P_no_precision, diag::warn_format_argument_needs_cast, diag::warn_format_conversion_argument_type_mismatch, diag::warn_format_invalid_annotation, diag::warn_format_invalid_positional_specifier, diag::warn_format_mix_positional_nonpositional_args, diag::warn_format_nonsensical_length, diag::warn_format_string_is_wide_literal, diag::warn_format_zero_positional_specifier, diag::warn_missing_format_string, diag::warn_printf_ObjCflags_without_ObjCConversion, diag::warn_printf_asterisk_missing_arg, diag::warn_printf_asterisk_wrong_type, diag::warn_printf_empty_objc_flag, diag::warn_printf_format_string_contains_null_char, diag::warn_printf_format_string_not_null_terminated, diag::warn_printf_ignored_flag, diag::warn_printf_incomplete_specifier, diag::warn_printf_insufficient_data_args, diag::warn_printf_invalid_objc_flag, diag::warn_printf_nonsensical_flag, diag::warn_printf_nonsensical_optional_amount, diag::warn_printf_positional_arg_exceeds_data_args, diag::warn_scanf_nonzero_width, diag::warn_scanf_scanlist_incomplete, -1,
+ /* DiagArray235 */ diag::warn_printf_data_arg_not_used, -1,
+ /* DiagArray236 */ diag::warn_format_invalid_conversion, -1,
+ /* DiagArray237 */ diag::warn_format_non_standard, diag::warn_format_non_standard_conversion_spec, diag::warn_format_non_standard_positional_arg, -1,
+ /* DiagArray238 */ diag::warn_format_nonliteral, -1,
+ /* DiagArray239 */ diag::warn_format_argument_needs_cast_pedantic, diag::warn_format_conversion_argument_type_mismatch_pedantic, -1,
+ /* DiagArray240 */ diag::warn_format_nonliteral_noargs, -1,
+ /* DiagArray242 */ diag::warn_empty_format_string, -1,
+ /* DiagArray244 */ diag::ext_four_char_character_literal, -1,
+ /* DiagArray245 */ diag::warn_fe_backend_frame_larger_than, diag::warn_fe_frame_larger_than, -1,
+ /* DiagArray246 */ diag::warn_framework_include_private_from_public, -1,
+ /* DiagArray247 */ diag::warn_function_def_in_objc_container, -1,
+ /* DiagArray248 */ diag::warn_dispatch_body_ignored, diag::warn_multiversion_duplicate_entries, -1,
+ /* DiagArray250 */ diag::ext_clang_diagnose_if, diag::ext_clang_enable_if, diag::ext_warn_gnu_final, diag::warn_attribute_on_function_definition, diag::warn_break_binds_to_switch, diag::warn_cleanup_ext, diag::warn_gcc_attribute_location, diag::warn_gcc_ignores_type_attr, diag::warn_gcc_variable_decl_in_for_loop, diag::warn_loop_ctrl_binds_to_inner, -1,
+ /* DiagArray251 */ diag::warn_global_constructor, diag::warn_global_destructor, -1,
+ /* DiagArray253 */ diag::ext_alignof_expr, -1,
+ /* DiagArray254 */ diag::ext_gnu_anonymous_struct, -1,
+ /* DiagArray255 */ diag::ext_array_init_parens, -1,
+ /* DiagArray256 */ diag::ext_auto_type, -1,
+ /* DiagArray257 */ diag::ext_binary_literal, -1,
+ /* DiagArray258 */ diag::ext_gnu_case_range, -1,
+ /* DiagArray259 */ diag::ext_integer_complex, -1,
+ /* DiagArray260 */ diag::ext_array_init_copy, -1,
+ /* DiagArray261 */ diag::ext_gnu_conditional_expr, -1,
+ /* DiagArray262 */ diag::ext_gnu_array_range, diag::ext_gnu_missing_equal_designator, diag::ext_gnu_old_style_field_designator, -1,
+ /* DiagArray263 */ diag::ext_gnu_empty_initializer, -1,
+ /* DiagArray264 */ diag::ext_empty_struct_union, diag::ext_flexible_array_empty_aggregate_gnu, diag::ext_no_named_members_in_struct_union, -1,
+ /* DiagArray265 */ diag::ext_flexible_array_init, -1,
+ /* DiagArray266 */ diag::ext_flexible_array_union_gnu, -1,
+ /* DiagArray267 */ diag::ext_expr_not_ice, diag::ext_in_class_initializer_non_constant, diag::ext_vla_folded_to_constant, -1,
+ /* DiagArray268 */ diag::ext_imaginary_constant, -1,
+ /* DiagArray269 */ diag::ext_pp_include_next_directive, -1,
+ /* DiagArray270 */ diag::ext_gnu_address_of_label, diag::ext_gnu_indirect_goto, -1,
+ /* DiagArray271 */ diag::ext_forward_ref_enum_def, -1,
+ /* DiagArray272 */ diag::ext_gnu_statement_expr, -1,
+ /* DiagArray273 */ diag::ext_in_class_initializer_float_type, -1,
+ /* DiagArray274 */ diag::ext_string_literal_operator_template, -1,
+ /* DiagArray275 */ diag::ext_typecheck_cast_to_union, -1,
+ /* DiagArray276 */ diag::ext_variable_sized_type_in_struct, -1,
+ /* DiagArray277 */ diag::ext_pp_line_zero, -1,
+ /* DiagArray278 */ diag::ext_missing_varargs_arg, diag::ext_paste_comma, -1,
+ /* DiagArray279 */ diag::warn_header_guard, -1,
+ /* DiagArray280 */ diag::warn_using_directive_in_header, -1,
+ /* DiagArray281 */ diag::warn_condition_is_idiomatic_assignment, -1,
+ /* DiagArray282 */ diag::ext_cannot_use_trivial_abi, diag::warn_alias_to_weak_alias, diag::warn_alias_with_section, diag::warn_attr_abi_tag_namespace, diag::warn_attribute_after_definition_ignored, diag::warn_attribute_iboutlet, diag::warn_attribute_ignored, diag::warn_attribute_ignored_for_field_of_type, diag::warn_attribute_ignored_on_inline, diag::warn_attribute_invalid_on_definition, diag::warn_attribute_no_decl, diag::warn_attribute_nonnull_no_pointers, diag::warn_attribute_nonnull_parm_no_args, diag::warn_attribute_not_on_decl, diag::warn_attribute_pointer_or_reference_only, diag::warn_attribute_pointers_only, diag::warn_attribute_precede_definition, diag::warn_attribute_return_pointers_only, diag::warn_attribute_return_pointers_refs_only, diag::warn_attribute_sentinel_named_arguments, diag::warn_attribute_sentinel_not_variadic, diag::warn_attribute_type_not_supported, diag::warn_attribute_unknown_visibility, diag::warn_attribute_void_function_method, diag::warn_attribute_weak_on_field, diag::warn_attribute_weak_on_local, diag::warn_attribute_wrong_decl_type, diag::warn_attribute_wrong_decl_type_str, diag::warn_block_literal_attributes_on_omitted_return_type, diag::warn_cconv_ignored, diag::warn_cconv_structors, diag::warn_cconv_varargs, diag::warn_cxx11_gnu_attribute_on_type, diag::warn_declspec_attribute_ignored, diag::warn_deprecated_anonymous_namespace, diag::warn_dllimport_dropped_from_inline_function, diag::warn_duplicate_attribute, diag::warn_duplicate_attribute_exact, diag::warn_gc_attribute_weak_on_local, diag::warn_gnu_inline_attribute_requires_inline, diag::warn_ignored_ms_inheritance, diag::warn_ignored_objc_externally_retained, diag::warn_internal_linkage_local_storage, diag::warn_interrupt_attribute_invalid, diag::warn_microsoft_qualifiers_ignored, diag::warn_mmap_unknown_attribute, diag::warn_nocf_check_attribute_ignored, diag::warn_noderef_on_non_pointer_or_array, diag::warn_ns_attribute_wrong_parameter_type, diag::warn_ns_attribute_wrong_return_type, diag::warn_opencl_attr_deprecated_ignored, diag::warn_riscv_repeated_interrupt_attribute, diag::warn_transparent_union_attribute_field_size_align, diag::warn_transparent_union_attribute_floating, diag::warn_transparent_union_attribute_not_definition, diag::warn_transparent_union_attribute_zero_fields, diag::warn_type_attribute_wrong_type, diag::warn_unhandled_ms_attribute_ignored, diag::warn_unsupported_target_attribute, diag::warn_wrong_clang_attr_namespace, -1,
+ /* DiagArray283 */ diag::warn_drv_unsupported_opt_for_target, diag::warn_ignored_gcc_optimization, -1,
+ /* DiagArray284 */ diag::warn_pragma_intrinsic_builtin, -1,
+ /* DiagArray285 */ diag::warn_pragma_optimize, -1,
+ /* DiagArray286 */ diag::warn_pragma_align_expected_equal, diag::warn_pragma_align_invalid_option, diag::warn_pragma_begin_end_mismatch, diag::warn_pragma_comment_ignored, diag::warn_pragma_debug_missing_argument, diag::warn_pragma_debug_unexpected_command, diag::warn_pragma_expected_action_or_r_paren, diag::warn_pragma_expected_colon, diag::warn_pragma_expected_colon_r_paren, diag::warn_pragma_expected_comma, diag::warn_pragma_expected_identifier, diag::warn_pragma_expected_init_seg, diag::warn_pragma_expected_integer, diag::warn_pragma_expected_lparen, diag::warn_pragma_expected_non_wide_string, diag::warn_pragma_expected_predicate, diag::warn_pragma_expected_punc, diag::warn_pragma_expected_rparen, diag::warn_pragma_expected_section_label_or_name, diag::warn_pragma_expected_section_name, diag::warn_pragma_expected_section_push_pop_or_name, diag::warn_pragma_expected_string, diag::warn_pragma_extra_tokens_at_eol, diag::warn_pragma_force_cuda_host_device_bad_arg, diag::warn_pragma_init_seg_unsupported_target, diag::warn_pragma_invalid_action, diag::warn_pragma_invalid_argument, diag::warn_pragma_invalid_specific_action, diag::warn_pragma_missing_argument, diag::warn_pragma_ms_struct, diag::warn_pragma_options_align_reset_failed, diag::warn_pragma_options_expected_align, diag::warn_pragma_pack_invalid_alignment, diag::warn_pragma_pack_malformed, diag::warn_pragma_pop_failed, diag::warn_pragma_pop_macro_no_push, diag::warn_pragma_unknown_extension, diag::warn_pragma_unsupported_action, diag::warn_pragma_unsupported_extension, diag::warn_pragma_unused_expected_var, diag::warn_pragma_unused_expected_var_arg, diag::warn_pragma_unused_undeclared_var, -1,
+ /* DiagArray287 */ diag::warn_arc_lifetime_result_type, diag::warn_block_literal_qualifiers_on_omitted_return_type, diag::warn_qual_return_type, diag::warn_typecheck_function_qualifiers_ignored, diag::warn_typecheck_reference_qualifiers, -1,
+ /* DiagArray289 */ diag::warn_auto_implicit_atomic_property, diag::warn_implicit_atomic_property, -1,
+ /* DiagArray290 */ diag::warn_impcast_floating_point_to_bool, -1,
+ /* DiagArray291 */ diag::ext_implicit_exception_spec_mismatch, -1,
+ /* DiagArray292 */ diag::warn_fallthrough_attr_unreachable, diag::warn_unannotated_fallthrough, -1,
+ /* DiagArray293 */ diag::warn_unannotated_fallthrough_per_function, -1,
+ /* DiagArray294 */ diag::warn_impcast_fixed_point_range, -1,
+ /* DiagArray295 */ diag::warn_impcast_float_precision, diag::warn_impcast_float_result_precision, -1,
+ /* DiagArray296 */ diag::ext_implicit_function_decl, diag::ext_implicit_lib_function_decl, diag::warn_builtin_unknown, diag::warn_implicit_function_decl, -1,
+ /* DiagArray297 */ diag::ext_missing_type_specifier, -1,
+ /* DiagArray298 */ diag::warn_impcast_high_order_zero_bits, diag::warn_impcast_integer_precision, -1,
+ /* DiagArray299 */ diag::warn_implicitly_retains_self, -1,
+ /* DiagArray300 */ diag::ext_integer_literal_too_large_for_signed, -1,
+ /* DiagArray302 */ diag::ext_pp_import_directive, -1,
+ /* DiagArray303 */ diag::warn_inaccessible_base_class, -1,
+ /* DiagArray304 */ diag::pp_include_next_absolute_path, -1,
+ /* DiagArray305 */ diag::pp_include_next_in_primary, -1,
+ /* DiagArray306 */ diag::warn_deep_exception_specs_differ, diag::warn_incompatible_exception_specs, -1,
+ /* DiagArray307 */ diag::ext_typecheck_convert_incompatible_function_pointer, -1,
+ /* DiagArray308 */ diag::warn_redecl_library_builtin, -1,
+ /* DiagArray309 */ diag::warn_cxx_ms_struct, diag::warn_npot_ms_struct, -1,
+ /* DiagArray310 */ diag::ext_typecheck_convert_incompatible_pointer, -1,
+ /* DiagArray311 */ diag::ext_nested_pointer_qualifier_mismatch, diag::ext_typecheck_convert_discards_qualifiers, -1,
+ /* DiagArray312 */ diag::warn_property_types_are_incompatible, -1,
+ /* DiagArray313 */ diag::warn_incompatible_sysroot, -1,
+ /* DiagArray314 */ diag::warn_mmap_incomplete_framework_module_declaration, -1,
+ /* DiagArray315 */ diag::warn_undef_method_impl, -1,
+ /* DiagArray317 */ diag::warn_missing_submodule, diag::warn_mmap_umbrella_dir_not_found, diag::warn_uncovered_module_header, -1,
+ /* DiagArray318 */ diag::warn_redeclaration_without_attribute_prev_attribute_ignored, diag::warn_redeclaration_without_import_attribute, -1,
+ /* DiagArray319 */ diag::warn_destructor_marked_not_override_overriding, -1,
+ /* DiagArray320 */ diag::warn_function_marked_not_override_overriding, -1,
+ /* DiagArray321 */ diag::ext_increment_bool, -1,
+ /* DiagArray322 */ diag::warn_infinite_recursive_function, -1,
+ /* DiagArray324 */ diag::warn_initializer_overrides, diag::warn_subobject_initializer_overrides, -1,
+ /* DiagArray325 */ diag::ext_out_of_line_qualified_id_type_names_constructor, -1,
+ /* DiagArray327 */ diag::warn_fe_inline_asm, -1,
+ /* DiagArray328 */ diag::ext_operator_new_delete_declared_inline, -1,
+ /* DiagArray329 */ diag::warn_explicit_instantiation_after_specialization, -1,
+ /* DiagArray330 */ diag::ext_typecheck_convert_int_pointer, diag::ext_typecheck_convert_pointer_int, -1,
+ /* DiagArray332 */ diag::warn_int_to_pointer_cast, -1,
+ /* DiagArray333 */ diag::warn_int_to_void_pointer_cast, -1,
+ /* DiagArray334 */ diag::warn_integer_constant_overflow, -1,
+ /* DiagArray335 */ diag::warn_drv_msp430_hwmult_mismatch, diag::warn_drv_msp430_hwmult_no_device, diag::warn_drv_msp430_hwmult_unsupported, diag::warn_drv_object_size_disabled_O0, diag::warn_drv_optimization_value, -1,
+ /* DiagArray336 */ diag::ext_constexpr_function_never_constant_expr, -1,
+ /* DiagArray337 */ diag::warn_iboutlet_object_type, diag::warn_iboutletcollection_property_assign, -1,
+ /* DiagArray338 */ diag::warn_invalid_initializer_from_system_header, -1,
+ /* DiagArray339 */ diag::warn_invalid_ios_deployment_target, -1,
+ /* DiagArray340 */ diag::warn_falloff_noreturn_function, diag::warn_noreturn_function_has_return_expr, -1,
+ /* DiagArray341 */ diag::ext_offsetof_non_pod_type, diag::ext_offsetof_non_standardlayout_type, -1,
+ /* DiagArray342 */ diag::warn_drv_ps4_sdk_dir, diag::warn_drv_unable_to_find_directory_expected, -1,
+ /* DiagArray343 */ diag::ext_partial_spec_not_more_specialized_than_primary, -1,
+ /* DiagArray345 */ diag::ext_empty_character, diag::ext_unterminated_char_or_string, -1,
+ /* DiagArray346 */ diag::warn_bad_character_encoding, diag::warn_bad_string_encoding, -1,
+ /* DiagArray347 */ diag::ext_pp_bad_paste_ms, -1,
+ /* DiagArray348 */ diag::warn_jump_out_of_seh_finally, -1,
+ /* DiagArray349 */ diag::ext_keyword_as_ident, -1,
+ /* DiagArray350 */ diag::warn_pp_macro_hides_keyword, -1,
+ /* DiagArray351 */ diag::ext_param_promoted_not_compatible_with_prototype, -1,
+ /* DiagArray352 */ diag::ext_token_used, -1,
+ /* DiagArray353 */ diag::warn_parameter_size, diag::warn_return_value_size, -1,
+ /* DiagArray355 */ diag::warn_impcast_literal_float_to_integer, diag::warn_impcast_literal_float_to_integer_out_of_range, -1,
+ /* DiagArray356 */ diag::warn_float_overflow, diag::warn_float_underflow, -1,
+ /* DiagArray357 */ diag::ext_template_arg_local_type, -1,
+ /* DiagArray358 */ diag::warn_logical_not_on_lhs_of_check, -1,
+ /* DiagArray359 */ diag::warn_logical_and_in_logical_or, -1,
+ /* DiagArray360 */ diag::ext_c99_longlong, -1,
+ /* DiagArray362 */ diag::ext_pp_macro_redef, -1,
+ /* DiagArray363 */ diag::ext_main_used, diag::ext_noreturn_main, diag::ext_variadic_main, diag::warn_main_one_arg, diag::warn_main_redefined, diag::warn_main_returns_bool_literal, diag::warn_static_main, -1,
+ /* DiagArray364 */ diag::ext_main_returns_nonint, -1,
+ /* DiagArray365 */ diag::warn_has_warning_invalid_option, -1,
+ /* DiagArray366 */ diag::ext_many_braces_around_scalar_init, -1,
+ /* DiagArray367 */ diag::warn_max_unsigned_zero, -1,
+ /* DiagArray368 */ diag::warn_suspicious_sizeof_memset, -1,
+ /* DiagArray369 */ diag::warn_memsize_comparison, -1,
+ /* DiagArray370 */ diag::warn_non_contravariant_param_types, diag::warn_non_covariant_ret_types, -1,
+ /* DiagArray372 */ diag::ext_anonymous_record_with_type, diag::ext_ms_anonymous_record, -1,
+ /* DiagArray373 */ diag::ext_ms_cast_fn_obj, diag::ext_ms_impcast_fn_obj, -1,
+ /* DiagArray374 */ diag::ext_charize_microsoft, -1,
+ /* DiagArray375 */ diag::ext_comment_paste_microsoft, -1,
+ /* DiagArray376 */ diag::ext_default_init_const, -1,
+ /* DiagArray377 */ diag::ext_pp_operator_used_as_macro_name, -1,
+ /* DiagArray378 */ diag::ext_param_default_argument_redefinition, -1,
+ /* DiagArray379 */ diag::ext_ctrl_z_eof_microsoft, -1,
+ /* DiagArray380 */ diag::ext_ms_forward_ref_enum, -1,
+ /* DiagArray381 */ diag::ext_enumerator_too_large, -1,
+ /* DiagArray382 */ diag::ext_ellipsis_exception_spec, diag::ext_incomplete_in_exception_spec, diag::ext_mismatched_exception_spec, diag::ext_mismatched_exception_spec_explicit_instantiation, diag::ext_ms_missing_exception_specification, diag::ext_override_exception_spec, -1,
+ /* DiagArray383 */ diag::warn_microsoft_dependent_exists, -1,
+ /* DiagArray384 */ diag::ext_ms_explicit_constructor_call, -1,
+ /* DiagArray385 */ diag::warn_member_extra_qualification, -1,
+ /* DiagArray386 */ diag::ext_ms_c_enum_fixed_underlying_type, -1,
+ /* DiagArray387 */ diag::ext_flexible_array_empty_aggregate_ms, diag::ext_flexible_array_union_ms, -1,
+ /* DiagArray388 */ diag::ext_goto_into_protected_scope, -1,
+ /* DiagArray389 */ diag::ext_ms_ambiguous_direct_base, -1,
+ /* DiagArray390 */ diag::ext_pp_include_search_ms, -1,
+ /* DiagArray391 */ diag::ext_mutable_reference, -1,
+ /* DiagArray392 */ diag::ext_pure_function_definition, -1,
+ /* DiagArray393 */ diag::ext_static_non_static, -1,
+ /* DiagArray394 */ diag::ext_ms_sealed_keyword, -1,
+ /* DiagArray395 */ diag::ext_explicit_instantiation_duplicate, diag::ext_found_via_dependent_bases_lookup, diag::ext_ms_delayed_template_argument, diag::ext_ms_deref_template_argument, diag::ext_ms_template_spec_redecl_out_of_scope, diag::ext_ms_template_type_arg_missing_typename, diag::ext_static_out_of_line, diag::ext_undeclared_unqual_id_with_dependent_base, -1,
+ /* DiagArray396 */ diag::ext_union_member_of_reference_type, -1,
+ /* DiagArray397 */ diag::ext_friend_tag_redecl_outside_namespace, -1,
+ /* DiagArray398 */ diag::ext_ms_using_declaration_inaccessible, -1,
+ /* DiagArray399 */ diag::ext_pseudo_dtor_on_void, -1,
+ /* DiagArray400 */ diag::warn_mismatched_delete_new, -1,
+ /* DiagArray401 */ diag::warn_conflicting_param_types, -1,
+ /* DiagArray402 */ diag::warn_conflicting_ret_types, -1,
+ /* DiagArray403 */ diag::warn_struct_class_previous_tag_mismatch, diag::warn_struct_class_tag_mismatch, -1,
+ /* DiagArray404 */ diag::warn_missing_braces, -1,
+ /* DiagArray405 */ diag::ext_no_declarators, diag::ext_standalone_specifier, diag::ext_typedef_without_a_name, diag::warn_standalone_specifier, -1,
+ /* DiagArray406 */ diag::ext_missing_exception_specification, -1,
+ /* DiagArray407 */ diag::warn_missing_field_initializers, -1,
+ /* DiagArray410 */ diag::warn_missing_method_return_type, -1,
+ /* DiagArray411 */ diag::warn_overriding_method_missing_noescape, -1,
+ /* DiagArray412 */ diag::warn_suggest_noreturn_block, diag::warn_suggest_noreturn_function, -1,
+ /* DiagArray413 */ diag::warn_cconv_knr, -1,
+ /* DiagArray414 */ diag::warn_missing_prototype, -1,
+ /* DiagArray415 */ diag::warn_missing_selector_name, -1,
+ /* DiagArray416 */ diag::warn_missing_sysroot, -1,
+ /* DiagArray417 */ diag::warn_missing_variable_declarations, -1,
+ /* DiagArray418 */ diag::remark_module_build, diag::remark_module_build_done, diag::remark_module_lock_failure, diag::remark_module_lock_timeout, -1,
+ /* DiagArray419 */ diag::warn_module_conflict, diag::warn_module_system_bit_conflict, -1,
+ /* DiagArray420 */ diag::warn_module_config_mismatch, -1,
+ /* DiagArray421 */ diag::warn_duplicate_module_file_extension, -1,
+ /* DiagArray422 */ diag::ext_module_import_in_extern_c, -1,
+ /* DiagArray423 */ diag::ext_equivalent_internal_linkage_decl_in_modules, -1,
+ /* DiagArray424 */ diag::ext_module_import_not_at_top_level_noop, -1,
+ /* DiagArray428 */ diag::warn_drv_msvc_not_found, -1,
+ /* DiagArray429 */ diag::ext_multichar_character_literal, -1,
+ /* DiagArray430 */ diag::warn_vbase_moved_multiple_times, -1,
+ /* DiagArray432 */ diag::ext_anonymous_record_with_anonymous_type, -1,
+ /* DiagArray434 */ diag::warn_operator_new_returns_null, -1,
+ /* DiagArray435 */ diag::ext_no_newline_eof, diag::warn_no_newline_eof, -1,
+ /* DiagArray436 */ diag::warn_dereference_of_noderef_type, diag::warn_dereference_of_noderef_type_no_decl, diag::warn_noderef_to_dereferenceable_pointer, -1,
+ /* DiagArray439 */ diag::warn_non_literal_null_pointer, -1,
+ /* DiagArray440 */ diag::warn_non_modular_include_in_framework_module, -1,
+ /* DiagArray441 */ diag::warn_non_modular_include_in_module, -1,
+ /* DiagArray442 */ diag::warn_cannot_pass_non_pod_arg_to_vararg, diag::warn_non_pod_vararg_with_format_string, diag::warn_second_parameter_to_va_arg_not_pod, diag::warn_second_parameter_to_va_arg_ownership_qualified, -1,
+ /* DiagArray443 */ diag::warn_non_virtual_dtor, -1,
+ /* DiagArray444 */ diag::warn_null_arg, diag::warn_null_ret, -1,
+ /* DiagArray446 */ diag::pp_nonportable_path, -1,
+ /* DiagArray447 */ diag::pp_nonportable_system_path, -1,
+ /* DiagArray448 */ diag::warn_neon_vector_initializer_non_portable, -1,
+ /* DiagArray449 */ diag::warn_cstruct_memaccess, -1,
+ /* DiagArray450 */ diag::warn_nsconsumed_attribute_mismatch, -1,
+ /* DiagArray451 */ diag::warn_nsreturns_retained_attribute_mismatch, -1,
+ /* DiagArray452 */ diag::warn_null_in_arithmetic_operation, diag::warn_null_in_comparison_operation, -1,
+ /* DiagArray453 */ diag::null_in_char_or_string, diag::null_in_file, -1,
+ /* DiagArray454 */ diag::warn_impcast_null_pointer_to_integer, -1,
+ /* DiagArray455 */ diag::warn_binding_null_to_reference, diag::warn_indirection_through_null, -1,
+ /* DiagArray456 */ diag::warn_gnu_null_ptr_arith, diag::warn_pointer_arith_null_ptr, -1,
+ /* DiagArray457 */ diag::warn_conflicting_nullability_attr_overriding_param_types, diag::warn_conflicting_nullability_attr_overriding_ret_types, diag::warn_mismatched_nullability_attr, diag::warn_null_resettable_setter, diag::warn_nullability_duplicate, -1,
+ /* DiagArray458 */ diag::warn_nullability_missing, -1,
+ /* DiagArray459 */ diag::warn_nullability_missing_array, -1,
+ /* DiagArray460 */ diag::warn_nullability_declspec, -1,
+ /* DiagArray461 */ diag::ext_nullability, -1,
+ /* DiagArray462 */ diag::warn_nullability_inferred_on_nested_type, -1,
+ /* DiagArray463 */ diag::warn_nullability_lost, -1,
+ /* DiagArray464 */ diag::warn_autosynthesis_property_ivar_match, -1,
+ /* DiagArray465 */ diag::warn_objc_circular_container, -1,
+ /* DiagArray467 */ diag::warn_objc_designated_init_missing_super_call, diag::warn_objc_designated_init_non_designated_init_call, diag::warn_objc_designated_init_non_super_designated_init_call, diag::warn_objc_implementation_missing_designated_init_override, diag::warn_objc_secondary_init_missing_init_call, diag::warn_objc_secondary_init_super_init_call, -1,
+ /* DiagArray468 */ diag::warn_superclass_variable_sized_type_not_at_end, diag::warn_variable_sized_ivar_visibility, -1,
+ /* DiagArray469 */ diag::warn_forward_class_redefinition, -1,
+ /* DiagArray470 */ diag::warn_ivars_in_interface, -1,
+ /* DiagArray471 */ diag::warn_objc_literal_comparison, -1,
+ /* DiagArray472 */ diag::warn_impcast_objective_c_literal_to_bool, diag::warn_objc_collection_literal_element, -1,
+ /* DiagArray473 */ diag::warn_pp_objc_macro_redef_ignored, -1,
+ /* DiagArray474 */ diag::warn_messaging_unqualified_id, -1,
+ /* DiagArray475 */ diag::warn_class_method_not_found, diag::warn_class_method_not_found_with_typo, diag::warn_inst_method_not_found, diag::warn_instance_method_not_found_with_typo, diag::warn_instance_method_on_class_found, diag::warn_root_inst_method_not_found, -1,
+ /* DiagArray476 */ diag::warn_missing_explicit_synthesis, -1,
+ /* DiagArray477 */ diag::warn_objc_missing_super_call, -1,
+ /* DiagArray478 */ diag::warn_multiple_method_decl, -1,
+ /* DiagArray479 */ diag::warn_objc_property_retain_of_block, -1,
+ /* DiagArray480 */ diag::warn_objc_pointer_cxx_catch_fragile, -1,
+ /* DiagArray481 */ diag::warn_objc_property_assign_on_object, -1,
+ /* DiagArray482 */ diag::warn_impl_required_for_class_property, diag::warn_impl_required_in_category_for_class_property, diag::warn_setter_getter_impl_required, diag::warn_setter_getter_impl_required_in_category, -1,
+ /* DiagArray483 */ diag::warn_property_implicitly_mismatched, -1,
+ /* DiagArray484 */ diag::warn_cocoa_naming_owned_rule, -1,
+ /* DiagArray485 */ diag::warn_objc_property_default_assign_on_object, diag::warn_objc_property_no_assignment_attribute, -1,
+ /* DiagArray486 */ diag::warn_autosynthesis_property_in_superclass, diag::warn_no_autosynthesis_property, diag::warn_no_autosynthesis_shared_ivar_property, -1,
+ /* DiagArray487 */ diag::warn_category_method_impl_match, -1,
+ /* DiagArray488 */ diag::warn_auto_synthesizing_protocol_property, -1,
+ /* DiagArray489 */ diag::warn_objc_redundant_qualified_class_type, -1,
+ /* DiagArray490 */ diag::warn_objc_readonly_property_has_setter, -1,
+ /* DiagArray492 */ diag::warn_objc_redundant_literal_use, -1,
+ /* DiagArray493 */ diag::warn_objc_root_class_missing, -1,
+ /* DiagArray494 */ diag::warn_objc_string_literal_comparison, -1,
+ /* DiagArray495 */ diag::warn_concatenated_nsarray_literal, -1,
+ /* DiagArray496 */ diag::warn_objc_unsafe_perform_selector, -1,
+ /* DiagArray497 */ diag::warn_odr_tag_type_inconsistent, -1,
+ /* DiagArray498 */ diag::warn_old_style_cast, -1,
+ /* DiagArray500 */ diag::ext_opencl_ext_vector_type_rgba_selector, -1,
+ /* DiagArray501 */ diag::warn_omp_alignment_not_power_of_two, diag::warn_omp_linear_step_zero, -1,
+ /* DiagArray502 */ diag::ext_omp_loop_not_canonical_init, diag::warn_omp_loop_64_bit_var, -1,
+ /* DiagArray503 */ diag::warn_drv_omp_offload_target_duplicate, diag::warn_drv_omp_offload_target_missingbcruntime, diag::warn_omp_non_trivial_type_mapped, diag::warn_omp_not_in_target_context, -1,
+ /* DiagArray504 */ diag::warn_drv_fine_grained_bitfield_accesses_ignored, diag::warn_drv_moutline_unsupported_opt, diag::warn_drv_ps4_force_pic, diag::warn_drv_unsupported_longcalls, diag::warn_drv_unsupported_pic_with_mabicalls, diag::warn_drv_vectorize_needs_hvx, -1,
+ /* DiagArray505 */ diag::ext_typecheck_ordered_comparison_of_function_pointers, -1,
+ /* DiagArray506 */ diag::ext_out_of_line_declaration, -1,
+ /* DiagArray507 */ diag::ext_use_out_of_scope_declaration, -1,
+ /* DiagArray508 */ diag::warn_overaligned_type, -1,
+ /* DiagArray510 */ diag::ext_string_too_long, -1,
+ /* DiagArray511 */ diag::warn_overloaded_shift_in_comparison, -1,
+ /* DiagArray512 */ diag::warn_overloaded_virtual, -1,
+ /* DiagArray514 */ diag::warn_fe_override_module, -1,
+ /* DiagArray515 */ diag::warn_conflicting_overriding_param_modifiers, diag::warn_conflicting_overriding_param_types, diag::warn_conflicting_overriding_ret_type_modifiers, diag::warn_conflicting_overriding_ret_types, diag::warn_conflicting_overriding_variadic, diag::warn_non_contravariant_overriding_param_types, diag::warn_non_covariant_overriding_ret_types, -1,
+ /* DiagArray516 */ diag::warn_drv_overriding_flag_option, -1,
+ /* DiagArray517 */ diag::warn_unnecessary_packed, -1,
+ /* DiagArray518 */ diag::warn_padded_struct_anon_field, diag::warn_padded_struct_field, diag::warn_padded_struct_size, -1,
+ /* DiagArray519 */ diag::warn_condition_is_assignment, diag::warn_precedence_bitwise_rel, diag::warn_precedence_conditional, -1,
+ /* DiagArray520 */ diag::warn_equality_with_extra_parens, -1,
+ /* DiagArray522 */ diag::remark_fe_backend_optimization_remark, -1,
+ /* DiagArray523 */ diag::remark_fe_backend_optimization_remark_analysis, diag::remark_fe_backend_optimization_remark_analysis_aliasing, diag::remark_fe_backend_optimization_remark_analysis_fpcommute, -1,
+ /* DiagArray524 */ diag::warn_fe_backend_optimization_failure, -1,
+ /* DiagArray525 */ diag::remark_fe_backend_optimization_remark_missed, -1,
+ /* DiagArray526 */ diag::warn_module_uses_date_time, -1,
+ /* DiagArray527 */ diag::ext_aggregate_init_not_constant, diag::ext_anonymous_record_with_type, diag::ext_anonymous_struct_union_qualified, diag::ext_array_size_conversion, diag::ext_auto_new_list_init, diag::ext_c99_array_usage, diag::ext_c99_compound_literal, diag::ext_c99_flexible_array_member, diag::ext_c99_variable_decl_in_for_loop, diag::ext_cast_fn_obj, diag::ext_clang_diagnose_if, diag::ext_clang_enable_if, diag::ext_cxx11_enum_fixed_underlying_type, diag::ext_cxx14_attr, diag::ext_cxx17_attr, diag::ext_designated_init, diag::ext_duplicate_declspec, diag::ext_ellipsis_exception_spec, diag::ext_empty_fnmacro_arg, diag::ext_enum_value_not_int, diag::ext_enumerator_list_comma_c, diag::ext_enumerator_list_comma_cxx, diag::ext_explicit_instantiation_without_qualified_id, diag::ext_extern_template, diag::ext_extra_semi, diag::ext_forward_ref_enum, diag::ext_freestanding_complex, diag::ext_gnu_array_range, diag::ext_gnu_ptr_func_arith, diag::ext_gnu_subscript_void_type, diag::ext_gnu_void_ptr, diag::ext_hex_constant_invalid, diag::ext_hex_literal_invalid, diag::ext_ident_list_in_param, diag::ext_integer_complement_complex, diag::ext_integer_increment_complex, diag::ext_internal_in_extern_inline_quiet, diag::ext_invalid_sign_spec, diag::ext_line_comment, diag::ext_main_used, diag::ext_multi_line_line_comment, diag::ext_named_variadic_macro, diag::ext_no_newline_eof, diag::ext_nonstandard_escape, diag::ext_ns_enum_attribute, diag::ext_param_not_declared, diag::ext_pointer_to_const_ref_member_on_rvalue, diag::ext_pp_bad_vaargs_use, diag::ext_pp_comma_expr, diag::ext_pp_ident_directive, diag::ext_pp_line_too_big, diag::ext_pp_warning_directive, diag::ext_return_has_void_expr, diag::ext_rvalue_to_reference_access_ctor, diag::ext_rvalue_to_reference_temp_copy_no_viable, diag::ext_sizeof_alignof_function_type, diag::ext_sizeof_alignof_void_type, diag::ext_subscript_non_lvalue, diag::ext_thread_before, diag::ext_typecheck_addrof_void, diag::ext_typecheck_cast_nonscalar, diag::ext_typecheck_comparison_of_fptr_to_void, diag::ext_typecheck_cond_one_void, diag::ext_typecheck_convert_pointer_void_func, diag::ext_typecheck_ordered_comparison_of_pointer_and_zero, diag::ext_variadic_macro, diag::warn_defined_in_function_type_macro, diag::warn_format_conversion_argument_type_mismatch_pedantic, diag::warn_illegal_constant_array_size, diag::warn_kern_is_method, -1,
+ /* DiagArray528 */ diag::warn_pragma_extension_is_core, -1,
+ /* DiagArray529 */ diag::warn_pessimizing_move_on_initialization, diag::warn_pessimizing_move_on_return, -1,
+ /* DiagArray530 */ diag::ext_gnu_ptr_func_arith, diag::ext_gnu_subscript_void_type, diag::ext_gnu_void_ptr, diag::ext_sizeof_alignof_function_type, diag::ext_sizeof_alignof_void_type, diag::warn_sub_ptr_zero_size_types, -1,
+ /* DiagArray531 */ diag::warn_cast_nonnull_to_bool, diag::warn_impcast_pointer_to_bool, -1,
+ /* DiagArray532 */ diag::ext_typecheck_comparison_of_pointer_integer, -1,
+ /* DiagArray533 */ diag::ext_typecheck_convert_incompatible_pointer_sign, -1,
+ /* DiagArray535 */ diag::ext_typecheck_cond_incompatible_pointers, -1,
+ /* DiagArray536 */ diag::warn_side_effects_typeid, -1,
+ /* DiagArray537 */ diag::warn_pragma_attribute_unused, -1,
+ /* DiagArray538 */ diag::pp_pragma_once_in_main_file, -1,
+ /* DiagArray539 */ diag::warn_pragma_pack_modified_after_include, diag::warn_pragma_pack_no_pop_eof, -1,
+ /* DiagArray540 */ diag::warn_pragma_pack_non_default_at_include, -1,
+ /* DiagArray541 */ diag::pp_pragma_sysheader_in_main_file, -1,
+ /* DiagArray542 */ diag::warn_redefine_extname_not_applied, -1,
+ /* DiagArray543 */ diag::ext_predef_outside_function, -1,
+ /* DiagArray544 */ diag::warn_private_extern, -1,
+ /* DiagArray545 */ diag::warn_use_of_private_header_outside_module, -1,
+ /* DiagArray546 */ diag::warn_mmap_mismatched_private_module_name, diag::warn_mmap_mismatched_private_submodule, diag::warn_mmap_redundant_export_as, diag::warn_no_priv_submodule_use_toplevel, -1,
+ /* DiagArray547 */ diag::warn_profile_data_missing, -1,
+ /* DiagArray548 */ diag::warn_profile_data_out_of_date, -1,
+ /* DiagArray549 */ diag::warn_profile_data_unprofiled, -1,
+ /* DiagArray550 */ diag::warn_property_access_suggest, -1,
+ /* DiagArray551 */ diag::warn_property_attr_mismatch, diag::warn_property_attribute, diag::warn_property_redecl_getter_mismatch, diag::warn_readonly_property, -1,
+ /* DiagArray552 */ diag::warn_unimplemented_protocol_method, -1,
+ /* DiagArray553 */ diag::warn_protocol_property_mismatch, -1,
+ /* DiagArray554 */ diag::err_func_returning_qualified_void, -1,
+ /* DiagArray555 */ diag::warn_quoted_include_in_framework_header, -1,
+ /* DiagArray556 */ diag::warn_for_range_const_reference_copy, diag::warn_for_range_copy, diag::warn_for_range_variable_always_copy, -1,
+ /* DiagArray557 */ diag::warn_auto_readonly_iboutlet_property, -1,
+ /* DiagArray558 */ diag::warn_bad_receiver_type, -1,
+ /* DiagArray559 */ diag::warn_receiver_forward_class, diag::warn_receiver_forward_instance, -1,
+ /* DiagArray560 */ diag::ext_member_redeclared, -1,
+ /* DiagArray562 */ diag::warn_redundant_move_on_return, -1,
+ /* DiagArray563 */ diag::warn_redundant_parens_around_declarator, -1,
+ /* DiagArray564 */ diag::ext_register_storage_class, -1,
+ /* DiagArray565 */ diag::warn_reinterpret_different_from_static, -1,
+ /* DiagArray566 */ diag::remark_fe_backend_plugin, -1,
+ /* DiagArray567 */ diag::warn_initializer_out_of_order, -1,
+ /* DiagArray568 */ diag::warn_objc_requires_super_protocol, -1,
+ /* DiagArray569 */ diag::warn_pp_macro_is_reserved_id, -1,
+ /* DiagArray570 */ diag::ext_ms_reserved_user_defined_literal, diag::ext_reserved_user_defined_literal, -1,
+ /* DiagArray571 */ diag::ext_retained_language_linkage, -1,
+ /* DiagArray572 */ diag::warn_ret_addr_label, diag::warn_ret_local_temp_addr_ref, diag::warn_ret_stack_addr_ref, -1,
+ /* DiagArray573 */ diag::warn_return_std_move, -1,
+ /* DiagArray574 */ diag::warn_return_std_move_in_cxx11, -1,
+ /* DiagArray575 */ diag::ext_return_has_expr, diag::ext_return_missing_expr, diag::warn_falloff_nonvoid_coroutine, diag::warn_falloff_nonvoid_function, diag::warn_falloff_nonvoid_lambda, diag::warn_maybe_falloff_nonvoid_coroutine, diag::warn_maybe_falloff_nonvoid_function, diag::warn_maybe_falloff_nonvoid_lambda, diag::warn_return_missing_expr, -1,
+ /* DiagArray576 */ diag::warn_return_value_udt, diag::warn_return_value_udt_incomplete, -1,
+ /* DiagArray577 */ diag::remark_sanitize_address_insert_extra_padding_accepted, diag::remark_sanitize_address_insert_extra_padding_rejected, -1,
+ /* DiagArray578 */ diag::warn_attribute_section_on_redeclaration, diag::warn_duplicate_codeseg_attribute, diag::warn_mismatched_section, -1,
+ /* DiagArray579 */ diag::warn_unimplemented_selector, -1,
+ /* DiagArray580 */ diag::warn_multiple_selectors, -1,
+ /* DiagArray581 */ diag::warn_self_assignment_builtin, -1,
+ /* DiagArray582 */ diag::warn_identity_field_assign, -1,
+ /* DiagArray583 */ diag::warn_self_assignment_overloaded, -1,
+ /* DiagArray584 */ diag::warn_self_move, -1,
+ /* DiagArray585 */ diag::warn_semicolon_before_method_body, -1,
+ /* DiagArray586 */ diag::warn_missing_sentinel, diag::warn_not_enough_argument, -1,
+ /* DiagArray588 */ diag::warn_fe_serialized_diag_failure, diag::warn_fe_serialized_diag_merge_failure, -1,
+ /* DiagArray589 */ diag::warn_decl_shadow, -1,
+ /* DiagArray591 */ diag::warn_shadow_field, -1,
+ /* DiagArray592 */ diag::warn_ctor_parm_shadows_field, -1,
+ /* DiagArray593 */ diag::warn_modifying_shadowing_decl, -1,
+ /* DiagArray594 */ diag::warn_ivar_use_hidden, -1,
+ /* DiagArray595 */ diag::warn_decl_shadow_uncaptured_local, -1,
+ /* DiagArray596 */ diag::warn_shift_negative, -1,
+ /* DiagArray597 */ diag::warn_shift_gt_typewidth, -1,
+ /* DiagArray598 */ diag::warn_shift_lhs_negative, -1,
+ /* DiagArray599 */ diag::warn_addition_in_bitshift, -1,
+ /* DiagArray600 */ diag::warn_shift_result_gt_typewidth, -1,
+ /* DiagArray601 */ diag::warn_shift_result_sets_sign_bit, -1,
+ /* DiagArray602 */ diag::warn_impcast_integer_64_32, -1,
+ /* DiagArray603 */ diag::warn_mixed_sign_comparison, -1,
+ /* DiagArray604 */ diag::warn_impcast_integer_sign, diag::warn_impcast_integer_sign_conditional, diag::warn_impcast_nonnegative_result, -1,
+ /* DiagArray606 */ diag::warn_no_underlying_type_specified_for_enum_bitfield, -1,
+ /* DiagArray607 */ diag::warn_sizeof_array_param, -1,
+ /* DiagArray608 */ diag::warn_sizeof_array_decay, -1,
+ /* DiagArray609 */ diag::warn_division_sizeof_ptr, -1,
+ /* DiagArray610 */ diag::warn_sizeof_pointer_expr_memaccess, diag::warn_sizeof_pointer_type_memaccess, -1,
+ /* DiagArray611 */ diag::warn_slash_u_filename, -1,
+ /* DiagArray612 */ diag::warn_sometimes_uninit_var, -1,
+ /* DiagArray613 */ diag::warn_omp_nesting_simd, diag::warn_pragma_omp_ignored, -1,
+ /* DiagArray614 */ diag::warn_sampler_initializer_invalid_bits, -1,
+ /* DiagArray616 */ diag::ext_in_class_initializer_float_type_cxx11, -1,
+ /* DiagArray617 */ diag::ext_internal_in_extern_inline, diag::ext_internal_in_extern_inline_quiet, -1,
+ /* DiagArray618 */ diag::warn_static_inline_explicit_inst_ignored, -1,
+ /* DiagArray619 */ diag::warn_static_local_in_extern_inline, -1,
+ /* DiagArray620 */ diag::warn_static_self_reference_in_init, -1,
+ /* DiagArray621 */ diag::warn_stdlibcxx_not_found, -1,
+ /* DiagArray633 */ diag::warn_strict_prototypes, -1,
+ /* DiagArray634 */ diag::warn_strict_multiple_method_decl, -1,
+ /* DiagArray635 */ diag::warn_stringcompare, -1,
+ /* DiagArray636 */ diag::warn_impcast_string_literal_to_bool, -1,
+ /* DiagArray637 */ diag::warn_string_plus_char, -1,
+ /* DiagArray638 */ diag::warn_string_plus_int, -1,
+ /* DiagArray639 */ diag::warn_strlcpycat_wrong_size, -1,
+ /* DiagArray640 */ diag::warn_strncat_large_size, diag::warn_strncat_src_size, diag::warn_strncat_wrong_size, -1,
+ /* DiagArray641 */ diag::ext_typecheck_base_super, -1,
+ /* DiagArray642 */ diag::warn_suspicious_bzero_size, -1,
+ /* DiagArray644 */ diag::warn_case_value_overflow, diag::warn_missing_case, diag::warn_not_in_enum, -1,
+ /* DiagArray645 */ diag::warn_bool_switch_condition, -1,
+ /* DiagArray647 */ diag::warn_def_missing_case, -1,
+ /* DiagArray648 */ diag::warn_sync_fetch_and_nand_semantics_change, -1,
+ /* DiagArray650 */ diag::warn_comparison_always, diag::warn_comparison_bitwise_always, -1,
+ /* DiagArray651 */ diag::warn_tautological_bool_compare, -1,
+ /* DiagArray653 */ diag::warn_out_of_range_compare, -1,
+ /* DiagArray654 */ diag::warn_tautological_overlap_comparison, -1,
+ /* DiagArray655 */ diag::warn_nonnull_expr_compare, diag::warn_null_pointer_compare, -1,
+ /* DiagArray656 */ diag::warn_tautological_constant_compare, -1,
+ /* DiagArray657 */ diag::warn_address_of_reference_null_compare, diag::warn_this_null_compare, -1,
+ /* DiagArray658 */ diag::warn_unsigned_enum_always_true_comparison, -1,
+ /* DiagArray659 */ diag::warn_unsigned_always_true_comparison, -1,
+ /* DiagArray660 */ diag::ext_typecheck_decl_incomplete_type, -1,
+ /* DiagArray662 */ diag::warn_acquired_before, diag::warn_acquired_before_after_cycle, diag::warn_cannot_resolve_lock, diag::warn_double_lock, diag::warn_expecting_lock_held_on_loop, diag::warn_expecting_locked, diag::warn_fun_excludes_mutex, diag::warn_fun_requires_lock, diag::warn_lock_exclusive_and_shared, diag::warn_lock_some_predecessors, diag::warn_no_unlock, diag::warn_unlock_but_no_lock, diag::warn_unlock_kind_mismatch, diag::warn_var_deref_requires_any_lock, diag::warn_var_deref_requires_lock, diag::warn_variable_requires_any_lock, diag::warn_variable_requires_lock, -1,
+ /* DiagArray663 */ diag::warn_invalid_capability_name, diag::warn_thread_attribute_argument_not_lockable, diag::warn_thread_attribute_decl_not_lockable, diag::warn_thread_attribute_decl_not_pointer, diag::warn_thread_attribute_ignored, diag::warn_thread_attribute_not_on_capability_member, diag::warn_thread_attribute_not_on_non_static_member, -1,
+ /* DiagArray664 */ diag::warn_thread_safety_beta, -1,
+ /* DiagArray665 */ diag::warn_acquire_requires_negative_cap, -1,
+ /* DiagArray666 */ diag::warn_fun_requires_lock_precise, diag::warn_var_deref_requires_lock_precise, diag::warn_variable_requires_lock_precise, -1,
+ /* DiagArray667 */ diag::warn_guarded_pass_by_reference, diag::warn_pt_guarded_pass_by_reference, -1,
+ /* DiagArray668 */ diag::warn_thread_safety_verbose, -1,
+ /* DiagArray669 */ diag::trigraph_converted, diag::trigraph_ends_block_comment, diag::trigraph_ignored, diag::trigraph_ignored_block_comment, -1,
+ /* DiagArray671 */ diag::warn_type_safety_null_pointer_required, diag::warn_type_safety_type_mismatch, diag::warn_type_tag_for_datatype_wrong_kind, -1,
+ /* DiagArray672 */ diag::ext_redefinition_of_typedef, -1,
+ /* DiagArray673 */ diag::ext_typename_missing, -1,
+ /* DiagArray674 */ diag::warn_fe_unable_to_open_stats_file, -1,
+ /* DiagArray675 */ diag::warn_unavailable_fwdclass_message, -1,
+ /* DiagArray676 */ diag::warn_undeclared_selector, diag::warn_undeclared_selector_with_typo, -1,
+ /* DiagArray677 */ diag::warn_pp_undef_identifier, -1,
+ /* DiagArray678 */ diag::warn_address_of_reference_bool_conversion, diag::warn_this_bool_conversion, -1,
+ /* DiagArray679 */ diag::warn_func_template_missing, -1,
+ /* DiagArray680 */ diag::warn_undefined_inline, -1,
+ /* DiagArray681 */ diag::warn_undefined_internal, -1,
+ /* DiagArray682 */ diag::ext_undefined_internal_type, -1,
+ /* DiagArray683 */ diag::warn_pointer_indirection_from_incompatible_type, diag::warn_undefined_reinterpret_cast, -1,
+ /* DiagArray684 */ diag::warn_var_template_missing, -1,
+ /* DiagArray685 */ diag::warn_side_effects_unevaluated_context, -1,
+ /* DiagArray686 */ diag::warn_unguarded_availability, -1,
+ /* DiagArray687 */ diag::warn_unguarded_availability_new, -1,
+ /* DiagArray688 */ diag::warn_ucn_escape_incomplete, diag::warn_ucn_escape_no_digits, diag::warn_ucn_escape_surrogate, diag::warn_ucn_not_valid_in_c89, diag::warn_ucn_not_valid_in_c89_literal, -1,
+ /* DiagArray689 */ diag::warn_utf8_symbol_homoglyph, -1,
+ /* DiagArray690 */ diag::ext_unicode_whitespace, -1,
+ /* DiagArray691 */ diag::warn_utf8_symbol_zero_width, -1,
+ /* DiagArray692 */ diag::warn_base_class_is_uninit, diag::warn_field_is_uninit, diag::warn_reference_field_is_uninit, diag::warn_uninit_byref_blockvar_captured_by_block, diag::warn_uninit_self_reference_in_init, diag::warn_uninit_self_reference_in_reference_init, diag::warn_uninit_var, -1,
+ /* DiagArray693 */ diag::warn_drv_unknown_argument_clang_cl, diag::warn_drv_unknown_argument_clang_cl_with_suggestion, -1,
+ /* DiagArray694 */ diag::warn_unknown_attribute_ignored, -1,
+ /* DiagArray695 */ diag::ext_unknown_escape, -1,
+ /* DiagArray696 */ diag::ext_on_off_switch_syntax, diag::ext_pragma_syntax_eod, diag::ext_stdc_pragma_ignored, diag::warn_pragma_diagnostic_cannot_pop, diag::warn_pragma_diagnostic_invalid, diag::warn_pragma_diagnostic_invalid_option, diag::warn_pragma_diagnostic_invalid_token, diag::warn_pragma_ignored, diag::warn_pragma_include_alias_expected, diag::warn_pragma_include_alias_expected_filename, diag::warn_pragma_include_alias_mismatch_angle, diag::warn_pragma_include_alias_mismatch_quote, diag::warn_pragma_warning_expected, diag::warn_pragma_warning_expected_number, diag::warn_pragma_warning_push_level, diag::warn_pragma_warning_spec_invalid, diag::warn_stdc_fenv_access_not_supported, -1,
+ /* DiagArray697 */ diag::warn_unknown_sanitizer_ignored, -1,
+ /* DiagArray698 */ diag::warn_pragma_diagnostic_unknown_warning, diag::warn_unknown_diag_option, diag::warn_unknown_warning_specifier, -1,
+ /* DiagArray699 */ diag::ext_template_arg_unnamed_type, -1,
+ /* DiagArray700 */ diag::warn_unneeded_internal_decl, diag::warn_unneeded_static_internal_decl, -1,
+ /* DiagArray701 */ diag::warn_unneeded_member_function, -1,
+ /* DiagArray702 */ diag::warn_unreachable, -1,
+ /* DiagArray704 */ diag::warn_unreachable_break, -1,
+ /* DiagArray705 */ diag::warn_unreachable_loop_increment, -1,
+ /* DiagArray706 */ diag::warn_unreachable_return, -1,
+ /* DiagArray707 */ diag::warn_unsequenced_mod_mod, diag::warn_unsequenced_mod_use, -1,
+ /* DiagArray708 */ diag::warn_target_unsupported_abs2008, diag::warn_target_unsupported_abslegacy, -1,
+ /* DiagArray709 */ diag::warn_at_available_unchecked_use, -1,
+ /* DiagArray710 */ diag::warn_target_unsupported_compact_branches, -1,
+ /* DiagArray711 */ diag::warn_attribute_dll_instantiated_base_class, -1,
+ /* DiagArray712 */ diag::warn_template_qualified_friend_ignored, diag::warn_template_qualified_friend_unsupported, -1,
+ /* DiagArray713 */ diag::warn_drv_unsupported_gpopt, -1,
+ /* DiagArray714 */ diag::warn_target_unsupported_nan2008, diag::warn_target_unsupported_nanlegacy, -1,
+ /* DiagArray715 */ diag::warn_drv_unsupported_debug_info_opt_for_target, -1,
+ /* DiagArray716 */ diag::warn_attribute_protected_visibility, -1,
+ /* DiagArray717 */ diag::ext_partial_specs_not_deducible, -1,
+ /* DiagArray720 */ diag::warn_drv_diagnostics_hotness_requires_pgo, diag::warn_drv_empty_joined_argument, diag::warn_drv_input_file_unused, diag::warn_drv_input_file_unused_by_cpp, diag::warn_drv_preprocessed_input_file_unused, diag::warn_drv_unused_argument, diag::warn_ignored_clang_option, -1,
+ /* DiagArray721 */ diag::warn_unused_comparison, -1,
+ /* DiagArray722 */ diag::warn_unused_const_variable, -1,
+ /* DiagArray723 */ diag::warn_unused_exception_param, -1,
+ /* DiagArray724 */ diag::warn_unused_function, -1,
+ /* DiagArray725 */ diag::warn_unused_property_expr, -1,
+ /* DiagArray726 */ diag::warn_unused_label, -1,
+ /* DiagArray727 */ diag::warn_unused_lambda_capture, -1,
+ /* DiagArray728 */ diag::warn_unused_local_typedef, -1,
+ /* DiagArray730 */ diag::pp_macro_not_used, -1,
+ /* DiagArray731 */ diag::warn_unused_member_function, -1,
+ /* DiagArray732 */ diag::warn_unused_parameter, -1,
+ /* DiagArray733 */ diag::warn_unused_private_field, -1,
+ /* DiagArray734 */ diag::warn_unused_property_backing_ivar, -1,
+ /* DiagArray735 */ diag::warn_unused_result, -1,
+ /* DiagArray736 */ diag::warn_unused_template, -1,
+ /* DiagArray737 */ diag::warn_unused_call, diag::warn_unused_container_subscript_expr, diag::warn_unused_expr, diag::warn_unused_voidptr, -1,
+ /* DiagArray738 */ diag::warn_unused_variable, -1,
+ /* DiagArray739 */ diag::warn_unused_volatile, -1,
+ /* DiagArray740 */ diag::warn_used_but_marked_unused, -1,
+ /* DiagArray741 */ diag::warn_user_literal_reserved, -1,
+ /* DiagArray742 */ diag::warn_diagnose_if_succeeded, -1,
+ /* DiagArray743 */ diag::warn_second_arg_of_va_start_not_last_named_param, diag::warn_second_parameter_to_va_arg_never_compatible, diag::warn_va_start_type_is_undefined, -1,
+ /* DiagArray744 */ diag::ext_named_variadic_macro, diag::ext_pp_bad_vaopt_use, diag::ext_variadic_macro, -1,
+ /* DiagArray745 */ diag::warn_typecheck_vector_element_sizes_not_equal, -1,
+ /* DiagArray746 */ diag::warn_incompatible_vectors, -1,
+ /* DiagArray748 */ diag::warn_empty_parens_are_function_decl, diag::warn_parens_disambiguated_as_function_declaration, diag::warn_parens_disambiguated_as_variable_declaration, -1,
+ /* DiagArray749 */ diag::warn_decl_in_param_list, diag::warn_redefinition_in_param_list, -1,
+ /* DiagArray750 */ diag::warn_vla_used, -1,
+ /* DiagArray751 */ diag::ext_vla, -1,
+ /* DiagArray752 */ diag::ext_typecheck_indirection_through_void_pointer, -1,
+ /* DiagArray754 */ diag::warn_weak_template_vtable, -1,
+ /* DiagArray755 */ diag::warn_weak_vtable, -1,
+ /* DiagArray756 */ diag::ext_deprecated_string_literal_conversion, -1,
+ /* DiagArray758 */ diag::warn_zero_as_null_pointer_constant, -1,
+ /* DiagArray759 */ diag::ext_typecheck_zero_array_size, -1,
+};
+
+static const int16_t DiagSubGroups[] = {
+ /* Empty */ -1,
+ /* DiagSubGroup0 */ 220, -1,
+ /* DiagSubGroup4 */ 15, 220, -1,
+ /* DiagSubGroup11 */ 531, 635, 655, -1,
+ /* DiagSubGroup15 */ 425, 519, 644, 645, -1,
+ /* DiagSubGroup23 */ 30, 29, 26, -1,
+ /* DiagSubGroup28 */ 25, -1,
+ /* DiagSubGroup34 */ 36, 35, -1,
+ /* DiagSubGroup44 */ 289, 148, -1,
+ /* DiagSubGroup47 */ 694, 282, -1,
+ /* DiagSubGroup56 */ 84, 104, 257, -1,
+ /* DiagSubGroup57 */ 107, -1,
+ /* DiagSubGroup64 */ 531, 678, -1,
+ /* DiagSubGroup65 */ 64, -1,
+ /* DiagSubGroup72 */ 75, -1,
+ /* DiagSubGroup73 */ 79, -1,
+ /* DiagSubGroup74 */ 83, -1,
+ /* DiagSubGroup75 */ 83, 78, 76, 103, 101, 99, -1,
+ /* DiagSubGroup77 */ 75, 105, 102, 100, -1,
+ /* DiagSubGroup79 */ 80, 81, 82, -1,
+ /* DiagSubGroup85 */ 101, 99, -1,
+ /* DiagSubGroup86 */ 85, 102, 100, -1,
+ /* DiagSubGroup87 */ 84, -1,
+ /* DiagSubGroup88 */ 173, 169, 89, 99, -1,
+ /* DiagSubGroup90 */ 88, 100, -1,
+ /* DiagSubGroup92 */ 87, -1,
+ /* DiagSubGroup93 */ 88, -1,
+ /* DiagSubGroup94 */ 89, -1,
+ /* DiagSubGroup95 */ 91, -1,
+ /* DiagSubGroup97 */ 96, -1,
+ /* DiagSubGroup100 */ 99, -1,
+ /* DiagSubGroup102 */ 101, -1,
+ /* DiagSubGroup105 */ 103, 104, -1,
+ /* DiagSubGroup106 */ 109, 111, 103, 101, 99, -1,
+ /* DiagSubGroup110 */ 106, 107, 108, 105, 102, 100, -1,
+ /* DiagSubGroup124 */ 442, -1,
+ /* DiagSubGroup127 */ 126, -1,
+ /* DiagSubGroup133 */ 59, -1,
+ /* DiagSubGroup137 */ 64, 133, 210, 60, 229, 602, 330, 298, 295, 355, 439, 454, 472, 604, 636, -1,
+ /* DiagSubGroup138 */ 454, -1,
+ /* DiagSubGroup139 */ 140, -1,
+ /* DiagSubGroup142 */ 2, -1,
+ /* DiagSubGroup149 */ 151, 152, 572, -1,
+ /* DiagSubGroup163 */ 162, 160, -1,
+ /* DiagSubGroup164 */ 165, 166, 167, 169, 173, 174, 175, -1,
+ /* DiagSubGroup171 */ 172, -1,
+ /* DiagSubGroup175 */ 76, -1,
+ /* DiagSubGroup181 */ 182, -1,
+ /* DiagSubGroup186 */ 188, 187, -1,
+ /* DiagSubGroup189 */ 190, -1,
+ /* DiagSubGroup199 */ 167, -1,
+ /* DiagSubGroup200 */ 443, -1,
+ /* DiagSubGroup207 */ 224, -1,
+ /* DiagSubGroup208 */ 209, -1,
+ /* DiagSubGroup220 */ 407, 287, 324, 585, 410, 603, 732, 456, 204, -1,
+ /* DiagSubGroup222 */ 108, 80, -1,
+ /* DiagSubGroup223 */ 204, -1,
+ /* DiagSubGroup229 */ 231, 232, -1,
+ /* DiagSubGroup234 */ 235, 242, 444, 240, 241, 236, -1,
+ /* DiagSubGroup243 */ 238, 240, 241, -1,
+ /* DiagSubGroup252 */ 253, 254, 256, 257, 258, 259, 260, 261, 262, 263, 264, 751, 265, 266, 267, 268, 269, 270, 560, 271, 272, 273, 274, 275, 276, 759, 277, 278, -1,
+ /* DiagSubGroup286 */ 284, 285, -1,
+ /* DiagSubGroup288 */ 296, 297, -1,
+ /* DiagSubGroup292 */ 293, -1,
+ /* DiagSubGroup310 */ 311, 307, -1,
+ /* DiagSubGroup316 */ 317, 441, -1,
+ /* DiagSubGroup321 */ 169, -1,
+ /* DiagSubGroup331 */ 330, -1,
+ /* DiagSubGroup332 */ 333, -1,
+ /* DiagSubGroup335 */ 283, -1,
+ /* DiagSubGroup357 */ 109, -1,
+ /* DiagSubGroup360 */ 82, -1,
+ /* DiagSubGroup361 */ 233, 556, -1,
+ /* DiagSubGroup371 */ 374, 390, 377, 386, 394, 397, 382, 398, 391, 392, 396, 384, 381, 378, 395, 393, 380, 388, 387, 385, 373, 376, 399, 372, 375, 379, 318, -1,
+ /* DiagSubGroup425 */ 122, 126, 163, 233, 234, 288, 322, 403, 404, 426, 429, 567, 575, 581, 584, 607, 608, 638, 669, 692, 696, 718, 753, 477, 467, 468, 512, 544, 118, 218, 742, -1,
+ /* DiagSubGroup426 */ 529, 562, 573, 584, -1,
+ /* DiagSubGroup427 */ 390, -1,
+ /* DiagSubGroup431 */ 83, -1,
+ /* DiagSubGroup437 */ 89, -1,
+ /* DiagSubGroup438 */ 603, 137, 356, -1,
+ /* DiagSubGroup441 */ 440, -1,
+ /* DiagSubGroup458 */ 459, -1,
+ /* DiagSubGroup466 */ 491, -1,
+ /* DiagSubGroup471 */ 494, -1,
+ /* DiagSubGroup491 */ 492, -1,
+ /* DiagSubGroup513 */ 324, -1,
+ /* DiagSubGroup519 */ 359, 358, 62, 599, 511, 520, 150, -1,
+ /* DiagSubGroup521 */ 686, -1,
+ /* DiagSubGroup527 */ 112, 80, 82, 84, 228, 244, 254, 256, 257, 258, 259, 260, 261, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 275, 277, 278, 350, 360, 374, 375, 377, 379, 381, 386, 387, 393, 510, 751, 759, 461, 226, 682, 571, 129, 432, 157, 191, 352, 302, 201, 205, -1,
+ /* DiagSubGroup539 */ 540, -1,
+ /* DiagSubGroup542 */ 696, 286, 537, 539, -1,
+ /* DiagSubGroup564 */ 173, -1,
+ /* DiagSubGroup570 */ 78, -1,
+ /* DiagSubGroup575 */ 576, -1,
+ /* DiagSubGroup579 */ 580, -1,
+ /* DiagSubGroup581 */ 583, 582, -1,
+ /* DiagSubGroup587 */ 707, -1,
+ /* DiagSubGroup589 */ 593, 594, -1,
+ /* DiagSubGroup590 */ 589, 592, 595, 591, -1,
+ /* DiagSubGroup592 */ 593, -1,
+ /* DiagSubGroup616 */ 273, -1,
+ /* DiagSubGroup643 */ 610, 198, 449, 368, 642, -1,
+ /* DiagSubGroup650 */ 651, 655, 654, 657, -1,
+ /* DiagSubGroup651 */ 653, -1,
+ /* DiagSubGroup652 */ 656, 659, 658, -1,
+ /* DiagSubGroup661 */ 663, 662, 666, 667, -1,
+ /* DiagSubGroup685 */ 536, -1,
+ /* DiagSubGroup686 */ 687, -1,
+ /* DiagSubGroup692 */ 612, 620, -1,
+ /* DiagSubGroup699 */ 111, -1,
+ /* DiagSubGroup702 */ 705, -1,
+ /* DiagSubGroup703 */ 702, 704, 706, -1,
+ /* DiagSubGroup718 */ 719, 724, 726, 733, 727, 728, 737, 738, 734, -1,
+ /* DiagSubGroup724 */ 700, -1,
+ /* DiagSubGroup729 */ 728, -1,
+ /* DiagSubGroup731 */ 701, -1,
+ /* DiagSubGroup736 */ 700, -1,
+ /* DiagSubGroup737 */ 721, 735, 685, -1,
+ /* DiagSubGroup738 */ 722, -1,
+ /* DiagSubGroup747 */ 746, -1,
+ /* DiagSubGroup756 */ 175, -1,
+ /* DiagSubGroup757 */ 756, -1,
+};
+
+static const char DiagGroupNames[] = {
+ "\000\020#pragma-messages\t#warnings\020CFString-literal\003CL4\032Indep"
+ "endentClass-attribute\022NSObject-attribute\003abi\016absolute-value\024"
+ "abstract-final-class\023abstract-vbase-init\007address\030address-of-pa"
+ "cked-member\024address-of-temporary\020aggregate-return\003all\031alloc"
+ "a-with-align-alignof\020ambiguous-delete\022ambiguous-ellipsis\017ambig"
+ "uous-macro\031ambiguous-member-template\034analyzer-incompatible-plugin"
+ "\025anonymous-pack-parens\003arc%arc-bridge-casts-disallowed-in-nonarc\036"
+ "arc-maybe-repeated-use-of-weak\025arc-non-pod-memaccess\031arc-performS"
+ "elector-leaks\030arc-repeated-use-of-weak\021arc-retain-cycles\032arc-u"
+ "nsafe-retained-assign\026argument-outside-range\014array-bounds\037arra"
+ "y-bounds-pointer-arithmetic\003asm\025asm-ignored-qualifier\022asm-oper"
+ "and-widths\013assign-enum\006assume\013at-protocol\034atimport-in-frame"
+ "work-header\020atomic-alignment\027atomic-implicit-seq-cst\026atomic-me"
+ "mory-ordering\021atomic-properties*atomic-property-with-user-defined-ac"
+ "cessor\035attribute-packed-for-bitfield\nattributes\033auto-disable-vpt"
+ "r-sanitizer\013auto-import\022auto-storage-class\013auto-var-id\014avai"
+ "lability\016backend-plugin\030backslash-newline-escape\021bad-function-"
+ "cast\016binary-literal\026bind-to-temporary-copy\024binding-in-conditio"
+ "n\034bitfield-constant-conversion\030bitfield-enum-conversion\016bitfie"
+ "ld-width\026bitwise-op-parentheses\033block-capture-autoreleasing\017bo"
+ "ol-conversion\020bool-conversions\022braced-scalar-init\013bridge-cast\027"
+ "builtin-macro-redefined\027builtin-memcpy-chk-size\027builtin-requires-"
+ "header\nc++-compat\014c++0x-compat\020c++0x-extensions\017c++0x-narrowi"
+ "ng\014c++11-compat(c++11-compat-deprecated-writable-strings\025c++11-co"
+ "mpat-pedantic*c++11-compat-reserved-user-defined-literal\020c++11-exten"
+ "sions\020c++11-extra-semi\026c++11-inline-namespace\017c++11-long-long\017"
+ "c++11-narrowing\024c++14-binary-literal\014c++14-compat\025c++14-compat"
+ "-pedantic\020c++14-extensions\014c++17-compat\025c++17-compat-mangling\025"
+ "c++17-compat-pedantic\020c++17-extensions\020c++1y-extensions\014c++1z-"
+ "compat\025c++1z-compat-mangling\020c++1z-extensions\014c++2a-compat\025"
+ "c++2a-compat-pedantic\020c++2a-extensions\036c++98-c++11-c++14-c++17-co"
+ "mpat'c++98-c++11-c++14-c++17-compat-pedantic\030c++98-c++11-c++14-compa"
+ "t!c++98-c++11-c++14-compat-pedantic\022c++98-c++11-compat!c++98-c++11-c"
+ "ompat-binary-literal\033c++98-c++11-compat-pedantic\014c++98-compat#c++"
+ "98-compat-bind-to-temporary-copy\027c++98-compat-extra-semi%c++98-compa"
+ "t-local-type-template-args\025c++98-compat-pedantic'c++98-compat-unname"
+ "d-type-template-args\016c11-extensions\nc99-compat\016c99-extensions#ca"
+ "ll-to-pure-virtual-from-ctor-dtor\ncast-align\027cast-calling-conventio"
+ "n\020cast-of-sel-type\tcast-qual\023cast-qual-unrelated\nchar-align\017"
+ "char-subscripts\014clang-cl-pch\015class-varargs\005comma\007comment\010"
+ "comments\036compare-distinct-pointer-types\026complex-component-init\031"
+ "conditional-type-mismatch\031conditional-uninitialized\015config-macros"
+ "\023constant-conversion\030constant-logical-operand\023constexpr-not-co"
+ "nst\010consumed\nconversion\017conversion-null\tcoroutine%coroutine-mis"
+ "sing-unhandled-exception\026covered-switch-default\003cpp\030cstring-fo"
+ "rmat-directive\026ctad-maybe-unsupported\021ctor-dtor-privacy\003ctu\013"
+ "cuda-compat\030custom-atomic-properties\010dangling\015dangling-else\016"
+ "dangling-field\031dangling-initializer-list\023darwin-sdk-settings\tdat"
+ "e-time\023dealloc-in-category\035debug-compression-unavailable\033decla"
+ "ration-after-statement\032defaulted-function-deleted\026delegating-ctor"
+ "-cycles delete-abstract-non-virtual-dtor\021delete-incomplete$delete-no"
+ "n-abstract-non-virtual-dtor\027delete-non-virtual-dtor\ndeprecated\025d"
+ "eprecated-attributes\027deprecated-declarations!deprecated-dynamic-exce"
+ "ption-spec\032deprecated-implementations\031deprecated-increment-bool\031"
+ "deprecated-objc-isa-usage%deprecated-objc-pointer-introspection5depreca"
+ "ted-objc-pointer-introspection-performSelector\023deprecated-register\027"
+ "deprecated-this-capture\033deprecated-writable-strings\022direct-ivar-a"
+ "ccess\030disabled-macro-expansion\025disabled-optimization\014discard-q"
+ "ual\034distributed-object-modifiers\013div-by-zero\020division-by-zero\036"
+ "dll-attribute-on-redeclaration%dllexport-explicit-instantiation-decl\032"
+ "dllimport-static-field-def\015documentation\035documentation-deprecated"
+ "-sync\022documentation-html\026documentation-pedantic\035documentation-"
+ "unknown-command\036dollar-in-identifier-extension\020double-promotion\030"
+ "duplicate-decl-specifier\016duplicate-enum\024duplicate-method-arg\026d"
+ "uplicate-method-match\022duplicate-protocol\027dynamic-class-memaccess\026"
+ "dynamic-exception-spec\006effc++\022embedded-directive\nempty-body\023e"
+ "mpty-decomposition\017empty-init-stmt\026empty-translation-unit\013enco"
+ "de-type\014endif-labels\014enum-compare\023enum-compare-switch\017enum-"
+ "conversion\016enum-too-large\nexceptions\025exit-time-destructors\024ex"
+ "pansion-to-defined\021experimental-isel\030explicit-initialize-call\027"
+ "explicit-ownership-type\017extern-c-compat\022extern-initializer\005ext"
+ "ra\023extra-qualification\nextra-semi\017extra-semi-stmt\014extra-token"
+ "s\010fallback\024fixed-enum-extension\tflag-enum\031flexible-array-exte"
+ "nsions\020float-conversion\013float-equal\031float-overflow-conversion\025"
+ "float-zero-conversion\021for-loop-analysis\006format\021format-extra-ar"
+ "gs\030format-invalid-specifier\016format-non-iso\021format-nonliteral\017"
+ "format-pedantic\017format-security\nformat-y2k\022format-zero-length\010"
+ "format=2\023four-char-constants\022frame-larger-than=%framework-include"
+ "-private-from-public\036function-def-in-objc-container\025function-mult"
+ "iversion\015future-compat\ngcc-compat\023global-constructors\003gnu\026"
+ "gnu-alignof-expression\024gnu-anonymous-struct\033gnu-array-member-pare"
+ "n-init\015gnu-auto-type\022gnu-binary-literal\016gnu-case-range\023gnu-"
+ "complex-integer gnu-compound-literal-initializer\037gnu-conditional-omi"
+ "tted-operand\016gnu-designator\025gnu-empty-initializer\020gnu-empty-st"
+ "ruct\036gnu-flexible-array-initializer\037gnu-flexible-array-union-memb"
+ "er\024gnu-folding-constant\026gnu-imaginary-constant\020gnu-include-nex"
+ "t\022gnu-label-as-value\023gnu-redeclared-enum\030gnu-statement-express"
+ "ion\025gnu-static-float-init$gnu-string-literal-operator-template\016gn"
+ "u-union-cast\"gnu-variable-sized-type-not-at-end\027gnu-zero-line-direc"
+ "tive!gnu-zero-variadic-macro-arguments\014header-guard\016header-hygien"
+ "e\025idiomatic-parentheses\022ignored-attributes\035ignored-optimizatio"
+ "n-argument\030ignored-pragma-intrinsic\027ignored-pragma-optimize\017ig"
+ "nored-pragmas\022ignored-qualifiers\010implicit\032implicit-atomic-prop"
+ "erties*implicit-conversion-floating-point-to-bool implicit-exception-sp"
+ "ec-mismatch\024implicit-fallthrough!implicit-fallthrough-per-function\037"
+ "implicit-fixed-point-conversion\031implicit-float-conversion\035implici"
+ "t-function-declaration\014implicit-int\027implicit-int-conversion\024im"
+ "plicit-retain-self\033implicitly-unsigned-literal\006import&import-prep"
+ "rocessor-directive-pedantic\021inaccessible-base\032include-next-absolu"
+ "te-path\033include-next-outside-header\033incompatible-exception-spec#i"
+ "ncompatible-function-pointer-types\"incompatible-library-redeclaration\026"
+ "incompatible-ms-struct\032incompatible-pointer-types.incompatible-point"
+ "er-types-discards-qualifiers\032incompatible-property-type\024incompati"
+ "ble-sysroot'incomplete-framework-module-declaration\031incomplete-imple"
+ "mentation\021incomplete-module\023incomplete-umbrella\026inconsistent-d"
+ "llimport(inconsistent-missing-destructor-override\035inconsistent-missi"
+ "ng-override\016increment-bool\022infinite-recursion\tinit-self\025initi"
+ "alizer-overrides\023injected-class-name\006inline\ninline-asm\021inline"
+ "-new-delete\"instantiation-after-specialization\016int-conversion\017in"
+ "t-conversions\023int-to-pointer-cast\030int-to-void-pointer-cast\020int"
+ "eger-overflow\035invalid-command-line-argument\021invalid-constexpr\020"
+ "invalid-iboutlet&invalid-initializer-from-system-header\035invalid-ios-"
+ "deployment-target\020invalid-noreturn\020invalid-offsetof invalid-or-no"
+ "nexistent-directory\036invalid-partial-specialization\013invalid-pch\020"
+ "invalid-pp-token\027invalid-source-encoding\023invalid-token-paste\020j"
+ "ump-seh-finally\016keyword-compat\015keyword-macro\026knr-promoted-para"
+ "meter\030language-extension-token\023large-by-value-copy\006liblto\022l"
+ "iteral-conversion\015literal-range\030local-type-template-args\027logic"
+ "al-not-parentheses\026logical-op-parentheses\tlong-long\015loop-analysi"
+ "s\017macro-redefined\004main\020main-return-type\027malformed-warning-c"
+ "heck\036many-braces-around-scalar-init\021max-unsigned-zero\026memset-t"
+ "ransposed-args\022memsize-comparison\021method-signatures\tmicrosoft\022"
+ "microsoft-anon-tag\016microsoft-cast\021microsoft-charize\027microsoft-"
+ "comment-paste\024microsoft-const-init\023microsoft-cpp-macro\"microsoft"
+ "-default-arg-redefinition\025microsoft-end-of-file microsoft-enum-forwa"
+ "rd-reference\024microsoft-enum-value\030microsoft-exception-spec\020mic"
+ "rosoft-exists#microsoft-explicit-constructor-call\035microsoft-extra-qu"
+ "alification\024microsoft-fixed-enum\030microsoft-flexible-array\016micr"
+ "osoft-goto\033microsoft-inaccessible-base\021microsoft-include\033micro"
+ "soft-mutable-reference\031microsoft-pure-definition\032microsoft-redecl"
+ "are-static\020microsoft-sealed\022microsoft-template microsoft-union-me"
+ "mber-reference\034microsoft-unqualified-friend\024microsoft-using-decl\032"
+ "microsoft-void-pseudo-dtor\025mismatched-new-delete\032mismatched-param"
+ "eter-types\027mismatched-return-types\017mismatched-tags\016missing-bra"
+ "ces\024missing-declarations\026missing-exception-spec\032missing-field-"
+ "initializers\030missing-format-attribute\024missing-include-dirs\032mis"
+ "sing-method-return-type\020missing-noescape\020missing-noreturn\030miss"
+ "ing-prototype-for-cc\022missing-prototypes\025missing-selector-name\017"
+ "missing-sysroot\035missing-variable-declarations\014module-build\017mod"
+ "ule-conflict\033module-file-config-mismatch\025module-file-extension\031"
+ "module-import-in-extern-c\"modules-ambiguous-internal-linkage\037module"
+ "s-import-nested-redundant\004most\004move\014msvc-include\016msvc-not-f"
+ "ound\tmultichar\023multiple-move-vbase\tnarrowing\021nested-anon-types\016"
+ "nested-externs\020new-returns-null\013newline-eof\007noderef\015noexcep"
+ "t-type\007non-gcc\033non-literal-null-conversion'non-modular-include-in"
+ "-framework-module\035non-modular-include-in-module\017non-pod-varargs\020"
+ "non-virtual-dtor\007nonnull\025nonportable-cfstrings\030nonportable-inc"
+ "lude-path\037nonportable-system-include-path!nonportable-vector-initial"
+ "ization\024nontrivial-memaccess\023nsconsumed-mismatch\022nsreturns-mis"
+ "match\017null-arithmetic\016null-character\017null-conversion\020null-d"
+ "ereference\027null-pointer-arithmetic\013nullability\030nullability-com"
+ "pleteness\"nullability-completeness-on-arrays\024nullability-declspec\025"
+ "nullability-extension#nullability-inferred-on-nested-type\036nullable-t"
+ "o-nonnull-conversion+objc-autosynthesis-property-ivar-name-match\027obj"
+ "c-circular-container\016objc-cocoa-api\034objc-designated-initializers\023"
+ "objc-flexible-array\037objc-forward-class-redefinition\024objc-interfac"
+ "e-ivars\024objc-literal-compare\027objc-literal-conversion\027objc-macr"
+ "o-redefinition\021objc-messaging-id\022objc-method-access\037objc-missi"
+ "ng-property-synthesis\030objc-missing-super-calls\032objc-multiple-meth"
+ "od-names\"objc-noncopy-retain-block-property\032objc-nonunified-excepti"
+ "ons#objc-property-assign-on-object-type\034objc-property-implementation"
+ "\037objc-property-implicit-mismatch*objc-property-matches-cocoa-ownersh"
+ "ip-rule\032objc-property-no-attribute\027objc-property-synthesis#objc-p"
+ "rotocol-method-implementation objc-protocol-property-synthesis\030objc-"
+ "protocol-qualifiers\"objc-readonly-with-setter-property\026objc-redunda"
+ "nt-api-use\032objc-redundant-literal-use\017objc-root-class\023objc-str"
+ "ing-compare\031objc-string-concatenation\034objc-unsafe-perform-selecto"
+ "r\003odr\016old-style-cast\024old-style-definition\027opencl-unsupporte"
+ "d-rgba\016openmp-clauses\020openmp-loop-form\015openmp-target\016option"
+ "-ignored!ordered-compare-function-pointers\027out-of-line-declaration\025"
+ "out-of-scope-function\014over-aligned\010overflow\022overlength-strings"
+ "\037overloaded-shift-op-parentheses\022overloaded-virtual\015override-i"
+ "nit\017override-module\032overriding-method-mismatch\023overriding-t-op"
+ "tion\006packed\006padded\013parentheses\024parentheses-equality\024part"
+ "ial-availability\004pass\015pass-analysis\013pass-failed\013pass-missed"
+ "\015pch-date-time\010pedantic\026pedantic-core-features\020pessimizing-"
+ "move\015pointer-arith\027pointer-bool-conversion\027pointer-integer-com"
+ "pare\014pointer-sign\023pointer-to-int-cast\025pointer-type-mismatch po"
+ "tentially-evaluated-expression\026pragma-clang-attribute\032pragma-once"
+ "-outside-header\013pragma-pack\036pragma-pack-suspicious-include#pragma"
+ "-system-header-outside-header\007pragmas&predefined-identifier-outside-"
+ "function\016private-extern\016private-header\016private-module\025profi"
+ "le-instr-missing\031profile-instr-out-of-date\030profile-instr-unprofil"
+ "ed\032property-access-dot-syntax\033property-attribute-mismatch\010prot"
+ "ocol%protocol-property-synthesis-ambiguity\032qualified-void-return-typ"
+ "e\"quoted-include-in-framework-header\023range-loop-analysis\032readonl"
+ "y-iboutlet-property\015receiver-expr\026receiver-forward-class\027redec"
+ "lared-class-member\017redundant-decls\016redundant-move\020redundant-pa"
+ "rens\010register\026reinterpret-base-class\025remark-backend-plugin\007"
+ "reorder\030requires-super-attribute\021reserved-id-macro\035reserved-us"
+ "er-defined-literal\031retained-language-linkage\024return-stack-address"
+ "\017return-std-move\030return-std-move-in-c++11\013return-type\025retur"
+ "n-type-c-linkage\020sanitize-address\007section\010selector\026selector"
+ "-type-mismatch\013self-assign\021self-assign-field\026self-assign-overl"
+ "oaded\tself-move\034semicolon-before-method-body\010sentinel\016sequenc"
+ "e-point\026serialized-diagnostics\006shadow\nshadow-all\014shadow-field"
+ "\033shadow-field-in-constructor$shadow-field-in-constructor-modified\013"
+ "shadow-ivar\027shadow-uncaptured-local\024shift-count-negative\024shift"
+ "-count-overflow\024shift-negative-value\024shift-op-parentheses\016shif"
+ "t-overflow\023shift-sign-overflow\020shorten-64-to-32\014sign-compare\017"
+ "sign-conversion\nsign-promo\024signed-enum-bitfield\025sizeof-array-arg"
+ "ument\022sizeof-array-decay\022sizeof-pointer-div\030sizeof-pointer-mem"
+ "access\020slash-u-filename\027sometimes-uninitialized\022source-uses-op"
+ "enmp\013spir-compat\017stack-protector\021static-float-init\020static-i"
+ "n-inline$static-inline-explicit-instantiation\026static-local-in-inline"
+ "\020static-self-init\023stdlibcxx-not-found\017strict-aliasing\021stric"
+ "t-aliasing=0\021strict-aliasing=1\021strict-aliasing=2\017strict-overfl"
+ "ow\021strict-overflow=0\021strict-overflow=1\021strict-overflow=2\021st"
+ "rict-overflow=3\021strict-overflow=4\021strict-overflow=5\021strict-pro"
+ "totypes\025strict-selector-match\016string-compare\021string-conversion"
+ "\020string-plus-char\017string-plus-int\024strlcpy-strlcat-size\014strn"
+ "cat-size\033super-class-method-mismatch\020suspicious-bzero\024suspicio"
+ "us-memaccess\006switch\013switch-bool\016switch-default\013switch-enum%"
+ "sync-fetch-and-nand-semantics-changed\005synth\024tautological-compare\035"
+ "tautological-constant-compare&tautological-constant-in-range-compare*ta"
+ "utological-constant-out-of-range-compare\034tautological-overlap-compar"
+ "e\034tautological-pointer-compare\037tautological-type-limit-compare\036"
+ "tautological-undefined-compare'tautological-unsigned-enum-zero-compare\""
+ "tautological-unsigned-zero-compare$tentative-definition-incomplete-type"
+ "\015thread-safety\026thread-safety-analysis\030thread-safety-attributes"
+ "\022thread-safety-beta\026thread-safety-negative\025thread-safety-preci"
+ "se\027thread-safety-reference\025thread-safety-verbose\ttrigraphs\013ty"
+ "pe-limits\013type-safety\024typedef-redefinition\020typename-missing\031"
+ "unable-to-open-stats-file\030unavailable-declarations\023undeclared-sel"
+ "ector\005undef\031undefined-bool-conversion\027undefined-func-template\020"
+ "undefined-inline\022undefined-internal\027undefined-internal-type\032un"
+ "defined-reinterpret-cast\026undefined-var-template\026unevaluated-expre"
+ "ssion\026unguarded-availability\032unguarded-availability-new\007unicod"
+ "e\021unicode-homoglyph\022unicode-whitespace\022unicode-zero-width\015u"
+ "ninitialized\020unknown-argument\022unknown-attributes\027unknown-escap"
+ "e-sequence\017unknown-pragmas\022unknown-sanitizers\026unknown-warning-"
+ "option\032unnamed-type-template-args\035unneeded-internal-declaration\030"
+ "unneeded-member-function\020unreachable-code\033unreachable-code-aggres"
+ "sive\026unreachable-code-break\037unreachable-code-loop-increment\027un"
+ "reachable-code-return\013unsequenced\017unsupported-abs\036unsupported-"
+ "availability-guard\016unsupported-cb#unsupported-dll-base-class-templat"
+ "e\022unsupported-friend\021unsupported-gpopt\017unsupported-nan\026unsu"
+ "pported-target-opt\026unsupported-visibility\037unusable-partial-specia"
+ "lization\006unused\017unused-argument\034unused-command-line-argument\021"
+ "unused-comparison\025unused-const-variable\032unused-exception-paramete"
+ "r\017unused-function\032unused-getter-return-value\014unused-label\025u"
+ "nused-lambda-capture\024unused-local-typedef\025unused-local-typedefs\015"
+ "unused-macros\026unused-member-function\020unused-parameter\024unused-p"
+ "rivate-field\024unused-property-ivar\015unused-result\017unused-templat"
+ "e\014unused-value\017unused-variable\026unused-volatile-lvalue\026used-"
+ "but-marked-unused\025user-defined-literals\025user-defined-warnings\007"
+ "varargs\017variadic-macros\015vec-elem-size\021vector-conversion\022vec"
+ "tor-conversions\014vexing-parse\nvisibility\003vla\015vla-extension\024"
+ "void-ptr-dereference\025volatile-register-var\025weak-template-vtables\014"
+ "weak-vtables\020writable-strings\015write-strings\035zero-as-null-point"
+ "er-constant\021zero-length-array"};
+
+#endif // GET_DIAG_ARRAYS
+
+
+#ifdef GET_DIAG_TABLE
+ { /* */ 0, /* Empty */ 0, /* DiagSubGroup0 */ 1 },
+ { /* #pragma-messages */ 1, /* DiagArray1 */ 1, /* Empty */ 0 },
+ { /* #warnings */ 18, /* DiagArray2 */ 3, /* Empty */ 0 },
+ { /* CFString-literal */ 28, /* DiagArray3 */ 5, /* Empty */ 0 },
+ { /* CL4 */ 45, /* Empty */ 0, /* DiagSubGroup4 */ 3 },
+ { /* IndependentClass-attribute */ 49, /* DiagArray5 */ 7, /* Empty */ 0 },
+ { /* NSObject-attribute */ 76, /* DiagArray6 */ 10, /* Empty */ 0 },
+ { /* abi */ 95, /* Empty */ 0, /* Empty */ 0 },
+ { /* absolute-value */ 99, /* DiagArray8 */ 12, /* Empty */ 0 },
+ { /* abstract-final-class */ 114, /* DiagArray9 */ 17, /* Empty */ 0 },
+ { /* abstract-vbase-init */ 135, /* DiagArray10 */ 19, /* Empty */ 0 },
+ { /* address */ 155, /* Empty */ 0, /* DiagSubGroup11 */ 6 },
+ { /* address-of-packed-member */ 163, /* DiagArray12 */ 21, /* Empty */ 0 },
+ { /* address-of-temporary */ 188, /* DiagArray13 */ 23, /* Empty */ 0 },
+ { /* aggregate-return */ 209, /* Empty */ 0, /* Empty */ 0 },
+ { /* all */ 226, /* Empty */ 0, /* DiagSubGroup15 */ 10 },
+ { /* alloca-with-align-alignof */ 230, /* DiagArray16 */ 25, /* Empty */ 0 },
+ { /* ambiguous-delete */ 256, /* DiagArray17 */ 27, /* Empty */ 0 },
+ { /* ambiguous-ellipsis */ 273, /* DiagArray18 */ 29, /* Empty */ 0 },
+ { /* ambiguous-macro */ 292, /* DiagArray19 */ 31, /* Empty */ 0 },
+ { /* ambiguous-member-template */ 308, /* DiagArray20 */ 33, /* Empty */ 0 },
+ { /* analyzer-incompatible-plugin */ 334, /* DiagArray21 */ 35, /* Empty */ 0 },
+ { /* anonymous-pack-parens */ 363, /* DiagArray22 */ 37, /* Empty */ 0 },
+ { /* arc */ 385, /* Empty */ 0, /* DiagSubGroup23 */ 15 },
+ { /* arc-bridge-casts-disallowed-in-nonarc */ 389, /* DiagArray24 */ 39, /* Empty */ 0 },
+ { /* arc-maybe-repeated-use-of-weak */ 427, /* DiagArray25 */ 41, /* Empty */ 0 },
+ { /* arc-non-pod-memaccess */ 458, /* DiagArray26 */ 43, /* Empty */ 0 },
+ { /* arc-performSelector-leaks */ 480, /* DiagArray27 */ 45, /* Empty */ 0 },
+ { /* arc-repeated-use-of-weak */ 506, /* DiagArray28 */ 47, /* DiagSubGroup28 */ 19 },
+ { /* arc-retain-cycles */ 531, /* DiagArray29 */ 49, /* Empty */ 0 },
+ { /* arc-unsafe-retained-assign */ 549, /* DiagArray30 */ 51, /* Empty */ 0 },
+ { /* argument-outside-range */ 576, /* DiagArray31 */ 55, /* Empty */ 0 },
+ { /* array-bounds */ 599, /* DiagArray32 */ 57, /* Empty */ 0 },
+ { /* array-bounds-pointer-arithmetic */ 612, /* DiagArray33 */ 62, /* Empty */ 0 },
+ { /* asm */ 644, /* Empty */ 0, /* DiagSubGroup34 */ 21 },
+ { /* asm-ignored-qualifier */ 648, /* DiagArray35 */ 65, /* Empty */ 0 },
+ { /* asm-operand-widths */ 670, /* DiagArray36 */ 68, /* Empty */ 0 },
+ { /* assign-enum */ 689, /* DiagArray37 */ 70, /* Empty */ 0 },
+ { /* assume */ 701, /* DiagArray38 */ 72, /* Empty */ 0 },
+ { /* at-protocol */ 708, /* Empty */ 0, /* Empty */ 0 },
+ { /* atimport-in-framework-header */ 720, /* DiagArray40 */ 74, /* Empty */ 0 },
+ { /* atomic-alignment */ 749, /* DiagArray41 */ 76, /* Empty */ 0 },
+ { /* atomic-implicit-seq-cst */ 766, /* DiagArray42 */ 78, /* Empty */ 0 },
+ { /* atomic-memory-ordering */ 790, /* DiagArray43 */ 80, /* Empty */ 0 },
+ { /* atomic-properties */ 813, /* Empty */ 0, /* DiagSubGroup44 */ 24 },
+ { /* atomic-property-with-user-defined-accessor */ 831, /* DiagArray45 */ 82, /* Empty */ 0 },
+ { /* attribute-packed-for-bitfield */ 874, /* DiagArray46 */ 84, /* Empty */ 0 },
+ { /* attributes */ 904, /* Empty */ 0, /* DiagSubGroup47 */ 27 },
+ { /* auto-disable-vptr-sanitizer */ 915, /* DiagArray48 */ 86, /* Empty */ 0 },
+ { /* auto-import */ 943, /* DiagArray49 */ 88, /* Empty */ 0 },
+ { /* auto-storage-class */ 955, /* DiagArray50 */ 90, /* Empty */ 0 },
+ { /* auto-var-id */ 974, /* DiagArray51 */ 92, /* Empty */ 0 },
+ { /* availability */ 986, /* DiagArray52 */ 94, /* Empty */ 0 },
+ { /* backend-plugin */ 999, /* DiagArray53 */ 104, /* Empty */ 0 },
+ { /* backslash-newline-escape */ 1014, /* DiagArray54 */ 106, /* Empty */ 0 },
+ { /* bad-function-cast */ 1039, /* DiagArray55 */ 108, /* Empty */ 0 },
+ { /* binary-literal */ 1057, /* Empty */ 0, /* DiagSubGroup56 */ 30 },
+ { /* bind-to-temporary-copy */ 1072, /* DiagArray57 */ 110, /* DiagSubGroup57 */ 34 },
+ { /* binding-in-condition */ 1095, /* DiagArray58 */ 113, /* Empty */ 0 },
+ { /* bitfield-constant-conversion */ 1116, /* DiagArray59 */ 115, /* Empty */ 0 },
+ { /* bitfield-enum-conversion */ 1145, /* DiagArray60 */ 117, /* Empty */ 0 },
+ { /* bitfield-width */ 1170, /* DiagArray61 */ 121, /* Empty */ 0 },
+ { /* bitwise-op-parentheses */ 1185, /* DiagArray62 */ 124, /* Empty */ 0 },
+ { /* block-capture-autoreleasing */ 1208, /* DiagArray63 */ 126, /* Empty */ 0 },
+ { /* bool-conversion */ 1236, /* DiagArray64 */ 128, /* DiagSubGroup64 */ 36 },
+ { /* bool-conversions */ 1252, /* Empty */ 0, /* DiagSubGroup65 */ 39 },
+ { /* braced-scalar-init */ 1269, /* DiagArray66 */ 130, /* Empty */ 0 },
+ { /* bridge-cast */ 1288, /* DiagArray67 */ 132, /* Empty */ 0 },
+ { /* builtin-macro-redefined */ 1300, /* DiagArray68 */ 135, /* Empty */ 0 },
+ { /* builtin-memcpy-chk-size */ 1324, /* DiagArray69 */ 138, /* Empty */ 0 },
+ { /* builtin-requires-header */ 1348, /* DiagArray70 */ 140, /* Empty */ 0 },
+ { /* c++-compat */ 1372, /* DiagArray71 */ 142, /* Empty */ 0 },
+ { /* c++0x-compat */ 1383, /* Empty */ 0, /* DiagSubGroup72 */ 41 },
+ { /* c++0x-extensions */ 1396, /* Empty */ 0, /* DiagSubGroup73 */ 43 },
+ { /* c++0x-narrowing */ 1413, /* Empty */ 0, /* DiagSubGroup74 */ 45 },
+ { /* c++11-compat */ 1429, /* DiagArray75 */ 144, /* DiagSubGroup75 */ 47 },
+ { /* c++11-compat-deprecated-writable-strings */ 1442, /* DiagArray76 */ 155, /* Empty */ 0 },
+ { /* c++11-compat-pedantic */ 1483, /* Empty */ 0, /* DiagSubGroup77 */ 54 },
+ { /* c++11-compat-reserved-user-defined-literal */ 1505, /* DiagArray78 */ 157, /* Empty */ 0 },
+ { /* c++11-extensions */ 1548, /* DiagArray79 */ 159, /* DiagSubGroup79 */ 59 },
+ { /* c++11-extra-semi */ 1565, /* DiagArray80 */ 185, /* Empty */ 0 },
+ { /* c++11-inline-namespace */ 1582, /* DiagArray81 */ 187, /* Empty */ 0 },
+ { /* c++11-long-long */ 1605, /* DiagArray82 */ 189, /* Empty */ 0 },
+ { /* c++11-narrowing */ 1621, /* DiagArray83 */ 191, /* Empty */ 0 },
+ { /* c++14-binary-literal */ 1637, /* DiagArray84 */ 199, /* Empty */ 0 },
+ { /* c++14-compat */ 1658, /* Empty */ 0, /* DiagSubGroup85 */ 63 },
+ { /* c++14-compat-pedantic */ 1671, /* Empty */ 0, /* DiagSubGroup86 */ 66 },
+ { /* c++14-extensions */ 1693, /* DiagArray87 */ 201, /* DiagSubGroup87 */ 70 },
+ { /* c++17-compat */ 1710, /* Empty */ 0, /* DiagSubGroup88 */ 72 },
+ { /* c++17-compat-mangling */ 1723, /* DiagArray89 */ 210, /* Empty */ 0 },
+ { /* c++17-compat-pedantic */ 1745, /* Empty */ 0, /* DiagSubGroup90 */ 77 },
+ { /* c++17-extensions */ 1767, /* DiagArray91 */ 212, /* Empty */ 0 },
+ { /* c++1y-extensions */ 1784, /* Empty */ 0, /* DiagSubGroup92 */ 80 },
+ { /* c++1z-compat */ 1801, /* Empty */ 0, /* DiagSubGroup93 */ 82 },
+ { /* c++1z-compat-mangling */ 1814, /* Empty */ 0, /* DiagSubGroup94 */ 84 },
+ { /* c++1z-extensions */ 1836, /* Empty */ 0, /* DiagSubGroup95 */ 86 },
+ { /* c++2a-compat */ 1853, /* DiagArray96 */ 231, /* Empty */ 0 },
+ { /* c++2a-compat-pedantic */ 1866, /* Empty */ 0, /* DiagSubGroup97 */ 88 },
+ { /* c++2a-extensions */ 1888, /* DiagArray98 */ 236, /* Empty */ 0 },
+ { /* c++98-c++11-c++14-c++17-compat */ 1905, /* DiagArray99 */ 244, /* Empty */ 0 },
+ { /* c++98-c++11-c++14-c++17-compat-pedantic */ 1936, /* DiagArray100 */ 255, /* DiagSubGroup100 */ 90 },
+ { /* c++98-c++11-c++14-compat */ 1976, /* DiagArray101 */ 257, /* Empty */ 0 },
+ { /* c++98-c++11-c++14-compat-pedantic */ 2001, /* DiagArray102 */ 275, /* DiagSubGroup102 */ 92 },
+ { /* c++98-c++11-compat */ 2035, /* DiagArray103 */ 278, /* Empty */ 0 },
+ { /* c++98-c++11-compat-binary-literal */ 2054, /* DiagArray104 */ 290, /* Empty */ 0 },
+ { /* c++98-c++11-compat-pedantic */ 2088, /* Empty */ 0, /* DiagSubGroup105 */ 94 },
+ { /* c++98-compat */ 2116, /* DiagArray106 */ 292, /* DiagSubGroup106 */ 97 },
+ { /* c++98-compat-bind-to-temporary-copy */ 2129, /* DiagArray107 */ 352, /* Empty */ 0 },
+ { /* c++98-compat-extra-semi */ 2165, /* DiagArray108 */ 354, /* Empty */ 0 },
+ { /* c++98-compat-local-type-template-args */ 2189, /* DiagArray109 */ 356, /* Empty */ 0 },
+ { /* c++98-compat-pedantic */ 2227, /* DiagArray110 */ 358, /* DiagSubGroup110 */ 103 },
+ { /* c++98-compat-unnamed-type-template-args */ 2249, /* DiagArray111 */ 368, /* Empty */ 0 },
+ { /* c11-extensions */ 2289, /* DiagArray112 */ 370, /* Empty */ 0 },
+ { /* c99-compat */ 2304, /* DiagArray113 */ 377, /* Empty */ 0 },
+ { /* c99-extensions */ 2315, /* DiagArray114 */ 381, /* Empty */ 0 },
+ { /* call-to-pure-virtual-from-ctor-dtor */ 2330, /* DiagArray115 */ 392, /* Empty */ 0 },
+ { /* cast-align */ 2366, /* DiagArray116 */ 394, /* Empty */ 0 },
+ { /* cast-calling-convention */ 2377, /* DiagArray117 */ 396, /* Empty */ 0 },
+ { /* cast-of-sel-type */ 2401, /* DiagArray118 */ 398, /* Empty */ 0 },
+ { /* cast-qual */ 2418, /* DiagArray119 */ 400, /* Empty */ 0 },
+ { /* cast-qual-unrelated */ 2428, /* DiagArray120 */ 403, /* Empty */ 0 },
+ { /* char-align */ 2448, /* Empty */ 0, /* Empty */ 0 },
+ { /* char-subscripts */ 2459, /* DiagArray122 */ 405, /* Empty */ 0 },
+ { /* clang-cl-pch */ 2475, /* DiagArray123 */ 408, /* Empty */ 0 },
+ { /* class-varargs */ 2488, /* DiagArray124 */ 414, /* DiagSubGroup124 */ 110 },
+ { /* comma */ 2502, /* DiagArray125 */ 416, /* Empty */ 0 },
+ { /* comment */ 2508, /* DiagArray126 */ 418, /* Empty */ 0 },
+ { /* comments */ 2516, /* Empty */ 0, /* DiagSubGroup127 */ 112 },
+ { /* compare-distinct-pointer-types */ 2525, /* DiagArray128 */ 423, /* Empty */ 0 },
+ { /* complex-component-init */ 2556, /* DiagArray129 */ 425, /* Empty */ 0 },
+ { /* conditional-type-mismatch */ 2579, /* DiagArray130 */ 427, /* Empty */ 0 },
+ { /* conditional-uninitialized */ 2605, /* DiagArray131 */ 429, /* Empty */ 0 },
+ { /* config-macros */ 2631, /* DiagArray132 */ 431, /* Empty */ 0 },
+ { /* constant-conversion */ 2645, /* DiagArray133 */ 433, /* DiagSubGroup133 */ 114 },
+ { /* constant-logical-operand */ 2665, /* DiagArray134 */ 435, /* Empty */ 0 },
+ { /* constexpr-not-const */ 2690, /* DiagArray135 */ 437, /* Empty */ 0 },
+ { /* consumed */ 2710, /* DiagArray136 */ 439, /* Empty */ 0 },
+ { /* conversion */ 2719, /* DiagArray137 */ 448, /* DiagSubGroup137 */ 116 },
+ { /* conversion-null */ 2730, /* Empty */ 0, /* DiagSubGroup138 */ 132 },
+ { /* coroutine */ 2746, /* Empty */ 0, /* DiagSubGroup139 */ 134 },
+ { /* coroutine-missing-unhandled-exception */ 2756, /* DiagArray140 */ 454, /* Empty */ 0 },
+ { /* covered-switch-default */ 2794, /* DiagArray141 */ 456, /* Empty */ 0 },
+ { /* cpp */ 2817, /* Empty */ 0, /* DiagSubGroup142 */ 136 },
+ { /* cstring-format-directive */ 2821, /* DiagArray143 */ 458, /* Empty */ 0 },
+ { /* ctad-maybe-unsupported */ 2846, /* DiagArray144 */ 460, /* Empty */ 0 },
+ { /* ctor-dtor-privacy */ 2869, /* Empty */ 0, /* Empty */ 0 },
+ { /* ctu */ 2887, /* DiagArray146 */ 462, /* Empty */ 0 },
+ { /* cuda-compat */ 2891, /* DiagArray147 */ 464, /* Empty */ 0 },
+ { /* custom-atomic-properties */ 2903, /* DiagArray148 */ 470, /* Empty */ 0 },
+ { /* dangling */ 2928, /* DiagArray149 */ 472, /* DiagSubGroup149 */ 138 },
+ { /* dangling-else */ 2937, /* DiagArray150 */ 475, /* Empty */ 0 },
+ { /* dangling-field */ 2951, /* DiagArray151 */ 477, /* Empty */ 0 },
+ { /* dangling-initializer-list */ 2966, /* DiagArray152 */ 482, /* Empty */ 0 },
+ { /* darwin-sdk-settings */ 2992, /* DiagArray153 */ 484, /* Empty */ 0 },
+ { /* date-time */ 3012, /* DiagArray154 */ 486, /* Empty */ 0 },
+ { /* dealloc-in-category */ 3022, /* DiagArray155 */ 488, /* Empty */ 0 },
+ { /* debug-compression-unavailable */ 3042, /* DiagArray156 */ 490, /* Empty */ 0 },
+ { /* declaration-after-statement */ 3072, /* DiagArray157 */ 492, /* Empty */ 0 },
+ { /* defaulted-function-deleted */ 3100, /* DiagArray158 */ 494, /* Empty */ 0 },
+ { /* delegating-ctor-cycles */ 3127, /* DiagArray159 */ 496, /* Empty */ 0 },
+ { /* delete-abstract-non-virtual-dtor */ 3150, /* DiagArray160 */ 498, /* Empty */ 0 },
+ { /* delete-incomplete */ 3183, /* DiagArray161 */ 500, /* Empty */ 0 },
+ { /* delete-non-abstract-non-virtual-dtor */ 3201, /* DiagArray162 */ 503, /* Empty */ 0 },
+ { /* delete-non-virtual-dtor */ 3238, /* Empty */ 0, /* DiagSubGroup163 */ 142 },
+ { /* deprecated */ 3262, /* DiagArray164 */ 505, /* DiagSubGroup164 */ 145 },
+ { /* deprecated-attributes */ 3273, /* DiagArray165 */ 514, /* Empty */ 0 },
+ { /* deprecated-declarations */ 3295, /* DiagArray166 */ 516, /* Empty */ 0 },
+ { /* deprecated-dynamic-exception-spec */ 3319, /* DiagArray167 */ 523, /* Empty */ 0 },
+ { /* deprecated-implementations */ 3353, /* DiagArray168 */ 525, /* Empty */ 0 },
+ { /* deprecated-increment-bool */ 3380, /* DiagArray169 */ 528, /* Empty */ 0 },
+ { /* deprecated-objc-isa-usage */ 3406, /* DiagArray170 */ 530, /* Empty */ 0 },
+ { /* deprecated-objc-pointer-introspection */ 3432, /* DiagArray171 */ 533, /* DiagSubGroup171 */ 153 },
+ { /* deprecated-objc-pointer-introspection-performSelector */ 3470, /* DiagArray172 */ 535, /* Empty */ 0 },
+ { /* deprecated-register */ 3524, /* DiagArray173 */ 537, /* Empty */ 0 },
+ { /* deprecated-this-capture */ 3544, /* DiagArray174 */ 539, /* Empty */ 0 },
+ { /* deprecated-writable-strings */ 3568, /* Empty */ 0, /* DiagSubGroup175 */ 155 },
+ { /* direct-ivar-access */ 3596, /* DiagArray176 */ 541, /* Empty */ 0 },
+ { /* disabled-macro-expansion */ 3615, /* DiagArray177 */ 543, /* Empty */ 0 },
+ { /* disabled-optimization */ 3640, /* Empty */ 0, /* Empty */ 0 },
+ { /* discard-qual */ 3662, /* Empty */ 0, /* Empty */ 0 },
+ { /* distributed-object-modifiers */ 3675, /* DiagArray180 */ 545, /* Empty */ 0 },
+ { /* div-by-zero */ 3704, /* Empty */ 0, /* DiagSubGroup181 */ 157 },
+ { /* division-by-zero */ 3716, /* DiagArray182 */ 548, /* Empty */ 0 },
+ { /* dll-attribute-on-redeclaration */ 3733, /* DiagArray183 */ 550, /* Empty */ 0 },
+ { /* dllexport-explicit-instantiation-decl */ 3764, /* DiagArray184 */ 552, /* Empty */ 0 },
+ { /* dllimport-static-field-def */ 3802, /* DiagArray185 */ 554, /* Empty */ 0 },
+ { /* documentation */ 3829, /* DiagArray186 */ 556, /* DiagSubGroup186 */ 159 },
+ { /* documentation-deprecated-sync */ 3843, /* DiagArray187 */ 575, /* Empty */ 0 },
+ { /* documentation-html */ 3873, /* DiagArray188 */ 577, /* Empty */ 0 },
+ { /* documentation-pedantic */ 3892, /* DiagArray189 */ 582, /* DiagSubGroup189 */ 162 },
+ { /* documentation-unknown-command */ 3915, /* DiagArray190 */ 584, /* Empty */ 0 },
+ { /* dollar-in-identifier-extension */ 3945, /* DiagArray191 */ 587, /* Empty */ 0 },
+ { /* double-promotion */ 3976, /* DiagArray192 */ 589, /* Empty */ 0 },
+ { /* duplicate-decl-specifier */ 3993, /* DiagArray193 */ 591, /* Empty */ 0 },
+ { /* duplicate-enum */ 4018, /* DiagArray194 */ 596, /* Empty */ 0 },
+ { /* duplicate-method-arg */ 4033, /* DiagArray195 */ 598, /* Empty */ 0 },
+ { /* duplicate-method-match */ 4054, /* DiagArray196 */ 600, /* Empty */ 0 },
+ { /* duplicate-protocol */ 4077, /* DiagArray197 */ 602, /* Empty */ 0 },
+ { /* dynamic-class-memaccess */ 4096, /* DiagArray198 */ 604, /* Empty */ 0 },
+ { /* dynamic-exception-spec */ 4120, /* DiagArray199 */ 606, /* DiagSubGroup199 */ 164 },
+ { /* effc++ */ 4143, /* Empty */ 0, /* DiagSubGroup200 */ 166 },
+ { /* embedded-directive */ 4150, /* DiagArray201 */ 608, /* Empty */ 0 },
+ { /* empty-body */ 4169, /* DiagArray202 */ 610, /* Empty */ 0 },
+ { /* empty-decomposition */ 4180, /* DiagArray203 */ 616, /* Empty */ 0 },
+ { /* empty-init-stmt */ 4200, /* DiagArray204 */ 618, /* Empty */ 0 },
+ { /* empty-translation-unit */ 4216, /* DiagArray205 */ 620, /* Empty */ 0 },
+ { /* encode-type */ 4239, /* DiagArray206 */ 622, /* Empty */ 0 },
+ { /* endif-labels */ 4251, /* Empty */ 0, /* DiagSubGroup207 */ 168 },
+ { /* enum-compare */ 4264, /* DiagArray208 */ 624, /* DiagSubGroup208 */ 170 },
+ { /* enum-compare-switch */ 4277, /* DiagArray209 */ 626, /* Empty */ 0 },
+ { /* enum-conversion */ 4297, /* DiagArray210 */ 628, /* Empty */ 0 },
+ { /* enum-too-large */ 4313, /* DiagArray211 */ 630, /* Empty */ 0 },
+ { /* exceptions */ 4328, /* DiagArray212 */ 633, /* Empty */ 0 },
+ { /* exit-time-destructors */ 4339, /* DiagArray213 */ 637, /* Empty */ 0 },
+ { /* expansion-to-defined */ 4361, /* DiagArray214 */ 639, /* Empty */ 0 },
+ { /* experimental-isel */ 4382, /* DiagArray215 */ 642, /* Empty */ 0 },
+ { /* explicit-initialize-call */ 4400, /* DiagArray216 */ 645, /* Empty */ 0 },
+ { /* explicit-ownership-type */ 4425, /* DiagArray217 */ 648, /* Empty */ 0 },
+ { /* extern-c-compat */ 4449, /* DiagArray218 */ 650, /* Empty */ 0 },
+ { /* extern-initializer */ 4465, /* DiagArray219 */ 652, /* Empty */ 0 },
+ { /* extra */ 4484, /* DiagArray220 */ 654, /* DiagSubGroup220 */ 172 },
+ { /* extra-qualification */ 4490, /* DiagArray221 */ 656, /* Empty */ 0 },
+ { /* extra-semi */ 4510, /* DiagArray222 */ 658, /* DiagSubGroup222 */ 182 },
+ { /* extra-semi-stmt */ 4521, /* DiagArray223 */ 661, /* DiagSubGroup223 */ 185 },
+ { /* extra-tokens */ 4537, /* DiagArray224 */ 663, /* Empty */ 0 },
+ { /* fallback */ 4550, /* DiagArray225 */ 666, /* Empty */ 0 },
+ { /* fixed-enum-extension */ 4559, /* DiagArray226 */ 668, /* Empty */ 0 },
+ { /* flag-enum */ 4580, /* DiagArray227 */ 670, /* Empty */ 0 },
+ { /* flexible-array-extensions */ 4590, /* DiagArray228 */ 672, /* Empty */ 0 },
+ { /* float-conversion */ 4616, /* DiagArray229 */ 675, /* DiagSubGroup229 */ 187 },
+ { /* float-equal */ 4633, /* DiagArray230 */ 677, /* Empty */ 0 },
+ { /* float-overflow-conversion */ 4645, /* DiagArray231 */ 679, /* Empty */ 0 },
+ { /* float-zero-conversion */ 4671, /* DiagArray232 */ 682, /* Empty */ 0 },
+ { /* for-loop-analysis */ 4693, /* DiagArray233 */ 684, /* Empty */ 0 },
+ { /* format */ 4711, /* DiagArray234 */ 687, /* DiagSubGroup234 */ 190 },
+ { /* format-extra-args */ 4718, /* DiagArray235 */ 713, /* Empty */ 0 },
+ { /* format-invalid-specifier */ 4736, /* DiagArray236 */ 715, /* Empty */ 0 },
+ { /* format-non-iso */ 4761, /* DiagArray237 */ 717, /* Empty */ 0 },
+ { /* format-nonliteral */ 4776, /* DiagArray238 */ 721, /* Empty */ 0 },
+ { /* format-pedantic */ 4794, /* DiagArray239 */ 723, /* Empty */ 0 },
+ { /* format-security */ 4810, /* DiagArray240 */ 726, /* Empty */ 0 },
+ { /* format-y2k */ 4826, /* Empty */ 0, /* Empty */ 0 },
+ { /* format-zero-length */ 4837, /* DiagArray242 */ 728, /* Empty */ 0 },
+ { /* format=2 */ 4856, /* Empty */ 0, /* DiagSubGroup243 */ 197 },
+ { /* four-char-constants */ 4865, /* DiagArray244 */ 730, /* Empty */ 0 },
+ { /* frame-larger-than= */ 4885, /* DiagArray245 */ 732, /* Empty */ 0 },
+ { /* framework-include-private-from-public */ 4904, /* DiagArray246 */ 735, /* Empty */ 0 },
+ { /* function-def-in-objc-container */ 4942, /* DiagArray247 */ 737, /* Empty */ 0 },
+ { /* function-multiversion */ 4973, /* DiagArray248 */ 739, /* Empty */ 0 },
+ { /* future-compat */ 4995, /* Empty */ 0, /* Empty */ 0 },
+ { /* gcc-compat */ 5009, /* DiagArray250 */ 742, /* Empty */ 0 },
+ { /* global-constructors */ 5020, /* DiagArray251 */ 753, /* Empty */ 0 },
+ { /* gnu */ 5040, /* Empty */ 0, /* DiagSubGroup252 */ 201 },
+ { /* gnu-alignof-expression */ 5044, /* DiagArray253 */ 756, /* Empty */ 0 },
+ { /* gnu-anonymous-struct */ 5067, /* DiagArray254 */ 758, /* Empty */ 0 },
+ { /* gnu-array-member-paren-init */ 5088, /* DiagArray255 */ 760, /* Empty */ 0 },
+ { /* gnu-auto-type */ 5116, /* DiagArray256 */ 762, /* Empty */ 0 },
+ { /* gnu-binary-literal */ 5130, /* DiagArray257 */ 764, /* Empty */ 0 },
+ { /* gnu-case-range */ 5149, /* DiagArray258 */ 766, /* Empty */ 0 },
+ { /* gnu-complex-integer */ 5164, /* DiagArray259 */ 768, /* Empty */ 0 },
+ { /* gnu-compound-literal-initializer */ 5184, /* DiagArray260 */ 770, /* Empty */ 0 },
+ { /* gnu-conditional-omitted-operand */ 5217, /* DiagArray261 */ 772, /* Empty */ 0 },
+ { /* gnu-designator */ 5249, /* DiagArray262 */ 774, /* Empty */ 0 },
+ { /* gnu-empty-initializer */ 5264, /* DiagArray263 */ 778, /* Empty */ 0 },
+ { /* gnu-empty-struct */ 5286, /* DiagArray264 */ 780, /* Empty */ 0 },
+ { /* gnu-flexible-array-initializer */ 5303, /* DiagArray265 */ 784, /* Empty */ 0 },
+ { /* gnu-flexible-array-union-member */ 5334, /* DiagArray266 */ 786, /* Empty */ 0 },
+ { /* gnu-folding-constant */ 5366, /* DiagArray267 */ 788, /* Empty */ 0 },
+ { /* gnu-imaginary-constant */ 5387, /* DiagArray268 */ 792, /* Empty */ 0 },
+ { /* gnu-include-next */ 5410, /* DiagArray269 */ 794, /* Empty */ 0 },
+ { /* gnu-label-as-value */ 5427, /* DiagArray270 */ 796, /* Empty */ 0 },
+ { /* gnu-redeclared-enum */ 5446, /* DiagArray271 */ 799, /* Empty */ 0 },
+ { /* gnu-statement-expression */ 5466, /* DiagArray272 */ 801, /* Empty */ 0 },
+ { /* gnu-static-float-init */ 5491, /* DiagArray273 */ 803, /* Empty */ 0 },
+ { /* gnu-string-literal-operator-template */ 5513, /* DiagArray274 */ 805, /* Empty */ 0 },
+ { /* gnu-union-cast */ 5550, /* DiagArray275 */ 807, /* Empty */ 0 },
+ { /* gnu-variable-sized-type-not-at-end */ 5565, /* DiagArray276 */ 809, /* Empty */ 0 },
+ { /* gnu-zero-line-directive */ 5600, /* DiagArray277 */ 811, /* Empty */ 0 },
+ { /* gnu-zero-variadic-macro-arguments */ 5624, /* DiagArray278 */ 813, /* Empty */ 0 },
+ { /* header-guard */ 5658, /* DiagArray279 */ 816, /* Empty */ 0 },
+ { /* header-hygiene */ 5671, /* DiagArray280 */ 818, /* Empty */ 0 },
+ { /* idiomatic-parentheses */ 5686, /* DiagArray281 */ 820, /* Empty */ 0 },
+ { /* ignored-attributes */ 5708, /* DiagArray282 */ 822, /* Empty */ 0 },
+ { /* ignored-optimization-argument */ 5727, /* DiagArray283 */ 883, /* Empty */ 0 },
+ { /* ignored-pragma-intrinsic */ 5757, /* DiagArray284 */ 886, /* Empty */ 0 },
+ { /* ignored-pragma-optimize */ 5782, /* DiagArray285 */ 888, /* Empty */ 0 },
+ { /* ignored-pragmas */ 5806, /* DiagArray286 */ 890, /* DiagSubGroup286 */ 230 },
+ { /* ignored-qualifiers */ 5822, /* DiagArray287 */ 933, /* Empty */ 0 },
+ { /* implicit */ 5841, /* Empty */ 0, /* DiagSubGroup288 */ 233 },
+ { /* implicit-atomic-properties */ 5850, /* DiagArray289 */ 939, /* Empty */ 0 },
+ { /* implicit-conversion-floating-point-to-bool */ 5877, /* DiagArray290 */ 942, /* Empty */ 0 },
+ { /* implicit-exception-spec-mismatch */ 5920, /* DiagArray291 */ 944, /* Empty */ 0 },
+ { /* implicit-fallthrough */ 5953, /* DiagArray292 */ 946, /* DiagSubGroup292 */ 236 },
+ { /* implicit-fallthrough-per-function */ 5974, /* DiagArray293 */ 949, /* Empty */ 0 },
+ { /* implicit-fixed-point-conversion */ 6008, /* DiagArray294 */ 951, /* Empty */ 0 },
+ { /* implicit-float-conversion */ 6040, /* DiagArray295 */ 953, /* Empty */ 0 },
+ { /* implicit-function-declaration */ 6066, /* DiagArray296 */ 956, /* Empty */ 0 },
+ { /* implicit-int */ 6096, /* DiagArray297 */ 961, /* Empty */ 0 },
+ { /* implicit-int-conversion */ 6109, /* DiagArray298 */ 963, /* Empty */ 0 },
+ { /* implicit-retain-self */ 6133, /* DiagArray299 */ 966, /* Empty */ 0 },
+ { /* implicitly-unsigned-literal */ 6154, /* DiagArray300 */ 968, /* Empty */ 0 },
+ { /* import */ 6182, /* Empty */ 0, /* Empty */ 0 },
+ { /* import-preprocessor-directive-pedantic */ 6189, /* DiagArray302 */ 970, /* Empty */ 0 },
+ { /* inaccessible-base */ 6228, /* DiagArray303 */ 972, /* Empty */ 0 },
+ { /* include-next-absolute-path */ 6246, /* DiagArray304 */ 974, /* Empty */ 0 },
+ { /* include-next-outside-header */ 6273, /* DiagArray305 */ 976, /* Empty */ 0 },
+ { /* incompatible-exception-spec */ 6301, /* DiagArray306 */ 978, /* Empty */ 0 },
+ { /* incompatible-function-pointer-types */ 6329, /* DiagArray307 */ 981, /* Empty */ 0 },
+ { /* incompatible-library-redeclaration */ 6365, /* DiagArray308 */ 983, /* Empty */ 0 },
+ { /* incompatible-ms-struct */ 6400, /* DiagArray309 */ 985, /* Empty */ 0 },
+ { /* incompatible-pointer-types */ 6423, /* DiagArray310 */ 988, /* DiagSubGroup310 */ 238 },
+ { /* incompatible-pointer-types-discards-qualifiers */ 6450, /* DiagArray311 */ 990, /* Empty */ 0 },
+ { /* incompatible-property-type */ 6497, /* DiagArray312 */ 993, /* Empty */ 0 },
+ { /* incompatible-sysroot */ 6524, /* DiagArray313 */ 995, /* Empty */ 0 },
+ { /* incomplete-framework-module-declaration */ 6545, /* DiagArray314 */ 997, /* Empty */ 0 },
+ { /* incomplete-implementation */ 6585, /* DiagArray315 */ 999, /* Empty */ 0 },
+ { /* incomplete-module */ 6611, /* Empty */ 0, /* DiagSubGroup316 */ 241 },
+ { /* incomplete-umbrella */ 6629, /* DiagArray317 */ 1001, /* Empty */ 0 },
+ { /* inconsistent-dllimport */ 6649, /* DiagArray318 */ 1005, /* Empty */ 0 },
+ { /* inconsistent-missing-destructor-override */ 6672, /* DiagArray319 */ 1008, /* Empty */ 0 },
+ { /* inconsistent-missing-override */ 6713, /* DiagArray320 */ 1010, /* Empty */ 0 },
+ { /* increment-bool */ 6743, /* DiagArray321 */ 1012, /* DiagSubGroup321 */ 244 },
+ { /* infinite-recursion */ 6758, /* DiagArray322 */ 1014, /* Empty */ 0 },
+ { /* init-self */ 6777, /* Empty */ 0, /* Empty */ 0 },
+ { /* initializer-overrides */ 6787, /* DiagArray324 */ 1016, /* Empty */ 0 },
+ { /* injected-class-name */ 6809, /* DiagArray325 */ 1019, /* Empty */ 0 },
+ { /* inline */ 6829, /* Empty */ 0, /* Empty */ 0 },
+ { /* inline-asm */ 6836, /* DiagArray327 */ 1021, /* Empty */ 0 },
+ { /* inline-new-delete */ 6847, /* DiagArray328 */ 1023, /* Empty */ 0 },
+ { /* instantiation-after-specialization */ 6865, /* DiagArray329 */ 1025, /* Empty */ 0 },
+ { /* int-conversion */ 6900, /* DiagArray330 */ 1027, /* Empty */ 0 },
+ { /* int-conversions */ 6915, /* Empty */ 0, /* DiagSubGroup331 */ 246 },
+ { /* int-to-pointer-cast */ 6931, /* DiagArray332 */ 1030, /* DiagSubGroup332 */ 248 },
+ { /* int-to-void-pointer-cast */ 6951, /* DiagArray333 */ 1032, /* Empty */ 0 },
+ { /* integer-overflow */ 6976, /* DiagArray334 */ 1034, /* Empty */ 0 },
+ { /* invalid-command-line-argument */ 6993, /* DiagArray335 */ 1036, /* DiagSubGroup335 */ 250 },
+ { /* invalid-constexpr */ 7023, /* DiagArray336 */ 1042, /* Empty */ 0 },
+ { /* invalid-iboutlet */ 7041, /* DiagArray337 */ 1044, /* Empty */ 0 },
+ { /* invalid-initializer-from-system-header */ 7058, /* DiagArray338 */ 1047, /* Empty */ 0 },
+ { /* invalid-ios-deployment-target */ 7097, /* DiagArray339 */ 1049, /* Empty */ 0 },
+ { /* invalid-noreturn */ 7127, /* DiagArray340 */ 1051, /* Empty */ 0 },
+ { /* invalid-offsetof */ 7144, /* DiagArray341 */ 1054, /* Empty */ 0 },
+ { /* invalid-or-nonexistent-directory */ 7161, /* DiagArray342 */ 1057, /* Empty */ 0 },
+ { /* invalid-partial-specialization */ 7194, /* DiagArray343 */ 1060, /* Empty */ 0 },
+ { /* invalid-pch */ 7225, /* Empty */ 0, /* Empty */ 0 },
+ { /* invalid-pp-token */ 7237, /* DiagArray345 */ 1062, /* Empty */ 0 },
+ { /* invalid-source-encoding */ 7254, /* DiagArray346 */ 1065, /* Empty */ 0 },
+ { /* invalid-token-paste */ 7278, /* DiagArray347 */ 1068, /* Empty */ 0 },
+ { /* jump-seh-finally */ 7298, /* DiagArray348 */ 1070, /* Empty */ 0 },
+ { /* keyword-compat */ 7315, /* DiagArray349 */ 1072, /* Empty */ 0 },
+ { /* keyword-macro */ 7330, /* DiagArray350 */ 1074, /* Empty */ 0 },
+ { /* knr-promoted-parameter */ 7344, /* DiagArray351 */ 1076, /* Empty */ 0 },
+ { /* language-extension-token */ 7367, /* DiagArray352 */ 1078, /* Empty */ 0 },
+ { /* large-by-value-copy */ 7392, /* DiagArray353 */ 1080, /* Empty */ 0 },
+ { /* liblto */ 7412, /* Empty */ 0, /* Empty */ 0 },
+ { /* literal-conversion */ 7419, /* DiagArray355 */ 1083, /* Empty */ 0 },
+ { /* literal-range */ 7438, /* DiagArray356 */ 1086, /* Empty */ 0 },
+ { /* local-type-template-args */ 7452, /* DiagArray357 */ 1089, /* DiagSubGroup357 */ 252 },
+ { /* logical-not-parentheses */ 7477, /* DiagArray358 */ 1091, /* Empty */ 0 },
+ { /* logical-op-parentheses */ 7501, /* DiagArray359 */ 1093, /* Empty */ 0 },
+ { /* long-long */ 7524, /* DiagArray360 */ 1095, /* DiagSubGroup360 */ 254 },
+ { /* loop-analysis */ 7534, /* Empty */ 0, /* DiagSubGroup361 */ 256 },
+ { /* macro-redefined */ 7548, /* DiagArray362 */ 1097, /* Empty */ 0 },
+ { /* main */ 7564, /* DiagArray363 */ 1099, /* Empty */ 0 },
+ { /* main-return-type */ 7569, /* DiagArray364 */ 1107, /* Empty */ 0 },
+ { /* malformed-warning-check */ 7586, /* DiagArray365 */ 1109, /* Empty */ 0 },
+ { /* many-braces-around-scalar-init */ 7610, /* DiagArray366 */ 1111, /* Empty */ 0 },
+ { /* max-unsigned-zero */ 7641, /* DiagArray367 */ 1113, /* Empty */ 0 },
+ { /* memset-transposed-args */ 7659, /* DiagArray368 */ 1115, /* Empty */ 0 },
+ { /* memsize-comparison */ 7682, /* DiagArray369 */ 1117, /* Empty */ 0 },
+ { /* method-signatures */ 7701, /* DiagArray370 */ 1119, /* Empty */ 0 },
+ { /* microsoft */ 7719, /* Empty */ 0, /* DiagSubGroup371 */ 259 },
+ { /* microsoft-anon-tag */ 7729, /* DiagArray372 */ 1122, /* Empty */ 0 },
+ { /* microsoft-cast */ 7748, /* DiagArray373 */ 1125, /* Empty */ 0 },
+ { /* microsoft-charize */ 7763, /* DiagArray374 */ 1128, /* Empty */ 0 },
+ { /* microsoft-comment-paste */ 7781, /* DiagArray375 */ 1130, /* Empty */ 0 },
+ { /* microsoft-const-init */ 7805, /* DiagArray376 */ 1132, /* Empty */ 0 },
+ { /* microsoft-cpp-macro */ 7826, /* DiagArray377 */ 1134, /* Empty */ 0 },
+ { /* microsoft-default-arg-redefinition */ 7846, /* DiagArray378 */ 1136, /* Empty */ 0 },
+ { /* microsoft-end-of-file */ 7881, /* DiagArray379 */ 1138, /* Empty */ 0 },
+ { /* microsoft-enum-forward-reference */ 7903, /* DiagArray380 */ 1140, /* Empty */ 0 },
+ { /* microsoft-enum-value */ 7936, /* DiagArray381 */ 1142, /* Empty */ 0 },
+ { /* microsoft-exception-spec */ 7957, /* DiagArray382 */ 1144, /* Empty */ 0 },
+ { /* microsoft-exists */ 7982, /* DiagArray383 */ 1151, /* Empty */ 0 },
+ { /* microsoft-explicit-constructor-call */ 7999, /* DiagArray384 */ 1153, /* Empty */ 0 },
+ { /* microsoft-extra-qualification */ 8035, /* DiagArray385 */ 1155, /* Empty */ 0 },
+ { /* microsoft-fixed-enum */ 8065, /* DiagArray386 */ 1157, /* Empty */ 0 },
+ { /* microsoft-flexible-array */ 8086, /* DiagArray387 */ 1159, /* Empty */ 0 },
+ { /* microsoft-goto */ 8111, /* DiagArray388 */ 1162, /* Empty */ 0 },
+ { /* microsoft-inaccessible-base */ 8126, /* DiagArray389 */ 1164, /* Empty */ 0 },
+ { /* microsoft-include */ 8154, /* DiagArray390 */ 1166, /* Empty */ 0 },
+ { /* microsoft-mutable-reference */ 8172, /* DiagArray391 */ 1168, /* Empty */ 0 },
+ { /* microsoft-pure-definition */ 8200, /* DiagArray392 */ 1170, /* Empty */ 0 },
+ { /* microsoft-redeclare-static */ 8226, /* DiagArray393 */ 1172, /* Empty */ 0 },
+ { /* microsoft-sealed */ 8253, /* DiagArray394 */ 1174, /* Empty */ 0 },
+ { /* microsoft-template */ 8270, /* DiagArray395 */ 1176, /* Empty */ 0 },
+ { /* microsoft-union-member-reference */ 8289, /* DiagArray396 */ 1185, /* Empty */ 0 },
+ { /* microsoft-unqualified-friend */ 8322, /* DiagArray397 */ 1187, /* Empty */ 0 },
+ { /* microsoft-using-decl */ 8351, /* DiagArray398 */ 1189, /* Empty */ 0 },
+ { /* microsoft-void-pseudo-dtor */ 8372, /* DiagArray399 */ 1191, /* Empty */ 0 },
+ { /* mismatched-new-delete */ 8399, /* DiagArray400 */ 1193, /* Empty */ 0 },
+ { /* mismatched-parameter-types */ 8421, /* DiagArray401 */ 1195, /* Empty */ 0 },
+ { /* mismatched-return-types */ 8448, /* DiagArray402 */ 1197, /* Empty */ 0 },
+ { /* mismatched-tags */ 8472, /* DiagArray403 */ 1199, /* Empty */ 0 },
+ { /* missing-braces */ 8488, /* DiagArray404 */ 1202, /* Empty */ 0 },
+ { /* missing-declarations */ 8503, /* DiagArray405 */ 1204, /* Empty */ 0 },
+ { /* missing-exception-spec */ 8524, /* DiagArray406 */ 1209, /* Empty */ 0 },
+ { /* missing-field-initializers */ 8547, /* DiagArray407 */ 1211, /* Empty */ 0 },
+ { /* missing-format-attribute */ 8574, /* Empty */ 0, /* Empty */ 0 },
+ { /* missing-include-dirs */ 8599, /* Empty */ 0, /* Empty */ 0 },
+ { /* missing-method-return-type */ 8620, /* DiagArray410 */ 1213, /* Empty */ 0 },
+ { /* missing-noescape */ 8647, /* DiagArray411 */ 1215, /* Empty */ 0 },
+ { /* missing-noreturn */ 8664, /* DiagArray412 */ 1217, /* Empty */ 0 },
+ { /* missing-prototype-for-cc */ 8681, /* DiagArray413 */ 1220, /* Empty */ 0 },
+ { /* missing-prototypes */ 8706, /* DiagArray414 */ 1222, /* Empty */ 0 },
+ { /* missing-selector-name */ 8725, /* DiagArray415 */ 1224, /* Empty */ 0 },
+ { /* missing-sysroot */ 8747, /* DiagArray416 */ 1226, /* Empty */ 0 },
+ { /* missing-variable-declarations */ 8763, /* DiagArray417 */ 1228, /* Empty */ 0 },
+ { /* module-build */ 8793, /* DiagArray418 */ 1230, /* Empty */ 0 },
+ { /* module-conflict */ 8806, /* DiagArray419 */ 1235, /* Empty */ 0 },
+ { /* module-file-config-mismatch */ 8822, /* DiagArray420 */ 1238, /* Empty */ 0 },
+ { /* module-file-extension */ 8850, /* DiagArray421 */ 1240, /* Empty */ 0 },
+ { /* module-import-in-extern-c */ 8872, /* DiagArray422 */ 1242, /* Empty */ 0 },
+ { /* modules-ambiguous-internal-linkage */ 8898, /* DiagArray423 */ 1244, /* Empty */ 0 },
+ { /* modules-import-nested-redundant */ 8933, /* DiagArray424 */ 1246, /* Empty */ 0 },
+ { /* most */ 8965, /* Empty */ 0, /* DiagSubGroup425 */ 287 },
+ { /* move */ 8970, /* Empty */ 0, /* DiagSubGroup426 */ 319 },
+ { /* msvc-include */ 8975, /* Empty */ 0, /* DiagSubGroup427 */ 324 },
+ { /* msvc-not-found */ 8988, /* DiagArray428 */ 1248, /* Empty */ 0 },
+ { /* multichar */ 9003, /* DiagArray429 */ 1250, /* Empty */ 0 },
+ { /* multiple-move-vbase */ 9013, /* DiagArray430 */ 1252, /* Empty */ 0 },
+ { /* narrowing */ 9033, /* Empty */ 0, /* DiagSubGroup431 */ 326 },
+ { /* nested-anon-types */ 9043, /* DiagArray432 */ 1254, /* Empty */ 0 },
+ { /* nested-externs */ 9061, /* Empty */ 0, /* Empty */ 0 },
+ { /* new-returns-null */ 9076, /* DiagArray434 */ 1256, /* Empty */ 0 },
+ { /* newline-eof */ 9093, /* DiagArray435 */ 1258, /* Empty */ 0 },
+ { /* noderef */ 9105, /* DiagArray436 */ 1261, /* Empty */ 0 },
+ { /* noexcept-type */ 9113, /* Empty */ 0, /* DiagSubGroup437 */ 328 },
+ { /* non-gcc */ 9127, /* Empty */ 0, /* DiagSubGroup438 */ 330 },
+ { /* non-literal-null-conversion */ 9135, /* DiagArray439 */ 1265, /* Empty */ 0 },
+ { /* non-modular-include-in-framework-module */ 9163, /* DiagArray440 */ 1267, /* Empty */ 0 },
+ { /* non-modular-include-in-module */ 9203, /* DiagArray441 */ 1269, /* DiagSubGroup441 */ 334 },
+ { /* non-pod-varargs */ 9233, /* DiagArray442 */ 1271, /* Empty */ 0 },
+ { /* non-virtual-dtor */ 9249, /* DiagArray443 */ 1276, /* Empty */ 0 },
+ { /* nonnull */ 9266, /* DiagArray444 */ 1278, /* Empty */ 0 },
+ { /* nonportable-cfstrings */ 9274, /* Empty */ 0, /* Empty */ 0 },
+ { /* nonportable-include-path */ 9296, /* DiagArray446 */ 1281, /* Empty */ 0 },
+ { /* nonportable-system-include-path */ 9321, /* DiagArray447 */ 1283, /* Empty */ 0 },
+ { /* nonportable-vector-initialization */ 9353, /* DiagArray448 */ 1285, /* Empty */ 0 },
+ { /* nontrivial-memaccess */ 9387, /* DiagArray449 */ 1287, /* Empty */ 0 },
+ { /* nsconsumed-mismatch */ 9408, /* DiagArray450 */ 1289, /* Empty */ 0 },
+ { /* nsreturns-mismatch */ 9428, /* DiagArray451 */ 1291, /* Empty */ 0 },
+ { /* null-arithmetic */ 9447, /* DiagArray452 */ 1293, /* Empty */ 0 },
+ { /* null-character */ 9463, /* DiagArray453 */ 1296, /* Empty */ 0 },
+ { /* null-conversion */ 9478, /* DiagArray454 */ 1299, /* Empty */ 0 },
+ { /* null-dereference */ 9494, /* DiagArray455 */ 1301, /* Empty */ 0 },
+ { /* null-pointer-arithmetic */ 9511, /* DiagArray456 */ 1304, /* Empty */ 0 },
+ { /* nullability */ 9535, /* DiagArray457 */ 1307, /* Empty */ 0 },
+ { /* nullability-completeness */ 9547, /* DiagArray458 */ 1313, /* DiagSubGroup458 */ 336 },
+ { /* nullability-completeness-on-arrays */ 9572, /* DiagArray459 */ 1315, /* Empty */ 0 },
+ { /* nullability-declspec */ 9607, /* DiagArray460 */ 1317, /* Empty */ 0 },
+ { /* nullability-extension */ 9628, /* DiagArray461 */ 1319, /* Empty */ 0 },
+ { /* nullability-inferred-on-nested-type */ 9650, /* DiagArray462 */ 1321, /* Empty */ 0 },
+ { /* nullable-to-nonnull-conversion */ 9686, /* DiagArray463 */ 1323, /* Empty */ 0 },
+ { /* objc-autosynthesis-property-ivar-name-match */ 9717, /* DiagArray464 */ 1325, /* Empty */ 0 },
+ { /* objc-circular-container */ 9761, /* DiagArray465 */ 1327, /* Empty */ 0 },
+ { /* objc-cocoa-api */ 9785, /* Empty */ 0, /* DiagSubGroup466 */ 338 },
+ { /* objc-designated-initializers */ 9800, /* DiagArray467 */ 1329, /* Empty */ 0 },
+ { /* objc-flexible-array */ 9829, /* DiagArray468 */ 1336, /* Empty */ 0 },
+ { /* objc-forward-class-redefinition */ 9849, /* DiagArray469 */ 1339, /* Empty */ 0 },
+ { /* objc-interface-ivars */ 9881, /* DiagArray470 */ 1341, /* Empty */ 0 },
+ { /* objc-literal-compare */ 9902, /* DiagArray471 */ 1343, /* DiagSubGroup471 */ 340 },
+ { /* objc-literal-conversion */ 9923, /* DiagArray472 */ 1345, /* Empty */ 0 },
+ { /* objc-macro-redefinition */ 9947, /* DiagArray473 */ 1348, /* Empty */ 0 },
+ { /* objc-messaging-id */ 9971, /* DiagArray474 */ 1350, /* Empty */ 0 },
+ { /* objc-method-access */ 9989, /* DiagArray475 */ 1352, /* Empty */ 0 },
+ { /* objc-missing-property-synthesis */ 10008, /* DiagArray476 */ 1359, /* Empty */ 0 },
+ { /* objc-missing-super-calls */ 10040, /* DiagArray477 */ 1361, /* Empty */ 0 },
+ { /* objc-multiple-method-names */ 10065, /* DiagArray478 */ 1363, /* Empty */ 0 },
+ { /* objc-noncopy-retain-block-property */ 10092, /* DiagArray479 */ 1365, /* Empty */ 0 },
+ { /* objc-nonunified-exceptions */ 10127, /* DiagArray480 */ 1367, /* Empty */ 0 },
+ { /* objc-property-assign-on-object-type */ 10154, /* DiagArray481 */ 1369, /* Empty */ 0 },
+ { /* objc-property-implementation */ 10190, /* DiagArray482 */ 1371, /* Empty */ 0 },
+ { /* objc-property-implicit-mismatch */ 10219, /* DiagArray483 */ 1376, /* Empty */ 0 },
+ { /* objc-property-matches-cocoa-ownership-rule */ 10251, /* DiagArray484 */ 1378, /* Empty */ 0 },
+ { /* objc-property-no-attribute */ 10294, /* DiagArray485 */ 1380, /* Empty */ 0 },
+ { /* objc-property-synthesis */ 10321, /* DiagArray486 */ 1383, /* Empty */ 0 },
+ { /* objc-protocol-method-implementation */ 10345, /* DiagArray487 */ 1387, /* Empty */ 0 },
+ { /* objc-protocol-property-synthesis */ 10381, /* DiagArray488 */ 1389, /* Empty */ 0 },
+ { /* objc-protocol-qualifiers */ 10414, /* DiagArray489 */ 1391, /* Empty */ 0 },
+ { /* objc-readonly-with-setter-property */ 10439, /* DiagArray490 */ 1393, /* Empty */ 0 },
+ { /* objc-redundant-api-use */ 10474, /* Empty */ 0, /* DiagSubGroup491 */ 342 },
+ { /* objc-redundant-literal-use */ 10497, /* DiagArray492 */ 1395, /* Empty */ 0 },
+ { /* objc-root-class */ 10524, /* DiagArray493 */ 1397, /* Empty */ 0 },
+ { /* objc-string-compare */ 10540, /* DiagArray494 */ 1399, /* Empty */ 0 },
+ { /* objc-string-concatenation */ 10560, /* DiagArray495 */ 1401, /* Empty */ 0 },
+ { /* objc-unsafe-perform-selector */ 10586, /* DiagArray496 */ 1403, /* Empty */ 0 },
+ { /* odr */ 10615, /* DiagArray497 */ 1405, /* Empty */ 0 },
+ { /* old-style-cast */ 10619, /* DiagArray498 */ 1407, /* Empty */ 0 },
+ { /* old-style-definition */ 10634, /* Empty */ 0, /* Empty */ 0 },
+ { /* opencl-unsupported-rgba */ 10655, /* DiagArray500 */ 1409, /* Empty */ 0 },
+ { /* openmp-clauses */ 10679, /* DiagArray501 */ 1411, /* Empty */ 0 },
+ { /* openmp-loop-form */ 10694, /* DiagArray502 */ 1414, /* Empty */ 0 },
+ { /* openmp-target */ 10711, /* DiagArray503 */ 1417, /* Empty */ 0 },
+ { /* option-ignored */ 10725, /* DiagArray504 */ 1422, /* Empty */ 0 },
+ { /* ordered-compare-function-pointers */ 10740, /* DiagArray505 */ 1429, /* Empty */ 0 },
+ { /* out-of-line-declaration */ 10774, /* DiagArray506 */ 1431, /* Empty */ 0 },
+ { /* out-of-scope-function */ 10798, /* DiagArray507 */ 1433, /* Empty */ 0 },
+ { /* over-aligned */ 10820, /* DiagArray508 */ 1435, /* Empty */ 0 },
+ { /* overflow */ 10833, /* Empty */ 0, /* Empty */ 0 },
+ { /* overlength-strings */ 10842, /* DiagArray510 */ 1437, /* Empty */ 0 },
+ { /* overloaded-shift-op-parentheses */ 10861, /* DiagArray511 */ 1439, /* Empty */ 0 },
+ { /* overloaded-virtual */ 10893, /* DiagArray512 */ 1441, /* Empty */ 0 },
+ { /* override-init */ 10912, /* Empty */ 0, /* DiagSubGroup513 */ 344 },
+ { /* override-module */ 10926, /* DiagArray514 */ 1443, /* Empty */ 0 },
+ { /* overriding-method-mismatch */ 10942, /* DiagArray515 */ 1445, /* Empty */ 0 },
+ { /* overriding-t-option */ 10969, /* DiagArray516 */ 1453, /* Empty */ 0 },
+ { /* packed */ 10989, /* DiagArray517 */ 1455, /* Empty */ 0 },
+ { /* padded */ 10996, /* DiagArray518 */ 1457, /* Empty */ 0 },
+ { /* parentheses */ 11003, /* DiagArray519 */ 1461, /* DiagSubGroup519 */ 346 },
+ { /* parentheses-equality */ 11015, /* DiagArray520 */ 1465, /* Empty */ 0 },
+ { /* partial-availability */ 11036, /* Empty */ 0, /* DiagSubGroup521 */ 354 },
+ { /* pass */ 11057, /* DiagArray522 */ 1467, /* Empty */ 0 },
+ { /* pass-analysis */ 11062, /* DiagArray523 */ 1469, /* Empty */ 0 },
+ { /* pass-failed */ 11076, /* DiagArray524 */ 1473, /* Empty */ 0 },
+ { /* pass-missed */ 11088, /* DiagArray525 */ 1475, /* Empty */ 0 },
+ { /* pch-date-time */ 11100, /* DiagArray526 */ 1477, /* Empty */ 0 },
+ { /* pedantic */ 11114, /* DiagArray527 */ 1479, /* DiagSubGroup527 */ 356 },
+ { /* pedantic-core-features */ 11123, /* DiagArray528 */ 1550, /* Empty */ 0 },
+ { /* pessimizing-move */ 11146, /* DiagArray529 */ 1552, /* Empty */ 0 },
+ { /* pointer-arith */ 11163, /* DiagArray530 */ 1555, /* Empty */ 0 },
+ { /* pointer-bool-conversion */ 11177, /* DiagArray531 */ 1562, /* Empty */ 0 },
+ { /* pointer-integer-compare */ 11201, /* DiagArray532 */ 1565, /* Empty */ 0 },
+ { /* pointer-sign */ 11225, /* DiagArray533 */ 1567, /* Empty */ 0 },
+ { /* pointer-to-int-cast */ 11238, /* Empty */ 0, /* Empty */ 0 },
+ { /* pointer-type-mismatch */ 11258, /* DiagArray535 */ 1569, /* Empty */ 0 },
+ { /* potentially-evaluated-expression */ 11280, /* DiagArray536 */ 1571, /* Empty */ 0 },
+ { /* pragma-clang-attribute */ 11313, /* DiagArray537 */ 1573, /* Empty */ 0 },
+ { /* pragma-once-outside-header */ 11336, /* DiagArray538 */ 1575, /* Empty */ 0 },
+ { /* pragma-pack */ 11363, /* DiagArray539 */ 1577, /* DiagSubGroup539 */ 408 },
+ { /* pragma-pack-suspicious-include */ 11375, /* DiagArray540 */ 1580, /* Empty */ 0 },
+ { /* pragma-system-header-outside-header */ 11406, /* DiagArray541 */ 1582, /* Empty */ 0 },
+ { /* pragmas */ 11442, /* DiagArray542 */ 1584, /* DiagSubGroup542 */ 410 },
+ { /* predefined-identifier-outside-function */ 11450, /* DiagArray543 */ 1586, /* Empty */ 0 },
+ { /* private-extern */ 11489, /* DiagArray544 */ 1588, /* Empty */ 0 },
+ { /* private-header */ 11504, /* DiagArray545 */ 1590, /* Empty */ 0 },
+ { /* private-module */ 11519, /* DiagArray546 */ 1592, /* Empty */ 0 },
+ { /* profile-instr-missing */ 11534, /* DiagArray547 */ 1597, /* Empty */ 0 },
+ { /* profile-instr-out-of-date */ 11556, /* DiagArray548 */ 1599, /* Empty */ 0 },
+ { /* profile-instr-unprofiled */ 11582, /* DiagArray549 */ 1601, /* Empty */ 0 },
+ { /* property-access-dot-syntax */ 11607, /* DiagArray550 */ 1603, /* Empty */ 0 },
+ { /* property-attribute-mismatch */ 11634, /* DiagArray551 */ 1605, /* Empty */ 0 },
+ { /* protocol */ 11662, /* DiagArray552 */ 1610, /* Empty */ 0 },
+ { /* protocol-property-synthesis-ambiguity */ 11671, /* DiagArray553 */ 1612, /* Empty */ 0 },
+ { /* qualified-void-return-type */ 11709, /* DiagArray554 */ 1614, /* Empty */ 0 },
+ { /* quoted-include-in-framework-header */ 11736, /* DiagArray555 */ 1616, /* Empty */ 0 },
+ { /* range-loop-analysis */ 11771, /* DiagArray556 */ 1618, /* Empty */ 0 },
+ { /* readonly-iboutlet-property */ 11791, /* DiagArray557 */ 1622, /* Empty */ 0 },
+ { /* receiver-expr */ 11818, /* DiagArray558 */ 1624, /* Empty */ 0 },
+ { /* receiver-forward-class */ 11832, /* DiagArray559 */ 1626, /* Empty */ 0 },
+ { /* redeclared-class-member */ 11855, /* DiagArray560 */ 1629, /* Empty */ 0 },
+ { /* redundant-decls */ 11879, /* Empty */ 0, /* Empty */ 0 },
+ { /* redundant-move */ 11895, /* DiagArray562 */ 1631, /* Empty */ 0 },
+ { /* redundant-parens */ 11910, /* DiagArray563 */ 1633, /* Empty */ 0 },
+ { /* register */ 11927, /* DiagArray564 */ 1635, /* DiagSubGroup564 */ 415 },
+ { /* reinterpret-base-class */ 11936, /* DiagArray565 */ 1637, /* Empty */ 0 },
+ { /* remark-backend-plugin */ 11959, /* DiagArray566 */ 1639, /* Empty */ 0 },
+ { /* reorder */ 11981, /* DiagArray567 */ 1641, /* Empty */ 0 },
+ { /* requires-super-attribute */ 11989, /* DiagArray568 */ 1643, /* Empty */ 0 },
+ { /* reserved-id-macro */ 12014, /* DiagArray569 */ 1645, /* Empty */ 0 },
+ { /* reserved-user-defined-literal */ 12032, /* DiagArray570 */ 1647, /* DiagSubGroup570 */ 417 },
+ { /* retained-language-linkage */ 12062, /* DiagArray571 */ 1650, /* Empty */ 0 },
+ { /* return-stack-address */ 12088, /* DiagArray572 */ 1652, /* Empty */ 0 },
+ { /* return-std-move */ 12109, /* DiagArray573 */ 1656, /* Empty */ 0 },
+ { /* return-std-move-in-c++11 */ 12125, /* DiagArray574 */ 1658, /* Empty */ 0 },
+ { /* return-type */ 12150, /* DiagArray575 */ 1660, /* DiagSubGroup575 */ 419 },
+ { /* return-type-c-linkage */ 12162, /* DiagArray576 */ 1670, /* Empty */ 0 },
+ { /* sanitize-address */ 12184, /* DiagArray577 */ 1673, /* Empty */ 0 },
+ { /* section */ 12201, /* DiagArray578 */ 1676, /* Empty */ 0 },
+ { /* selector */ 12209, /* DiagArray579 */ 1680, /* DiagSubGroup579 */ 421 },
+ { /* selector-type-mismatch */ 12218, /* DiagArray580 */ 1682, /* Empty */ 0 },
+ { /* self-assign */ 12241, /* DiagArray581 */ 1684, /* DiagSubGroup581 */ 423 },
+ { /* self-assign-field */ 12253, /* DiagArray582 */ 1686, /* Empty */ 0 },
+ { /* self-assign-overloaded */ 12271, /* DiagArray583 */ 1688, /* Empty */ 0 },
+ { /* self-move */ 12294, /* DiagArray584 */ 1690, /* Empty */ 0 },
+ { /* semicolon-before-method-body */ 12304, /* DiagArray585 */ 1692, /* Empty */ 0 },
+ { /* sentinel */ 12333, /* DiagArray586 */ 1694, /* Empty */ 0 },
+ { /* sequence-point */ 12342, /* Empty */ 0, /* DiagSubGroup587 */ 426 },
+ { /* serialized-diagnostics */ 12357, /* DiagArray588 */ 1697, /* Empty */ 0 },
+ { /* shadow */ 12380, /* DiagArray589 */ 1700, /* DiagSubGroup589 */ 428 },
+ { /* shadow-all */ 12387, /* Empty */ 0, /* DiagSubGroup590 */ 431 },
+ { /* shadow-field */ 12398, /* DiagArray591 */ 1702, /* Empty */ 0 },
+ { /* shadow-field-in-constructor */ 12411, /* DiagArray592 */ 1704, /* DiagSubGroup592 */ 436 },
+ { /* shadow-field-in-constructor-modified */ 12439, /* DiagArray593 */ 1706, /* Empty */ 0 },
+ { /* shadow-ivar */ 12476, /* DiagArray594 */ 1708, /* Empty */ 0 },
+ { /* shadow-uncaptured-local */ 12488, /* DiagArray595 */ 1710, /* Empty */ 0 },
+ { /* shift-count-negative */ 12512, /* DiagArray596 */ 1712, /* Empty */ 0 },
+ { /* shift-count-overflow */ 12533, /* DiagArray597 */ 1714, /* Empty */ 0 },
+ { /* shift-negative-value */ 12554, /* DiagArray598 */ 1716, /* Empty */ 0 },
+ { /* shift-op-parentheses */ 12575, /* DiagArray599 */ 1718, /* Empty */ 0 },
+ { /* shift-overflow */ 12596, /* DiagArray600 */ 1720, /* Empty */ 0 },
+ { /* shift-sign-overflow */ 12611, /* DiagArray601 */ 1722, /* Empty */ 0 },
+ { /* shorten-64-to-32 */ 12631, /* DiagArray602 */ 1724, /* Empty */ 0 },
+ { /* sign-compare */ 12648, /* DiagArray603 */ 1726, /* Empty */ 0 },
+ { /* sign-conversion */ 12661, /* DiagArray604 */ 1728, /* Empty */ 0 },
+ { /* sign-promo */ 12677, /* Empty */ 0, /* Empty */ 0 },
+ { /* signed-enum-bitfield */ 12688, /* DiagArray606 */ 1732, /* Empty */ 0 },
+ { /* sizeof-array-argument */ 12709, /* DiagArray607 */ 1734, /* Empty */ 0 },
+ { /* sizeof-array-decay */ 12731, /* DiagArray608 */ 1736, /* Empty */ 0 },
+ { /* sizeof-pointer-div */ 12750, /* DiagArray609 */ 1738, /* Empty */ 0 },
+ { /* sizeof-pointer-memaccess */ 12769, /* DiagArray610 */ 1740, /* Empty */ 0 },
+ { /* slash-u-filename */ 12794, /* DiagArray611 */ 1743, /* Empty */ 0 },
+ { /* sometimes-uninitialized */ 12811, /* DiagArray612 */ 1745, /* Empty */ 0 },
+ { /* source-uses-openmp */ 12835, /* DiagArray613 */ 1747, /* Empty */ 0 },
+ { /* spir-compat */ 12854, /* DiagArray614 */ 1750, /* Empty */ 0 },
+ { /* stack-protector */ 12866, /* Empty */ 0, /* Empty */ 0 },
+ { /* static-float-init */ 12882, /* DiagArray616 */ 1752, /* DiagSubGroup616 */ 438 },
+ { /* static-in-inline */ 12900, /* DiagArray617 */ 1754, /* Empty */ 0 },
+ { /* static-inline-explicit-instantiation */ 12917, /* DiagArray618 */ 1757, /* Empty */ 0 },
+ { /* static-local-in-inline */ 12954, /* DiagArray619 */ 1759, /* Empty */ 0 },
+ { /* static-self-init */ 12977, /* DiagArray620 */ 1761, /* Empty */ 0 },
+ { /* stdlibcxx-not-found */ 12994, /* DiagArray621 */ 1763, /* Empty */ 0 },
+ { /* strict-aliasing */ 13014, /* Empty */ 0, /* Empty */ 0 },
+ { /* strict-aliasing=0 */ 13030, /* Empty */ 0, /* Empty */ 0 },
+ { /* strict-aliasing=1 */ 13048, /* Empty */ 0, /* Empty */ 0 },
+ { /* strict-aliasing=2 */ 13066, /* Empty */ 0, /* Empty */ 0 },
+ { /* strict-overflow */ 13084, /* Empty */ 0, /* Empty */ 0 },
+ { /* strict-overflow=0 */ 13100, /* Empty */ 0, /* Empty */ 0 },
+ { /* strict-overflow=1 */ 13118, /* Empty */ 0, /* Empty */ 0 },
+ { /* strict-overflow=2 */ 13136, /* Empty */ 0, /* Empty */ 0 },
+ { /* strict-overflow=3 */ 13154, /* Empty */ 0, /* Empty */ 0 },
+ { /* strict-overflow=4 */ 13172, /* Empty */ 0, /* Empty */ 0 },
+ { /* strict-overflow=5 */ 13190, /* Empty */ 0, /* Empty */ 0 },
+ { /* strict-prototypes */ 13208, /* DiagArray633 */ 1765, /* Empty */ 0 },
+ { /* strict-selector-match */ 13226, /* DiagArray634 */ 1767, /* Empty */ 0 },
+ { /* string-compare */ 13248, /* DiagArray635 */ 1769, /* Empty */ 0 },
+ { /* string-conversion */ 13263, /* DiagArray636 */ 1771, /* Empty */ 0 },
+ { /* string-plus-char */ 13281, /* DiagArray637 */ 1773, /* Empty */ 0 },
+ { /* string-plus-int */ 13298, /* DiagArray638 */ 1775, /* Empty */ 0 },
+ { /* strlcpy-strlcat-size */ 13314, /* DiagArray639 */ 1777, /* Empty */ 0 },
+ { /* strncat-size */ 13335, /* DiagArray640 */ 1779, /* Empty */ 0 },
+ { /* super-class-method-mismatch */ 13348, /* DiagArray641 */ 1783, /* Empty */ 0 },
+ { /* suspicious-bzero */ 13376, /* DiagArray642 */ 1785, /* Empty */ 0 },
+ { /* suspicious-memaccess */ 13393, /* Empty */ 0, /* DiagSubGroup643 */ 440 },
+ { /* switch */ 13414, /* DiagArray644 */ 1787, /* Empty */ 0 },
+ { /* switch-bool */ 13421, /* DiagArray645 */ 1791, /* Empty */ 0 },
+ { /* switch-default */ 13433, /* Empty */ 0, /* Empty */ 0 },
+ { /* switch-enum */ 13448, /* DiagArray647 */ 1793, /* Empty */ 0 },
+ { /* sync-fetch-and-nand-semantics-changed */ 13460, /* DiagArray648 */ 1795, /* Empty */ 0 },
+ { /* synth */ 13498, /* Empty */ 0, /* Empty */ 0 },
+ { /* tautological-compare */ 13504, /* DiagArray650 */ 1797, /* DiagSubGroup650 */ 446 },
+ { /* tautological-constant-compare */ 13525, /* DiagArray651 */ 1800, /* DiagSubGroup651 */ 451 },
+ { /* tautological-constant-in-range-compare */ 13555, /* Empty */ 0, /* DiagSubGroup652 */ 453 },
+ { /* tautological-constant-out-of-range-compare */ 13594, /* DiagArray653 */ 1802, /* Empty */ 0 },
+ { /* tautological-overlap-compare */ 13637, /* DiagArray654 */ 1804, /* Empty */ 0 },
+ { /* tautological-pointer-compare */ 13666, /* DiagArray655 */ 1806, /* Empty */ 0 },
+ { /* tautological-type-limit-compare */ 13695, /* DiagArray656 */ 1809, /* Empty */ 0 },
+ { /* tautological-undefined-compare */ 13727, /* DiagArray657 */ 1811, /* Empty */ 0 },
+ { /* tautological-unsigned-enum-zero-compare */ 13758, /* DiagArray658 */ 1814, /* Empty */ 0 },
+ { /* tautological-unsigned-zero-compare */ 13798, /* DiagArray659 */ 1816, /* Empty */ 0 },
+ { /* tentative-definition-incomplete-type */ 13833, /* DiagArray660 */ 1818, /* Empty */ 0 },
+ { /* thread-safety */ 13870, /* Empty */ 0, /* DiagSubGroup661 */ 457 },
+ { /* thread-safety-analysis */ 13884, /* DiagArray662 */ 1820, /* Empty */ 0 },
+ { /* thread-safety-attributes */ 13907, /* DiagArray663 */ 1838, /* Empty */ 0 },
+ { /* thread-safety-beta */ 13932, /* DiagArray664 */ 1846, /* Empty */ 0 },
+ { /* thread-safety-negative */ 13951, /* DiagArray665 */ 1848, /* Empty */ 0 },
+ { /* thread-safety-precise */ 13974, /* DiagArray666 */ 1850, /* Empty */ 0 },
+ { /* thread-safety-reference */ 13996, /* DiagArray667 */ 1854, /* Empty */ 0 },
+ { /* thread-safety-verbose */ 14020, /* DiagArray668 */ 1857, /* Empty */ 0 },
+ { /* trigraphs */ 14042, /* DiagArray669 */ 1859, /* Empty */ 0 },
+ { /* type-limits */ 14052, /* Empty */ 0, /* Empty */ 0 },
+ { /* type-safety */ 14064, /* DiagArray671 */ 1864, /* Empty */ 0 },
+ { /* typedef-redefinition */ 14076, /* DiagArray672 */ 1868, /* Empty */ 0 },
+ { /* typename-missing */ 14097, /* DiagArray673 */ 1870, /* Empty */ 0 },
+ { /* unable-to-open-stats-file */ 14114, /* DiagArray674 */ 1872, /* Empty */ 0 },
+ { /* unavailable-declarations */ 14140, /* DiagArray675 */ 1874, /* Empty */ 0 },
+ { /* undeclared-selector */ 14165, /* DiagArray676 */ 1876, /* Empty */ 0 },
+ { /* undef */ 14185, /* DiagArray677 */ 1879, /* Empty */ 0 },
+ { /* undefined-bool-conversion */ 14191, /* DiagArray678 */ 1881, /* Empty */ 0 },
+ { /* undefined-func-template */ 14217, /* DiagArray679 */ 1884, /* Empty */ 0 },
+ { /* undefined-inline */ 14241, /* DiagArray680 */ 1886, /* Empty */ 0 },
+ { /* undefined-internal */ 14258, /* DiagArray681 */ 1888, /* Empty */ 0 },
+ { /* undefined-internal-type */ 14277, /* DiagArray682 */ 1890, /* Empty */ 0 },
+ { /* undefined-reinterpret-cast */ 14301, /* DiagArray683 */ 1892, /* Empty */ 0 },
+ { /* undefined-var-template */ 14328, /* DiagArray684 */ 1895, /* Empty */ 0 },
+ { /* unevaluated-expression */ 14351, /* DiagArray685 */ 1897, /* DiagSubGroup685 */ 462 },
+ { /* unguarded-availability */ 14374, /* DiagArray686 */ 1899, /* DiagSubGroup686 */ 464 },
+ { /* unguarded-availability-new */ 14397, /* DiagArray687 */ 1901, /* Empty */ 0 },
+ { /* unicode */ 14424, /* DiagArray688 */ 1903, /* Empty */ 0 },
+ { /* unicode-homoglyph */ 14432, /* DiagArray689 */ 1909, /* Empty */ 0 },
+ { /* unicode-whitespace */ 14450, /* DiagArray690 */ 1911, /* Empty */ 0 },
+ { /* unicode-zero-width */ 14469, /* DiagArray691 */ 1913, /* Empty */ 0 },
+ { /* uninitialized */ 14488, /* DiagArray692 */ 1915, /* DiagSubGroup692 */ 466 },
+ { /* unknown-argument */ 14502, /* DiagArray693 */ 1923, /* Empty */ 0 },
+ { /* unknown-attributes */ 14519, /* DiagArray694 */ 1926, /* Empty */ 0 },
+ { /* unknown-escape-sequence */ 14538, /* DiagArray695 */ 1928, /* Empty */ 0 },
+ { /* unknown-pragmas */ 14562, /* DiagArray696 */ 1930, /* Empty */ 0 },
+ { /* unknown-sanitizers */ 14578, /* DiagArray697 */ 1948, /* Empty */ 0 },
+ { /* unknown-warning-option */ 14597, /* DiagArray698 */ 1950, /* Empty */ 0 },
+ { /* unnamed-type-template-args */ 14620, /* DiagArray699 */ 1954, /* DiagSubGroup699 */ 469 },
+ { /* unneeded-internal-declaration */ 14647, /* DiagArray700 */ 1956, /* Empty */ 0 },
+ { /* unneeded-member-function */ 14677, /* DiagArray701 */ 1959, /* Empty */ 0 },
+ { /* unreachable-code */ 14702, /* DiagArray702 */ 1961, /* DiagSubGroup702 */ 471 },
+ { /* unreachable-code-aggressive */ 14719, /* Empty */ 0, /* DiagSubGroup703 */ 473 },
+ { /* unreachable-code-break */ 14747, /* DiagArray704 */ 1963, /* Empty */ 0 },
+ { /* unreachable-code-loop-increment */ 14770, /* DiagArray705 */ 1965, /* Empty */ 0 },
+ { /* unreachable-code-return */ 14802, /* DiagArray706 */ 1967, /* Empty */ 0 },
+ { /* unsequenced */ 14826, /* DiagArray707 */ 1969, /* Empty */ 0 },
+ { /* unsupported-abs */ 14838, /* DiagArray708 */ 1972, /* Empty */ 0 },
+ { /* unsupported-availability-guard */ 14854, /* DiagArray709 */ 1975, /* Empty */ 0 },
+ { /* unsupported-cb */ 14885, /* DiagArray710 */ 1977, /* Empty */ 0 },
+ { /* unsupported-dll-base-class-template */ 14900, /* DiagArray711 */ 1979, /* Empty */ 0 },
+ { /* unsupported-friend */ 14936, /* DiagArray712 */ 1981, /* Empty */ 0 },
+ { /* unsupported-gpopt */ 14955, /* DiagArray713 */ 1984, /* Empty */ 0 },
+ { /* unsupported-nan */ 14973, /* DiagArray714 */ 1986, /* Empty */ 0 },
+ { /* unsupported-target-opt */ 14989, /* DiagArray715 */ 1989, /* Empty */ 0 },
+ { /* unsupported-visibility */ 15012, /* DiagArray716 */ 1991, /* Empty */ 0 },
+ { /* unusable-partial-specialization */ 15035, /* DiagArray717 */ 1993, /* Empty */ 0 },
+ { /* unused */ 15067, /* Empty */ 0, /* DiagSubGroup718 */ 477 },
+ { /* unused-argument */ 15074, /* Empty */ 0, /* Empty */ 0 },
+ { /* unused-command-line-argument */ 15090, /* DiagArray720 */ 1995, /* Empty */ 0 },
+ { /* unused-comparison */ 15119, /* DiagArray721 */ 2003, /* Empty */ 0 },
+ { /* unused-const-variable */ 15137, /* DiagArray722 */ 2005, /* Empty */ 0 },
+ { /* unused-exception-parameter */ 15159, /* DiagArray723 */ 2007, /* Empty */ 0 },
+ { /* unused-function */ 15186, /* DiagArray724 */ 2009, /* DiagSubGroup724 */ 487 },
+ { /* unused-getter-return-value */ 15202, /* DiagArray725 */ 2011, /* Empty */ 0 },
+ { /* unused-label */ 15229, /* DiagArray726 */ 2013, /* Empty */ 0 },
+ { /* unused-lambda-capture */ 15242, /* DiagArray727 */ 2015, /* Empty */ 0 },
+ { /* unused-local-typedef */ 15264, /* DiagArray728 */ 2017, /* Empty */ 0 },
+ { /* unused-local-typedefs */ 15285, /* Empty */ 0, /* DiagSubGroup729 */ 489 },
+ { /* unused-macros */ 15307, /* DiagArray730 */ 2019, /* Empty */ 0 },
+ { /* unused-member-function */ 15321, /* DiagArray731 */ 2021, /* DiagSubGroup731 */ 491 },
+ { /* unused-parameter */ 15344, /* DiagArray732 */ 2023, /* Empty */ 0 },
+ { /* unused-private-field */ 15361, /* DiagArray733 */ 2025, /* Empty */ 0 },
+ { /* unused-property-ivar */ 15382, /* DiagArray734 */ 2027, /* Empty */ 0 },
+ { /* unused-result */ 15403, /* DiagArray735 */ 2029, /* Empty */ 0 },
+ { /* unused-template */ 15417, /* DiagArray736 */ 2031, /* DiagSubGroup736 */ 493 },
+ { /* unused-value */ 15433, /* DiagArray737 */ 2033, /* DiagSubGroup737 */ 495 },
+ { /* unused-variable */ 15446, /* DiagArray738 */ 2038, /* DiagSubGroup738 */ 499 },
+ { /* unused-volatile-lvalue */ 15462, /* DiagArray739 */ 2040, /* Empty */ 0 },
+ { /* used-but-marked-unused */ 15485, /* DiagArray740 */ 2042, /* Empty */ 0 },
+ { /* user-defined-literals */ 15508, /* DiagArray741 */ 2044, /* Empty */ 0 },
+ { /* user-defined-warnings */ 15530, /* DiagArray742 */ 2046, /* Empty */ 0 },
+ { /* varargs */ 15552, /* DiagArray743 */ 2048, /* Empty */ 0 },
+ { /* variadic-macros */ 15560, /* DiagArray744 */ 2052, /* Empty */ 0 },
+ { /* vec-elem-size */ 15576, /* DiagArray745 */ 2056, /* Empty */ 0 },
+ { /* vector-conversion */ 15590, /* DiagArray746 */ 2058, /* Empty */ 0 },
+ { /* vector-conversions */ 15608, /* Empty */ 0, /* DiagSubGroup747 */ 501 },
+ { /* vexing-parse */ 15627, /* DiagArray748 */ 2060, /* Empty */ 0 },
+ { /* visibility */ 15640, /* DiagArray749 */ 2064, /* Empty */ 0 },
+ { /* vla */ 15651, /* DiagArray750 */ 2067, /* Empty */ 0 },
+ { /* vla-extension */ 15655, /* DiagArray751 */ 2069, /* Empty */ 0 },
+ { /* void-ptr-dereference */ 15669, /* DiagArray752 */ 2071, /* Empty */ 0 },
+ { /* volatile-register-var */ 15690, /* Empty */ 0, /* Empty */ 0 },
+ { /* weak-template-vtables */ 15712, /* DiagArray754 */ 2073, /* Empty */ 0 },
+ { /* weak-vtables */ 15734, /* DiagArray755 */ 2075, /* Empty */ 0 },
+ { /* writable-strings */ 15747, /* DiagArray756 */ 2077, /* DiagSubGroup756 */ 503 },
+ { /* write-strings */ 15764, /* Empty */ 0, /* DiagSubGroup757 */ 505 },
+ { /* zero-as-null-pointer-constant */ 15778, /* DiagArray758 */ 2079, /* Empty */ 0 },
+ { /* zero-length-array */ 15808, /* DiagArray759 */ 2081, /* Empty */ 0 },
+#endif // GET_DIAG_TABLE
+
+
+#ifdef GET_CATEGORY_TABLE
+CATEGORY("", DiagCat_None)
+CATEGORY("Lexical or Preprocessor Issue", DiagCat_Lexical_or_Preprocessor_Issue)
+CATEGORY("Semantic Issue", DiagCat_Semantic_Issue)
+CATEGORY("Lambda Issue", DiagCat_Lambda_Issue)
+CATEGORY("Parse Issue", DiagCat_Parse_Issue)
+CATEGORY("ARC Semantic Issue", DiagCat_ARC_Semantic_Issue)
+CATEGORY("ARC and @properties", DiagCat_ARC_and__properties)
+CATEGORY("ARC Casting Rules", DiagCat_ARC_Casting_Rules)
+CATEGORY("ARC Parse Issue", DiagCat_ARC_Parse_Issue)
+CATEGORY("ARC Weak References", DiagCat_ARC_Weak_References)
+CATEGORY("ARC Restrictions", DiagCat_ARC_Restrictions)
+CATEGORY("OpenMP Issue", DiagCat_OpenMP_Issue)
+CATEGORY("Inline Assembly Issue", DiagCat_Inline_Assembly_Issue)
+CATEGORY("Modules Issue", DiagCat_Modules_Issue)
+CATEGORY("Coroutines Issue", DiagCat_Coroutines_Issue)
+CATEGORY("AST Deserialization Issue", DiagCat_AST_Deserialization_Issue)
+CATEGORY("Backend Issue", DiagCat_Backend_Issue)
+CATEGORY("Related Result Type Issue", DiagCat_Related_Result_Type_Issue)
+CATEGORY("AST Serialization Issue", DiagCat_AST_Serialization_Issue)
+CATEGORY("Nullability Issue", DiagCat_Nullability_Issue)
+CATEGORY("Generics Issue", DiagCat_Generics_Issue)
+CATEGORY("User-Defined Issue", DiagCat_User_Defined_Issue)
+CATEGORY("Refactoring Invocation Issue", DiagCat_Refactoring_Invocation_Issue)
+CATEGORY("VTable ABI Issue", DiagCat_VTable_ABI_Issue)
+CATEGORY("Value Conversion Issue", DiagCat_Value_Conversion_Issue)
+CATEGORY("Documentation Issue", DiagCat_Documentation_Issue)
+CATEGORY("ARC Retain Cycle", DiagCat_ARC_Retain_Cycle)
+CATEGORY("Deprecations", DiagCat_Deprecations)
+CATEGORY("Format String Issue", DiagCat_Format_String_Issue)
+CATEGORY("Cocoa API Issue", DiagCat_Cocoa_API_Issue)
+CATEGORY("#pragma message Directive", DiagCat__pragma_message_Directive)
+CATEGORY("Instrumentation Issue", DiagCat_Instrumentation_Issue)
+CATEGORY("Unused Entity Issue", DiagCat_Unused_Entity_Issue)
+#endif // GET_CATEGORY_TABLE
+
diff --git a/clang-r353983/include/clang/Basic/DiagnosticIDs.h b/clang-r353983/include/clang/Basic/DiagnosticIDs.h
new file mode 100644
index 00000000..fc0e2c9d
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/DiagnosticIDs.h
@@ -0,0 +1,341 @@
+//===--- DiagnosticIDs.h - Diagnostic IDs Handling --------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Defines the Diagnostic IDs-related interfaces.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_DIAGNOSTICIDS_H
+#define LLVM_CLANG_BASIC_DIAGNOSTICIDS_H
+
+#include "clang/Basic/LLVM.h"
+#include "llvm/ADT/IntrusiveRefCntPtr.h"
+#include "llvm/ADT/StringRef.h"
+#include <vector>
+
+namespace clang {
+ class DiagnosticsEngine;
+ class SourceLocation;
+
+ // Import the diagnostic enums themselves.
+ namespace diag {
+ // Size of each of the diagnostic categories.
+ enum {
+ DIAG_SIZE_COMMON = 300,
+ DIAG_SIZE_DRIVER = 200,
+ DIAG_SIZE_FRONTEND = 150,
+ DIAG_SIZE_SERIALIZATION = 120,
+ DIAG_SIZE_LEX = 400,
+ DIAG_SIZE_PARSE = 500,
+ DIAG_SIZE_AST = 150,
+ DIAG_SIZE_COMMENT = 100,
+ DIAG_SIZE_CROSSTU = 100,
+ DIAG_SIZE_SEMA = 3500,
+ DIAG_SIZE_ANALYSIS = 100,
+ DIAG_SIZE_REFACTORING = 1000,
+ };
+ // Start position for diagnostics.
+ enum {
+ DIAG_START_COMMON = 0,
+ DIAG_START_DRIVER = DIAG_START_COMMON + DIAG_SIZE_COMMON,
+ DIAG_START_FRONTEND = DIAG_START_DRIVER + DIAG_SIZE_DRIVER,
+ DIAG_START_SERIALIZATION = DIAG_START_FRONTEND + DIAG_SIZE_FRONTEND,
+ DIAG_START_LEX = DIAG_START_SERIALIZATION + DIAG_SIZE_SERIALIZATION,
+ DIAG_START_PARSE = DIAG_START_LEX + DIAG_SIZE_LEX,
+ DIAG_START_AST = DIAG_START_PARSE + DIAG_SIZE_PARSE,
+ DIAG_START_COMMENT = DIAG_START_AST + DIAG_SIZE_AST,
+ DIAG_START_CROSSTU = DIAG_START_COMMENT + DIAG_SIZE_CROSSTU,
+ DIAG_START_SEMA = DIAG_START_CROSSTU + DIAG_SIZE_COMMENT,
+ DIAG_START_ANALYSIS = DIAG_START_SEMA + DIAG_SIZE_SEMA,
+ DIAG_START_REFACTORING = DIAG_START_ANALYSIS + DIAG_SIZE_ANALYSIS,
+ DIAG_UPPER_LIMIT = DIAG_START_REFACTORING + DIAG_SIZE_REFACTORING
+ };
+
+ class CustomDiagInfo;
+
+ /// All of the diagnostics that can be emitted by the frontend.
+ typedef unsigned kind;
+
+ // Get typedefs for common diagnostics.
+ enum {
+#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,\
+ SFINAE,CATEGORY,NOWERROR,SHOWINSYSHEADER) ENUM,
+#define COMMONSTART
+#include "clang/Basic/DiagnosticCommonKinds.inc"
+ NUM_BUILTIN_COMMON_DIAGNOSTICS
+#undef DIAG
+ };
+
+ /// Enum values that allow the client to map NOTEs, WARNINGs, and EXTENSIONs
+ /// to either Ignore (nothing), Remark (emit a remark), Warning
+ /// (emit a warning) or Error (emit as an error). It allows clients to
+ /// map ERRORs to Error or Fatal (stop emitting diagnostics after this one).
+ enum class Severity {
+ // NOTE: 0 means "uncomputed".
+ Ignored = 1, ///< Do not present this diagnostic, ignore it.
+ Remark = 2, ///< Present this diagnostic as a remark.
+ Warning = 3, ///< Present this diagnostic as a warning.
+ Error = 4, ///< Present this diagnostic as an error.
+ Fatal = 5 ///< Present this diagnostic as a fatal error.
+ };
+
+ /// Flavors of diagnostics we can emit. Used to filter for a particular
+ /// kind of diagnostic (for instance, for -W/-R flags).
+ enum class Flavor {
+ WarningOrError, ///< A diagnostic that indicates a problem or potential
+ ///< problem. Can be made fatal by -Werror.
+ Remark ///< A diagnostic that indicates normal progress through
+ ///< compilation.
+ };
+ }
+
+class DiagnosticMapping {
+ unsigned Severity : 3;
+ unsigned IsUser : 1;
+ unsigned IsPragma : 1;
+ unsigned HasNoWarningAsError : 1;
+ unsigned HasNoErrorAsFatal : 1;
+ unsigned WasUpgradedFromWarning : 1;
+
+public:
+ static DiagnosticMapping Make(diag::Severity Severity, bool IsUser,
+ bool IsPragma) {
+ DiagnosticMapping Result;
+ Result.Severity = (unsigned)Severity;
+ Result.IsUser = IsUser;
+ Result.IsPragma = IsPragma;
+ Result.HasNoWarningAsError = 0;
+ Result.HasNoErrorAsFatal = 0;
+ Result.WasUpgradedFromWarning = 0;
+ return Result;
+ }
+
+ diag::Severity getSeverity() const { return (diag::Severity)Severity; }
+ void setSeverity(diag::Severity Value) { Severity = (unsigned)Value; }
+
+ bool isUser() const { return IsUser; }
+ bool isPragma() const { return IsPragma; }
+
+ bool isErrorOrFatal() const {
+ return getSeverity() == diag::Severity::Error ||
+ getSeverity() == diag::Severity::Fatal;
+ }
+
+ bool hasNoWarningAsError() const { return HasNoWarningAsError; }
+ void setNoWarningAsError(bool Value) { HasNoWarningAsError = Value; }
+
+ bool hasNoErrorAsFatal() const { return HasNoErrorAsFatal; }
+ void setNoErrorAsFatal(bool Value) { HasNoErrorAsFatal = Value; }
+
+ /// Whether this mapping attempted to map the diagnostic to a warning, but
+ /// was overruled because the diagnostic was already mapped to an error or
+ /// fatal error.
+ bool wasUpgradedFromWarning() const { return WasUpgradedFromWarning; }
+ void setUpgradedFromWarning(bool Value) { WasUpgradedFromWarning = Value; }
+
+ /// Serialize this mapping as a raw integer.
+ unsigned serialize() const {
+ return (IsUser << 7) | (IsPragma << 6) | (HasNoWarningAsError << 5) |
+ (HasNoErrorAsFatal << 4) | (WasUpgradedFromWarning << 3) | Severity;
+ }
+ /// Deserialize a mapping.
+ static DiagnosticMapping deserialize(unsigned Bits) {
+ DiagnosticMapping Result;
+ Result.IsUser = (Bits >> 7) & 1;
+ Result.IsPragma = (Bits >> 6) & 1;
+ Result.HasNoWarningAsError = (Bits >> 5) & 1;
+ Result.HasNoErrorAsFatal = (Bits >> 4) & 1;
+ Result.WasUpgradedFromWarning = (Bits >> 3) & 1;
+ Result.Severity = Bits & 0x7;
+ return Result;
+ }
+};
+
+/// Used for handling and querying diagnostic IDs.
+///
+/// Can be used and shared by multiple Diagnostics for multiple translation units.
+class DiagnosticIDs : public RefCountedBase<DiagnosticIDs> {
+public:
+ /// The level of the diagnostic, after it has been through mapping.
+ enum Level {
+ Ignored, Note, Remark, Warning, Error, Fatal
+ };
+
+private:
+ /// Information for uniquing and looking up custom diags.
+ diag::CustomDiagInfo *CustomDiagInfo;
+
+public:
+ DiagnosticIDs();
+ ~DiagnosticIDs();
+
+ /// Return an ID for a diagnostic with the specified format string and
+ /// level.
+ ///
+ /// If this is the first request for this diagnostic, it is registered and
+ /// created, otherwise the existing ID is returned.
+
+ // FIXME: Replace this function with a create-only facilty like
+ // createCustomDiagIDFromFormatString() to enforce safe usage. At the time of
+ // writing, nearly all callers of this function were invalid.
+ unsigned getCustomDiagID(Level L, StringRef FormatString);
+
+ //===--------------------------------------------------------------------===//
+ // Diagnostic classification and reporting interfaces.
+ //
+
+ /// Given a diagnostic ID, return a description of the issue.
+ StringRef getDescription(unsigned DiagID) const;
+
+ /// Return true if the unmapped diagnostic levelof the specified
+ /// diagnostic ID is a Warning or Extension.
+ ///
+ /// This only works on builtin diagnostics, not custom ones, and is not
+ /// legal to call on NOTEs.
+ static bool isBuiltinWarningOrExtension(unsigned DiagID);
+
+ /// Return true if the specified diagnostic is mapped to errors by
+ /// default.
+ static bool isDefaultMappingAsError(unsigned DiagID);
+
+ /// Determine whether the given built-in diagnostic ID is a Note.
+ static bool isBuiltinNote(unsigned DiagID);
+
+ /// Determine whether the given built-in diagnostic ID is for an
+ /// extension of some sort.
+ static bool isBuiltinExtensionDiag(unsigned DiagID) {
+ bool ignored;
+ return isBuiltinExtensionDiag(DiagID, ignored);
+ }
+
+ /// Determine whether the given built-in diagnostic ID is for an
+ /// extension of some sort, and whether it is enabled by default.
+ ///
+ /// This also returns EnabledByDefault, which is set to indicate whether the
+ /// diagnostic is ignored by default (in which case -pedantic enables it) or
+ /// treated as a warning/error by default.
+ ///
+ static bool isBuiltinExtensionDiag(unsigned DiagID, bool &EnabledByDefault);
+
+
+ /// Return the lowest-level warning option that enables the specified
+ /// diagnostic.
+ ///
+ /// If there is no -Wfoo flag that controls the diagnostic, this returns null.
+ static StringRef getWarningOptionForDiag(unsigned DiagID);
+
+ /// Return the category number that a specified \p DiagID belongs to,
+ /// or 0 if no category.
+ static unsigned getCategoryNumberForDiag(unsigned DiagID);
+
+ /// Return the number of diagnostic categories.
+ static unsigned getNumberOfCategories();
+
+ /// Given a category ID, return the name of the category.
+ static StringRef getCategoryNameFromID(unsigned CategoryID);
+
+ /// Return true if a given diagnostic falls into an ARC diagnostic
+ /// category.
+ static bool isARCDiagnostic(unsigned DiagID);
+
+ /// Enumeration describing how the emission of a diagnostic should
+ /// be treated when it occurs during C++ template argument deduction.
+ enum SFINAEResponse {
+ /// The diagnostic should not be reported, but it should cause
+ /// template argument deduction to fail.
+ ///
+ /// The vast majority of errors that occur during template argument
+ /// deduction fall into this category.
+ SFINAE_SubstitutionFailure,
+
+ /// The diagnostic should be suppressed entirely.
+ ///
+ /// Warnings generally fall into this category.
+ SFINAE_Suppress,
+
+ /// The diagnostic should be reported.
+ ///
+ /// The diagnostic should be reported. Various fatal errors (e.g.,
+ /// template instantiation depth exceeded) fall into this category.
+ SFINAE_Report,
+
+ /// The diagnostic is an access-control diagnostic, which will be
+ /// substitution failures in some contexts and reported in others.
+ SFINAE_AccessControl
+ };
+
+ /// Determines whether the given built-in diagnostic ID is
+ /// for an error that is suppressed if it occurs during C++ template
+ /// argument deduction.
+ ///
+ /// When an error is suppressed due to SFINAE, the template argument
+ /// deduction fails but no diagnostic is emitted. Certain classes of
+ /// errors, such as those errors that involve C++ access control,
+ /// are not SFINAE errors.
+ static SFINAEResponse getDiagnosticSFINAEResponse(unsigned DiagID);
+
+ /// Get the string of all diagnostic flags.
+ ///
+ /// \returns A list of all diagnostics flags as they would be written in a
+ /// command line invocation including their `no-` variants. For example:
+ /// `{"-Wempty-body", "-Wno-empty-body", ...}`
+ static std::vector<std::string> getDiagnosticFlags();
+
+ /// Get the set of all diagnostic IDs in the group with the given name.
+ ///
+ /// \param[out] Diags - On return, the diagnostics in the group.
+ /// \returns \c true if the given group is unknown, \c false otherwise.
+ bool getDiagnosticsInGroup(diag::Flavor Flavor, StringRef Group,
+ SmallVectorImpl<diag::kind> &Diags) const;
+
+ /// Get the set of all diagnostic IDs.
+ static void getAllDiagnostics(diag::Flavor Flavor,
+ std::vector<diag::kind> &Diags);
+
+ /// Get the diagnostic option with the closest edit distance to the
+ /// given group name.
+ static StringRef getNearestOption(diag::Flavor Flavor, StringRef Group);
+
+private:
+ /// Classify the specified diagnostic ID into a Level, consumable by
+ /// the DiagnosticClient.
+ ///
+ /// The classification is based on the way the client configured the
+ /// DiagnosticsEngine object.
+ ///
+ /// \param Loc The source location for which we are interested in finding out
+ /// the diagnostic state. Can be null in order to query the latest state.
+ DiagnosticIDs::Level
+ getDiagnosticLevel(unsigned DiagID, SourceLocation Loc,
+ const DiagnosticsEngine &Diag) const LLVM_READONLY;
+
+ diag::Severity
+ getDiagnosticSeverity(unsigned DiagID, SourceLocation Loc,
+ const DiagnosticsEngine &Diag) const LLVM_READONLY;
+
+ /// Used to report a diagnostic that is finally fully formed.
+ ///
+ /// \returns \c true if the diagnostic was emitted, \c false if it was
+ /// suppressed.
+ bool ProcessDiag(DiagnosticsEngine &Diag) const;
+
+ /// Used to emit a diagnostic that is finally fully formed,
+ /// ignoring suppression.
+ void EmitDiag(DiagnosticsEngine &Diag, Level DiagLevel) const;
+
+ /// Whether the diagnostic may leave the AST in a state where some
+ /// invariants can break.
+ bool isUnrecoverable(unsigned DiagID) const;
+
+ friend class DiagnosticsEngine;
+};
+
+} // end namespace clang
+
+#endif
diff --git a/clang-r353983/include/clang/Basic/DiagnosticIndexName.inc b/clang-r353983/include/clang/Basic/DiagnosticIndexName.inc
new file mode 100644
index 00000000..9b7dc234
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/DiagnosticIndexName.inc
@@ -0,0 +1,4887 @@
+DIAG_NAME_INDEX(backslash_newline_space)
+DIAG_NAME_INDEX(err_32_bit_builtin_64_bit_tgt)
+DIAG_NAME_INDEX(err_64_bit_builtin_32_bit_tgt)
+DIAG_NAME_INDEX(err__Pragma_malformed)
+DIAG_NAME_INDEX(err_abi_tag_on_redeclaration)
+DIAG_NAME_INDEX(err_abstract_type_in_decl)
+DIAG_NAME_INDEX(err_access)
+DIAG_NAME_INDEX(err_access_base_ctor)
+DIAG_NAME_INDEX(err_access_ctor)
+DIAG_NAME_INDEX(err_access_decl)
+DIAG_NAME_INDEX(err_access_dtor)
+DIAG_NAME_INDEX(err_access_dtor_base)
+DIAG_NAME_INDEX(err_access_dtor_exception)
+DIAG_NAME_INDEX(err_access_dtor_field)
+DIAG_NAME_INDEX(err_access_dtor_ivar)
+DIAG_NAME_INDEX(err_access_dtor_temp)
+DIAG_NAME_INDEX(err_access_dtor_var)
+DIAG_NAME_INDEX(err_access_dtor_vbase)
+DIAG_NAME_INDEX(err_access_field_ctor)
+DIAG_NAME_INDEX(err_access_friend_function)
+DIAG_NAME_INDEX(err_access_lambda_capture)
+DIAG_NAME_INDEX(err_access_specifier_interface)
+DIAG_NAME_INDEX(err_addr_ovl_ambiguous)
+DIAG_NAME_INDEX(err_addr_ovl_no_qualifier)
+DIAG_NAME_INDEX(err_addr_ovl_no_viable)
+DIAG_NAME_INDEX(err_addr_ovl_not_func_ptrref)
+DIAG_NAME_INDEX(err_address_of_function_with_pass_object_size_params)
+DIAG_NAME_INDEX(err_address_of_label_outside_fn)
+DIAG_NAME_INDEX(err_address_space_mismatch_templ_inst)
+DIAG_NAME_INDEX(err_address_space_qualified_delete)
+DIAG_NAME_INDEX(err_address_space_qualified_new)
+DIAG_NAME_INDEX(err_addrof_function_disabled_by_enable_if_attr)
+DIAG_NAME_INDEX(err_alias_after_tentative)
+DIAG_NAME_INDEX(err_alias_declaration_not_identifier)
+DIAG_NAME_INDEX(err_alias_declaration_pack_expansion)
+DIAG_NAME_INDEX(err_alias_declaration_specialization)
+DIAG_NAME_INDEX(err_alias_is_definition)
+DIAG_NAME_INDEX(err_alias_not_supported_on_darwin)
+DIAG_NAME_INDEX(err_alias_not_supported_on_nvptx)
+DIAG_NAME_INDEX(err_alias_template_expansion_into_fixed_list)
+DIAG_NAME_INDEX(err_alias_template_extra_headers)
+DIAG_NAME_INDEX(err_alias_to_undefined)
+DIAG_NAME_INDEX(err_align_value_attribute_argument_not_int)
+DIAG_NAME_INDEX(err_alignas_attribute_wrong_decl_type)
+DIAG_NAME_INDEX(err_alignas_mismatch)
+DIAG_NAME_INDEX(err_alignas_missing_on_definition)
+DIAG_NAME_INDEX(err_alignas_underaligned)
+DIAG_NAME_INDEX(err_aligned_allocation_unavailable)
+DIAG_NAME_INDEX(err_aligned_attribute_argument_not_int)
+DIAG_NAME_INDEX(err_alignment_dependent_typedef_name)
+DIAG_NAME_INDEX(err_alignment_not_power_of_two)
+DIAG_NAME_INDEX(err_alignment_too_big)
+DIAG_NAME_INDEX(err_alignment_too_small)
+DIAG_NAME_INDEX(err_alignof_member_of_incomplete_type)
+DIAG_NAME_INDEX(err_allocation_of_abstract_type)
+DIAG_NAME_INDEX(err_altivec_empty_initializer)
+DIAG_NAME_INDEX(err_ambiguous_base_to_derived_cast)
+DIAG_NAME_INDEX(err_ambiguous_delete_operand)
+DIAG_NAME_INDEX(err_ambiguous_derived_to_base_conv)
+DIAG_NAME_INDEX(err_ambiguous_inherited_constructor)
+DIAG_NAME_INDEX(err_ambiguous_member_multiple_subobject_types)
+DIAG_NAME_INDEX(err_ambiguous_member_multiple_subobjects)
+DIAG_NAME_INDEX(err_ambiguous_memptr_conv)
+DIAG_NAME_INDEX(err_ambiguous_reference)
+DIAG_NAME_INDEX(err_ambiguous_suitable_delete_member_function_found)
+DIAG_NAME_INDEX(err_ambiguous_tag_hiding)
+DIAG_NAME_INDEX(err_analyzer_config_invalid_input)
+DIAG_NAME_INDEX(err_analyzer_config_multiple_values)
+DIAG_NAME_INDEX(err_analyzer_config_no_value)
+DIAG_NAME_INDEX(err_analyzer_config_unknown)
+DIAG_NAME_INDEX(err_anon_bitfield_has_negative_width)
+DIAG_NAME_INDEX(err_anon_bitfield_qualifiers)
+DIAG_NAME_INDEX(err_anon_bitfield_width_exceeds_type_width)
+DIAG_NAME_INDEX(err_anon_type_definition)
+DIAG_NAME_INDEX(err_anonymous_property)
+DIAG_NAME_INDEX(err_anonymous_record_bad_member)
+DIAG_NAME_INDEX(err_anonymous_record_member_redecl)
+DIAG_NAME_INDEX(err_anonymous_record_nonpublic_member)
+DIAG_NAME_INDEX(err_anonymous_record_with_function)
+DIAG_NAME_INDEX(err_anonymous_record_with_static)
+DIAG_NAME_INDEX(err_anonymous_record_with_type)
+DIAG_NAME_INDEX(err_anonymous_struct_not_member)
+DIAG_NAME_INDEX(err_anonymous_union_not_static)
+DIAG_NAME_INDEX(err_anonymous_union_with_storage_spec)
+DIAG_NAME_INDEX(err_anyx86_interrupt_attribute)
+DIAG_NAME_INDEX(err_anyx86_interrupt_called)
+DIAG_NAME_INDEX(err_arc_array_param_no_ownership)
+DIAG_NAME_INDEX(err_arc_assign_property_ownership)
+DIAG_NAME_INDEX(err_arc_atomic_ownership)
+DIAG_NAME_INDEX(err_arc_autoreleasing_capture)
+DIAG_NAME_INDEX(err_arc_autoreleasing_var)
+DIAG_NAME_INDEX(err_arc_bridge_cast_incompatible)
+DIAG_NAME_INDEX(err_arc_bridge_cast_wrong_kind)
+DIAG_NAME_INDEX(err_arc_bridge_retain)
+DIAG_NAME_INDEX(err_arc_cast_requires_bridge)
+DIAG_NAME_INDEX(err_arc_collection_forward)
+DIAG_NAME_INDEX(err_arc_convesion_of_weak_unavailable)
+DIAG_NAME_INDEX(err_arc_gained_method_convention)
+DIAG_NAME_INDEX(err_arc_illegal_explicit_message)
+DIAG_NAME_INDEX(err_arc_illegal_method_def)
+DIAG_NAME_INDEX(err_arc_illegal_selector)
+DIAG_NAME_INDEX(err_arc_inconsistent_property_ownership)
+DIAG_NAME_INDEX(err_arc_indirect_no_ownership)
+DIAG_NAME_INDEX(err_arc_init_method_unrelated_result_type)
+DIAG_NAME_INDEX(err_arc_lost_method_convention)
+DIAG_NAME_INDEX(err_arc_may_not_respond)
+DIAG_NAME_INDEX(err_arc_method_not_found)
+DIAG_NAME_INDEX(err_arc_mismatched_cast)
+DIAG_NAME_INDEX(err_arc_multiple_method_decl)
+DIAG_NAME_INDEX(err_arc_new_array_without_ownership)
+DIAG_NAME_INDEX(err_arc_nolifetime_behavior)
+DIAG_NAME_INDEX(err_arc_nonlocal_writeback)
+DIAG_NAME_INDEX(err_arc_objc_object_in_tag)
+DIAG_NAME_INDEX(err_arc_objc_property_default_assign_on_object)
+DIAG_NAME_INDEX(err_arc_perform_selector_retains)
+DIAG_NAME_INDEX(err_arc_pseudo_dtor_inconstant_quals)
+DIAG_NAME_INDEX(err_arc_receiver_forward_class)
+DIAG_NAME_INDEX(err_arc_receiver_forward_instance)
+DIAG_NAME_INDEX(err_arc_strong_property_ownership)
+DIAG_NAME_INDEX(err_arc_thread_ownership)
+DIAG_NAME_INDEX(err_arc_typecheck_convert_incompatible_pointer)
+DIAG_NAME_INDEX(err_arc_unsupported_on_runtime)
+DIAG_NAME_INDEX(err_arc_unsupported_on_toolchain)
+DIAG_NAME_INDEX(err_arc_unsupported_weak_class)
+DIAG_NAME_INDEX(err_arc_unused_init_message)
+DIAG_NAME_INDEX(err_arc_weak_disabled)
+DIAG_NAME_INDEX(err_arc_weak_ivar_access)
+DIAG_NAME_INDEX(err_arc_weak_no_runtime)
+DIAG_NAME_INDEX(err_arc_weak_unavailable_assign)
+DIAG_NAME_INDEX(err_arc_weak_unavailable_property)
+DIAG_NAME_INDEX(err_arch_unsupported_isa)
+DIAG_NAME_INDEX(err_arcmt_nsinvocation_ownership)
+DIAG_NAME_INDEX(err_arg_with_address_space)
+DIAG_NAME_INDEX(err_argument_invalid_range)
+DIAG_NAME_INDEX(err_argument_not_multiple)
+DIAG_NAME_INDEX(err_argument_required_after_attribute)
+DIAG_NAME_INDEX(err_arithmetic_nonfragile_interface)
+DIAG_NAME_INDEX(err_arm_invalid_specialreg)
+DIAG_NAME_INDEX(err_array_designator_empty_range)
+DIAG_NAME_INDEX(err_array_designator_negative)
+DIAG_NAME_INDEX(err_array_designator_non_array)
+DIAG_NAME_INDEX(err_array_designator_too_large)
+DIAG_NAME_INDEX(err_array_init_different_type)
+DIAG_NAME_INDEX(err_array_init_incompat_wide_string_into_wchar)
+DIAG_NAME_INDEX(err_array_init_narrow_string_into_wchar)
+DIAG_NAME_INDEX(err_array_init_non_constant_array)
+DIAG_NAME_INDEX(err_array_init_not_init_list)
+DIAG_NAME_INDEX(err_array_init_plain_string_into_char8_t)
+DIAG_NAME_INDEX(err_array_init_utf8_string_into_char)
+DIAG_NAME_INDEX(err_array_init_wide_string_into_char)
+DIAG_NAME_INDEX(err_array_new_needs_size)
+DIAG_NAME_INDEX(err_array_of_abstract_type)
+DIAG_NAME_INDEX(err_array_section_does_not_specify_contiguous_storage)
+DIAG_NAME_INDEX(err_array_size_ambiguous_conversion)
+DIAG_NAME_INDEX(err_array_size_explicit_conversion)
+DIAG_NAME_INDEX(err_array_size_incomplete_type)
+DIAG_NAME_INDEX(err_array_size_non_int)
+DIAG_NAME_INDEX(err_array_size_not_integral)
+DIAG_NAME_INDEX(err_array_star_in_function_definition)
+DIAG_NAME_INDEX(err_array_star_outside_prototype)
+DIAG_NAME_INDEX(err_array_static_not_outermost)
+DIAG_NAME_INDEX(err_array_static_outside_prototype)
+DIAG_NAME_INDEX(err_array_too_large)
+DIAG_NAME_INDEX(err_as_qualified_auto_decl)
+DIAG_NAME_INDEX(err_asm_bad_register_type)
+DIAG_NAME_INDEX(err_asm_empty)
+DIAG_NAME_INDEX(err_asm_empty_symbolic_operand_name)
+DIAG_NAME_INDEX(err_asm_goto_not_supported_yet)
+DIAG_NAME_INDEX(err_asm_immediate_expected)
+DIAG_NAME_INDEX(err_asm_incomplete_type)
+DIAG_NAME_INDEX(err_asm_input_duplicate_match)
+DIAG_NAME_INDEX(err_asm_invalid_escape)
+DIAG_NAME_INDEX(err_asm_invalid_global_var_reg)
+DIAG_NAME_INDEX(err_asm_invalid_input_constraint)
+DIAG_NAME_INDEX(err_asm_invalid_input_size)
+DIAG_NAME_INDEX(err_asm_invalid_lvalue_in_input)
+DIAG_NAME_INDEX(err_asm_invalid_lvalue_in_output)
+DIAG_NAME_INDEX(err_asm_invalid_operand_number)
+DIAG_NAME_INDEX(err_asm_invalid_output_constraint)
+DIAG_NAME_INDEX(err_asm_invalid_output_size)
+DIAG_NAME_INDEX(err_asm_invalid_type_in_input)
+DIAG_NAME_INDEX(err_asm_naked_parm_ref)
+DIAG_NAME_INDEX(err_asm_naked_this_ref)
+DIAG_NAME_INDEX(err_asm_non_addr_value_in_memory_constraint)
+DIAG_NAME_INDEX(err_asm_operand_wide_string_literal)
+DIAG_NAME_INDEX(err_asm_register_size_mismatch)
+DIAG_NAME_INDEX(err_asm_tying_incompatible_types)
+DIAG_NAME_INDEX(err_asm_unexpected_constraint_alternatives)
+DIAG_NAME_INDEX(err_asm_unknown_register_name)
+DIAG_NAME_INDEX(err_asm_unknown_symbolic_operand_name)
+DIAG_NAME_INDEX(err_asm_unterminated_symbolic_operand_name)
+DIAG_NAME_INDEX(err_assoc_compatible_types)
+DIAG_NAME_INDEX(err_assoc_type_incomplete)
+DIAG_NAME_INDEX(err_assoc_type_nonobject)
+DIAG_NAME_INDEX(err_assoc_type_variably_modified)
+DIAG_NAME_INDEX(err_at_defs_cxx)
+DIAG_NAME_INDEX(err_at_in_class)
+DIAG_NAME_INDEX(err_atdef_nonfragile_interface)
+DIAG_NAME_INDEX(err_atimport)
+DIAG_NAME_INDEX(err_atomic_builtin_cannot_be_const)
+DIAG_NAME_INDEX(err_atomic_builtin_must_be_pointer)
+DIAG_NAME_INDEX(err_atomic_builtin_must_be_pointer_intfltptr)
+DIAG_NAME_INDEX(err_atomic_builtin_must_be_pointer_intptr)
+DIAG_NAME_INDEX(err_atomic_builtin_pointer_size)
+DIAG_NAME_INDEX(err_atomic_exclusive_builtin_pointer_size)
+DIAG_NAME_INDEX(err_atomic_load_store_uses_lib)
+DIAG_NAME_INDEX(err_atomic_op_bitwise_needs_atomic_int)
+DIAG_NAME_INDEX(err_atomic_op_has_invalid_synch_scope)
+DIAG_NAME_INDEX(err_atomic_op_needs_atomic)
+DIAG_NAME_INDEX(err_atomic_op_needs_atomic_int_or_ptr)
+DIAG_NAME_INDEX(err_atomic_op_needs_int32_or_ptr)
+DIAG_NAME_INDEX(err_atomic_op_needs_non_const_atomic)
+DIAG_NAME_INDEX(err_atomic_op_needs_non_const_pointer)
+DIAG_NAME_INDEX(err_atomic_op_needs_trivial_copy)
+DIAG_NAME_INDEX(err_atomic_property_nontrivial_assign_op)
+DIAG_NAME_INDEX(err_atomic_specifier_bad_type)
+DIAG_NAME_INDEX(err_atprotocol_protocol)
+DIAG_NAME_INDEX(err_attr_cond_never_constant_expr)
+DIAG_NAME_INDEX(err_attr_objc_ownership_redundant)
+DIAG_NAME_INDEX(err_attr_tlsmodel_arg)
+DIAG_NAME_INDEX(err_attribute_address_function_type)
+DIAG_NAME_INDEX(err_attribute_address_multiple_qualifiers)
+DIAG_NAME_INDEX(err_attribute_address_space_negative)
+DIAG_NAME_INDEX(err_attribute_address_space_too_high)
+DIAG_NAME_INDEX(err_attribute_aligned_too_great)
+DIAG_NAME_INDEX(err_attribute_argument_invalid)
+DIAG_NAME_INDEX(err_attribute_argument_is_zero)
+DIAG_NAME_INDEX(err_attribute_argument_n_type)
+DIAG_NAME_INDEX(err_attribute_argument_out_of_bounds)
+DIAG_NAME_INDEX(err_attribute_argument_out_of_bounds_extra_info)
+DIAG_NAME_INDEX(err_attribute_argument_out_of_range)
+DIAG_NAME_INDEX(err_attribute_argument_type)
+DIAG_NAME_INDEX(err_attribute_argument_vec_type_hint)
+DIAG_NAME_INDEX(err_attribute_bad_neon_vector_size)
+DIAG_NAME_INDEX(err_attribute_cleanup_arg_not_function)
+DIAG_NAME_INDEX(err_attribute_cleanup_func_arg_incompatible_type)
+DIAG_NAME_INDEX(err_attribute_cleanup_func_must_take_one_arg)
+DIAG_NAME_INDEX(err_attribute_dll_ambiguous_default_ctor)
+DIAG_NAME_INDEX(err_attribute_dll_deleted)
+DIAG_NAME_INDEX(err_attribute_dll_lambda)
+DIAG_NAME_INDEX(err_attribute_dll_member_of_dll_class)
+DIAG_NAME_INDEX(err_attribute_dll_not_extern)
+DIAG_NAME_INDEX(err_attribute_dll_redeclaration)
+DIAG_NAME_INDEX(err_attribute_dll_thread_local)
+DIAG_NAME_INDEX(err_attribute_dllimport_data_definition)
+DIAG_NAME_INDEX(err_attribute_dllimport_function_definition)
+DIAG_NAME_INDEX(err_attribute_dllimport_static_field_definition)
+DIAG_NAME_INDEX(err_attribute_integers_only)
+DIAG_NAME_INDEX(err_attribute_invalid_implicit_this_argument)
+DIAG_NAME_INDEX(err_attribute_invalid_size)
+DIAG_NAME_INDEX(err_attribute_invalid_vector_type)
+DIAG_NAME_INDEX(err_attribute_multiple_objc_gc)
+DIAG_NAME_INDEX(err_attribute_no_member_pointers)
+DIAG_NAME_INDEX(err_attribute_not_import_attr)
+DIAG_NAME_INDEX(err_attribute_not_module_attr)
+DIAG_NAME_INDEX(err_attribute_not_supported_in_lang)
+DIAG_NAME_INDEX(err_attribute_not_supported_on_arch)
+DIAG_NAME_INDEX(err_attribute_not_type_attr)
+DIAG_NAME_INDEX(err_attribute_only_once_per_parameter)
+DIAG_NAME_INDEX(err_attribute_overloadable_mismatch)
+DIAG_NAME_INDEX(err_attribute_overloadable_multiple_unmarked_overloads)
+DIAG_NAME_INDEX(err_attribute_overloadable_no_prototype)
+DIAG_NAME_INDEX(err_attribute_pointers_only)
+DIAG_NAME_INDEX(err_attribute_regparm_invalid_number)
+DIAG_NAME_INDEX(err_attribute_regparm_wrong_platform)
+DIAG_NAME_INDEX(err_attribute_requires_arguments)
+DIAG_NAME_INDEX(err_attribute_requires_opencl_version)
+DIAG_NAME_INDEX(err_attribute_requires_positive_integer)
+DIAG_NAME_INDEX(err_attribute_section_invalid_for_target)
+DIAG_NAME_INDEX(err_attribute_selectany_non_extern_data)
+DIAG_NAME_INDEX(err_attribute_sentinel_less_than_zero)
+DIAG_NAME_INDEX(err_attribute_sentinel_not_zero_or_one)
+DIAG_NAME_INDEX(err_attribute_size_too_large)
+DIAG_NAME_INDEX(err_attribute_too_few_arguments)
+DIAG_NAME_INDEX(err_attribute_too_many_arguments)
+DIAG_NAME_INDEX(err_attribute_unsupported)
+DIAG_NAME_INDEX(err_attribute_uuid_malformed_guid)
+DIAG_NAME_INDEX(err_attribute_vecreturn_only_pod_record)
+DIAG_NAME_INDEX(err_attribute_vecreturn_only_vector_member)
+DIAG_NAME_INDEX(err_attribute_weak_static)
+DIAG_NAME_INDEX(err_attribute_weakref_not_global_context)
+DIAG_NAME_INDEX(err_attribute_weakref_not_static)
+DIAG_NAME_INDEX(err_attribute_weakref_without_alias)
+DIAG_NAME_INDEX(err_attribute_wrong_decl_type)
+DIAG_NAME_INDEX(err_attribute_wrong_decl_type_str)
+DIAG_NAME_INDEX(err_attribute_wrong_number_arguments)
+DIAG_NAME_INDEX(err_attribute_zero_size)
+DIAG_NAME_INDEX(err_attributes_are_not_compatible)
+DIAG_NAME_INDEX(err_attributes_misplaced)
+DIAG_NAME_INDEX(err_attributes_not_allowed)
+DIAG_NAME_INDEX(err_auto_bitfield)
+DIAG_NAME_INDEX(err_auto_different_deductions)
+DIAG_NAME_INDEX(err_auto_fn_deduction_failure)
+DIAG_NAME_INDEX(err_auto_fn_different_deductions)
+DIAG_NAME_INDEX(err_auto_fn_no_return_but_not_auto)
+DIAG_NAME_INDEX(err_auto_fn_return_init_list)
+DIAG_NAME_INDEX(err_auto_fn_return_void_but_not_auto)
+DIAG_NAME_INDEX(err_auto_fn_used_before_defined)
+DIAG_NAME_INDEX(err_auto_fn_virtual)
+DIAG_NAME_INDEX(err_auto_inconsistent_deduction)
+DIAG_NAME_INDEX(err_auto_init_list_from_c)
+DIAG_NAME_INDEX(err_auto_missing_trailing_return)
+DIAG_NAME_INDEX(err_auto_new_ctor_multiple_expressions)
+DIAG_NAME_INDEX(err_auto_new_deduction_failure)
+DIAG_NAME_INDEX(err_auto_new_requires_ctor_arg)
+DIAG_NAME_INDEX(err_auto_non_deduced_not_alone)
+DIAG_NAME_INDEX(err_auto_not_allowed)
+DIAG_NAME_INDEX(err_auto_not_allowed_var_inst)
+DIAG_NAME_INDEX(err_auto_var_deduction_failure)
+DIAG_NAME_INDEX(err_auto_var_deduction_failure_from_init_list)
+DIAG_NAME_INDEX(err_auto_var_init_multiple_expressions)
+DIAG_NAME_INDEX(err_auto_var_init_no_expression)
+DIAG_NAME_INDEX(err_auto_var_init_paren_braces)
+DIAG_NAME_INDEX(err_auto_var_requires_init)
+DIAG_NAME_INDEX(err_auto_variable_cannot_appear_in_own_initializer)
+DIAG_NAME_INDEX(err_avail_query_expected_platform_name)
+DIAG_NAME_INDEX(err_avail_query_unrecognized_platform_name)
+DIAG_NAME_INDEX(err_availability_expected_change)
+DIAG_NAME_INDEX(err_availability_expected_platform)
+DIAG_NAME_INDEX(err_availability_query_repeated_platform)
+DIAG_NAME_INDEX(err_availability_query_repeated_star)
+DIAG_NAME_INDEX(err_availability_query_wildcard_required)
+DIAG_NAME_INDEX(err_availability_redundant)
+DIAG_NAME_INDEX(err_availability_unknown_change)
+DIAG_NAME_INDEX(err_await_suspend_invalid_return_type)
+DIAG_NAME_INDEX(err_bad_category_property_decl)
+DIAG_NAME_INDEX(err_bad_character_encoding)
+DIAG_NAME_INDEX(err_bad_const_cast_dest)
+DIAG_NAME_INDEX(err_bad_cstyle_cast_overload)
+DIAG_NAME_INDEX(err_bad_cxx_cast_bitfield)
+DIAG_NAME_INDEX(err_bad_cxx_cast_generic)
+DIAG_NAME_INDEX(err_bad_cxx_cast_member_pointer_size)
+DIAG_NAME_INDEX(err_bad_cxx_cast_qualifiers_away)
+DIAG_NAME_INDEX(err_bad_cxx_cast_rvalue)
+DIAG_NAME_INDEX(err_bad_cxx_cast_scalar_to_vector_different_size)
+DIAG_NAME_INDEX(err_bad_cxx_cast_unrelated_class)
+DIAG_NAME_INDEX(err_bad_cxx_cast_vector_to_scalar_different_size)
+DIAG_NAME_INDEX(err_bad_cxx_cast_vector_to_vector_different_size)
+DIAG_NAME_INDEX(err_bad_dynamic_cast_incomplete)
+DIAG_NAME_INDEX(err_bad_dynamic_cast_not_class)
+DIAG_NAME_INDEX(err_bad_dynamic_cast_not_polymorphic)
+DIAG_NAME_INDEX(err_bad_dynamic_cast_not_ptr)
+DIAG_NAME_INDEX(err_bad_dynamic_cast_not_ref_or_ptr)
+DIAG_NAME_INDEX(err_bad_kernel_param_type)
+DIAG_NAME_INDEX(err_bad_lvalue_to_rvalue_cast)
+DIAG_NAME_INDEX(err_bad_memptr_lhs)
+DIAG_NAME_INDEX(err_bad_memptr_rhs)
+DIAG_NAME_INDEX(err_bad_multiversion_option)
+DIAG_NAME_INDEX(err_bad_new_type)
+DIAG_NAME_INDEX(err_bad_parameter_name)
+DIAG_NAME_INDEX(err_bad_property_context)
+DIAG_NAME_INDEX(err_bad_property_decl)
+DIAG_NAME_INDEX(err_bad_receiver_type)
+DIAG_NAME_INDEX(err_bad_reinterpret_cast_overload)
+DIAG_NAME_INDEX(err_bad_reinterpret_cast_reference)
+DIAG_NAME_INDEX(err_bad_reinterpret_cast_small_int)
+DIAG_NAME_INDEX(err_bad_rvalue_to_rvalue_cast)
+DIAG_NAME_INDEX(err_bad_static_cast_member_pointer_nonmp)
+DIAG_NAME_INDEX(err_bad_static_cast_overload)
+DIAG_NAME_INDEX(err_bad_static_cast_pointer_nonpointer)
+DIAG_NAME_INDEX(err_bad_string_encoding)
+DIAG_NAME_INDEX(err_bad_variable_name)
+DIAG_NAME_INDEX(err_base_class_has_flexible_array_member)
+DIAG_NAME_INDEX(err_base_clause_on_union)
+DIAG_NAME_INDEX(err_base_init_direct_and_virtual)
+DIAG_NAME_INDEX(err_base_init_does_not_name_class)
+DIAG_NAME_INDEX(err_base_must_be_class)
+DIAG_NAME_INDEX(err_base_specifier_attribute)
+DIAG_NAME_INDEX(err_binding_cannot_appear_in_own_initializer)
+DIAG_NAME_INDEX(err_bitfield_has_negative_width)
+DIAG_NAME_INDEX(err_bitfield_has_zero_width)
+DIAG_NAME_INDEX(err_bitfield_width_exceeds_type_width)
+DIAG_NAME_INDEX(err_block_decl_ref_not_modifiable_lvalue)
+DIAG_NAME_INDEX(err_block_extern_cant_init)
+DIAG_NAME_INDEX(err_block_on_nonlocal)
+DIAG_NAME_INDEX(err_block_on_vm)
+DIAG_NAME_INDEX(err_block_return_missing_expr)
+DIAG_NAME_INDEX(err_block_returning_array_function)
+DIAG_NAME_INDEX(err_blocks_disable)
+DIAG_NAME_INDEX(err_bool_redeclaration)
+DIAG_NAME_INDEX(err_bound_member_function)
+DIAG_NAME_INDEX(err_box_literal_collection)
+DIAG_NAME_INDEX(err_bracket_depth_exceeded)
+DIAG_NAME_INDEX(err_brackets_go_after_unqualified_id)
+DIAG_NAME_INDEX(err_break_not_in_loop_or_switch)
+DIAG_NAME_INDEX(err_builtin_annotation_first_arg)
+DIAG_NAME_INDEX(err_builtin_annotation_second_arg)
+DIAG_NAME_INDEX(err_builtin_definition)
+DIAG_NAME_INDEX(err_builtin_fn_use)
+DIAG_NAME_INDEX(err_builtin_func_cast_more_than_one_arg)
+DIAG_NAME_INDEX(err_builtin_launder_invalid_arg)
+DIAG_NAME_INDEX(err_builtin_longjmp_invalid_val)
+DIAG_NAME_INDEX(err_builtin_longjmp_unsupported)
+DIAG_NAME_INDEX(err_builtin_needs_feature)
+DIAG_NAME_INDEX(err_builtin_operator_new_delete_not_usual)
+DIAG_NAME_INDEX(err_builtin_redeclare)
+DIAG_NAME_INDEX(err_builtin_requires_language)
+DIAG_NAME_INDEX(err_builtin_setjmp_unsupported)
+DIAG_NAME_INDEX(err_builtin_target_unsupported)
+DIAG_NAME_INDEX(err_builtin_x64_aarch64_only)
+DIAG_NAME_INDEX(err_c11_noreturn_misplaced)
+DIAG_NAME_INDEX(err_c99_array_usage_cxx)
+DIAG_NAME_INDEX(err_call_function_incomplete_return)
+DIAG_NAME_INDEX(err_call_incomplete_argument)
+DIAG_NAME_INDEX(err_call_incomplete_return)
+DIAG_NAME_INDEX(err_callback_attribute_argument_unknown)
+DIAG_NAME_INDEX(err_callback_attribute_invalid_callee)
+DIAG_NAME_INDEX(err_callback_attribute_multiple)
+DIAG_NAME_INDEX(err_callback_attribute_no_callee)
+DIAG_NAME_INDEX(err_callback_callee_is_variadic)
+DIAG_NAME_INDEX(err_callback_callee_no_function_type)
+DIAG_NAME_INDEX(err_callback_implicit_this_not_available)
+DIAG_NAME_INDEX(err_cannot_find_suitable_accessor)
+DIAG_NAME_INDEX(err_cannot_form_pointer_to_member_of_reference_type)
+DIAG_NAME_INDEX(err_cannot_open_file)
+DIAG_NAME_INDEX(err_cannot_pass_non_trivial_c_struct_to_vararg)
+DIAG_NAME_INDEX(err_cannot_pass_objc_interface_to_vararg)
+DIAG_NAME_INDEX(err_cannot_pass_objc_interface_to_vararg_format)
+DIAG_NAME_INDEX(err_cannot_pass_to_vararg)
+DIAG_NAME_INDEX(err_cannot_pass_to_vararg_format)
+DIAG_NAME_INDEX(err_capture_block_variable)
+DIAG_NAME_INDEX(err_capture_default_non_local)
+DIAG_NAME_INDEX(err_capture_does_not_name_variable)
+DIAG_NAME_INDEX(err_capture_more_than_once)
+DIAG_NAME_INDEX(err_capture_non_automatic_variable)
+DIAG_NAME_INDEX(err_capture_of_abstract_type)
+DIAG_NAME_INDEX(err_capture_of_incomplete_type)
+DIAG_NAME_INDEX(err_carries_dependency_missing_on_first_decl)
+DIAG_NAME_INDEX(err_carries_dependency_param_not_function_decl)
+DIAG_NAME_INDEX(err_case_not_in_switch)
+DIAG_NAME_INDEX(err_cast_pointer_from_non_pointer_int)
+DIAG_NAME_INDEX(err_cast_pointer_to_non_pointer_int)
+DIAG_NAME_INDEX(err_cast_selector_expr)
+DIAG_NAME_INDEX(err_catch_incomplete)
+DIAG_NAME_INDEX(err_catch_incomplete_ptr)
+DIAG_NAME_INDEX(err_catch_incomplete_ref)
+DIAG_NAME_INDEX(err_catch_param_not_objc_type)
+DIAG_NAME_INDEX(err_catch_rvalue_ref)
+DIAG_NAME_INDEX(err_catch_variably_modified)
+DIAG_NAME_INDEX(err_category_forward_interface)
+DIAG_NAME_INDEX(err_category_property)
+DIAG_NAME_INDEX(err_cconv_change)
+DIAG_NAME_INDEX(err_cconv_knr)
+DIAG_NAME_INDEX(err_cconv_varargs)
+DIAG_NAME_INDEX(err_cfstring_literal_not_string_constant)
+DIAG_NAME_INDEX(err_character_too_large)
+DIAG_NAME_INDEX(err_circular_inheritance)
+DIAG_NAME_INDEX(err_class_extension_after_impl)
+DIAG_NAME_INDEX(err_class_marked_final_used_as_base)
+DIAG_NAME_INDEX(err_class_on_template_template_param)
+DIAG_NAME_INDEX(err_class_property_found)
+DIAG_NAME_INDEX(err_class_redeclared_with_different_access)
+DIAG_NAME_INDEX(err_cocoa_naming_owned_rule)
+DIAG_NAME_INDEX(err_collection_expr_type)
+DIAG_NAME_INDEX(err_complex_mode_vector_type)
+DIAG_NAME_INDEX(err_compound_literal_with_address_space)
+DIAG_NAME_INDEX(err_compound_qualified_function_type)
+DIAG_NAME_INDEX(err_concept_decl_invalid_specifiers)
+DIAG_NAME_INDEX(err_concept_decls_may_only_appear_in_namespace_scope)
+DIAG_NAME_INDEX(err_concept_specialized)
+DIAG_NAME_INDEX(err_concept_specified_specialization)
+DIAG_NAME_INDEX(err_concept_wrong_decl_kind)
+DIAG_NAME_INDEX(err_cond_voidptr_arc)
+DIAG_NAME_INDEX(err_conditional_ambiguous)
+DIAG_NAME_INDEX(err_conditional_ambiguous_ovl)
+DIAG_NAME_INDEX(err_conditional_vector_element_size)
+DIAG_NAME_INDEX(err_conditional_vector_size)
+DIAG_NAME_INDEX(err_conditional_void_nonvoid)
+DIAG_NAME_INDEX(err_config_scalar_return)
+DIAG_NAME_INDEX(err_conflict_marker)
+DIAG_NAME_INDEX(err_conflicting_aliasing_type)
+DIAG_NAME_INDEX(err_conflicting_codeseg_attribute)
+DIAG_NAME_INDEX(err_conflicting_ivar_bitwidth)
+DIAG_NAME_INDEX(err_conflicting_ivar_name)
+DIAG_NAME_INDEX(err_conflicting_ivar_type)
+DIAG_NAME_INDEX(err_conflicting_overriding_cc_attributes)
+DIAG_NAME_INDEX(err_conflicting_super_class)
+DIAG_NAME_INDEX(err_conflicting_types)
+DIAG_NAME_INDEX(err_constant_integer_arg_type)
+DIAG_NAME_INDEX(err_constexpr_body_invalid_stmt)
+DIAG_NAME_INDEX(err_constexpr_body_no_return)
+DIAG_NAME_INDEX(err_constexpr_ctor_missing_init)
+DIAG_NAME_INDEX(err_constexpr_dtor)
+DIAG_NAME_INDEX(err_constexpr_function_try_block)
+DIAG_NAME_INDEX(err_constexpr_local_var_no_init)
+DIAG_NAME_INDEX(err_constexpr_local_var_non_literal_type)
+DIAG_NAME_INDEX(err_constexpr_local_var_static)
+DIAG_NAME_INDEX(err_constexpr_main)
+DIAG_NAME_INDEX(err_constexpr_no_declarators)
+DIAG_NAME_INDEX(err_constexpr_non_literal_param)
+DIAG_NAME_INDEX(err_constexpr_non_literal_return)
+DIAG_NAME_INDEX(err_constexpr_redecl_mismatch)
+DIAG_NAME_INDEX(err_constexpr_return_missing_expr)
+DIAG_NAME_INDEX(err_constexpr_static_mem_var_requires_init)
+DIAG_NAME_INDEX(err_constexpr_tag)
+DIAG_NAME_INDEX(err_constexpr_union_ctor_no_init)
+DIAG_NAME_INDEX(err_constexpr_var_non_literal)
+DIAG_NAME_INDEX(err_constexpr_var_requires_const_init)
+DIAG_NAME_INDEX(err_constexpr_virtual)
+DIAG_NAME_INDEX(err_constexpr_virtual_base)
+DIAG_NAME_INDEX(err_constexpr_vla)
+DIAG_NAME_INDEX(err_constructor_bad_name)
+DIAG_NAME_INDEX(err_constructor_byvalue_arg)
+DIAG_NAME_INDEX(err_constructor_cannot_be)
+DIAG_NAME_INDEX(err_constructor_redeclared)
+DIAG_NAME_INDEX(err_constructor_return_type)
+DIAG_NAME_INDEX(err_continuation_class)
+DIAG_NAME_INDEX(err_continue_not_in_loop)
+DIAG_NAME_INDEX(err_conv_function_not_member)
+DIAG_NAME_INDEX(err_conv_function_redeclared)
+DIAG_NAME_INDEX(err_conv_function_return_type)
+DIAG_NAME_INDEX(err_conv_function_to_array)
+DIAG_NAME_INDEX(err_conv_function_to_function)
+DIAG_NAME_INDEX(err_conv_function_variadic)
+DIAG_NAME_INDEX(err_conv_function_with_complex_decl)
+DIAG_NAME_INDEX(err_conv_function_with_params)
+DIAG_NAME_INDEX(err_convertvector_incompatible_vector)
+DIAG_NAME_INDEX(err_convertvector_non_vector)
+DIAG_NAME_INDEX(err_convertvector_non_vector_type)
+DIAG_NAME_INDEX(err_copy_capture_with_copy_default)
+DIAG_NAME_INDEX(err_coroutine_handle_missing_member)
+DIAG_NAME_INDEX(err_coroutine_invalid_func_context)
+DIAG_NAME_INDEX(err_coroutine_objc_method)
+DIAG_NAME_INDEX(err_coroutine_outside_function)
+DIAG_NAME_INDEX(err_coroutine_promise_get_return_object_on_allocation_failure)
+DIAG_NAME_INDEX(err_coroutine_promise_incompatible_return_functions)
+DIAG_NAME_INDEX(err_coroutine_promise_new_requires_nothrow)
+DIAG_NAME_INDEX(err_coroutine_promise_requires_return_function)
+DIAG_NAME_INDEX(err_coroutine_promise_type_incomplete)
+DIAG_NAME_INDEX(err_coroutine_promise_unhandled_exception_required)
+DIAG_NAME_INDEX(err_coroutine_type_missing_specialization)
+DIAG_NAME_INDEX(err_coroutine_unevaluated_context)
+DIAG_NAME_INDEX(err_covariant_return_ambiguous_derived_to_base_conv)
+DIAG_NAME_INDEX(err_covariant_return_inaccessible_base)
+DIAG_NAME_INDEX(err_covariant_return_incomplete)
+DIAG_NAME_INDEX(err_covariant_return_not_derived)
+DIAG_NAME_INDEX(err_covariant_return_type_class_type_more_qualified)
+DIAG_NAME_INDEX(err_covariant_return_type_different_qualifications)
+DIAG_NAME_INDEX(err_cpu_dispatch_mismatch)
+DIAG_NAME_INDEX(err_cpu_specific_multiple_defs)
+DIAG_NAME_INDEX(err_cpu_unsupported_isa)
+DIAG_NAME_INDEX(err_ctor_dtor_returns_void)
+DIAG_NAME_INDEX(err_ctor_init_missing_comma)
+DIAG_NAME_INDEX(err_ctu_error_opening)
+DIAG_NAME_INDEX(err_cuda_device_exceptions)
+DIAG_NAME_INDEX(err_cuda_extern_shared)
+DIAG_NAME_INDEX(err_cuda_host_shared)
+DIAG_NAME_INDEX(err_cuda_nonglobal_constant)
+DIAG_NAME_INDEX(err_cuda_ovl_target)
+DIAG_NAME_INDEX(err_cuda_unattributed_constexpr_cannot_overload_device)
+DIAG_NAME_INDEX(err_cuda_vla)
+DIAG_NAME_INDEX(err_current_module_name_mismatch)
+DIAG_NAME_INDEX(err_cxx11_attribute_forbids_arguments)
+DIAG_NAME_INDEX(err_cxx11_attribute_forbids_ellipsis)
+DIAG_NAME_INDEX(err_cxx11_attribute_repeated)
+DIAG_NAME_INDEX(err_cyclic_alias)
+DIAG_NAME_INDEX(err_dangling_member)
+DIAG_NAME_INDEX(err_dealloc_bad_result_type)
+DIAG_NAME_INDEX(err_decimal_unsupported)
+DIAG_NAME_INDEX(err_decl_attribute_invalid_on_stmt)
+DIAG_NAME_INDEX(err_decl_negative_array_size)
+DIAG_NAME_INDEX(err_declaration_does_not_declare_param)
+DIAG_NAME_INDEX(err_declarator_need_ident)
+DIAG_NAME_INDEX(err_declspec_after_virtspec)
+DIAG_NAME_INDEX(err_declspec_thread_on_thread_variable)
+DIAG_NAME_INDEX(err_decltype_auto_cannot_be_combined)
+DIAG_NAME_INDEX(err_decltype_auto_compound_type)
+DIAG_NAME_INDEX(err_decltype_auto_function_declarator_not_declaration)
+DIAG_NAME_INDEX(err_decltype_auto_initializer_list)
+DIAG_NAME_INDEX(err_decltype_auto_invalid)
+DIAG_NAME_INDEX(err_decltype_in_declarator)
+DIAG_NAME_INDEX(err_decomp_decl_ambiguous_base)
+DIAG_NAME_INDEX(err_decomp_decl_anon_union_member)
+DIAG_NAME_INDEX(err_decomp_decl_context)
+DIAG_NAME_INDEX(err_decomp_decl_inaccessible_base)
+DIAG_NAME_INDEX(err_decomp_decl_inaccessible_field)
+DIAG_NAME_INDEX(err_decomp_decl_multiple_bases_with_members)
+DIAG_NAME_INDEX(err_decomp_decl_not_alone)
+DIAG_NAME_INDEX(err_decomp_decl_parens)
+DIAG_NAME_INDEX(err_decomp_decl_requires_init)
+DIAG_NAME_INDEX(err_decomp_decl_spec)
+DIAG_NAME_INDEX(err_decomp_decl_std_tuple_element_not_specialized)
+DIAG_NAME_INDEX(err_decomp_decl_std_tuple_size_not_constant)
+DIAG_NAME_INDEX(err_decomp_decl_template)
+DIAG_NAME_INDEX(err_decomp_decl_type)
+DIAG_NAME_INDEX(err_decomp_decl_unbindable_type)
+DIAG_NAME_INDEX(err_decomp_decl_wrong_number_bindings)
+DIAG_NAME_INDEX(err_decrement_bool)
+DIAG_NAME_INDEX(err_deduced_class_template_compound_type)
+DIAG_NAME_INDEX(err_deduced_class_template_ctor_ambiguous)
+DIAG_NAME_INDEX(err_deduced_class_template_ctor_no_viable)
+DIAG_NAME_INDEX(err_deduced_class_template_deleted)
+DIAG_NAME_INDEX(err_deduced_class_template_explicit)
+DIAG_NAME_INDEX(err_deduced_class_template_incomplete)
+DIAG_NAME_INDEX(err_deduced_non_class_template_specialization_type)
+DIAG_NAME_INDEX(err_deduced_non_type_template_arg_type_mismatch)
+DIAG_NAME_INDEX(err_deduced_return_type)
+DIAG_NAME_INDEX(err_deduction_guide_bad_trailing_return_type)
+DIAG_NAME_INDEX(err_deduction_guide_defines_function)
+DIAG_NAME_INDEX(err_deduction_guide_explicit_mismatch)
+DIAG_NAME_INDEX(err_deduction_guide_invalid_specifier)
+DIAG_NAME_INDEX(err_deduction_guide_name_not_class_template)
+DIAG_NAME_INDEX(err_deduction_guide_no_trailing_return_type)
+DIAG_NAME_INDEX(err_deduction_guide_specialized)
+DIAG_NAME_INDEX(err_deduction_guide_template_not_deducible)
+DIAG_NAME_INDEX(err_deduction_guide_with_complex_decl)
+DIAG_NAME_INDEX(err_deduction_guide_wrong_access)
+DIAG_NAME_INDEX(err_deduction_guide_wrong_scope)
+DIAG_NAME_INDEX(err_deep_exception_specs_differ)
+DIAG_NAME_INDEX(err_default_arg_in_partial_spec)
+DIAG_NAME_INDEX(err_default_arg_makes_ctor_special)
+DIAG_NAME_INDEX(err_default_arg_unparsed)
+DIAG_NAME_INDEX(err_default_delete_in_multiple_declaration)
+DIAG_NAME_INDEX(err_default_init_const)
+DIAG_NAME_INDEX(err_default_not_in_switch)
+DIAG_NAME_INDEX(err_default_special_members)
+DIAG_NAME_INDEX(err_default_template_template_parameter_not_template)
+DIAG_NAME_INDEX(err_defaulted_copy_assign_not_ref)
+DIAG_NAME_INDEX(err_defaulted_special_member_copy_const_param)
+DIAG_NAME_INDEX(err_defaulted_special_member_move_const_param)
+DIAG_NAME_INDEX(err_defaulted_special_member_params)
+DIAG_NAME_INDEX(err_defaulted_special_member_quals)
+DIAG_NAME_INDEX(err_defaulted_special_member_return_type)
+DIAG_NAME_INDEX(err_defaulted_special_member_variadic)
+DIAG_NAME_INDEX(err_defaulted_special_member_volatile_param)
+DIAG_NAME_INDEX(err_defined_macro_name)
+DIAG_NAME_INDEX(err_definition_of_explicitly_defaulted_member)
+DIAG_NAME_INDEX(err_definition_of_implicitly_declared_member)
+DIAG_NAME_INDEX(err_delegating_ctor)
+DIAG_NAME_INDEX(err_delegating_initializer_alone)
+DIAG_NAME_INDEX(err_delete_explicit_conversion)
+DIAG_NAME_INDEX(err_delete_incomplete_class_type)
+DIAG_NAME_INDEX(err_delete_operand)
+DIAG_NAME_INDEX(err_deleted_decl_not_first)
+DIAG_NAME_INDEX(err_deleted_function_use)
+DIAG_NAME_INDEX(err_deleted_inherited_ctor_use)
+DIAG_NAME_INDEX(err_deleted_main)
+DIAG_NAME_INDEX(err_deleted_non_function)
+DIAG_NAME_INDEX(err_deleted_override)
+DIAG_NAME_INDEX(err_dependent_deduced_tst)
+DIAG_NAME_INDEX(err_dependent_function_template_spec_no_match)
+DIAG_NAME_INDEX(err_dependent_nested_name_spec)
+DIAG_NAME_INDEX(err_dependent_non_type_arg_in_partial_spec)
+DIAG_NAME_INDEX(err_dependent_tag_decl)
+DIAG_NAME_INDEX(err_dependent_typed_non_type_arg_in_partial_spec)
+DIAG_NAME_INDEX(err_dereference_incomplete_type)
+DIAG_NAME_INDEX(err_designated_init_attr_non_init)
+DIAG_NAME_INDEX(err_designator_for_scalar_init)
+DIAG_NAME_INDEX(err_designator_into_flexible_array_member)
+DIAG_NAME_INDEX(err_destroy_attr_on_non_static_var)
+DIAG_NAME_INDEX(err_destroying_operator_delete_not_usual)
+DIAG_NAME_INDEX(err_destructor_cannot_be)
+DIAG_NAME_INDEX(err_destructor_class_name)
+DIAG_NAME_INDEX(err_destructor_expr_type_mismatch)
+DIAG_NAME_INDEX(err_destructor_name)
+DIAG_NAME_INDEX(err_destructor_not_member)
+DIAG_NAME_INDEX(err_destructor_redeclared)
+DIAG_NAME_INDEX(err_destructor_return_type)
+DIAG_NAME_INDEX(err_destructor_template)
+DIAG_NAME_INDEX(err_destructor_template_id)
+DIAG_NAME_INDEX(err_destructor_tilde_identifier)
+DIAG_NAME_INDEX(err_destructor_tilde_scope)
+DIAG_NAME_INDEX(err_destructor_typedef_name)
+DIAG_NAME_INDEX(err_destructor_variadic)
+DIAG_NAME_INDEX(err_destructor_with_params)
+DIAG_NAME_INDEX(err_device_static_local_var)
+DIAG_NAME_INDEX(err_diagnose_if_invalid_diagnostic_type)
+DIAG_NAME_INDEX(err_diagnose_if_succeeded)
+DIAG_NAME_INDEX(err_different_asm_label)
+DIAG_NAME_INDEX(err_different_language_linkage)
+DIAG_NAME_INDEX(err_different_pass_object_size_params)
+DIAG_NAME_INDEX(err_different_return_type_for_overriding_virtual_function)
+DIAG_NAME_INDEX(err_digit_separator_not_between_digits)
+DIAG_NAME_INDEX(err_dimension_expr_not_constant_integer)
+DIAG_NAME_INDEX(err_distant_exception_spec)
+DIAG_NAME_INDEX(err_downcast_from_inaccessible_base)
+DIAG_NAME_INDEX(err_drv_I_dash_not_supported)
+DIAG_NAME_INDEX(err_drv_Xopenmp_target_missing_triple)
+DIAG_NAME_INDEX(err_drv_argument_not_allowed_with)
+DIAG_NAME_INDEX(err_drv_argument_only_allowed_with)
+DIAG_NAME_INDEX(err_drv_bitcode_unsupported_on_toolchain)
+DIAG_NAME_INDEX(err_drv_cannot_read_config_file)
+DIAG_NAME_INDEX(err_drv_cc_print_options_failure)
+DIAG_NAME_INDEX(err_drv_clang_unsupported)
+DIAG_NAME_INDEX(err_drv_clang_unsupported_opt_cxx_darwin_i386)
+DIAG_NAME_INDEX(err_drv_clang_unsupported_opt_faltivec)
+DIAG_NAME_INDEX(err_drv_command_failed)
+DIAG_NAME_INDEX(err_drv_command_failure)
+DIAG_NAME_INDEX(err_drv_command_signalled)
+DIAG_NAME_INDEX(err_drv_compilationdatabase)
+DIAG_NAME_INDEX(err_drv_config_file_not_exist)
+DIAG_NAME_INDEX(err_drv_config_file_not_found)
+DIAG_NAME_INDEX(err_drv_conflicting_deployment_targets)
+DIAG_NAME_INDEX(err_drv_cuda_bad_gpu_arch)
+DIAG_NAME_INDEX(err_drv_cuda_host_arch)
+DIAG_NAME_INDEX(err_drv_cuda_version_unsupported)
+DIAG_NAME_INDEX(err_drv_defsym_invalid_format)
+DIAG_NAME_INDEX(err_drv_defsym_invalid_symval)
+DIAG_NAME_INDEX(err_drv_dllexport_inlines_and_fallback)
+DIAG_NAME_INDEX(err_drv_duplicate_config)
+DIAG_NAME_INDEX(err_drv_emit_llvm_link)
+DIAG_NAME_INDEX(err_drv_expecting_fopenmp_with_fopenmp_targets)
+DIAG_NAME_INDEX(err_drv_force_crash)
+DIAG_NAME_INDEX(err_drv_gnustep_objc_runtime_incompatible_binary)
+DIAG_NAME_INDEX(err_drv_invalid_Xarch_argument_isdriver)
+DIAG_NAME_INDEX(err_drv_invalid_Xarch_argument_with_args)
+DIAG_NAME_INDEX(err_drv_invalid_Xopenmp_target_with_args)
+DIAG_NAME_INDEX(err_drv_invalid_arch_name)
+DIAG_NAME_INDEX(err_drv_invalid_argument_to_fdebug_prefix_map)
+DIAG_NAME_INDEX(err_drv_invalid_cf_runtime_abi)
+DIAG_NAME_INDEX(err_drv_invalid_darwin_version)
+DIAG_NAME_INDEX(err_drv_invalid_gcc_output_type)
+DIAG_NAME_INDEX(err_drv_invalid_hvx_length)
+DIAG_NAME_INDEX(err_drv_invalid_int_value)
+DIAG_NAME_INDEX(err_drv_invalid_libcxx_deployment)
+DIAG_NAME_INDEX(err_drv_invalid_linker_name)
+DIAG_NAME_INDEX(err_drv_invalid_mfloat_abi)
+DIAG_NAME_INDEX(err_drv_invalid_mtp)
+DIAG_NAME_INDEX(err_drv_invalid_omp_target)
+DIAG_NAME_INDEX(err_drv_invalid_output_with_multiple_archs)
+DIAG_NAME_INDEX(err_drv_invalid_pgo_instrumentor)
+DIAG_NAME_INDEX(err_drv_invalid_remap_file)
+DIAG_NAME_INDEX(err_drv_invalid_riscv_arch_name)
+DIAG_NAME_INDEX(err_drv_invalid_riscv_ext_arch_name)
+DIAG_NAME_INDEX(err_drv_invalid_rtlib_name)
+DIAG_NAME_INDEX(err_drv_invalid_stdlib_name)
+DIAG_NAME_INDEX(err_drv_invalid_thread_model_for_target)
+DIAG_NAME_INDEX(err_drv_invalid_value)
+DIAG_NAME_INDEX(err_drv_invalid_version_number)
+DIAG_NAME_INDEX(err_drv_lto_without_lld)
+DIAG_NAME_INDEX(err_drv_malformed_sanitizer_blacklist)
+DIAG_NAME_INDEX(err_drv_mg_requires_m_or_mm)
+DIAG_NAME_INDEX(err_drv_missing_arg_mtp)
+DIAG_NAME_INDEX(err_drv_missing_argument)
+DIAG_NAME_INDEX(err_drv_mix_cuda_hip)
+DIAG_NAME_INDEX(err_drv_module_header_wrong_kind)
+DIAG_NAME_INDEX(err_drv_modules_validate_once_requires_timestamp)
+DIAG_NAME_INDEX(err_drv_nested_config_file)
+DIAG_NAME_INDEX(err_drv_no_ast_support)
+DIAG_NAME_INDEX(err_drv_no_cuda_installation)
+DIAG_NAME_INDEX(err_drv_no_cuda_libdevice)
+DIAG_NAME_INDEX(err_drv_no_input_files)
+DIAG_NAME_INDEX(err_drv_no_linker_llvm_support)
+DIAG_NAME_INDEX(err_drv_no_module_support)
+DIAG_NAME_INDEX(err_drv_no_neon_modifier)
+DIAG_NAME_INDEX(err_drv_no_such_file)
+DIAG_NAME_INDEX(err_drv_omp_host_ir_file_not_found)
+DIAG_NAME_INDEX(err_drv_omp_host_target_not_supported)
+DIAG_NAME_INDEX(err_drv_optimization_remark_pattern)
+DIAG_NAME_INDEX(err_drv_out_file_argument_with_multiple_sources)
+DIAG_NAME_INDEX(err_drv_output_argument_with_multiple_files)
+DIAG_NAME_INDEX(err_drv_preamble_format)
+DIAG_NAME_INDEX(err_drv_ropi_incompatible_with_cxx)
+DIAG_NAME_INDEX(err_drv_ropi_rwpi_incompatible_with_pic)
+DIAG_NAME_INDEX(err_drv_trivial_auto_var_init_zero_disabled)
+DIAG_NAME_INDEX(err_drv_unable_to_remove_file)
+DIAG_NAME_INDEX(err_drv_unknown_argument)
+DIAG_NAME_INDEX(err_drv_unknown_argument_with_suggestion)
+DIAG_NAME_INDEX(err_drv_unknown_indirect_jump_opt)
+DIAG_NAME_INDEX(err_drv_unknown_language)
+DIAG_NAME_INDEX(err_drv_unknown_objc_runtime)
+DIAG_NAME_INDEX(err_drv_unknown_stdin_type)
+DIAG_NAME_INDEX(err_drv_unknown_stdin_type_clang_cl)
+DIAG_NAME_INDEX(err_drv_unsupported_embed_bitcode)
+DIAG_NAME_INDEX(err_drv_unsupported_indirect_jump_opt)
+DIAG_NAME_INDEX(err_drv_unsupported_linker)
+DIAG_NAME_INDEX(err_drv_unsupported_noabicalls_pic)
+DIAG_NAME_INDEX(err_drv_unsupported_opt)
+DIAG_NAME_INDEX(err_drv_unsupported_opt_for_target)
+DIAG_NAME_INDEX(err_drv_unsupported_opt_with_suggestion)
+DIAG_NAME_INDEX(err_drv_unsupported_option_argument)
+DIAG_NAME_INDEX(err_drv_unsupported_rtlib_for_platform)
+DIAG_NAME_INDEX(err_drv_use_of_Z_option)
+DIAG_NAME_INDEX(err_dtor_expr_without_call)
+DIAG_NAME_INDEX(err_dup_implementation_category)
+DIAG_NAME_INDEX(err_dup_implementation_class)
+DIAG_NAME_INDEX(err_dup_virtual)
+DIAG_NAME_INDEX(err_duplicate_base_class)
+DIAG_NAME_INDEX(err_duplicate_case)
+DIAG_NAME_INDEX(err_duplicate_case_differing_expr)
+DIAG_NAME_INDEX(err_duplicate_class_def)
+DIAG_NAME_INDEX(err_duplicate_default_assoc)
+DIAG_NAME_INDEX(err_duplicate_ivar_declaration)
+DIAG_NAME_INDEX(err_duplicate_ivar_use)
+DIAG_NAME_INDEX(err_duplicate_mangled_name)
+DIAG_NAME_INDEX(err_duplicate_member)
+DIAG_NAME_INDEX(err_duplicate_method_decl)
+DIAG_NAME_INDEX(err_duplicate_property)
+DIAG_NAME_INDEX(err_duplicate_virt_specifier)
+DIAG_NAME_INDEX(err_dynamic_and_noexcept_specification)
+DIAG_NAME_INDEX(err_dynamic_property_ivar_decl)
+DIAG_NAME_INDEX(err_dynamic_var_init)
+DIAG_NAME_INDEX(err_early_catch_all)
+DIAG_NAME_INDEX(err_ellipsis_first_param)
+DIAG_NAME_INDEX(err_ellipsis_in_declarator_not_parameter)
+DIAG_NAME_INDEX(err_embedded_directive)
+DIAG_NAME_INDEX(err_empty_enum)
+DIAG_NAME_INDEX(err_empty_scalar_initializer)
+DIAG_NAME_INDEX(err_enum_class_reference)
+DIAG_NAME_INDEX(err_enum_invalid_underlying)
+DIAG_NAME_INDEX(err_enum_mode_vector_type)
+DIAG_NAME_INDEX(err_enum_redeclare_fixed_mismatch)
+DIAG_NAME_INDEX(err_enum_redeclare_scoped_mismatch)
+DIAG_NAME_INDEX(err_enum_redeclare_type_mismatch)
+DIAG_NAME_INDEX(err_enum_template)
+DIAG_NAME_INDEX(err_enumerator_does_not_exist)
+DIAG_NAME_INDEX(err_enumerator_list_missing_comma)
+DIAG_NAME_INDEX(err_enumerator_too_large)
+DIAG_NAME_INDEX(err_enumerator_unnamed_no_def)
+DIAG_NAME_INDEX(err_enumerator_wrapped)
+DIAG_NAME_INDEX(err_escape_too_large)
+DIAG_NAME_INDEX(err_event_t_addr_space_qual)
+DIAG_NAME_INDEX(err_except_spec_unparsed)
+DIAG_NAME_INDEX(err_exception_spec_cycle)
+DIAG_NAME_INDEX(err_exception_spec_in_typedef)
+DIAG_NAME_INDEX(err_exception_spec_incomplete_type)
+DIAG_NAME_INDEX(err_exception_spec_not_parsed)
+DIAG_NAME_INDEX(err_exceptions_disabled)
+DIAG_NAME_INDEX(err_excess_initializers)
+DIAG_NAME_INDEX(err_excess_initializers_in_char_array_initializer)
+DIAG_NAME_INDEX(err_expected)
+DIAG_NAME_INDEX(err_expected_after)
+DIAG_NAME_INDEX(err_expected_capture)
+DIAG_NAME_INDEX(err_expected_case_before_expression)
+DIAG_NAME_INDEX(err_expected_catch)
+DIAG_NAME_INDEX(err_expected_class_name)
+DIAG_NAME_INDEX(err_expected_class_name_not_template)
+DIAG_NAME_INDEX(err_expected_class_or_namespace)
+DIAG_NAME_INDEX(err_expected_colon_after_setter_name)
+DIAG_NAME_INDEX(err_expected_coloncolon_after_super)
+DIAG_NAME_INDEX(err_expected_comma_greater)
+DIAG_NAME_INDEX(err_expected_comma_or_rsquare)
+DIAG_NAME_INDEX(err_expected_either)
+DIAG_NAME_INDEX(err_expected_end_declare_target)
+DIAG_NAME_INDEX(err_expected_end_of_enumerator)
+DIAG_NAME_INDEX(err_expected_equal_designator)
+DIAG_NAME_INDEX(err_expected_expression)
+DIAG_NAME_INDEX(err_expected_external_declaration)
+DIAG_NAME_INDEX(err_expected_field_designator)
+DIAG_NAME_INDEX(err_expected_fn_body)
+DIAG_NAME_INDEX(err_expected_fold_operator)
+DIAG_NAME_INDEX(err_expected_id_building_module)
+DIAG_NAME_INDEX(err_expected_init_in_condition)
+DIAG_NAME_INDEX(err_expected_init_in_condition_lparen)
+DIAG_NAME_INDEX(err_expected_kernel_void_return_type)
+DIAG_NAME_INDEX(err_expected_lambda_body)
+DIAG_NAME_INDEX(err_expected_lbrace_after_base_specifiers)
+DIAG_NAME_INDEX(err_expected_lbrace_in_compound_literal)
+DIAG_NAME_INDEX(err_expected_less_after)
+DIAG_NAME_INDEX(err_expected_lparen_after)
+DIAG_NAME_INDEX(err_expected_lparen_after_type)
+DIAG_NAME_INDEX(err_expected_member_name_or_semi)
+DIAG_NAME_INDEX(err_expected_member_name_or_semi_objcxx_keyword)
+DIAG_NAME_INDEX(err_expected_member_or_base_name)
+DIAG_NAME_INDEX(err_expected_method_body)
+DIAG_NAME_INDEX(err_expected_minus_or_plus)
+DIAG_NAME_INDEX(err_expected_namespace_name)
+DIAG_NAME_INDEX(err_expected_objc_container)
+DIAG_NAME_INDEX(err_expected_parameter_pack)
+DIAG_NAME_INDEX(err_expected_parentheses_around_typename)
+DIAG_NAME_INDEX(err_expected_property_name)
+DIAG_NAME_INDEX(err_expected_punc)
+DIAG_NAME_INDEX(err_expected_qualified_after_typename)
+DIAG_NAME_INDEX(err_expected_rparen_after)
+DIAG_NAME_INDEX(err_expected_selector_for_method)
+DIAG_NAME_INDEX(err_expected_semi_after_attribute_list)
+DIAG_NAME_INDEX(err_expected_semi_after_expr)
+DIAG_NAME_INDEX(err_expected_semi_after_method_proto)
+DIAG_NAME_INDEX(err_expected_semi_after_namespace_name)
+DIAG_NAME_INDEX(err_expected_semi_after_static_assert)
+DIAG_NAME_INDEX(err_expected_semi_after_stmt)
+DIAG_NAME_INDEX(err_expected_semi_decl_list)
+DIAG_NAME_INDEX(err_expected_semi_declaration)
+DIAG_NAME_INDEX(err_expected_semi_for)
+DIAG_NAME_INDEX(err_expected_star_this_capture)
+DIAG_NAME_INDEX(err_expected_statement)
+DIAG_NAME_INDEX(err_expected_string_literal)
+DIAG_NAME_INDEX(err_expected_template)
+DIAG_NAME_INDEX(err_expected_template_parameter)
+DIAG_NAME_INDEX(err_expected_token_instead_of_objcxx_keyword)
+DIAG_NAME_INDEX(err_expected_type)
+DIAG_NAME_INDEX(err_expected_type_name_after_typename)
+DIAG_NAME_INDEX(err_expected_unqualified_id)
+DIAG_NAME_INDEX(err_expected_version)
+DIAG_NAME_INDEX(err_expected_while)
+DIAG_NAME_INDEX(err_explicit_instantiation_ambiguous)
+DIAG_NAME_INDEX(err_explicit_instantiation_constexpr)
+DIAG_NAME_INDEX(err_explicit_instantiation_data_member_not_instantiated)
+DIAG_NAME_INDEX(err_explicit_instantiation_declaration_after_definition)
+DIAG_NAME_INDEX(err_explicit_instantiation_duplicate)
+DIAG_NAME_INDEX(err_explicit_instantiation_enum)
+DIAG_NAME_INDEX(err_explicit_instantiation_in_class)
+DIAG_NAME_INDEX(err_explicit_instantiation_inline)
+DIAG_NAME_INDEX(err_explicit_instantiation_member_function_not_instantiated)
+DIAG_NAME_INDEX(err_explicit_instantiation_must_be_global)
+DIAG_NAME_INDEX(err_explicit_instantiation_nontemplate_type)
+DIAG_NAME_INDEX(err_explicit_instantiation_not_known)
+DIAG_NAME_INDEX(err_explicit_instantiation_of_typedef)
+DIAG_NAME_INDEX(err_explicit_instantiation_out_of_scope)
+DIAG_NAME_INDEX(err_explicit_instantiation_requires_name)
+DIAG_NAME_INDEX(err_explicit_instantiation_storage_class)
+DIAG_NAME_INDEX(err_explicit_instantiation_undefined_func_template)
+DIAG_NAME_INDEX(err_explicit_instantiation_undefined_member)
+DIAG_NAME_INDEX(err_explicit_instantiation_undefined_var_template)
+DIAG_NAME_INDEX(err_explicit_instantiation_unqualified_wrong_namespace)
+DIAG_NAME_INDEX(err_explicit_instantiation_with_definition)
+DIAG_NAME_INDEX(err_explicit_instantiation_without_template_id)
+DIAG_NAME_INDEX(err_explicit_non_ctor_or_conv_function)
+DIAG_NAME_INDEX(err_explicit_non_function)
+DIAG_NAME_INDEX(err_explicit_out_of_class)
+DIAG_NAME_INDEX(err_explicit_spec_non_template)
+DIAG_NAME_INDEX(err_explicit_specialization_inconsistent_storage_class)
+DIAG_NAME_INDEX(err_exponent_has_no_digits)
+DIAG_NAME_INDEX(err_export_empty)
+DIAG_NAME_INDEX(err_export_not_in_module_interface)
+DIAG_NAME_INDEX(err_export_within_export)
+DIAG_NAME_INDEX(err_expr_not_cce)
+DIAG_NAME_INDEX(err_expr_not_ice)
+DIAG_NAME_INDEX(err_expr_not_string_literal)
+DIAG_NAME_INDEX(err_ext_vector_component_exceeds_length)
+DIAG_NAME_INDEX(err_ext_vector_component_name_illegal)
+DIAG_NAME_INDEX(err_extdefmap_parsing)
+DIAG_NAME_INDEX(err_extern_c_global_conflict)
+DIAG_NAME_INDEX(err_extern_non_extern)
+DIAG_NAME_INDEX(err_external_source_symbol_duplicate_clause)
+DIAG_NAME_INDEX(err_external_source_symbol_expected_keyword)
+DIAG_NAME_INDEX(err_extraneous_closing_brace)
+DIAG_NAME_INDEX(err_extraneous_rparen_in_condition)
+DIAG_NAME_INDEX(err_extraneous_token_before_semi)
+DIAG_NAME_INDEX(err_falloff_nonvoid_block)
+DIAG_NAME_INDEX(err_fallthrough_attr_invalid_placement)
+DIAG_NAME_INDEX(err_fallthrough_attr_outside_switch)
+DIAG_NAME_INDEX(err_fallthrough_attr_wrong_target)
+DIAG_NAME_INDEX(err_fe_action_not_available)
+DIAG_NAME_INDEX(err_fe_ast_file_modified)
+DIAG_NAME_INDEX(err_fe_backend_frame_larger_than)
+DIAG_NAME_INDEX(err_fe_backend_plugin)
+DIAG_NAME_INDEX(err_fe_backend_unsupported)
+DIAG_NAME_INDEX(err_fe_cannot_link_module)
+DIAG_NAME_INDEX(err_fe_dependency_file_requires_MT)
+DIAG_NAME_INDEX(err_fe_error_backend)
+DIAG_NAME_INDEX(err_fe_error_opening)
+DIAG_NAME_INDEX(err_fe_error_reading)
+DIAG_NAME_INDEX(err_fe_error_reading_stdin)
+DIAG_NAME_INDEX(err_fe_expected_clang_command)
+DIAG_NAME_INDEX(err_fe_expected_compiler_job)
+DIAG_NAME_INDEX(err_fe_inline_asm)
+DIAG_NAME_INDEX(err_fe_invalid_alignment)
+DIAG_NAME_INDEX(err_fe_invalid_code_complete_file)
+DIAG_NAME_INDEX(err_fe_invalid_exception_model)
+DIAG_NAME_INDEX(err_fe_invalid_plugin_name)
+DIAG_NAME_INDEX(err_fe_invalid_wchar_type)
+DIAG_NAME_INDEX(err_fe_module_file_modified)
+DIAG_NAME_INDEX(err_fe_no_pch_in_dir)
+DIAG_NAME_INDEX(err_fe_not_a_pch_file)
+DIAG_NAME_INDEX(err_fe_pch_file_modified)
+DIAG_NAME_INDEX(err_fe_pch_file_overridden)
+DIAG_NAME_INDEX(err_fe_pch_malformed)
+DIAG_NAME_INDEX(err_fe_pch_malformed_block)
+DIAG_NAME_INDEX(err_fe_remap_missing_from_file)
+DIAG_NAME_INDEX(err_fe_remap_missing_to_file)
+DIAG_NAME_INDEX(err_fe_stdout_binary)
+DIAG_NAME_INDEX(err_fe_unable_to_create_target)
+DIAG_NAME_INDEX(err_fe_unable_to_interface_with_target)
+DIAG_NAME_INDEX(err_fe_unable_to_load_pch)
+DIAG_NAME_INDEX(err_fe_unable_to_load_plugin)
+DIAG_NAME_INDEX(err_fe_unable_to_open_output)
+DIAG_NAME_INDEX(err_fe_unable_to_read_pch_file)
+DIAG_NAME_INDEX(err_feature_check_malformed)
+DIAG_NAME_INDEX(err_field_declared_as_function)
+DIAG_NAME_INDEX(err_field_designator_non_aggr)
+DIAG_NAME_INDEX(err_field_designator_nonfield)
+DIAG_NAME_INDEX(err_field_designator_unknown)
+DIAG_NAME_INDEX(err_field_designator_unknown_suggest)
+DIAG_NAME_INDEX(err_field_incomplete)
+DIAG_NAME_INDEX(err_field_instantiates_to_function)
+DIAG_NAME_INDEX(err_field_with_address_space)
+DIAG_NAME_INDEX(err_file_modified)
+DIAG_NAME_INDEX(err_filter_expression_integral)
+DIAG_NAME_INDEX(err_final_function_overridden)
+DIAG_NAME_INDEX(err_first_argument_to_cwsc_block_call)
+DIAG_NAME_INDEX(err_first_argument_to_cwsc_builtin_call)
+DIAG_NAME_INDEX(err_first_argument_to_cwsc_not_call)
+DIAG_NAME_INDEX(err_first_argument_to_cwsc_pdtor_call)
+DIAG_NAME_INDEX(err_first_argument_to_va_arg_not_of_type_va_list)
+DIAG_NAME_INDEX(err_fixed_point_not_enabled)
+DIAG_NAME_INDEX(err_flexible_array_arc_retainable)
+DIAG_NAME_INDEX(err_flexible_array_empty_aggregate)
+DIAG_NAME_INDEX(err_flexible_array_has_nontrivial_dtor)
+DIAG_NAME_INDEX(err_flexible_array_init)
+DIAG_NAME_INDEX(err_flexible_array_init_needs_braces)
+DIAG_NAME_INDEX(err_flexible_array_not_at_end)
+DIAG_NAME_INDEX(err_flexible_array_union)
+DIAG_NAME_INDEX(err_flexible_array_virtual_base)
+DIAG_NAME_INDEX(err_fold_expression_bad_operand)
+DIAG_NAME_INDEX(err_fold_expression_empty)
+DIAG_NAME_INDEX(err_fold_expression_packs_both_sides)
+DIAG_NAME_INDEX(err_fold_operator_mismatch)
+DIAG_NAME_INDEX(err_for_co_await_not_range_for)
+DIAG_NAME_INDEX(err_for_range_decl_must_be_var)
+DIAG_NAME_INDEX(err_for_range_deduction_failure)
+DIAG_NAME_INDEX(err_for_range_dereference)
+DIAG_NAME_INDEX(err_for_range_expected_decl)
+DIAG_NAME_INDEX(err_for_range_identifier)
+DIAG_NAME_INDEX(err_for_range_incomplete_type)
+DIAG_NAME_INDEX(err_for_range_invalid)
+DIAG_NAME_INDEX(err_for_range_iter_deduction_failure)
+DIAG_NAME_INDEX(err_for_range_storage_class)
+DIAG_NAME_INDEX(err_format_attribute_implicit_this_format_string)
+DIAG_NAME_INDEX(err_format_attribute_not)
+DIAG_NAME_INDEX(err_format_attribute_requires_variadic)
+DIAG_NAME_INDEX(err_format_attribute_result_not)
+DIAG_NAME_INDEX(err_format_strftime_third_parameter)
+DIAG_NAME_INDEX(err_fortify_std_lib_bad_decl)
+DIAG_NAME_INDEX(err_forward_ref_enum)
+DIAG_NAME_INDEX(err_forward_superclass)
+DIAG_NAME_INDEX(err_friend_decl_defines_type)
+DIAG_NAME_INDEX(err_friend_decl_does_not_match)
+DIAG_NAME_INDEX(err_friend_decl_spec)
+DIAG_NAME_INDEX(err_friend_decl_with_def_arg_must_be_def)
+DIAG_NAME_INDEX(err_friend_decl_with_def_arg_redeclared)
+DIAG_NAME_INDEX(err_friend_def_in_local_class)
+DIAG_NAME_INDEX(err_friend_explicit_instantiation)
+DIAG_NAME_INDEX(err_friend_invalid_in_context)
+DIAG_NAME_INDEX(err_friend_is_member)
+DIAG_NAME_INDEX(err_friend_not_first_in_declaration)
+DIAG_NAME_INDEX(err_func_def_incomplete_result)
+DIAG_NAME_INDEX(err_func_def_no_params)
+DIAG_NAME_INDEX(err_func_returning_array_function)
+DIAG_NAME_INDEX(err_func_returning_qualified_void)
+DIAG_NAME_INDEX(err_function_attribute_mismatch)
+DIAG_NAME_INDEX(err_function_concept_bool_ret)
+DIAG_NAME_INDEX(err_function_concept_exception_spec)
+DIAG_NAME_INDEX(err_function_concept_not_defined)
+DIAG_NAME_INDEX(err_function_concept_with_params)
+DIAG_NAME_INDEX(err_function_declared_typedef)
+DIAG_NAME_INDEX(err_function_definition_not_allowed)
+DIAG_NAME_INDEX(err_function_is_not_record)
+DIAG_NAME_INDEX(err_function_marked_override_not_overriding)
+DIAG_NAME_INDEX(err_function_needs_feature)
+DIAG_NAME_INDEX(err_function_parameter_pack_without_parameter_packs)
+DIAG_NAME_INDEX(err_function_template_partial_spec)
+DIAG_NAME_INDEX(err_function_template_spec_ambiguous)
+DIAG_NAME_INDEX(err_function_template_spec_no_match)
+DIAG_NAME_INDEX(err_gc_weak_property_strong_type)
+DIAG_NAME_INDEX(err_generic_sel_multi_match)
+DIAG_NAME_INDEX(err_generic_sel_no_match)
+DIAG_NAME_INDEX(err_getter_not_found)
+DIAG_NAME_INDEX(err_global_call_not_config)
+DIAG_NAME_INDEX(err_gnu_inline_asm_disabled)
+DIAG_NAME_INDEX(err_goto_into_protected_scope)
+DIAG_NAME_INDEX(err_goto_ms_asm_label)
+DIAG_NAME_INDEX(err_half_const_requires_fp16)
+DIAG_NAME_INDEX(err_header_module_requires_modules)
+DIAG_NAME_INDEX(err_hex_constant_requires)
+DIAG_NAME_INDEX(err_hex_escape_no_digits)
+DIAG_NAME_INDEX(err_hexagon_builtin_requires_hvx)
+DIAG_NAME_INDEX(err_hexagon_builtin_unsupported_cpu)
+DIAG_NAME_INDEX(err_hexagon_builtin_unsupported_hvx)
+DIAG_NAME_INDEX(err_iboutletcollection_builtintype)
+DIAG_NAME_INDEX(err_iboutletcollection_type)
+DIAG_NAME_INDEX(err_ice_ambiguous_conversion)
+DIAG_NAME_INDEX(err_ice_explicit_conversion)
+DIAG_NAME_INDEX(err_ice_incomplete_type)
+DIAG_NAME_INDEX(err_ice_not_integral)
+DIAG_NAME_INDEX(err_ice_too_large)
+DIAG_NAME_INDEX(err_id_after_template_in_nested_name_spec)
+DIAG_NAME_INDEX(err_ident_in_dtor_not_a_type)
+DIAG_NAME_INDEX(err_ident_list_in_fn_declaration)
+DIAG_NAME_INDEX(err_ifunc_resolver_return)
+DIAG_NAME_INDEX(err_illegal_container_subscripting_op)
+DIAG_NAME_INDEX(err_illegal_decl_array_incomplete_type)
+DIAG_NAME_INDEX(err_illegal_decl_array_of_auto)
+DIAG_NAME_INDEX(err_illegal_decl_array_of_functions)
+DIAG_NAME_INDEX(err_illegal_decl_array_of_references)
+DIAG_NAME_INDEX(err_illegal_decl_mempointer_in_nonclass)
+DIAG_NAME_INDEX(err_illegal_decl_mempointer_to_reference)
+DIAG_NAME_INDEX(err_illegal_decl_mempointer_to_void)
+DIAG_NAME_INDEX(err_illegal_decl_pointer_to_reference)
+DIAG_NAME_INDEX(err_illegal_decl_reference_to_reference)
+DIAG_NAME_INDEX(err_illegal_initializer)
+DIAG_NAME_INDEX(err_illegal_initializer_type)
+DIAG_NAME_INDEX(err_illegal_message_expr_incomplete_type)
+DIAG_NAME_INDEX(err_illegal_qualifiers_on_catch_parm)
+DIAG_NAME_INDEX(err_illegal_super_cast)
+DIAG_NAME_INDEX(err_illegal_union_or_anon_struct_member)
+DIAG_NAME_INDEX(err_imaginary_not_supported)
+DIAG_NAME_INDEX(err_impcast_complex_scalar)
+DIAG_NAME_INDEX(err_implicit_coroutine_std_nothrow_type_not_found)
+DIAG_NAME_INDEX(err_implicit_empty_initializer)
+DIAG_NAME_INDEX(err_implicit_instantiate_member_undefined)
+DIAG_NAME_INDEX(err_implied_comparison_category_type_not_found)
+DIAG_NAME_INDEX(err_implied_coroutine_type_not_found)
+DIAG_NAME_INDEX(err_implied_std_coroutine_traits_promise_type_not_class)
+DIAG_NAME_INDEX(err_implied_std_coroutine_traits_promise_type_not_found)
+DIAG_NAME_INDEX(err_implied_std_initializer_list_not_found)
+DIAG_NAME_INDEX(err_imported_module_modmap_changed)
+DIAG_NAME_INDEX(err_imported_module_not_found)
+DIAG_NAME_INDEX(err_imported_module_relocated)
+DIAG_NAME_INDEX(err_in_class_initializer_bad_type)
+DIAG_NAME_INDEX(err_in_class_initializer_cycle)
+DIAG_NAME_INDEX(err_in_class_initializer_literal_type)
+DIAG_NAME_INDEX(err_in_class_initializer_non_const)
+DIAG_NAME_INDEX(err_in_class_initializer_non_constant)
+DIAG_NAME_INDEX(err_in_class_initializer_not_yet_parsed)
+DIAG_NAME_INDEX(err_in_class_initializer_volatile)
+DIAG_NAME_INDEX(err_incompatible_exception_specs)
+DIAG_NAME_INDEX(err_incomplete_array_member_init)
+DIAG_NAME_INDEX(err_incomplete_base_class)
+DIAG_NAME_INDEX(err_incomplete_in_exception_spec)
+DIAG_NAME_INDEX(err_incomplete_member_access)
+DIAG_NAME_INDEX(err_incomplete_nested_name_spec)
+DIAG_NAME_INDEX(err_incomplete_object_call)
+DIAG_NAME_INDEX(err_incomplete_receiver_type)
+DIAG_NAME_INDEX(err_incomplete_synthesized_property)
+DIAG_NAME_INDEX(err_incomplete_type)
+DIAG_NAME_INDEX(err_incomplete_type_objc_at_encode)
+DIAG_NAME_INDEX(err_incomplete_type_used_in_type_trait_expr)
+DIAG_NAME_INDEX(err_incomplete_typeid)
+DIAG_NAME_INDEX(err_inconsistent_ivar_count)
+DIAG_NAME_INDEX(err_incorrect_defaulted_constexpr)
+DIAG_NAME_INDEX(err_incorrect_defaulted_exception_spec)
+DIAG_NAME_INDEX(err_incorrect_number_of_vector_initializers)
+DIAG_NAME_INDEX(err_increment_decrement_enum)
+DIAG_NAME_INDEX(err_indirect_goto_in_protected_scope)
+DIAG_NAME_INDEX(err_indirect_goto_without_addrlabel)
+DIAG_NAME_INDEX(err_init_capture_deduction_failure)
+DIAG_NAME_INDEX(err_init_capture_deduction_failure_from_init_list)
+DIAG_NAME_INDEX(err_init_capture_multiple_expressions)
+DIAG_NAME_INDEX(err_init_capture_no_expression)
+DIAG_NAME_INDEX(err_init_capture_paren_braces)
+DIAG_NAME_INDEX(err_init_conversion_failed)
+DIAG_NAME_INDEX(err_init_element_not_constant)
+DIAG_NAME_INDEX(err_init_for_function_type)
+DIAG_NAME_INDEX(err_init_incomplete_type)
+DIAG_NAME_INDEX(err_init_list_bad_dest_type)
+DIAG_NAME_INDEX(err_init_list_bin_op)
+DIAG_NAME_INDEX(err_init_method_bad_return_type)
+DIAG_NAME_INDEX(err_init_non_aggr_init_list)
+DIAG_NAME_INDEX(err_init_objc_class)
+DIAG_NAME_INDEX(err_init_priority_object_attr)
+DIAG_NAME_INDEX(err_init_reference_member_uninitialized)
+DIAG_NAME_INDEX(err_initializer_string_for_char_array_too_long)
+DIAG_NAME_INDEX(err_inline_decl_follows_def)
+DIAG_NAME_INDEX(err_inline_declaration_block_scope)
+DIAG_NAME_INDEX(err_inline_main)
+DIAG_NAME_INDEX(err_inline_ms_asm_parsing)
+DIAG_NAME_INDEX(err_inline_namespace_alias)
+DIAG_NAME_INDEX(err_inline_namespace_mismatch)
+DIAG_NAME_INDEX(err_inline_nested_namespace_definition)
+DIAG_NAME_INDEX(err_inline_non_function)
+DIAG_NAME_INDEX(err_int_to_block_pointer)
+DIAG_NAME_INDEX(err_integer_literal_too_large)
+DIAG_NAME_INDEX(err_integer_sequence_integral_element_type)
+DIAG_NAME_INDEX(err_integer_sequence_negative_length)
+DIAG_NAME_INDEX(err_internal_linkage_redeclaration)
+DIAG_NAME_INDEX(err_introducing_special_friend)
+DIAG_NAME_INDEX(err_invalid_asm_cast_lvalue)
+DIAG_NAME_INDEX(err_invalid_asm_value_for_constraint)
+DIAG_NAME_INDEX(err_invalid_astype_of_different_size)
+DIAG_NAME_INDEX(err_invalid_attribute_on_virtual_function)
+DIAG_NAME_INDEX(err_invalid_base_in_interface)
+DIAG_NAME_INDEX(err_invalid_branch_protection)
+DIAG_NAME_INDEX(err_invalid_char_raw_delim)
+DIAG_NAME_INDEX(err_invalid_character_to_charify)
+DIAG_NAME_INDEX(err_invalid_character_udl)
+DIAG_NAME_INDEX(err_invalid_collection_element)
+DIAG_NAME_INDEX(err_invalid_complex_spec)
+DIAG_NAME_INDEX(err_invalid_constexpr)
+DIAG_NAME_INDEX(err_invalid_constexpr_member)
+DIAG_NAME_INDEX(err_invalid_constexpr_var_decl)
+DIAG_NAME_INDEX(err_invalid_conversion_between_ext_vectors)
+DIAG_NAME_INDEX(err_invalid_conversion_between_vector_and_integer)
+DIAG_NAME_INDEX(err_invalid_conversion_between_vector_and_scalar)
+DIAG_NAME_INDEX(err_invalid_conversion_between_vectors)
+DIAG_NAME_INDEX(err_invalid_cpu_is)
+DIAG_NAME_INDEX(err_invalid_cpu_specific_dispatch_value)
+DIAG_NAME_INDEX(err_invalid_cpu_supports)
+DIAG_NAME_INDEX(err_invalid_decl_spec_combination)
+DIAG_NAME_INDEX(err_invalid_decl_specifier_in_nontype_parm)
+DIAG_NAME_INDEX(err_invalid_declarator_global_scope)
+DIAG_NAME_INDEX(err_invalid_declarator_in_block)
+DIAG_NAME_INDEX(err_invalid_declarator_in_function)
+DIAG_NAME_INDEX(err_invalid_declarator_scope)
+DIAG_NAME_INDEX(err_invalid_digit)
+DIAG_NAME_INDEX(err_invalid_form_pointer_member_function)
+DIAG_NAME_INDEX(err_invalid_incomplete_type_use)
+DIAG_NAME_INDEX(err_invalid_mask_type_size)
+DIAG_NAME_INDEX(err_invalid_member_in_interface)
+DIAG_NAME_INDEX(err_invalid_member_use_in_static_method)
+DIAG_NAME_INDEX(err_invalid_neon_type_code)
+DIAG_NAME_INDEX(err_invalid_non_static_member_use)
+DIAG_NAME_INDEX(err_invalid_nsnumber_type)
+DIAG_NAME_INDEX(err_invalid_numeric_udl)
+DIAG_NAME_INDEX(err_invalid_operator_on_type)
+DIAG_NAME_INDEX(err_invalid_pcs)
+DIAG_NAME_INDEX(err_invalid_pixel_decl_spec_combination)
+DIAG_NAME_INDEX(err_invalid_property_name)
+DIAG_NAME_INDEX(err_invalid_protocol_qualifiers)
+DIAG_NAME_INDEX(err_invalid_qualified_constructor)
+DIAG_NAME_INDEX(err_invalid_qualified_destructor)
+DIAG_NAME_INDEX(err_invalid_qualified_function_type)
+DIAG_NAME_INDEX(err_invalid_receiver_class_message)
+DIAG_NAME_INDEX(err_invalid_receiver_to_message_super)
+DIAG_NAME_INDEX(err_invalid_reference_qualifier_application)
+DIAG_NAME_INDEX(err_invalid_saturation_spec)
+DIAG_NAME_INDEX(err_invalid_sign_spec)
+DIAG_NAME_INDEX(err_invalid_storage_class_in_func_decl)
+DIAG_NAME_INDEX(err_invalid_string_udl)
+DIAG_NAME_INDEX(err_invalid_suffix_constant)
+DIAG_NAME_INDEX(err_invalid_super_scope)
+DIAG_NAME_INDEX(err_invalid_this_use)
+DIAG_NAME_INDEX(err_invalid_thread)
+DIAG_NAME_INDEX(err_invalid_token_after_declarator_suggest_equal)
+DIAG_NAME_INDEX(err_invalid_token_after_toplevel_declarator)
+DIAG_NAME_INDEX(err_invalid_type_for_program_scope_var)
+DIAG_NAME_INDEX(err_invalid_use_of_array_type)
+DIAG_NAME_INDEX(err_invalid_use_of_function_type)
+DIAG_NAME_INDEX(err_invalid_utf8)
+DIAG_NAME_INDEX(err_invalid_var_template_spec_type)
+DIAG_NAME_INDEX(err_invalid_vector_bool_decl_spec)
+DIAG_NAME_INDEX(err_invalid_vector_decl_spec_combination)
+DIAG_NAME_INDEX(err_invalid_vector_double_decl_spec)
+DIAG_NAME_INDEX(err_invalid_vector_float_decl_spec)
+DIAG_NAME_INDEX(err_invalid_vector_long_decl_spec)
+DIAG_NAME_INDEX(err_invalid_vector_long_double_decl_spec)
+DIAG_NAME_INDEX(err_invalid_vector_long_long_decl_spec)
+DIAG_NAME_INDEX(err_invalid_vfs_overlay)
+DIAG_NAME_INDEX(err_invalid_width_spec)
+DIAG_NAME_INDEX(err_ivar_access_using_property_syntax_suggest)
+DIAG_NAME_INDEX(err_ivar_in_superclass_use)
+DIAG_NAME_INDEX(err_ivar_reference_type)
+DIAG_NAME_INDEX(err_ivar_use_in_class_method)
+DIAG_NAME_INDEX(err_kern_call_not_global_function)
+DIAG_NAME_INDEX(err_kern_is_nonstatic_method)
+DIAG_NAME_INDEX(err_kern_type_not_void_return)
+DIAG_NAME_INDEX(err_kernel_arg_address_space)
+DIAG_NAME_INDEX(err_l_square_l_square_not_attribute)
+DIAG_NAME_INDEX(err_label_end_of_compound_statement)
+DIAG_NAME_INDEX(err_lambda_capture_anonymous_var)
+DIAG_NAME_INDEX(err_lambda_capture_default_arg)
+DIAG_NAME_INDEX(err_lambda_capture_flexarray_type)
+DIAG_NAME_INDEX(err_lambda_decl_ref_not_modifiable_lvalue)
+DIAG_NAME_INDEX(err_lambda_decl_specifier_repeated)
+DIAG_NAME_INDEX(err_lambda_impcap)
+DIAG_NAME_INDEX(err_lambda_in_constant_expression)
+DIAG_NAME_INDEX(err_lambda_in_invalid_context)
+DIAG_NAME_INDEX(err_lambda_incomplete_result)
+DIAG_NAME_INDEX(err_lambda_missing_parens)
+DIAG_NAME_INDEX(err_lambda_return_init_list)
+DIAG_NAME_INDEX(err_lambda_unevaluated_operand)
+DIAG_NAME_INDEX(err_language_linkage_spec_not_ascii)
+DIAG_NAME_INDEX(err_language_linkage_spec_unknown)
+DIAG_NAME_INDEX(err_late_asm_label_name)
+DIAG_NAME_INDEX(err_lexing_string)
+DIAG_NAME_INDEX(err_lifetimebound_ctor_dtor)
+DIAG_NAME_INDEX(err_lifetimebound_no_object_param)
+DIAG_NAME_INDEX(err_list_init_in_parens)
+DIAG_NAME_INDEX(err_literal_operator_bad_param_count)
+DIAG_NAME_INDEX(err_literal_operator_default_argument)
+DIAG_NAME_INDEX(err_literal_operator_extern_c)
+DIAG_NAME_INDEX(err_literal_operator_id_outside_namespace)
+DIAG_NAME_INDEX(err_literal_operator_invalid_param)
+DIAG_NAME_INDEX(err_literal_operator_outside_namespace)
+DIAG_NAME_INDEX(err_literal_operator_param)
+DIAG_NAME_INDEX(err_literal_operator_string_not_empty)
+DIAG_NAME_INDEX(err_literal_operator_string_prefix)
+DIAG_NAME_INDEX(err_literal_operator_template)
+DIAG_NAME_INDEX(err_literal_operator_template_with_params)
+DIAG_NAME_INDEX(err_local_cant_init)
+DIAG_NAME_INDEX(err_lvalue_reference_bind_to_initlist)
+DIAG_NAME_INDEX(err_lvalue_reference_bind_to_temporary)
+DIAG_NAME_INDEX(err_lvalue_reference_bind_to_unrelated)
+DIAG_NAME_INDEX(err_lvalue_to_rvalue_ref)
+DIAG_NAME_INDEX(err_machine_mode)
+DIAG_NAME_INDEX(err_main_arg_wrong)
+DIAG_NAME_INDEX(err_main_global_variable)
+DIAG_NAME_INDEX(err_main_returns_nonint)
+DIAG_NAME_INDEX(err_main_surplus_args)
+DIAG_NAME_INDEX(err_mainlike_template_decl)
+DIAG_NAME_INDEX(err_malformed_std_coroutine_handle)
+DIAG_NAME_INDEX(err_malformed_std_coroutine_traits)
+DIAG_NAME_INDEX(err_malformed_std_initializer_list)
+DIAG_NAME_INDEX(err_malformed_std_nothrow)
+DIAG_NAME_INDEX(err_maybe_falloff_nonvoid_block)
+DIAG_NAME_INDEX(err_mem_init_not_member_or_class)
+DIAG_NAME_INDEX(err_mem_init_not_member_or_class_suggest)
+DIAG_NAME_INDEX(err_member_call_without_object)
+DIAG_NAME_INDEX(err_member_decl_does_not_match)
+DIAG_NAME_INDEX(err_member_decl_does_not_match_suggest)
+DIAG_NAME_INDEX(err_member_def_does_not_match_ret_type)
+DIAG_NAME_INDEX(err_member_def_undefined_record)
+DIAG_NAME_INDEX(err_member_extra_qualification)
+DIAG_NAME_INDEX(err_member_function_call_bad_cvr)
+DIAG_NAME_INDEX(err_member_function_call_bad_ref)
+DIAG_NAME_INDEX(err_member_function_call_bad_type)
+DIAG_NAME_INDEX(err_member_function_initialization)
+DIAG_NAME_INDEX(err_member_name_of_class)
+DIAG_NAME_INDEX(err_member_not_yet_instantiated)
+DIAG_NAME_INDEX(err_member_qualification)
+DIAG_NAME_INDEX(err_member_redeclared)
+DIAG_NAME_INDEX(err_member_redeclared_in_instantiation)
+DIAG_NAME_INDEX(err_member_reference_needs_call)
+DIAG_NAME_INDEX(err_mempointer_in_nonclass_type)
+DIAG_NAME_INDEX(err_memptr_conv_via_virtual)
+DIAG_NAME_INDEX(err_memptr_incomplete)
+DIAG_NAME_INDEX(err_method_not_found_with_typo)
+DIAG_NAME_INDEX(err_mips_fp64_req)
+DIAG_NAME_INDEX(err_mismatched_code_seg_base)
+DIAG_NAME_INDEX(err_mismatched_code_seg_override)
+DIAG_NAME_INDEX(err_mismatched_exception_spec)
+DIAG_NAME_INDEX(err_mismatched_exception_spec_explicit_instantiation)
+DIAG_NAME_INDEX(err_mismatched_ms_inheritance)
+DIAG_NAME_INDEX(err_mismatched_owning_module)
+DIAG_NAME_INDEX(err_mismatched_uuid)
+DIAG_NAME_INDEX(err_mismatched_visibility)
+DIAG_NAME_INDEX(err_misplaced_ellipsis_in_declaration)
+DIAG_NAME_INDEX(err_misplaced_ivar)
+DIAG_NAME_INDEX(err_missing_actual_pipe_type)
+DIAG_NAME_INDEX(err_missing_atsign_prefix)
+DIAG_NAME_INDEX(err_missing_before_module_end)
+DIAG_NAME_INDEX(err_missing_catch_finally)
+DIAG_NAME_INDEX(err_missing_comma_before_ellipsis)
+DIAG_NAME_INDEX(err_missing_default_ctor)
+DIAG_NAME_INDEX(err_missing_dependent_template_keyword)
+DIAG_NAME_INDEX(err_missing_end_of_definition)
+DIAG_NAME_INDEX(err_missing_exception_specification)
+DIAG_NAME_INDEX(err_missing_method_context)
+DIAG_NAME_INDEX(err_missing_module)
+DIAG_NAME_INDEX(err_missing_module_name)
+DIAG_NAME_INDEX(err_missing_open_square_message_send)
+DIAG_NAME_INDEX(err_missing_param)
+DIAG_NAME_INDEX(err_missing_property_context)
+DIAG_NAME_INDEX(err_missing_property_interface)
+DIAG_NAME_INDEX(err_missing_property_ivar_decl)
+DIAG_NAME_INDEX(err_missing_type_specifier)
+DIAG_NAME_INDEX(err_missing_vfs_overlay_file)
+DIAG_NAME_INDEX(err_missing_whitespace_digraph)
+DIAG_NAME_INDEX(err_mixing_cxx_try_seh_try)
+DIAG_NAME_INDEX(err_mmap_config_macro_submodule)
+DIAG_NAME_INDEX(err_mmap_conflicting_export_as)
+DIAG_NAME_INDEX(err_mmap_duplicate_header_attribute)
+DIAG_NAME_INDEX(err_mmap_expected_attribute)
+DIAG_NAME_INDEX(err_mmap_expected_config_macro)
+DIAG_NAME_INDEX(err_mmap_expected_conflicts_comma)
+DIAG_NAME_INDEX(err_mmap_expected_conflicts_message)
+DIAG_NAME_INDEX(err_mmap_expected_export_wildcard)
+DIAG_NAME_INDEX(err_mmap_expected_feature)
+DIAG_NAME_INDEX(err_mmap_expected_header)
+DIAG_NAME_INDEX(err_mmap_expected_header_attribute)
+DIAG_NAME_INDEX(err_mmap_expected_inferred_member)
+DIAG_NAME_INDEX(err_mmap_expected_lbrace)
+DIAG_NAME_INDEX(err_mmap_expected_lbrace_wildcard)
+DIAG_NAME_INDEX(err_mmap_expected_library_name)
+DIAG_NAME_INDEX(err_mmap_expected_member)
+DIAG_NAME_INDEX(err_mmap_expected_mmap_file)
+DIAG_NAME_INDEX(err_mmap_expected_module)
+DIAG_NAME_INDEX(err_mmap_expected_module_name)
+DIAG_NAME_INDEX(err_mmap_expected_rbrace)
+DIAG_NAME_INDEX(err_mmap_expected_rsquare)
+DIAG_NAME_INDEX(err_mmap_explicit_inferred_framework)
+DIAG_NAME_INDEX(err_mmap_explicit_top_level)
+DIAG_NAME_INDEX(err_mmap_inferred_framework_submodule)
+DIAG_NAME_INDEX(err_mmap_inferred_no_umbrella)
+DIAG_NAME_INDEX(err_mmap_inferred_redef)
+DIAG_NAME_INDEX(err_mmap_invalid_header_attribute_value)
+DIAG_NAME_INDEX(err_mmap_missing_exclude_name)
+DIAG_NAME_INDEX(err_mmap_missing_module_qualified)
+DIAG_NAME_INDEX(err_mmap_missing_module_unqualified)
+DIAG_NAME_INDEX(err_mmap_module_id)
+DIAG_NAME_INDEX(err_mmap_module_redefinition)
+DIAG_NAME_INDEX(err_mmap_nested_submodule_id)
+DIAG_NAME_INDEX(err_mmap_submodule_export_as)
+DIAG_NAME_INDEX(err_mmap_top_level_inferred_submodule)
+DIAG_NAME_INDEX(err_mmap_umbrella_clash)
+DIAG_NAME_INDEX(err_mmap_unknown_token)
+DIAG_NAME_INDEX(err_mmap_use_decl_submodule)
+DIAG_NAME_INDEX(err_mode_not_primitive)
+DIAG_NAME_INDEX(err_mode_wrong_type)
+DIAG_NAME_INDEX(err_module_build_disabled)
+DIAG_NAME_INDEX(err_module_build_requires_fmodules)
+DIAG_NAME_INDEX(err_module_build_shadowed_submodule)
+DIAG_NAME_INDEX(err_module_cannot_create_includes)
+DIAG_NAME_INDEX(err_module_cycle)
+DIAG_NAME_INDEX(err_module_decl_in_header_module)
+DIAG_NAME_INDEX(err_module_decl_in_module_map_module)
+DIAG_NAME_INDEX(err_module_declaration_missing)
+DIAG_NAME_INDEX(err_module_different_modmap)
+DIAG_NAME_INDEX(err_module_expected_ident)
+DIAG_NAME_INDEX(err_module_expected_semi)
+DIAG_NAME_INDEX(err_module_file_conflict)
+DIAG_NAME_INDEX(err_module_file_invalid)
+DIAG_NAME_INDEX(err_module_file_not_found)
+DIAG_NAME_INDEX(err_module_file_not_module)
+DIAG_NAME_INDEX(err_module_file_out_of_date)
+DIAG_NAME_INDEX(err_module_format_unhandled)
+DIAG_NAME_INDEX(err_module_header_file_invalid)
+DIAG_NAME_INDEX(err_module_header_file_not_found)
+DIAG_NAME_INDEX(err_module_header_missing)
+DIAG_NAME_INDEX(err_module_implementation_partition)
+DIAG_NAME_INDEX(err_module_import_in_implementation)
+DIAG_NAME_INDEX(err_module_import_not_at_top_level_fatal)
+DIAG_NAME_INDEX(err_module_interface_implementation_mismatch)
+DIAG_NAME_INDEX(err_module_interface_requires_modules_ts)
+DIAG_NAME_INDEX(err_module_map_not_found)
+DIAG_NAME_INDEX(err_module_no_size_mtime_for_header)
+DIAG_NAME_INDEX(err_module_not_built)
+DIAG_NAME_INDEX(err_module_not_defined)
+DIAG_NAME_INDEX(err_module_not_found)
+DIAG_NAME_INDEX(err_module_odr_violation_definition_data)
+DIAG_NAME_INDEX(err_module_odr_violation_different_definitions)
+DIAG_NAME_INDEX(err_module_odr_violation_different_instantiations)
+DIAG_NAME_INDEX(err_module_odr_violation_enum)
+DIAG_NAME_INDEX(err_module_odr_violation_function)
+DIAG_NAME_INDEX(err_module_odr_violation_mismatch_decl)
+DIAG_NAME_INDEX(err_module_odr_violation_mismatch_decl_diff)
+DIAG_NAME_INDEX(err_module_odr_violation_mismatch_decl_unknown)
+DIAG_NAME_INDEX(err_module_odr_violation_missing_decl)
+DIAG_NAME_INDEX(err_module_odr_violation_template_parameter)
+DIAG_NAME_INDEX(err_module_prebuilt)
+DIAG_NAME_INDEX(err_module_private_local)
+DIAG_NAME_INDEX(err_module_private_local_class)
+DIAG_NAME_INDEX(err_module_private_specialization)
+DIAG_NAME_INDEX(err_module_redeclaration)
+DIAG_NAME_INDEX(err_module_redefinition)
+DIAG_NAME_INDEX(err_module_self_import)
+DIAG_NAME_INDEX(err_module_shadowed)
+DIAG_NAME_INDEX(err_module_unavailable)
+DIAG_NAME_INDEX(err_module_unimported_use)
+DIAG_NAME_INDEX(err_module_unimported_use_header)
+DIAG_NAME_INDEX(err_module_unimported_use_multiple)
+DIAG_NAME_INDEX(err_modules_embed_file_not_found)
+DIAG_NAME_INDEX(err_ms___leave_not_in___try)
+DIAG_NAME_INDEX(err_ms_attributes_not_enabled)
+DIAG_NAME_INDEX(err_ms_declspec_type)
+DIAG_NAME_INDEX(err_ms_property_duplicate_accessor)
+DIAG_NAME_INDEX(err_ms_property_expected_accessor_name)
+DIAG_NAME_INDEX(err_ms_property_expected_comma_or_rparen)
+DIAG_NAME_INDEX(err_ms_property_expected_equal)
+DIAG_NAME_INDEX(err_ms_property_has_set_accessor)
+DIAG_NAME_INDEX(err_ms_property_initializer)
+DIAG_NAME_INDEX(err_ms_property_missing_accessor_kind)
+DIAG_NAME_INDEX(err_ms_property_no_getter_or_putter)
+DIAG_NAME_INDEX(err_ms_property_unknown_accessor)
+DIAG_NAME_INDEX(err_ms_va_start_used_in_sysv_function)
+DIAG_NAME_INDEX(err_msasm_unable_to_create_target)
+DIAG_NAME_INDEX(err_msasm_unsupported_arch)
+DIAG_NAME_INDEX(err_msvc_annotation_wide_str)
+DIAG_NAME_INDEX(err_mt_message)
+DIAG_NAME_INDEX(err_multichar_utf_character_literal)
+DIAG_NAME_INDEX(err_multiple_base_initialization)
+DIAG_NAME_INDEX(err_multiple_def_index)
+DIAG_NAME_INDEX(err_multiple_default_labels_defined)
+DIAG_NAME_INDEX(err_multiple_final_overriders)
+DIAG_NAME_INDEX(err_multiple_mem_initialization)
+DIAG_NAME_INDEX(err_multiple_mem_union_initialization)
+DIAG_NAME_INDEX(err_multiple_template_declarators)
+DIAG_NAME_INDEX(err_multiversion_after_used)
+DIAG_NAME_INDEX(err_multiversion_diff)
+DIAG_NAME_INDEX(err_multiversion_doesnt_support)
+DIAG_NAME_INDEX(err_multiversion_duplicate)
+DIAG_NAME_INDEX(err_multiversion_no_other_attrs)
+DIAG_NAME_INDEX(err_multiversion_noproto)
+DIAG_NAME_INDEX(err_multiversion_not_allowed_on_main)
+DIAG_NAME_INDEX(err_multiversion_not_supported)
+DIAG_NAME_INDEX(err_multiversion_required_in_redecl)
+DIAG_NAME_INDEX(err_multiversion_types_mixed)
+DIAG_NAME_INDEX(err_mutable_const)
+DIAG_NAME_INDEX(err_mutable_function)
+DIAG_NAME_INDEX(err_mutable_nonmember)
+DIAG_NAME_INDEX(err_mutable_reference)
+DIAG_NAME_INDEX(err_namespace_nonnamespace_scope)
+DIAG_NAME_INDEX(err_need_header_before_ms_uuidof)
+DIAG_NAME_INDEX(err_need_header_before_typeid)
+DIAG_NAME_INDEX(err_nested_name_member_ref_lookup_ambiguous)
+DIAG_NAME_INDEX(err_nested_name_spec_is_not_class)
+DIAG_NAME_INDEX(err_nested_name_spec_non_tag)
+DIAG_NAME_INDEX(err_nested_non_static_member_use)
+DIAG_NAME_INDEX(err_nested_redefinition)
+DIAG_NAME_INDEX(err_new_abi_tag_on_redeclaration)
+DIAG_NAME_INDEX(err_new_array_init_args)
+DIAG_NAME_INDEX(err_new_array_nonconst)
+DIAG_NAME_INDEX(err_new_array_of_auto)
+DIAG_NAME_INDEX(err_new_incomplete_type)
+DIAG_NAME_INDEX(err_no_accessor_for_property)
+DIAG_NAME_INDEX(err_no_base_classes)
+DIAG_NAME_INDEX(err_no_dynamic_cast_with_fno_rtti)
+DIAG_NAME_INDEX(err_no_external_assembler)
+DIAG_NAME_INDEX(err_no_matching_local_friend)
+DIAG_NAME_INDEX(err_no_matching_local_friend_suggest)
+DIAG_NAME_INDEX(err_no_matching_param)
+DIAG_NAME_INDEX(err_no_member)
+DIAG_NAME_INDEX(err_no_member_overloaded_arrow)
+DIAG_NAME_INDEX(err_no_member_suggest)
+DIAG_NAME_INDEX(err_no_member_template)
+DIAG_NAME_INDEX(err_no_member_template_suggest)
+DIAG_NAME_INDEX(err_no_nsconstant_string_class)
+DIAG_NAME_INDEX(err_no_submodule)
+DIAG_NAME_INDEX(err_no_submodule_suggest)
+DIAG_NAME_INDEX(err_no_subobject_property_setting)
+DIAG_NAME_INDEX(err_no_suitable_delete_member_function_found)
+DIAG_NAME_INDEX(err_no_super_class_message)
+DIAG_NAME_INDEX(err_no_template)
+DIAG_NAME_INDEX(err_no_template_suggest)
+DIAG_NAME_INDEX(err_no_typeid_with_fno_rtti)
+DIAG_NAME_INDEX(err_noexcept_needs_constant_expression)
+DIAG_NAME_INDEX(err_nogetter_property_compound_assignment)
+DIAG_NAME_INDEX(err_nogetter_property_incdec)
+DIAG_NAME_INDEX(err_non_ascii)
+DIAG_NAME_INDEX(err_non_asm_stmt_in_naked_function)
+DIAG_NAME_INDEX(err_non_deleted_override)
+DIAG_NAME_INDEX(err_non_extern_extern)
+DIAG_NAME_INDEX(err_non_local_variable_decl_in_for)
+DIAG_NAME_INDEX(err_non_static_static)
+DIAG_NAME_INDEX(err_non_template_in_member_template_id_suggest)
+DIAG_NAME_INDEX(err_non_template_in_template_id)
+DIAG_NAME_INDEX(err_non_template_in_template_id_suggest)
+DIAG_NAME_INDEX(err_non_thread_thread)
+DIAG_NAME_INDEX(err_non_type_template_arg_addr_label_diff)
+DIAG_NAME_INDEX(err_non_type_template_arg_subobject)
+DIAG_NAME_INDEX(err_non_type_template_in_nested_name_specifier)
+DIAG_NAME_INDEX(err_non_type_template_parm_type_deduction_failure)
+DIAG_NAME_INDEX(err_non_variable_decl_in_for)
+DIAG_NAME_INDEX(err_non_virtual_pure)
+DIAG_NAME_INDEX(err_nonfunction_block_type)
+DIAG_NAME_INDEX(err_nonstatic_member_out_of_line)
+DIAG_NAME_INDEX(err_nontemporal_builtin_must_be_pointer)
+DIAG_NAME_INDEX(err_nontemporal_builtin_must_be_pointer_intfltptr_or_vector)
+DIAG_NAME_INDEX(err_nontrivial_primitive_type_in_union)
+DIAG_NAME_INDEX(err_noreturn_block_has_return_expr)
+DIAG_NAME_INDEX(err_noreturn_lambda_has_return_expr)
+DIAG_NAME_INDEX(err_noreturn_missing_on_first_decl)
+DIAG_NAME_INDEX(err_noreturn_non_function)
+DIAG_NAME_INDEX(err_nosetter_property_assignment)
+DIAG_NAME_INDEX(err_nosetter_property_incdec)
+DIAG_NAME_INDEX(err_not_class_template_specialization)
+DIAG_NAME_INDEX(err_not_direct_base_or_virtual)
+DIAG_NAME_INDEX(err_not_found_by_two_phase_lookup)
+DIAG_NAME_INDEX(err_not_integral_type_anon_bitfield)
+DIAG_NAME_INDEX(err_not_integral_type_bitfield)
+DIAG_NAME_INDEX(err_not_tag_in_scope)
+DIAG_NAME_INDEX(err_ns_attribute_wrong_parameter_type)
+DIAG_NAME_INDEX(err_nsconsumed_attribute_mismatch)
+DIAG_NAME_INDEX(err_nsnumber_nonliteral_unary)
+DIAG_NAME_INDEX(err_nsobject_attribute)
+DIAG_NAME_INDEX(err_nsreturns_retained_attribute_mismatch)
+DIAG_NAME_INDEX(err_nullability_conflicting)
+DIAG_NAME_INDEX(err_nullability_cs_multilevel)
+DIAG_NAME_INDEX(err_nullability_nonpointer)
+DIAG_NAME_INDEX(err_objc_array_of_interfaces)
+DIAG_NAME_INDEX(err_objc_attr_not_id)
+DIAG_NAME_INDEX(err_objc_attr_protocol_requires_definition)
+DIAG_NAME_INDEX(err_objc_attr_typedef_not_id)
+DIAG_NAME_INDEX(err_objc_attr_typedef_not_void_pointer)
+DIAG_NAME_INDEX(err_objc_bridged_related_invalid_class)
+DIAG_NAME_INDEX(err_objc_bridged_related_invalid_class_name)
+DIAG_NAME_INDEX(err_objc_bridged_related_known_method)
+DIAG_NAME_INDEX(err_objc_cf_bridged_not_interface)
+DIAG_NAME_INDEX(err_objc_concat_string)
+DIAG_NAME_INDEX(err_objc_decls_may_only_appear_in_global_scope)
+DIAG_NAME_INDEX(err_objc_directive_only_in_protocol)
+DIAG_NAME_INDEX(err_objc_exceptions_disabled)
+DIAG_NAME_INDEX(err_objc_expected_equal_for_getter)
+DIAG_NAME_INDEX(err_objc_expected_equal_for_setter)
+DIAG_NAME_INDEX(err_objc_expected_property_attr)
+DIAG_NAME_INDEX(err_objc_expected_selector_for_getter_setter)
+DIAG_NAME_INDEX(err_objc_expected_type_parameter)
+DIAG_NAME_INDEX(err_objc_for_range_init_stmt)
+DIAG_NAME_INDEX(err_objc_illegal_boxed_expression_type)
+DIAG_NAME_INDEX(err_objc_illegal_interface_qual)
+DIAG_NAME_INDEX(err_objc_illegal_visibility_spec)
+DIAG_NAME_INDEX(err_objc_incomplete_boxed_expression_type)
+DIAG_NAME_INDEX(err_objc_index_incomplete_class_type)
+DIAG_NAME_INDEX(err_objc_indexing_method_result_type)
+DIAG_NAME_INDEX(err_objc_kindof_nonobject)
+DIAG_NAME_INDEX(err_objc_kindof_wrong_position)
+DIAG_NAME_INDEX(err_objc_literal_method_sig)
+DIAG_NAME_INDEX(err_objc_method_unsupported_param_ret_type)
+DIAG_NAME_INDEX(err_objc_missing_end)
+DIAG_NAME_INDEX(err_objc_multiple_subscript_type_conversion)
+DIAG_NAME_INDEX(err_objc_non_trivially_copyable_boxed_expression_type)
+DIAG_NAME_INDEX(err_objc_ns_bridged_invalid_cfobject)
+DIAG_NAME_INDEX(err_objc_object_assignment)
+DIAG_NAME_INDEX(err_objc_object_catch)
+DIAG_NAME_INDEX(err_objc_parameterized_category_nonclass)
+DIAG_NAME_INDEX(err_objc_parameterized_forward_class)
+DIAG_NAME_INDEX(err_objc_parameterized_forward_class_first)
+DIAG_NAME_INDEX(err_objc_parameterized_implementation)
+DIAG_NAME_INDEX(err_objc_postfix_attribute)
+DIAG_NAME_INDEX(err_objc_postfix_attribute_hint)
+DIAG_NAME_INDEX(err_objc_precise_lifetime_bad_type)
+DIAG_NAME_INDEX(err_objc_properties_require_objc2)
+DIAG_NAME_INDEX(err_objc_property_attr_mutually_exclusive)
+DIAG_NAME_INDEX(err_objc_property_bitfield)
+DIAG_NAME_INDEX(err_objc_property_requires_field_name)
+DIAG_NAME_INDEX(err_objc_property_requires_object)
+DIAG_NAME_INDEX(err_objc_root_class_subclass)
+DIAG_NAME_INDEX(err_objc_runtime_visible_category)
+DIAG_NAME_INDEX(err_objc_runtime_visible_subclass)
+DIAG_NAME_INDEX(err_objc_subscript_base_type)
+DIAG_NAME_INDEX(err_objc_subscript_dic_object_type)
+DIAG_NAME_INDEX(err_objc_subscript_index_type)
+DIAG_NAME_INDEX(err_objc_subscript_key_type)
+DIAG_NAME_INDEX(err_objc_subscript_method_not_found)
+DIAG_NAME_INDEX(err_objc_subscript_object_type)
+DIAG_NAME_INDEX(err_objc_subscript_pointer)
+DIAG_NAME_INDEX(err_objc_subscript_type_conversion)
+DIAG_NAME_INDEX(err_objc_synchronized_expects_object)
+DIAG_NAME_INDEX(err_objc_throw_expects_object)
+DIAG_NAME_INDEX(err_objc_type_arg_does_not_match_bound)
+DIAG_NAME_INDEX(err_objc_type_arg_explicit_nullability)
+DIAG_NAME_INDEX(err_objc_type_arg_missing)
+DIAG_NAME_INDEX(err_objc_type_arg_missing_star)
+DIAG_NAME_INDEX(err_objc_type_arg_not_id_compatible)
+DIAG_NAME_INDEX(err_objc_type_arg_qualified)
+DIAG_NAME_INDEX(err_objc_type_args_after_protocols)
+DIAG_NAME_INDEX(err_objc_type_args_and_protocols)
+DIAG_NAME_INDEX(err_objc_type_args_non_class)
+DIAG_NAME_INDEX(err_objc_type_args_non_parameterized_class)
+DIAG_NAME_INDEX(err_objc_type_args_specialized_class)
+DIAG_NAME_INDEX(err_objc_type_args_wrong_arity)
+DIAG_NAME_INDEX(err_objc_type_param_arity_mismatch)
+DIAG_NAME_INDEX(err_objc_type_param_bound_conflict)
+DIAG_NAME_INDEX(err_objc_type_param_bound_explicit_nullability)
+DIAG_NAME_INDEX(err_objc_type_param_bound_missing)
+DIAG_NAME_INDEX(err_objc_type_param_bound_missing_pointer)
+DIAG_NAME_INDEX(err_objc_type_param_bound_nonobject)
+DIAG_NAME_INDEX(err_objc_type_param_bound_qualified)
+DIAG_NAME_INDEX(err_objc_type_param_redecl)
+DIAG_NAME_INDEX(err_objc_type_param_variance_conflict)
+DIAG_NAME_INDEX(err_objc_unexpected_atend)
+DIAG_NAME_INDEX(err_objc_unexpected_attr)
+DIAG_NAME_INDEX(err_objc_unknown_at)
+DIAG_NAME_INDEX(err_objc_var_decl_inclass)
+DIAG_NAME_INDEX(err_objc_variable_sized_type_not_at_end)
+DIAG_NAME_INDEX(err_objc_weak_unsupported)
+DIAG_NAME_INDEX(err_objc_weak_with_gc)
+DIAG_NAME_INDEX(err_objcbridge_related_expected_related_class)
+DIAG_NAME_INDEX(err_objcbridge_related_selector_name)
+DIAG_NAME_INDEX(err_object_cannot_be_passed_returned_by_value)
+DIAG_NAME_INDEX(err_odr_different_num_template_parameters)
+DIAG_NAME_INDEX(err_odr_different_template_parameter_kind)
+DIAG_NAME_INDEX(err_odr_field_type_inconsistent)
+DIAG_NAME_INDEX(err_odr_function_type_inconsistent)
+DIAG_NAME_INDEX(err_odr_ivar_type_inconsistent)
+DIAG_NAME_INDEX(err_odr_non_type_parameter_type_inconsistent)
+DIAG_NAME_INDEX(err_odr_objc_method_num_params_inconsistent)
+DIAG_NAME_INDEX(err_odr_objc_method_param_type_inconsistent)
+DIAG_NAME_INDEX(err_odr_objc_method_result_type_inconsistent)
+DIAG_NAME_INDEX(err_odr_objc_method_variadic_inconsistent)
+DIAG_NAME_INDEX(err_odr_objc_property_impl_kind_inconsistent)
+DIAG_NAME_INDEX(err_odr_objc_property_type_inconsistent)
+DIAG_NAME_INDEX(err_odr_objc_superclass_inconsistent)
+DIAG_NAME_INDEX(err_odr_objc_synthesize_ivar_inconsistent)
+DIAG_NAME_INDEX(err_odr_parameter_pack_non_pack)
+DIAG_NAME_INDEX(err_odr_tag_type_inconsistent)
+DIAG_NAME_INDEX(err_odr_variable_multiple_def)
+DIAG_NAME_INDEX(err_odr_variable_type_inconsistent)
+DIAG_NAME_INDEX(err_offsetof_array_type)
+DIAG_NAME_INDEX(err_offsetof_bitfield)
+DIAG_NAME_INDEX(err_offsetof_field_of_virtual_base)
+DIAG_NAME_INDEX(err_offsetof_incomplete_type)
+DIAG_NAME_INDEX(err_offsetof_record_type)
+DIAG_NAME_INDEX(err_omp_aligned_expected_array_or_ptr)
+DIAG_NAME_INDEX(err_omp_aligned_twice)
+DIAG_NAME_INDEX(err_omp_ambiguous_conversion)
+DIAG_NAME_INDEX(err_omp_argument_type_isdeviceptr)
+DIAG_NAME_INDEX(err_omp_array_section_use)
+DIAG_NAME_INDEX(err_omp_at_least_one_motion_clause_required)
+DIAG_NAME_INDEX(err_omp_atomic_capture_not_compound_statement)
+DIAG_NAME_INDEX(err_omp_atomic_capture_not_expression_statement)
+DIAG_NAME_INDEX(err_omp_atomic_not_expression_statement)
+DIAG_NAME_INDEX(err_omp_atomic_read_not_expression_statement)
+DIAG_NAME_INDEX(err_omp_atomic_several_clauses)
+DIAG_NAME_INDEX(err_omp_atomic_update_not_expression_statement)
+DIAG_NAME_INDEX(err_omp_atomic_write_not_expression_statement)
+DIAG_NAME_INDEX(err_omp_bit_fields_forbidden_in_clause)
+DIAG_NAME_INDEX(err_omp_clause_floating_type_arg)
+DIAG_NAME_INDEX(err_omp_clause_not_arithmetic_type_arg)
+DIAG_NAME_INDEX(err_omp_const_list_item)
+DIAG_NAME_INDEX(err_omp_const_not_mutable_variable)
+DIAG_NAME_INDEX(err_omp_const_variable)
+DIAG_NAME_INDEX(err_omp_critical_with_hint)
+DIAG_NAME_INDEX(err_omp_decl_in_declare_simd)
+DIAG_NAME_INDEX(err_omp_declare_mapper_redefinition)
+DIAG_NAME_INDEX(err_omp_declare_mapper_wrong_var)
+DIAG_NAME_INDEX(err_omp_declare_reduction_redefinition)
+DIAG_NAME_INDEX(err_omp_declare_simd_inbranch_notinbranch)
+DIAG_NAME_INDEX(err_omp_declare_target_multiple)
+DIAG_NAME_INDEX(err_omp_declare_target_to_and_link)
+DIAG_NAME_INDEX(err_omp_declare_target_unexpected_clause)
+DIAG_NAME_INDEX(err_omp_depend_clause_thread_simd)
+DIAG_NAME_INDEX(err_omp_depend_sink_expected_loop_iteration)
+DIAG_NAME_INDEX(err_omp_depend_sink_expected_plus_minus)
+DIAG_NAME_INDEX(err_omp_depend_sink_source_not_allowed)
+DIAG_NAME_INDEX(err_omp_depend_sink_unexpected_expr)
+DIAG_NAME_INDEX(err_omp_duplicate_map_type_modifier)
+DIAG_NAME_INDEX(err_omp_expected_access_to_data_field)
+DIAG_NAME_INDEX(err_omp_expected_addressable_lvalue_or_array_item)
+DIAG_NAME_INDEX(err_omp_expected_base_var_name)
+DIAG_NAME_INDEX(err_omp_expected_clause)
+DIAG_NAME_INDEX(err_omp_expected_identifier_for_critical)
+DIAG_NAME_INDEX(err_omp_expected_int_param)
+DIAG_NAME_INDEX(err_omp_expected_named_var_member_or_array_expression)
+DIAG_NAME_INDEX(err_omp_expected_punc)
+DIAG_NAME_INDEX(err_omp_expected_reduction_identifier)
+DIAG_NAME_INDEX(err_omp_expected_uniform_param)
+DIAG_NAME_INDEX(err_omp_expected_var_arg)
+DIAG_NAME_INDEX(err_omp_expected_var_arg_suggest)
+DIAG_NAME_INDEX(err_omp_expected_var_name_member_expr)
+DIAG_NAME_INDEX(err_omp_expected_var_name_member_expr_or_array_item)
+DIAG_NAME_INDEX(err_omp_explicit_conversion)
+DIAG_NAME_INDEX(err_omp_firstprivate_incomplete_type)
+DIAG_NAME_INDEX(err_omp_function_expected)
+DIAG_NAME_INDEX(err_omp_function_in_link_clause)
+DIAG_NAME_INDEX(err_omp_global_var_arg)
+DIAG_NAME_INDEX(err_omp_grainsize_num_tasks_mutually_exclusive)
+DIAG_NAME_INDEX(err_omp_hint_clause_no_name)
+DIAG_NAME_INDEX(err_omp_immediate_directive)
+DIAG_NAME_INDEX(err_omp_in_reduction_not_task_reduction)
+DIAG_NAME_INDEX(err_omp_incomplete_type)
+DIAG_NAME_INDEX(err_omp_invalid_map_this_expr)
+DIAG_NAME_INDEX(err_omp_invalid_map_type_for_directive)
+DIAG_NAME_INDEX(err_omp_invalid_scope)
+DIAG_NAME_INDEX(err_omp_invalid_target_decl)
+DIAG_NAME_INDEX(err_omp_lastprivate_incomplete_type)
+DIAG_NAME_INDEX(err_omp_linear_distribute_var_non_loop_iteration)
+DIAG_NAME_INDEX(err_omp_linear_expected_int_or_ptr)
+DIAG_NAME_INDEX(err_omp_linear_incomplete_type)
+DIAG_NAME_INDEX(err_omp_linear_ordered)
+DIAG_NAME_INDEX(err_omp_local_var_in_threadprivate_init)
+DIAG_NAME_INDEX(err_omp_loop_cannot_use_stmt)
+DIAG_NAME_INDEX(err_omp_loop_diff_cxx)
+DIAG_NAME_INDEX(err_omp_loop_incr_not_compatible)
+DIAG_NAME_INDEX(err_omp_loop_not_canonical_cond)
+DIAG_NAME_INDEX(err_omp_loop_not_canonical_incr)
+DIAG_NAME_INDEX(err_omp_loop_not_canonical_init)
+DIAG_NAME_INDEX(err_omp_loop_var_dsa)
+DIAG_NAME_INDEX(err_omp_loop_variable_type)
+DIAG_NAME_INDEX(err_omp_map_shared_storage)
+DIAG_NAME_INDEX(err_omp_map_type_missing)
+DIAG_NAME_INDEX(err_omp_map_type_modifier_missing)
+DIAG_NAME_INDEX(err_omp_mapper_expected_declarator)
+DIAG_NAME_INDEX(err_omp_mapper_illegal_identifier)
+DIAG_NAME_INDEX(err_omp_mapper_wrong_type)
+DIAG_NAME_INDEX(err_omp_more_one_clause)
+DIAG_NAME_INDEX(err_omp_multiple_array_items_in_map_clause)
+DIAG_NAME_INDEX(err_omp_negative_expression_in_clause)
+DIAG_NAME_INDEX(err_omp_no_clause_for_directive)
+DIAG_NAME_INDEX(err_omp_no_dsa_for_variable)
+DIAG_NAME_INDEX(err_omp_no_more_if_clause)
+DIAG_NAME_INDEX(err_omp_not_for)
+DIAG_NAME_INDEX(err_omp_not_integral)
+DIAG_NAME_INDEX(err_omp_not_resolved_reduction_identifier)
+DIAG_NAME_INDEX(err_omp_once_referenced)
+DIAG_NAME_INDEX(err_omp_once_referenced_in_target_update)
+DIAG_NAME_INDEX(err_omp_ordered_directive_with_param)
+DIAG_NAME_INDEX(err_omp_ordered_directive_without_param)
+DIAG_NAME_INDEX(err_omp_ordered_simd)
+DIAG_NAME_INDEX(err_omp_original_storage_is_shared_and_does_not_contain)
+DIAG_NAME_INDEX(err_omp_orphaned_device_directive)
+DIAG_NAME_INDEX(err_omp_orphaned_section_directive)
+DIAG_NAME_INDEX(err_omp_parallel_reduction_in_task_firstprivate)
+DIAG_NAME_INDEX(err_omp_parallel_sections_not_compound_stmt)
+DIAG_NAME_INDEX(err_omp_parallel_sections_substmt_not_section)
+DIAG_NAME_INDEX(err_omp_param_or_this_in_clause)
+DIAG_NAME_INDEX(err_omp_parent_cancel_region_nowait)
+DIAG_NAME_INDEX(err_omp_parent_cancel_region_ordered)
+DIAG_NAME_INDEX(err_omp_pointer_mapped_along_with_derived_section)
+DIAG_NAME_INDEX(err_omp_private_incomplete_type)
+DIAG_NAME_INDEX(err_omp_prohibited_region)
+DIAG_NAME_INDEX(err_omp_prohibited_region_atomic)
+DIAG_NAME_INDEX(err_omp_prohibited_region_critical_same_name)
+DIAG_NAME_INDEX(err_omp_prohibited_region_simd)
+DIAG_NAME_INDEX(err_omp_reduction_id_not_compatible)
+DIAG_NAME_INDEX(err_omp_reduction_identifier_mismatch)
+DIAG_NAME_INDEX(err_omp_reduction_in_task)
+DIAG_NAME_INDEX(err_omp_reduction_incomplete_type)
+DIAG_NAME_INDEX(err_omp_reduction_non_addressable_expression)
+DIAG_NAME_INDEX(err_omp_reduction_ref_type_arg)
+DIAG_NAME_INDEX(err_omp_reduction_vla_unsupported)
+DIAG_NAME_INDEX(err_omp_reduction_with_nogroup)
+DIAG_NAME_INDEX(err_omp_reduction_wrong_type)
+DIAG_NAME_INDEX(err_omp_ref_type_arg)
+DIAG_NAME_INDEX(err_omp_region_not_file_context)
+DIAG_NAME_INDEX(err_omp_required_access)
+DIAG_NAME_INDEX(err_omp_requires_clause_redeclaration)
+DIAG_NAME_INDEX(err_omp_same_pointer_dereferenced)
+DIAG_NAME_INDEX(err_omp_schedule_nonmonotonic_ordered)
+DIAG_NAME_INDEX(err_omp_schedule_nonmonotonic_static)
+DIAG_NAME_INDEX(err_omp_section_function_type)
+DIAG_NAME_INDEX(err_omp_section_incomplete_type)
+DIAG_NAME_INDEX(err_omp_section_length_negative)
+DIAG_NAME_INDEX(err_omp_section_length_undefined)
+DIAG_NAME_INDEX(err_omp_section_not_subset_of_array)
+DIAG_NAME_INDEX(err_omp_sections_not_compound_stmt)
+DIAG_NAME_INDEX(err_omp_sections_substmt_not_section)
+DIAG_NAME_INDEX(err_omp_simd_region_cannot_use_stmt)
+DIAG_NAME_INDEX(err_omp_single_copyprivate_with_nowait)
+DIAG_NAME_INDEX(err_omp_single_decl_in_declare_simd)
+DIAG_NAME_INDEX(err_omp_target_contains_not_only_teams)
+DIAG_NAME_INDEX(err_omp_threadprivate_in_clause)
+DIAG_NAME_INDEX(err_omp_threadprivate_in_target)
+DIAG_NAME_INDEX(err_omp_threadprivate_incomplete_type)
+DIAG_NAME_INDEX(err_omp_typecheck_section_not_integer)
+DIAG_NAME_INDEX(err_omp_typecheck_section_value)
+DIAG_NAME_INDEX(err_omp_unexpected_clause)
+DIAG_NAME_INDEX(err_omp_unexpected_clause_value)
+DIAG_NAME_INDEX(err_omp_unexpected_directive)
+DIAG_NAME_INDEX(err_omp_unexpected_schedule_modifier)
+DIAG_NAME_INDEX(err_omp_union_type_not_allowed)
+DIAG_NAME_INDEX(err_omp_unknown_directive)
+DIAG_NAME_INDEX(err_omp_unknown_map_type)
+DIAG_NAME_INDEX(err_omp_unknown_map_type_modifier)
+DIAG_NAME_INDEX(err_omp_unknown_reduction_identifier)
+DIAG_NAME_INDEX(err_omp_unnamed_if_clause)
+DIAG_NAME_INDEX(err_omp_usedeviceptr_not_a_pointer)
+DIAG_NAME_INDEX(err_omp_var_scope)
+DIAG_NAME_INDEX(err_omp_var_thread_local)
+DIAG_NAME_INDEX(err_omp_var_used)
+DIAG_NAME_INDEX(err_omp_variable_in_given_clause_and_dsa)
+DIAG_NAME_INDEX(err_omp_variably_modified_type_not_supported)
+DIAG_NAME_INDEX(err_omp_wrong_cancel_region)
+DIAG_NAME_INDEX(err_omp_wrong_dsa)
+DIAG_NAME_INDEX(err_omp_wrong_if_directive_name_modifier)
+DIAG_NAME_INDEX(err_omp_wrong_linear_modifier)
+DIAG_NAME_INDEX(err_omp_wrong_linear_modifier_non_reference)
+DIAG_NAME_INDEX(err_omp_wrong_ordered_loop_count)
+DIAG_NAME_INDEX(err_omp_wrong_simdlen_safelen_values)
+DIAG_NAME_INDEX(err_omp_wrong_var_in_declare_reduction)
+DIAG_NAME_INDEX(err_only_annotate_after_access_spec)
+DIAG_NAME_INDEX(err_only_constructors_take_base_inits)
+DIAG_NAME_INDEX(err_only_enums_have_underlying_types)
+DIAG_NAME_INDEX(err_opencl_addrspace_scope)
+DIAG_NAME_INDEX(err_opencl_atomic_init)
+DIAG_NAME_INDEX(err_opencl_bitfields)
+DIAG_NAME_INDEX(err_opencl_block_ref_block)
+DIAG_NAME_INDEX(err_opencl_block_storage_type)
+DIAG_NAME_INDEX(err_opencl_builtin_expected_type)
+DIAG_NAME_INDEX(err_opencl_builtin_pipe_arg_num)
+DIAG_NAME_INDEX(err_opencl_builtin_pipe_first_arg)
+DIAG_NAME_INDEX(err_opencl_builtin_pipe_invalid_access_modifier)
+DIAG_NAME_INDEX(err_opencl_builtin_pipe_invalid_arg)
+DIAG_NAME_INDEX(err_opencl_builtin_to_addr_arg_num)
+DIAG_NAME_INDEX(err_opencl_builtin_to_addr_invalid_arg)
+DIAG_NAME_INDEX(err_opencl_cast_non_zero_to_event_t)
+DIAG_NAME_INDEX(err_opencl_cast_to_half)
+DIAG_NAME_INDEX(err_opencl_constant_no_init)
+DIAG_NAME_INDEX(err_opencl_enqueue_kernel_blocks_no_args)
+DIAG_NAME_INDEX(err_opencl_enqueue_kernel_blocks_non_local_void_args)
+DIAG_NAME_INDEX(err_opencl_enqueue_kernel_incorrect_args)
+DIAG_NAME_INDEX(err_opencl_enqueue_kernel_invalid_local_size_type)
+DIAG_NAME_INDEX(err_opencl_enqueue_kernel_local_size_args)
+DIAG_NAME_INDEX(err_opencl_ext_vector_component_invalid_length)
+DIAG_NAME_INDEX(err_opencl_extern_block_declaration)
+DIAG_NAME_INDEX(err_opencl_function_pointer)
+DIAG_NAME_INDEX(err_opencl_function_variable)
+DIAG_NAME_INDEX(err_opencl_global_invalid_addr_space)
+DIAG_NAME_INDEX(err_opencl_half_declaration)
+DIAG_NAME_INDEX(err_opencl_half_load_store)
+DIAG_NAME_INDEX(err_opencl_half_param)
+DIAG_NAME_INDEX(err_opencl_implicit_function_decl)
+DIAG_NAME_INDEX(err_opencl_implicit_vector_conversion)
+DIAG_NAME_INDEX(err_opencl_invalid_access_qualifier)
+DIAG_NAME_INDEX(err_opencl_invalid_block_declaration)
+DIAG_NAME_INDEX(err_opencl_invalid_read_write)
+DIAG_NAME_INDEX(err_opencl_invalid_return)
+DIAG_NAME_INDEX(err_opencl_invalid_type_array)
+DIAG_NAME_INDEX(err_opencl_kernel_attr)
+DIAG_NAME_INDEX(err_opencl_logical_exclusive_or)
+DIAG_NAME_INDEX(err_opencl_multiple_access_qualifiers)
+DIAG_NAME_INDEX(err_opencl_no_main)
+DIAG_NAME_INDEX(err_opencl_nonconst_global_sampler)
+DIAG_NAME_INDEX(err_opencl_pointer_to_type)
+DIAG_NAME_INDEX(err_opencl_ptrptr_kernel_param)
+DIAG_NAME_INDEX(err_opencl_requires_extension)
+DIAG_NAME_INDEX(err_opencl_return_value_with_address_space)
+DIAG_NAME_INDEX(err_opencl_scalar_type_rank_greater_than_vector_type)
+DIAG_NAME_INDEX(err_opencl_sizeof_alignof_type)
+DIAG_NAME_INDEX(err_opencl_taking_address_capture)
+DIAG_NAME_INDEX(err_opencl_taking_function_address_parser)
+DIAG_NAME_INDEX(err_opencl_ternary_with_block)
+DIAG_NAME_INDEX(err_opencl_type_can_only_be_used_as_function_parameter)
+DIAG_NAME_INDEX(err_opencl_type_struct_or_union_field)
+DIAG_NAME_INDEX(err_opencl_unknown_type_specifier)
+DIAG_NAME_INDEX(err_opencl_unroll_hint_on_non_loop)
+DIAG_NAME_INDEX(err_opencl_variadic_function)
+DIAG_NAME_INDEX(err_opencl_vla)
+DIAG_NAME_INDEX(err_openclcxx_not_supported)
+DIAG_NAME_INDEX(err_openclcxx_reserved)
+DIAG_NAME_INDEX(err_openclcxx_virtual_function)
+DIAG_NAME_INDEX(err_openmp_default_simd_align_expr)
+DIAG_NAME_INDEX(err_operator_arrow_circular)
+DIAG_NAME_INDEX(err_operator_arrow_depth_exceeded)
+DIAG_NAME_INDEX(err_operator_delete_dependent_param_type)
+DIAG_NAME_INDEX(err_operator_delete_param_type)
+DIAG_NAME_INDEX(err_operator_new_default_arg)
+DIAG_NAME_INDEX(err_operator_new_delete_declared_in_namespace)
+DIAG_NAME_INDEX(err_operator_new_delete_declared_static)
+DIAG_NAME_INDEX(err_operator_new_delete_dependent_result_type)
+DIAG_NAME_INDEX(err_operator_new_delete_invalid_result_type)
+DIAG_NAME_INDEX(err_operator_new_delete_template_too_few_parameters)
+DIAG_NAME_INDEX(err_operator_new_delete_too_few_parameters)
+DIAG_NAME_INDEX(err_operator_new_dependent_param_type)
+DIAG_NAME_INDEX(err_operator_new_param_type)
+DIAG_NAME_INDEX(err_operator_overload_default_arg)
+DIAG_NAME_INDEX(err_operator_overload_must_be)
+DIAG_NAME_INDEX(err_operator_overload_must_be_member)
+DIAG_NAME_INDEX(err_operator_overload_needs_class_or_enum)
+DIAG_NAME_INDEX(err_operator_overload_post_incdec_must_be_int)
+DIAG_NAME_INDEX(err_operator_overload_static)
+DIAG_NAME_INDEX(err_operator_overload_variadic)
+DIAG_NAME_INDEX(err_opt_not_valid_on_target)
+DIAG_NAME_INDEX(err_opt_not_valid_with_opt)
+DIAG_NAME_INDEX(err_opt_not_valid_without_opt)
+DIAG_NAME_INDEX(err_os_log_argument_too_big)
+DIAG_NAME_INDEX(err_os_log_format_not_string_constant)
+DIAG_NAME_INDEX(err_out_of_line_constructor_template_id)
+DIAG_NAME_INDEX(err_out_of_line_default_deletes)
+DIAG_NAME_INDEX(err_out_of_line_qualified_id_type_names_constructor)
+DIAG_NAME_INDEX(err_overflow_builtin_must_be_int)
+DIAG_NAME_INDEX(err_overflow_builtin_must_be_ptr_int)
+DIAG_NAME_INDEX(err_override_control_interface)
+DIAG_NAME_INDEX(err_override_exception_spec)
+DIAG_NAME_INDEX(err_ovl_ambiguous_call)
+DIAG_NAME_INDEX(err_ovl_ambiguous_conversion_in_cast)
+DIAG_NAME_INDEX(err_ovl_ambiguous_init)
+DIAG_NAME_INDEX(err_ovl_ambiguous_member_call)
+DIAG_NAME_INDEX(err_ovl_ambiguous_object_call)
+DIAG_NAME_INDEX(err_ovl_ambiguous_oper_binary)
+DIAG_NAME_INDEX(err_ovl_ambiguous_oper_unary)
+DIAG_NAME_INDEX(err_ovl_deleted_call)
+DIAG_NAME_INDEX(err_ovl_deleted_conversion_in_cast)
+DIAG_NAME_INDEX(err_ovl_deleted_init)
+DIAG_NAME_INDEX(err_ovl_deleted_member_call)
+DIAG_NAME_INDEX(err_ovl_deleted_object_call)
+DIAG_NAME_INDEX(err_ovl_deleted_oper)
+DIAG_NAME_INDEX(err_ovl_deleted_special_init)
+DIAG_NAME_INDEX(err_ovl_deleted_special_oper)
+DIAG_NAME_INDEX(err_ovl_diff_return_type)
+DIAG_NAME_INDEX(err_ovl_no_conversion_in_cast)
+DIAG_NAME_INDEX(err_ovl_no_oper)
+DIAG_NAME_INDEX(err_ovl_no_viable_conversion_in_cast)
+DIAG_NAME_INDEX(err_ovl_no_viable_function_in_call)
+DIAG_NAME_INDEX(err_ovl_no_viable_function_in_init)
+DIAG_NAME_INDEX(err_ovl_no_viable_literal_operator)
+DIAG_NAME_INDEX(err_ovl_no_viable_member_function_in_call)
+DIAG_NAME_INDEX(err_ovl_no_viable_object_call)
+DIAG_NAME_INDEX(err_ovl_no_viable_oper)
+DIAG_NAME_INDEX(err_ovl_no_viable_subscript)
+DIAG_NAME_INDEX(err_ovl_static_nonstatic_member)
+DIAG_NAME_INDEX(err_ovl_unresolvable)
+DIAG_NAME_INDEX(err_ownership_returns_index_mismatch)
+DIAG_NAME_INDEX(err_ownership_type)
+DIAG_NAME_INDEX(err_pack_expansion_length_conflict)
+DIAG_NAME_INDEX(err_pack_expansion_length_conflict_multilevel)
+DIAG_NAME_INDEX(err_pack_expansion_length_conflict_partial)
+DIAG_NAME_INDEX(err_pack_expansion_member_init)
+DIAG_NAME_INDEX(err_pack_expansion_without_parameter_packs)
+DIAG_NAME_INDEX(err_param_default_argument)
+DIAG_NAME_INDEX(err_param_default_argument_member_template_redecl)
+DIAG_NAME_INDEX(err_param_default_argument_missing)
+DIAG_NAME_INDEX(err_param_default_argument_missing_name)
+DIAG_NAME_INDEX(err_param_default_argument_nonfunc)
+DIAG_NAME_INDEX(err_param_default_argument_on_parameter_pack)
+DIAG_NAME_INDEX(err_param_default_argument_redefinition)
+DIAG_NAME_INDEX(err_param_default_argument_references_local)
+DIAG_NAME_INDEX(err_param_default_argument_references_param)
+DIAG_NAME_INDEX(err_param_default_argument_references_this)
+DIAG_NAME_INDEX(err_param_default_argument_template_redecl)
+DIAG_NAME_INDEX(err_param_redefinition)
+DIAG_NAME_INDEX(err_param_with_void_type)
+DIAG_NAME_INDEX(err_parameter_name_omitted)
+DIAG_NAME_INDEX(err_parameter_shadow_capture)
+DIAG_NAME_INDEX(err_parameters_retval_cannot_have_fp16_type)
+DIAG_NAME_INDEX(err_paren_sizeof_parameter_pack)
+DIAG_NAME_INDEX(err_parens_pointer_member_function)
+DIAG_NAME_INDEX(err_partial_spec_args_match_primary_template)
+DIAG_NAME_INDEX(err_partial_spec_fully_specialized)
+DIAG_NAME_INDEX(err_partial_spec_ordering_ambiguous)
+DIAG_NAME_INDEX(err_partial_spec_redeclared)
+DIAG_NAME_INDEX(err_partial_specialization_friend)
+DIAG_NAME_INDEX(err_pascal_string_too_long)
+DIAG_NAME_INDEX(err_paste_at_end)
+DIAG_NAME_INDEX(err_paste_at_start)
+DIAG_NAME_INDEX(err_pch_diagopt_mismatch)
+DIAG_NAME_INDEX(err_pch_different_branch)
+DIAG_NAME_INDEX(err_pch_langopt_mismatch)
+DIAG_NAME_INDEX(err_pch_langopt_value_mismatch)
+DIAG_NAME_INDEX(err_pch_macro_def_conflict)
+DIAG_NAME_INDEX(err_pch_macro_def_undef)
+DIAG_NAME_INDEX(err_pch_modulecache_mismatch)
+DIAG_NAME_INDEX(err_pch_pp_detailed_record)
+DIAG_NAME_INDEX(err_pch_targetopt_feature_mismatch)
+DIAG_NAME_INDEX(err_pch_targetopt_mismatch)
+DIAG_NAME_INDEX(err_pch_undef)
+DIAG_NAME_INDEX(err_pch_version_too_new)
+DIAG_NAME_INDEX(err_pch_version_too_old)
+DIAG_NAME_INDEX(err_pch_with_compiler_errors)
+DIAG_NAME_INDEX(err_placeholder_in_source)
+DIAG_NAME_INDEX(err_placement_new_non_placement_delete)
+DIAG_NAME_INDEX(err_pointer_to_member_call_drops_quals)
+DIAG_NAME_INDEX(err_pointer_to_member_oper_value_classify)
+DIAG_NAME_INDEX(err_pointer_to_member_type)
+DIAG_NAME_INDEX(err_pp_arc_cf_code_audited_syntax)
+DIAG_NAME_INDEX(err_pp_assume_nonnull_syntax)
+DIAG_NAME_INDEX(err_pp_bad_paste)
+DIAG_NAME_INDEX(err_pp_colon_without_question)
+DIAG_NAME_INDEX(err_pp_directive_required)
+DIAG_NAME_INDEX(err_pp_division_by_zero)
+DIAG_NAME_INDEX(err_pp_double_begin_of_arc_cf_code_audited)
+DIAG_NAME_INDEX(err_pp_double_begin_of_assume_nonnull)
+DIAG_NAME_INDEX(err_pp_duplicate_name_in_arg_list)
+DIAG_NAME_INDEX(err_pp_empty_filename)
+DIAG_NAME_INDEX(err_pp_endif_without_if)
+DIAG_NAME_INDEX(err_pp_eof_in_arc_cf_code_audited)
+DIAG_NAME_INDEX(err_pp_eof_in_assume_nonnull)
+DIAG_NAME_INDEX(err_pp_error_opening_file)
+DIAG_NAME_INDEX(err_pp_expected_after)
+DIAG_NAME_INDEX(err_pp_expected_comma_in_arg_list)
+DIAG_NAME_INDEX(err_pp_expected_eol)
+DIAG_NAME_INDEX(err_pp_expected_ident_in_arg_list)
+DIAG_NAME_INDEX(err_pp_expected_module_name)
+DIAG_NAME_INDEX(err_pp_expected_rparen)
+DIAG_NAME_INDEX(err_pp_expected_value_in_expr)
+DIAG_NAME_INDEX(err_pp_expects_filename)
+DIAG_NAME_INDEX(err_pp_expr_bad_token_binop)
+DIAG_NAME_INDEX(err_pp_expr_bad_token_lparen)
+DIAG_NAME_INDEX(err_pp_expr_bad_token_start_expr)
+DIAG_NAME_INDEX(err_pp_file_not_found)
+DIAG_NAME_INDEX(err_pp_file_not_found_angled_include_not_fatal)
+DIAG_NAME_INDEX(err_pp_file_not_found_typo_not_fatal)
+DIAG_NAME_INDEX(err_pp_hash_error)
+DIAG_NAME_INDEX(err_pp_identifier_arg_not_identifier)
+DIAG_NAME_INDEX(err_pp_illegal_floating_literal)
+DIAG_NAME_INDEX(err_pp_import_directive_ms)
+DIAG_NAME_INDEX(err_pp_include_in_arc_cf_code_audited)
+DIAG_NAME_INDEX(err_pp_include_in_assume_nonnull)
+DIAG_NAME_INDEX(err_pp_include_too_deep)
+DIAG_NAME_INDEX(err_pp_invalid_directive)
+DIAG_NAME_INDEX(err_pp_invalid_poison)
+DIAG_NAME_INDEX(err_pp_invalid_tok_in_arg_list)
+DIAG_NAME_INDEX(err_pp_invalid_udl)
+DIAG_NAME_INDEX(err_pp_line_digit_sequence)
+DIAG_NAME_INDEX(err_pp_line_invalid_filename)
+DIAG_NAME_INDEX(err_pp_line_requires_integer)
+DIAG_NAME_INDEX(err_pp_linemarker_invalid_filename)
+DIAG_NAME_INDEX(err_pp_linemarker_invalid_flag)
+DIAG_NAME_INDEX(err_pp_linemarker_invalid_pop)
+DIAG_NAME_INDEX(err_pp_linemarker_requires_integer)
+DIAG_NAME_INDEX(err_pp_macro_not_identifier)
+DIAG_NAME_INDEX(err_pp_malformed_ident)
+DIAG_NAME_INDEX(err_pp_missing_lparen_in_vaopt_use)
+DIAG_NAME_INDEX(err_pp_missing_macro_name)
+DIAG_NAME_INDEX(err_pp_missing_rparen_in_macro_def)
+DIAG_NAME_INDEX(err_pp_module_begin_no_module_map)
+DIAG_NAME_INDEX(err_pp_module_begin_no_submodule)
+DIAG_NAME_INDEX(err_pp_module_begin_without_module_end)
+DIAG_NAME_INDEX(err_pp_module_begin_wrong_module)
+DIAG_NAME_INDEX(err_pp_module_build_missing_end)
+DIAG_NAME_INDEX(err_pp_module_end_without_module_begin)
+DIAG_NAME_INDEX(err_pp_nested_paren)
+DIAG_NAME_INDEX(err_pp_opencl_variadic_macros)
+DIAG_NAME_INDEX(err_pp_operator_used_as_macro_name)
+DIAG_NAME_INDEX(err_pp_pragma_hdrstop_not_seen)
+DIAG_NAME_INDEX(err_pp_remainder_by_zero)
+DIAG_NAME_INDEX(err_pp_stringize_not_parameter)
+DIAG_NAME_INDEX(err_pp_through_header_not_found)
+DIAG_NAME_INDEX(err_pp_through_header_not_seen)
+DIAG_NAME_INDEX(err_pp_unmatched_end_of_arc_cf_code_audited)
+DIAG_NAME_INDEX(err_pp_unmatched_end_of_assume_nonnull)
+DIAG_NAME_INDEX(err_pp_unterminated_conditional)
+DIAG_NAME_INDEX(err_pp_used_poisoned_id)
+DIAG_NAME_INDEX(err_pp_vaopt_nested_use)
+DIAG_NAME_INDEX(err_pp_visibility_non_macro)
+DIAG_NAME_INDEX(err_ppc_builtin_only_on_pwr7)
+DIAG_NAME_INDEX(err_pragma_attr_attr_no_push)
+DIAG_NAME_INDEX(err_pragma_attribute_duplicate_subject)
+DIAG_NAME_INDEX(err_pragma_attribute_expected_attribute)
+DIAG_NAME_INDEX(err_pragma_attribute_expected_attribute_name)
+DIAG_NAME_INDEX(err_pragma_attribute_expected_attribute_syntax)
+DIAG_NAME_INDEX(err_pragma_attribute_expected_period)
+DIAG_NAME_INDEX(err_pragma_attribute_expected_push_pop_paren)
+DIAG_NAME_INDEX(err_pragma_attribute_expected_subject_identifier)
+DIAG_NAME_INDEX(err_pragma_attribute_expected_subject_sub_identifier)
+DIAG_NAME_INDEX(err_pragma_attribute_extra_tokens_after_attribute)
+DIAG_NAME_INDEX(err_pragma_attribute_invalid_argument)
+DIAG_NAME_INDEX(err_pragma_attribute_invalid_matchers)
+DIAG_NAME_INDEX(err_pragma_attribute_invalid_subject_set_specifier)
+DIAG_NAME_INDEX(err_pragma_attribute_matcher_negated_subrule_contradicts_subrule)
+DIAG_NAME_INDEX(err_pragma_attribute_matcher_subrule_contradicts_rule)
+DIAG_NAME_INDEX(err_pragma_attribute_multiple_attributes)
+DIAG_NAME_INDEX(err_pragma_attribute_namespace_on_attribute)
+DIAG_NAME_INDEX(err_pragma_attribute_no_pop_eof)
+DIAG_NAME_INDEX(err_pragma_attribute_stack_mismatch)
+DIAG_NAME_INDEX(err_pragma_attribute_unknown_subject_rule)
+DIAG_NAME_INDEX(err_pragma_attribute_unknown_subject_sub_rule)
+DIAG_NAME_INDEX(err_pragma_attribute_unsupported_attribute)
+DIAG_NAME_INDEX(err_pragma_cannot_end_force_cuda_host_device)
+DIAG_NAME_INDEX(err_pragma_clang_section_expected_equal)
+DIAG_NAME_INDEX(err_pragma_comment_malformed)
+DIAG_NAME_INDEX(err_pragma_comment_unknown_kind)
+DIAG_NAME_INDEX(err_pragma_detect_mismatch_malformed)
+DIAG_NAME_INDEX(err_pragma_expected_clang_section_name)
+DIAG_NAME_INDEX(err_pragma_fp_contract_scope)
+DIAG_NAME_INDEX(err_pragma_fp_invalid_argument)
+DIAG_NAME_INDEX(err_pragma_fp_invalid_option)
+DIAG_NAME_INDEX(err_pragma_fp_scope)
+DIAG_NAME_INDEX(err_pragma_invalid_keyword)
+DIAG_NAME_INDEX(err_pragma_loop_compatibility)
+DIAG_NAME_INDEX(err_pragma_loop_invalid_argument_type)
+DIAG_NAME_INDEX(err_pragma_loop_invalid_argument_value)
+DIAG_NAME_INDEX(err_pragma_loop_invalid_option)
+DIAG_NAME_INDEX(err_pragma_loop_missing_argument)
+DIAG_NAME_INDEX(err_pragma_loop_precedes_nonloop)
+DIAG_NAME_INDEX(err_pragma_message)
+DIAG_NAME_INDEX(err_pragma_message_malformed)
+DIAG_NAME_INDEX(err_pragma_missing_argument)
+DIAG_NAME_INDEX(err_pragma_optimize_extra_argument)
+DIAG_NAME_INDEX(err_pragma_optimize_invalid_argument)
+DIAG_NAME_INDEX(err_pragma_options_align_mac68k_target_unsupported)
+DIAG_NAME_INDEX(err_pragma_pipeline_invalid_keyword)
+DIAG_NAME_INDEX(err_pragma_pointers_to_members_unknown_kind)
+DIAG_NAME_INDEX(err_pragma_pop_visibility_mismatch)
+DIAG_NAME_INDEX(err_pragma_push_pop_macro_malformed)
+DIAG_NAME_INDEX(err_pragma_push_visibility_mismatch)
+DIAG_NAME_INDEX(err_private_ivar_access)
+DIAG_NAME_INDEX(err_property_accessor_type)
+DIAG_NAME_INDEX(err_property_found_suggest)
+DIAG_NAME_INDEX(err_property_function_in_objc_container)
+DIAG_NAME_INDEX(err_property_implemented)
+DIAG_NAME_INDEX(err_property_is_variably_modified)
+DIAG_NAME_INDEX(err_property_ivar_type)
+DIAG_NAME_INDEX(err_property_method_unavailable)
+DIAG_NAME_INDEX(err_property_not_as_forward_class)
+DIAG_NAME_INDEX(err_property_not_found)
+DIAG_NAME_INDEX(err_property_not_found_forward_class)
+DIAG_NAME_INDEX(err_property_not_found_suggest)
+DIAG_NAME_INDEX(err_property_setter_ambiguous_use)
+DIAG_NAME_INDEX(err_property_type)
+DIAG_NAME_INDEX(err_protected_ivar_access)
+DIAG_NAME_INDEX(err_protocol_has_circular_dependency)
+DIAG_NAME_INDEX(err_protocol_property_mismatch)
+DIAG_NAME_INDEX(err_pseudo_dtor_base_not_scalar)
+DIAG_NAME_INDEX(err_pseudo_dtor_call_with_args)
+DIAG_NAME_INDEX(err_pseudo_dtor_destructor_non_type)
+DIAG_NAME_INDEX(err_pseudo_dtor_type_mismatch)
+DIAG_NAME_INDEX(err_pure_friend)
+DIAG_NAME_INDEX(err_qualified_catch_declarator)
+DIAG_NAME_INDEX(err_qualified_friend_def)
+DIAG_NAME_INDEX(err_qualified_friend_no_match)
+DIAG_NAME_INDEX(err_qualified_member_nonclass)
+DIAG_NAME_INDEX(err_qualified_member_of_unrelated)
+DIAG_NAME_INDEX(err_qualified_objc_access)
+DIAG_NAME_INDEX(err_qualified_objc_catch_parm)
+DIAG_NAME_INDEX(err_qualified_param_declarator)
+DIAG_NAME_INDEX(err_qualified_typedef_declarator)
+DIAG_NAME_INDEX(err_range_on_array_parameter)
+DIAG_NAME_INDEX(err_raw_delim_too_long)
+DIAG_NAME_INDEX(err_readonly_message_assignment)
+DIAG_NAME_INDEX(err_realimag_invalid_type)
+DIAG_NAME_INDEX(err_record_with_pointers_kernel_param)
+DIAG_NAME_INDEX(err_recursive_default_argument)
+DIAG_NAME_INDEX(err_recursive_superclass)
+DIAG_NAME_INDEX(err_redeclaration_different_type)
+DIAG_NAME_INDEX(err_redefinition)
+DIAG_NAME_INDEX(err_redefinition_different_kind)
+DIAG_NAME_INDEX(err_redefinition_different_namespace_alias)
+DIAG_NAME_INDEX(err_redefinition_different_type)
+DIAG_NAME_INDEX(err_redefinition_different_typedef)
+DIAG_NAME_INDEX(err_redefinition_extern_inline)
+DIAG_NAME_INDEX(err_redefinition_of_enumerator)
+DIAG_NAME_INDEX(err_redefinition_of_label)
+DIAG_NAME_INDEX(err_redefinition_variably_modified_typedef)
+DIAG_NAME_INDEX(err_ref_array_type)
+DIAG_NAME_INDEX(err_ref_bad_target)
+DIAG_NAME_INDEX(err_ref_bad_target_global_initializer)
+DIAG_NAME_INDEX(err_ref_flexarray_type)
+DIAG_NAME_INDEX(err_ref_init_ambiguous)
+DIAG_NAME_INDEX(err_ref_non_value)
+DIAG_NAME_INDEX(err_ref_qualifier_constructor)
+DIAG_NAME_INDEX(err_ref_qualifier_destructor)
+DIAG_NAME_INDEX(err_ref_qualifier_overload)
+DIAG_NAME_INDEX(err_ref_vm_type)
+DIAG_NAME_INDEX(err_refactor_code_outside_of_function)
+DIAG_NAME_INDEX(err_refactor_extract_prohibited_expression)
+DIAG_NAME_INDEX(err_refactor_extract_simple_expression)
+DIAG_NAME_INDEX(err_refactor_no_selection)
+DIAG_NAME_INDEX(err_refactor_selection_invalid_ast)
+DIAG_NAME_INDEX(err_refactor_selection_no_symbol)
+DIAG_NAME_INDEX(err_reference_bind_drops_quals)
+DIAG_NAME_INDEX(err_reference_bind_failed)
+DIAG_NAME_INDEX(err_reference_bind_init_list)
+DIAG_NAME_INDEX(err_reference_bind_to_bitfield)
+DIAG_NAME_INDEX(err_reference_bind_to_vector_element)
+DIAG_NAME_INDEX(err_reference_capture_with_reference_default)
+DIAG_NAME_INDEX(err_reference_has_multiple_inits)
+DIAG_NAME_INDEX(err_reference_pipe_type)
+DIAG_NAME_INDEX(err_reference_to_local_in_enclosing_context)
+DIAG_NAME_INDEX(err_reference_to_void)
+DIAG_NAME_INDEX(err_reference_var_requires_init)
+DIAG_NAME_INDEX(err_reference_without_init)
+DIAG_NAME_INDEX(err_regparm_mismatch)
+DIAG_NAME_INDEX(err_relocatable_without_isysroot)
+DIAG_NAME_INDEX(err_repeat_attribute)
+DIAG_NAME_INDEX(err_require_constant_init_failed)
+DIAG_NAME_INDEX(err_restricted_superclass_mismatch)
+DIAG_NAME_INDEX(err_ret_local_block)
+DIAG_NAME_INDEX(err_rethrow_used_outside_catch)
+DIAG_NAME_INDEX(err_return_block_has_expr)
+DIAG_NAME_INDEX(err_return_in_captured_stmt)
+DIAG_NAME_INDEX(err_return_in_constructor_handler)
+DIAG_NAME_INDEX(err_return_in_coroutine)
+DIAG_NAME_INDEX(err_return_init_list)
+DIAG_NAME_INDEX(err_right_angle_bracket_equal_needs_space)
+DIAG_NAME_INDEX(err_root_class_cannot_use_super)
+DIAG_NAME_INDEX(err_rref_in_exception_spec)
+DIAG_NAME_INDEX(err_sampler_argument_required)
+DIAG_NAME_INDEX(err_sampler_initializer_not_integer)
+DIAG_NAME_INDEX(err_scoped_enum_missing_identifier)
+DIAG_NAME_INDEX(err_second_argument_to_cwsc_not_pointer)
+DIAG_NAME_INDEX(err_second_parameter_to_va_arg_abstract)
+DIAG_NAME_INDEX(err_second_parameter_to_va_arg_incomplete)
+DIAG_NAME_INDEX(err_section_conflict)
+DIAG_NAME_INDEX(err_seh___except_block)
+DIAG_NAME_INDEX(err_seh___except_filter)
+DIAG_NAME_INDEX(err_seh___finally_block)
+DIAG_NAME_INDEX(err_seh_expected_handler)
+DIAG_NAME_INDEX(err_seh_in_a_coroutine_with_cxx_exceptions)
+DIAG_NAME_INDEX(err_seh_try_outside_functions)
+DIAG_NAME_INDEX(err_seh_try_unsupported)
+DIAG_NAME_INDEX(err_selected_explicit_constructor)
+DIAG_NAME_INDEX(err_selector_element_const_type)
+DIAG_NAME_INDEX(err_selector_element_not_lvalue)
+DIAG_NAME_INDEX(err_selector_element_type)
+DIAG_NAME_INDEX(err_setter_type_void)
+DIAG_NAME_INDEX(err_shared_var_init)
+DIAG_NAME_INDEX(err_shift_rhs_only_vector)
+DIAG_NAME_INDEX(err_shufflevector_argument_too_large)
+DIAG_NAME_INDEX(err_shufflevector_nonconstant_argument)
+DIAG_NAME_INDEX(err_single_decl_assign_in_for_range)
+DIAG_NAME_INDEX(err_sizeof_alignof_function_type)
+DIAG_NAME_INDEX(err_sizeof_alignof_incomplete_type)
+DIAG_NAME_INDEX(err_sizeof_alignof_typeof_bitfield)
+DIAG_NAME_INDEX(err_sizeof_nonfragile_interface)
+DIAG_NAME_INDEX(err_sizeof_pack_no_pack_name)
+DIAG_NAME_INDEX(err_sizeof_pack_no_pack_name_suggest)
+DIAG_NAME_INDEX(err_sizeof_parameter_pack)
+DIAG_NAME_INDEX(err_spaceship_argument_narrowing)
+DIAG_NAME_INDEX(err_spec_member_not_instantiated)
+DIAG_NAME_INDEX(err_specialization_after_instantiation)
+DIAG_NAME_INDEX(err_specialization_not_primary_template)
+DIAG_NAME_INDEX(err_specialize_member_of_template)
+DIAG_NAME_INDEX(err_standalone_class_nested_name_specifier)
+DIAG_NAME_INDEX(err_static_assert_expression_is_not_constant)
+DIAG_NAME_INDEX(err_static_assert_failed)
+DIAG_NAME_INDEX(err_static_assert_requirement_failed)
+DIAG_NAME_INDEX(err_static_block_func)
+DIAG_NAME_INDEX(err_static_data_member_not_allowed_in_anon_struct)
+DIAG_NAME_INDEX(err_static_data_member_not_allowed_in_local_class)
+DIAG_NAME_INDEX(err_static_data_member_reinitialization)
+DIAG_NAME_INDEX(err_static_downcast_via_virtual)
+DIAG_NAME_INDEX(err_static_function_scope)
+DIAG_NAME_INDEX(err_static_illegal_in_new)
+DIAG_NAME_INDEX(err_static_kernel)
+DIAG_NAME_INDEX(err_static_main)
+DIAG_NAME_INDEX(err_static_non_static)
+DIAG_NAME_INDEX(err_static_not_bitfield)
+DIAG_NAME_INDEX(err_static_out_of_line)
+DIAG_NAME_INDEX(err_static_overrides_virtual)
+DIAG_NAME_INDEX(err_statically_allocated_object)
+DIAG_NAME_INDEX(err_std_compare_type_not_supported)
+DIAG_NAME_INDEX(err_std_type_trait_not_class_template)
+DIAG_NAME_INDEX(err_stmt_attribute_invalid_on_decl)
+DIAG_NAME_INDEX(err_stmtexpr_file_scope)
+DIAG_NAME_INDEX(err_storage_class_for_static_member)
+DIAG_NAME_INDEX(err_storage_spec_on_catch_parm)
+DIAG_NAME_INDEX(err_storageclass_invalid_for_member)
+DIAG_NAME_INDEX(err_string_concat_mixed_suffix)
+DIAG_NAME_INDEX(err_strong_property)
+DIAG_NAME_INDEX(err_subscript_function_type)
+DIAG_NAME_INDEX(err_subscript_incomplete_type)
+DIAG_NAME_INDEX(err_subscript_nonfragile_interface)
+DIAG_NAME_INDEX(err_super_in_lambda_unsupported)
+DIAG_NAME_INDEX(err_super_in_using_declaration)
+DIAG_NAME_INDEX(err_swift_abi_parameter_wrong_type)
+DIAG_NAME_INDEX(err_swift_error_result_not_after_swift_context)
+DIAG_NAME_INDEX(err_swift_indirect_result_not_first)
+DIAG_NAME_INDEX(err_swift_param_attr_not_swiftcall)
+DIAG_NAME_INDEX(err_switch_explicit_conversion)
+DIAG_NAME_INDEX(err_switch_incomplete_class_type)
+DIAG_NAME_INDEX(err_switch_into_protected_scope)
+DIAG_NAME_INDEX(err_switch_multiple_conversions)
+DIAG_NAME_INDEX(err_synthesize_category_decl)
+DIAG_NAME_INDEX(err_synthesize_on_class_property)
+DIAG_NAME_INDEX(err_synthesize_variable_sized_ivar)
+DIAG_NAME_INDEX(err_synthesized_property_name)
+DIAG_NAME_INDEX(err_synthesizing_arc_weak_property_disabled)
+DIAG_NAME_INDEX(err_synthesizing_arc_weak_property_no_runtime)
+DIAG_NAME_INDEX(err_systemz_invalid_tabort_code)
+DIAG_NAME_INDEX(err_tag_definition_of_typedef)
+DIAG_NAME_INDEX(err_tag_index_out_of_range)
+DIAG_NAME_INDEX(err_tag_reference_conflict)
+DIAG_NAME_INDEX(err_tag_reference_non_tag)
+DIAG_NAME_INDEX(err_tagless_friend_type_template)
+DIAG_NAME_INDEX(err_target_unknown_abi)
+DIAG_NAME_INDEX(err_target_unknown_cpu)
+DIAG_NAME_INDEX(err_target_unknown_fpmath)
+DIAG_NAME_INDEX(err_target_unknown_triple)
+DIAG_NAME_INDEX(err_target_unsupported_abi)
+DIAG_NAME_INDEX(err_target_unsupported_abi_for_triple)
+DIAG_NAME_INDEX(err_target_unsupported_arch)
+DIAG_NAME_INDEX(err_target_unsupported_cpu_for_micromips)
+DIAG_NAME_INDEX(err_target_unsupported_execute_only)
+DIAG_NAME_INDEX(err_target_unsupported_fpmath)
+DIAG_NAME_INDEX(err_target_unsupported_unaligned)
+DIAG_NAME_INDEX(err_temp_copy_ambiguous)
+DIAG_NAME_INDEX(err_temp_copy_deleted)
+DIAG_NAME_INDEX(err_temp_copy_incomplete)
+DIAG_NAME_INDEX(err_temp_copy_no_viable)
+DIAG_NAME_INDEX(err_template_arg_address_of_non_pointer)
+DIAG_NAME_INDEX(err_template_arg_deduced_incomplete_pack)
+DIAG_NAME_INDEX(err_template_arg_field)
+DIAG_NAME_INDEX(err_template_arg_list_different_arity)
+DIAG_NAME_INDEX(err_template_arg_member_ptr_base_derived_not_supported)
+DIAG_NAME_INDEX(err_template_arg_method)
+DIAG_NAME_INDEX(err_template_arg_must_be_expr)
+DIAG_NAME_INDEX(err_template_arg_must_be_template)
+DIAG_NAME_INDEX(err_template_arg_must_be_type)
+DIAG_NAME_INDEX(err_template_arg_must_be_type_suggest)
+DIAG_NAME_INDEX(err_template_arg_no_ref_bind)
+DIAG_NAME_INDEX(err_template_arg_nontype_ambig)
+DIAG_NAME_INDEX(err_template_arg_not_address_constant)
+DIAG_NAME_INDEX(err_template_arg_not_address_of)
+DIAG_NAME_INDEX(err_template_arg_not_convertible)
+DIAG_NAME_INDEX(err_template_arg_not_decl_ref)
+DIAG_NAME_INDEX(err_template_arg_not_ice)
+DIAG_NAME_INDEX(err_template_arg_not_integral_or_enumeral)
+DIAG_NAME_INDEX(err_template_arg_not_object_or_func)
+DIAG_NAME_INDEX(err_template_arg_not_pointer_to_member_form)
+DIAG_NAME_INDEX(err_template_arg_not_valid_template)
+DIAG_NAME_INDEX(err_template_arg_object_no_linkage)
+DIAG_NAME_INDEX(err_template_arg_overload_type)
+DIAG_NAME_INDEX(err_template_arg_ref_bind_ignores_quals)
+DIAG_NAME_INDEX(err_template_arg_reference_var)
+DIAG_NAME_INDEX(err_template_arg_template_params_mismatch)
+DIAG_NAME_INDEX(err_template_arg_thread_local)
+DIAG_NAME_INDEX(err_template_arg_untyped_null_constant)
+DIAG_NAME_INDEX(err_template_arg_wrongtype_null_constant)
+DIAG_NAME_INDEX(err_template_defn_explicit_instantiation)
+DIAG_NAME_INDEX(err_template_different_associated_constraints)
+DIAG_NAME_INDEX(err_template_id_not_a_type)
+DIAG_NAME_INDEX(err_template_inside_local_class)
+DIAG_NAME_INDEX(err_template_instantiate_undefined)
+DIAG_NAME_INDEX(err_template_instantiate_within_definition)
+DIAG_NAME_INDEX(err_template_kw_missing)
+DIAG_NAME_INDEX(err_template_kw_refers_to_class_template)
+DIAG_NAME_INDEX(err_template_kw_refers_to_non_template)
+DIAG_NAME_INDEX(err_template_linkage)
+DIAG_NAME_INDEX(err_template_member)
+DIAG_NAME_INDEX(err_template_member_noparams)
+DIAG_NAME_INDEX(err_template_missing_args)
+DIAG_NAME_INDEX(err_template_nontype_parm_bad_type)
+DIAG_NAME_INDEX(err_template_nontype_parm_different_type)
+DIAG_NAME_INDEX(err_template_outside_namespace_or_class_scope)
+DIAG_NAME_INDEX(err_template_param_default_arg_missing)
+DIAG_NAME_INDEX(err_template_param_default_arg_redefinition)
+DIAG_NAME_INDEX(err_template_param_different_kind)
+DIAG_NAME_INDEX(err_template_param_list_different_arity)
+DIAG_NAME_INDEX(err_template_param_list_matches_nontemplate)
+DIAG_NAME_INDEX(err_template_param_pack_default_arg)
+DIAG_NAME_INDEX(err_template_param_pack_must_be_last_template_parameter)
+DIAG_NAME_INDEX(err_template_param_shadow)
+DIAG_NAME_INDEX(err_template_parameter_default_friend_template)
+DIAG_NAME_INDEX(err_template_parameter_default_template_member)
+DIAG_NAME_INDEX(err_template_parameter_pack_non_pack)
+DIAG_NAME_INDEX(err_template_qualified_declarator_no_match)
+DIAG_NAME_INDEX(err_template_recursion_depth_exceeded)
+DIAG_NAME_INDEX(err_template_spec_decl_friend)
+DIAG_NAME_INDEX(err_template_spec_decl_function_scope)
+DIAG_NAME_INDEX(err_template_spec_default_arg)
+DIAG_NAME_INDEX(err_template_spec_extra_headers)
+DIAG_NAME_INDEX(err_template_spec_friend)
+DIAG_NAME_INDEX(err_template_spec_needs_header)
+DIAG_NAME_INDEX(err_template_spec_needs_template_parameters)
+DIAG_NAME_INDEX(err_template_spec_redecl_global_scope)
+DIAG_NAME_INDEX(err_template_spec_redecl_out_of_scope)
+DIAG_NAME_INDEX(err_template_spec_syntax_non_template)
+DIAG_NAME_INDEX(err_template_spec_unknown_kind)
+DIAG_NAME_INDEX(err_template_tag_noparams)
+DIAG_NAME_INDEX(err_template_template_parm_no_parms)
+DIAG_NAME_INDEX(err_template_typedef)
+DIAG_NAME_INDEX(err_template_unnamed_class)
+DIAG_NAME_INDEX(err_template_variable_noparams)
+DIAG_NAME_INDEX(err_templated_invalid_declaration)
+DIAG_NAME_INDEX(err_templated_using_directive_declaration)
+DIAG_NAME_INDEX(err_tentative_def_incomplete_type)
+DIAG_NAME_INDEX(err_test_module_file_extension_format)
+DIAG_NAME_INDEX(err_test_module_file_extension_version)
+DIAG_NAME_INDEX(err_this_capture)
+DIAG_NAME_INDEX(err_this_captured_by_reference)
+DIAG_NAME_INDEX(err_this_static_member_func)
+DIAG_NAME_INDEX(err_thread_dynamic_init)
+DIAG_NAME_INDEX(err_thread_non_global)
+DIAG_NAME_INDEX(err_thread_non_thread)
+DIAG_NAME_INDEX(err_thread_nontrivial_dtor)
+DIAG_NAME_INDEX(err_thread_thread_different_kind)
+DIAG_NAME_INDEX(err_thread_unsupported)
+DIAG_NAME_INDEX(err_throw_abstract_type)
+DIAG_NAME_INDEX(err_throw_incomplete)
+DIAG_NAME_INDEX(err_throw_incomplete_ptr)
+DIAG_NAME_INDEX(err_tls_var_aligned_over_maximum)
+DIAG_NAME_INDEX(err_too_few_args_in_macro_invoc)
+DIAG_NAME_INDEX(err_too_large_for_fixed_point)
+DIAG_NAME_INDEX(err_too_many_args_in_macro_invoc)
+DIAG_NAME_INDEX(err_toomany_element_decls)
+DIAG_NAME_INDEX(err_trailing_return_in_parens)
+DIAG_NAME_INDEX(err_trailing_return_without_auto)
+DIAG_NAME_INDEX(err_two_right_angle_brackets_need_space)
+DIAG_NAME_INDEX(err_type_defined_in_alias_template)
+DIAG_NAME_INDEX(err_type_defined_in_condition)
+DIAG_NAME_INDEX(err_type_defined_in_enum)
+DIAG_NAME_INDEX(err_type_defined_in_for_range)
+DIAG_NAME_INDEX(err_type_defined_in_param_type)
+DIAG_NAME_INDEX(err_type_defined_in_result_type)
+DIAG_NAME_INDEX(err_type_defined_in_type_specifier)
+DIAG_NAME_INDEX(err_type_mismatch_continuation_class)
+DIAG_NAME_INDEX(err_type_pack_element_out_of_bounds)
+DIAG_NAME_INDEX(err_type_safety_unknown_flag)
+DIAG_NAME_INDEX(err_type_tag_for_datatype_not_ice)
+DIAG_NAME_INDEX(err_type_tag_for_datatype_too_large)
+DIAG_NAME_INDEX(err_type_trait_arity)
+DIAG_NAME_INDEX(err_type_unsupported)
+DIAG_NAME_INDEX(err_typecheck_address_of)
+DIAG_NAME_INDEX(err_typecheck_addrof_dtor)
+DIAG_NAME_INDEX(err_typecheck_addrof_temporary)
+DIAG_NAME_INDEX(err_typecheck_ambiguous_condition)
+DIAG_NAME_INDEX(err_typecheck_arc_assign_externally_retained)
+DIAG_NAME_INDEX(err_typecheck_arc_assign_self)
+DIAG_NAME_INDEX(err_typecheck_arc_assign_self_class_method)
+DIAG_NAME_INDEX(err_typecheck_arithmetic_incomplete_type)
+DIAG_NAME_INDEX(err_typecheck_arr_assign_enumeration)
+DIAG_NAME_INDEX(err_typecheck_array_not_modifiable_lvalue)
+DIAG_NAME_INDEX(err_typecheck_assign_const)
+DIAG_NAME_INDEX(err_typecheck_bool_condition)
+DIAG_NAME_INDEX(err_typecheck_call_invalid_ordered_compare)
+DIAG_NAME_INDEX(err_typecheck_call_invalid_unary_fp)
+DIAG_NAME_INDEX(err_typecheck_call_not_function)
+DIAG_NAME_INDEX(err_typecheck_call_too_few_args)
+DIAG_NAME_INDEX(err_typecheck_call_too_few_args_at_least)
+DIAG_NAME_INDEX(err_typecheck_call_too_few_args_at_least_one)
+DIAG_NAME_INDEX(err_typecheck_call_too_few_args_at_least_suggest)
+DIAG_NAME_INDEX(err_typecheck_call_too_few_args_one)
+DIAG_NAME_INDEX(err_typecheck_call_too_few_args_suggest)
+DIAG_NAME_INDEX(err_typecheck_call_too_many_args)
+DIAG_NAME_INDEX(err_typecheck_call_too_many_args_at_most)
+DIAG_NAME_INDEX(err_typecheck_call_too_many_args_at_most_one)
+DIAG_NAME_INDEX(err_typecheck_call_too_many_args_at_most_suggest)
+DIAG_NAME_INDEX(err_typecheck_call_too_many_args_one)
+DIAG_NAME_INDEX(err_typecheck_call_too_many_args_suggest)
+DIAG_NAME_INDEX(err_typecheck_cast_to_incomplete)
+DIAG_NAME_INDEX(err_typecheck_cast_to_union_no_type)
+DIAG_NAME_INDEX(err_typecheck_choose_expr_requires_constant)
+DIAG_NAME_INDEX(err_typecheck_comparison_of_distinct_blocks)
+DIAG_NAME_INDEX(err_typecheck_comparison_of_distinct_pointers)
+DIAG_NAME_INDEX(err_typecheck_comparison_of_fptr_to_void)
+DIAG_NAME_INDEX(err_typecheck_comparison_of_pointer_integer)
+DIAG_NAME_INDEX(err_typecheck_cond_expect_int_float)
+DIAG_NAME_INDEX(err_typecheck_cond_expect_nonfloat)
+DIAG_NAME_INDEX(err_typecheck_cond_expect_scalar)
+DIAG_NAME_INDEX(err_typecheck_cond_incompatible_operands)
+DIAG_NAME_INDEX(err_typecheck_cond_incompatible_operands_null)
+DIAG_NAME_INDEX(err_typecheck_convert_incompatible)
+DIAG_NAME_INDEX(err_typecheck_convert_incompatible_block_pointer)
+DIAG_NAME_INDEX(err_typecheck_converted_constant_expression)
+DIAG_NAME_INDEX(err_typecheck_converted_constant_expression_disallowed)
+DIAG_NAME_INDEX(err_typecheck_converted_constant_expression_indirect)
+DIAG_NAME_INDEX(err_typecheck_decl_incomplete_type)
+DIAG_NAME_INDEX(err_typecheck_deleted_function)
+DIAG_NAME_INDEX(err_typecheck_duplicate_vector_components_not_mlvalue)
+DIAG_NAME_INDEX(err_typecheck_expect_int)
+DIAG_NAME_INDEX(err_typecheck_expect_scalar_operand)
+DIAG_NAME_INDEX(err_typecheck_expression_not_modifiable_lvalue)
+DIAG_NAME_INDEX(err_typecheck_field_variable_size)
+DIAG_NAME_INDEX(err_typecheck_illegal_increment_decrement)
+DIAG_NAME_INDEX(err_typecheck_incompatible_address_space)
+DIAG_NAME_INDEX(err_typecheck_incompatible_ownership)
+DIAG_NAME_INDEX(err_typecheck_incomplete_array_needs_initializer)
+DIAG_NAME_INDEX(err_typecheck_incomplete_tag)
+DIAG_NAME_INDEX(err_typecheck_incomplete_type_not_modifiable_lvalue)
+DIAG_NAME_INDEX(err_typecheck_indirection_requires_pointer)
+DIAG_NAME_INDEX(err_typecheck_invalid_lvalue_addrof)
+DIAG_NAME_INDEX(err_typecheck_invalid_lvalue_addrof_addrof_function)
+DIAG_NAME_INDEX(err_typecheck_invalid_operands)
+DIAG_NAME_INDEX(err_typecheck_invalid_restrict_invalid_pointee)
+DIAG_NAME_INDEX(err_typecheck_invalid_restrict_not_pointer)
+DIAG_NAME_INDEX(err_typecheck_invalid_restrict_not_pointer_noarg)
+DIAG_NAME_INDEX(err_typecheck_ivar_variable_size)
+DIAG_NAME_INDEX(err_typecheck_logical_vector_expr_gnu_cpp_restrict)
+DIAG_NAME_INDEX(err_typecheck_lvalue_casts_not_supported)
+DIAG_NAME_INDEX(err_typecheck_member_reference_arrow)
+DIAG_NAME_INDEX(err_typecheck_member_reference_ivar)
+DIAG_NAME_INDEX(err_typecheck_member_reference_ivar_suggest)
+DIAG_NAME_INDEX(err_typecheck_member_reference_struct_union)
+DIAG_NAME_INDEX(err_typecheck_member_reference_suggestion)
+DIAG_NAME_INDEX(err_typecheck_member_reference_type)
+DIAG_NAME_INDEX(err_typecheck_member_reference_unknown)
+DIAG_NAME_INDEX(err_typecheck_missing_return_type_incompatible)
+DIAG_NAME_INDEX(err_typecheck_negative_array_size)
+DIAG_NAME_INDEX(err_typecheck_non_object_not_modifiable_lvalue)
+DIAG_NAME_INDEX(err_typecheck_nonviable_condition)
+DIAG_NAME_INDEX(err_typecheck_nonviable_condition_incomplete)
+DIAG_NAME_INDEX(err_typecheck_op_on_nonoverlapping_address_space_pointers)
+DIAG_NAME_INDEX(err_typecheck_ordered_comparison_of_pointer_and_zero)
+DIAG_NAME_INDEX(err_typecheck_pointer_arith_function_type)
+DIAG_NAME_INDEX(err_typecheck_pointer_arith_void_type)
+DIAG_NAME_INDEX(err_typecheck_sclass_fscope)
+DIAG_NAME_INDEX(err_typecheck_sclass_func)
+DIAG_NAME_INDEX(err_typecheck_statement_requires_integer)
+DIAG_NAME_INDEX(err_typecheck_statement_requires_scalar)
+DIAG_NAME_INDEX(err_typecheck_sub_ptr_compatible)
+DIAG_NAME_INDEX(err_typecheck_subscript_not_integer)
+DIAG_NAME_INDEX(err_typecheck_subscript_value)
+DIAG_NAME_INDEX(err_typecheck_unary_expr)
+DIAG_NAME_INDEX(err_typecheck_vector_lengths_not_equal)
+DIAG_NAME_INDEX(err_typecheck_vector_not_convertable)
+DIAG_NAME_INDEX(err_typecheck_vector_not_convertable_implict_truncation)
+DIAG_NAME_INDEX(err_typecheck_vector_not_convertable_non_scalar)
+DIAG_NAME_INDEX(err_typecheck_zero_array_size)
+DIAG_NAME_INDEX(err_typedef_changes_linkage)
+DIAG_NAME_INDEX(err_typedef_not_bitfield)
+DIAG_NAME_INDEX(err_typedef_not_identifier)
+DIAG_NAME_INDEX(err_typename_identifiers_only)
+DIAG_NAME_INDEX(err_typename_invalid_constexpr)
+DIAG_NAME_INDEX(err_typename_invalid_functionspec)
+DIAG_NAME_INDEX(err_typename_invalid_storageclass)
+DIAG_NAME_INDEX(err_typename_missing)
+DIAG_NAME_INDEX(err_typename_missing_template)
+DIAG_NAME_INDEX(err_typename_nested_not_found)
+DIAG_NAME_INDEX(err_typename_nested_not_found_enable_if)
+DIAG_NAME_INDEX(err_typename_nested_not_found_requirement)
+DIAG_NAME_INDEX(err_typename_nested_not_type)
+DIAG_NAME_INDEX(err_typename_refers_to_non_type_template)
+DIAG_NAME_INDEX(err_typename_refers_to_using_value_decl)
+DIAG_NAME_INDEX(err_typename_requires_specqual)
+DIAG_NAME_INDEX(err_ucn_control_character)
+DIAG_NAME_INDEX(err_ucn_escape_basic_scs)
+DIAG_NAME_INDEX(err_ucn_escape_incomplete)
+DIAG_NAME_INDEX(err_ucn_escape_invalid)
+DIAG_NAME_INDEX(err_unable_to_make_temp)
+DIAG_NAME_INDEX(err_unable_to_rename_temp)
+DIAG_NAME_INDEX(err_unavailable)
+DIAG_NAME_INDEX(err_unavailable_in_arc)
+DIAG_NAME_INDEX(err_unavailable_message)
+DIAG_NAME_INDEX(err_uncasted_call_of_unknown_any)
+DIAG_NAME_INDEX(err_uncasted_send_to_unknown_any_method)
+DIAG_NAME_INDEX(err_uncasted_use_of_unknown_any)
+DIAG_NAME_INDEX(err_undeclared_boxing_method)
+DIAG_NAME_INDEX(err_undeclared_label_use)
+DIAG_NAME_INDEX(err_undeclared_objc_literal_class)
+DIAG_NAME_INDEX(err_undeclared_protocol)
+DIAG_NAME_INDEX(err_undeclared_protocol_suggest)
+DIAG_NAME_INDEX(err_undeclared_use)
+DIAG_NAME_INDEX(err_undeclared_use_of_module)
+DIAG_NAME_INDEX(err_undeclared_use_suggest)
+DIAG_NAME_INDEX(err_undeclared_var_use)
+DIAG_NAME_INDEX(err_undeclared_var_use_suggest)
+DIAG_NAME_INDEX(err_undef_interface)
+DIAG_NAME_INDEX(err_undef_interface_suggest)
+DIAG_NAME_INDEX(err_undef_superclass)
+DIAG_NAME_INDEX(err_undef_superclass_suggest)
+DIAG_NAME_INDEX(err_undefined_inline_var)
+DIAG_NAME_INDEX(err_undefined_internal_type)
+DIAG_NAME_INDEX(err_underlying_type_of_incomplete_enum)
+DIAG_NAME_INDEX(err_unexpanded_parameter_pack)
+DIAG_NAME_INDEX(err_unexpected_at)
+DIAG_NAME_INDEX(err_unexpected_colon_in_nested_name_spec)
+DIAG_NAME_INDEX(err_unexpected_friend)
+DIAG_NAME_INDEX(err_unexpected_interface)
+DIAG_NAME_INDEX(err_unexpected_module_decl)
+DIAG_NAME_INDEX(err_unexpected_namespace)
+DIAG_NAME_INDEX(err_unexpected_namespace_attributes_alias)
+DIAG_NAME_INDEX(err_unexpected_nested_namespace_attribute)
+DIAG_NAME_INDEX(err_unexpected_protocol_qualifier)
+DIAG_NAME_INDEX(err_unexpected_scope_on_base_decltype)
+DIAG_NAME_INDEX(err_unexpected_semi)
+DIAG_NAME_INDEX(err_unexpected_template_in_unqualified_id)
+DIAG_NAME_INDEX(err_unexpected_token_in_nested_name_spec)
+DIAG_NAME_INDEX(err_unexpected_typedef)
+DIAG_NAME_INDEX(err_unexpected_typedef_ident)
+DIAG_NAME_INDEX(err_unexpected_unqualified_id)
+DIAG_NAME_INDEX(err_unimplemented_conversion_with_fixed_point_type)
+DIAG_NAME_INDEX(err_uninitialized_member_for_assign)
+DIAG_NAME_INDEX(err_uninitialized_member_in_ctor)
+DIAG_NAME_INDEX(err_union_as_base_class)
+DIAG_NAME_INDEX(err_union_member_of_reference_type)
+DIAG_NAME_INDEX(err_unknown_analyzer_checker)
+DIAG_NAME_INDEX(err_unknown_any_addrof)
+DIAG_NAME_INDEX(err_unknown_any_addrof_call)
+DIAG_NAME_INDEX(err_unknown_any_function)
+DIAG_NAME_INDEX(err_unknown_any_var_function_type)
+DIAG_NAME_INDEX(err_unknown_nested_typename_suggest)
+DIAG_NAME_INDEX(err_unknown_receiver_suggest)
+DIAG_NAME_INDEX(err_unknown_template_name)
+DIAG_NAME_INDEX(err_unknown_type_or_class_name_suggest)
+DIAG_NAME_INDEX(err_unknown_typename)
+DIAG_NAME_INDEX(err_unknown_typename_suggest)
+DIAG_NAME_INDEX(err_unqualified_pointer_member_function)
+DIAG_NAME_INDEX(err_unspecified_size_with_static)
+DIAG_NAME_INDEX(err_unspecified_vla_size_with_static)
+DIAG_NAME_INDEX(err_unsupported_abi_for_opt)
+DIAG_NAME_INDEX(err_unsupported_ast_node)
+DIAG_NAME_INDEX(err_unsupported_bom)
+DIAG_NAME_INDEX(err_unsupported_string_concat)
+DIAG_NAME_INDEX(err_unsupported_unknown_any_call)
+DIAG_NAME_INDEX(err_unsupported_unknown_any_decl)
+DIAG_NAME_INDEX(err_unsupported_unknown_any_expr)
+DIAG_NAME_INDEX(err_unterm_macro_invoc)
+DIAG_NAME_INDEX(err_unterminated___pragma)
+DIAG_NAME_INDEX(err_unterminated_block_comment)
+DIAG_NAME_INDEX(err_unterminated_raw_string)
+DIAG_NAME_INDEX(err_upcast_to_inaccessible_base)
+DIAG_NAME_INDEX(err_use_continuation_class)
+DIAG_NAME_INDEX(err_use_continuation_class_redeclaration_readwrite)
+DIAG_NAME_INDEX(err_use_of_default_argument_to_function_declared_later)
+DIAG_NAME_INDEX(err_use_of_tag_name_without_tag)
+DIAG_NAME_INDEX(err_use_with_wrong_tag)
+DIAG_NAME_INDEX(err_using_attribute_ns_conflict)
+DIAG_NAME_INDEX(err_using_decl_can_not_refer_to_class_member)
+DIAG_NAME_INDEX(err_using_decl_can_not_refer_to_namespace)
+DIAG_NAME_INDEX(err_using_decl_can_not_refer_to_scoped_enum)
+DIAG_NAME_INDEX(err_using_decl_conflict)
+DIAG_NAME_INDEX(err_using_decl_conflict_reverse)
+DIAG_NAME_INDEX(err_using_decl_constructor)
+DIAG_NAME_INDEX(err_using_decl_constructor_not_in_direct_base)
+DIAG_NAME_INDEX(err_using_decl_destructor)
+DIAG_NAME_INDEX(err_using_decl_friend)
+DIAG_NAME_INDEX(err_using_decl_nested_name_specifier_is_current_class)
+DIAG_NAME_INDEX(err_using_decl_nested_name_specifier_is_not_base_class)
+DIAG_NAME_INDEX(err_using_decl_nested_name_specifier_is_not_class)
+DIAG_NAME_INDEX(err_using_decl_redeclaration)
+DIAG_NAME_INDEX(err_using_decl_redeclaration_expansion)
+DIAG_NAME_INDEX(err_using_decl_template_id)
+DIAG_NAME_INDEX(err_using_dependent_value_is_type)
+DIAG_NAME_INDEX(err_using_directive_member_suggest)
+DIAG_NAME_INDEX(err_using_directive_suggest)
+DIAG_NAME_INDEX(err_using_namespace_in_class)
+DIAG_NAME_INDEX(err_using_pack_expansion_empty)
+DIAG_NAME_INDEX(err_using_requires_qualname)
+DIAG_NAME_INDEX(err_using_typename_non_type)
+DIAG_NAME_INDEX(err_uuidof_with_multiple_guids)
+DIAG_NAME_INDEX(err_uuidof_without_guid)
+DIAG_NAME_INDEX(err_va_arg_in_device)
+DIAG_NAME_INDEX(err_va_start_captured_stmt)
+DIAG_NAME_INDEX(err_va_start_fixed_function)
+DIAG_NAME_INDEX(err_va_start_outside_function)
+DIAG_NAME_INDEX(err_va_start_used_in_wrong_abi_function)
+DIAG_NAME_INDEX(err_value_init_for_array_type)
+DIAG_NAME_INDEX(err_vaopt_paste_at_end)
+DIAG_NAME_INDEX(err_vaopt_paste_at_start)
+DIAG_NAME_INDEX(err_var_concept_not_initialized)
+DIAG_NAME_INDEX(err_var_partial_spec_redeclared)
+DIAG_NAME_INDEX(err_var_spec_no_template)
+DIAG_NAME_INDEX(err_var_spec_no_template_but_method)
+DIAG_NAME_INDEX(err_variable_concept_bool_decl)
+DIAG_NAME_INDEX(err_variable_instantiates_to_function)
+DIAG_NAME_INDEX(err_variable_object_no_init)
+DIAG_NAME_INDEX(err_variably_modified_new_type)
+DIAG_NAME_INDEX(err_variably_modified_nontype_template_param)
+DIAG_NAME_INDEX(err_variably_modified_template_arg)
+DIAG_NAME_INDEX(err_variably_modified_typeid)
+DIAG_NAME_INDEX(err_variadic_device_fn)
+DIAG_NAME_INDEX(err_vec_builtin_incompatible_vector)
+DIAG_NAME_INDEX(err_vec_builtin_non_vector)
+DIAG_NAME_INDEX(err_vecstep_non_scalar_vector_type)
+DIAG_NAME_INDEX(err_vector_incorrect_num_initializers)
+DIAG_NAME_INDEX(err_verify_inconsistent_diags)
+DIAG_NAME_INDEX(err_verify_invalid_content)
+DIAG_NAME_INDEX(err_verify_invalid_no_diags)
+DIAG_NAME_INDEX(err_verify_invalid_range)
+DIAG_NAME_INDEX(err_verify_missing_end)
+DIAG_NAME_INDEX(err_verify_missing_file)
+DIAG_NAME_INDEX(err_verify_missing_line)
+DIAG_NAME_INDEX(err_verify_missing_regex)
+DIAG_NAME_INDEX(err_verify_missing_start)
+DIAG_NAME_INDEX(err_verify_no_directives)
+DIAG_NAME_INDEX(err_vftable_ambiguous_component)
+DIAG_NAME_INDEX(err_virtual_in_union)
+DIAG_NAME_INDEX(err_virtual_member_function_template)
+DIAG_NAME_INDEX(err_virtual_non_function)
+DIAG_NAME_INDEX(err_virtual_out_of_class)
+DIAG_NAME_INDEX(err_vla_decl_has_extern_linkage)
+DIAG_NAME_INDEX(err_vla_decl_has_static_storage)
+DIAG_NAME_INDEX(err_vla_decl_in_file_scope)
+DIAG_NAME_INDEX(err_vla_in_sfinae)
+DIAG_NAME_INDEX(err_vla_unsupported)
+DIAG_NAME_INDEX(err_vm_decl_has_extern_linkage)
+DIAG_NAME_INDEX(err_vm_decl_in_file_scope)
+DIAG_NAME_INDEX(err_vm_func_decl)
+DIAG_NAME_INDEX(err_void_only_param)
+DIAG_NAME_INDEX(err_void_param_qualified)
+DIAG_NAME_INDEX(err_vsx_builtin_nonconstant_argument)
+DIAG_NAME_INDEX(err_weak_property)
+DIAG_NAME_INDEX(err_wrong_sampler_addressspace)
+DIAG_NAME_INDEX(err_x86_builtin_invalid_rounding)
+DIAG_NAME_INDEX(err_x86_builtin_invalid_scale)
+DIAG_NAME_INDEX(err_zero_version)
+DIAG_NAME_INDEX(error_inoutput_conflict_with_clobber)
+DIAG_NAME_INDEX(escaped_newline_block_comment_end)
+DIAG_NAME_INDEX(ext_abstract_pack_declarator_parens)
+DIAG_NAME_INDEX(ext_aggregate_init_not_constant)
+DIAG_NAME_INDEX(ext_alias_declaration)
+DIAG_NAME_INDEX(ext_alignof_expr)
+DIAG_NAME_INDEX(ext_anonymous_record_with_anonymous_type)
+DIAG_NAME_INDEX(ext_anonymous_record_with_type)
+DIAG_NAME_INDEX(ext_anonymous_struct_union_qualified)
+DIAG_NAME_INDEX(ext_anonymous_union)
+DIAG_NAME_INDEX(ext_array_init_copy)
+DIAG_NAME_INDEX(ext_array_init_parens)
+DIAG_NAME_INDEX(ext_array_size_conversion)
+DIAG_NAME_INDEX(ext_auto_new_list_init)
+DIAG_NAME_INDEX(ext_auto_storage_class)
+DIAG_NAME_INDEX(ext_auto_type)
+DIAG_NAME_INDEX(ext_auto_type_specifier)
+DIAG_NAME_INDEX(ext_bad_cxx_cast_qualifiers_away_incoherent)
+DIAG_NAME_INDEX(ext_binary_literal)
+DIAG_NAME_INDEX(ext_binary_literal_cxx14)
+DIAG_NAME_INDEX(ext_bitfield_member_init)
+DIAG_NAME_INDEX(ext_c11_alignment)
+DIAG_NAME_INDEX(ext_c11_anonymous_struct)
+DIAG_NAME_INDEX(ext_c11_generic_selection)
+DIAG_NAME_INDEX(ext_c11_noreturn)
+DIAG_NAME_INDEX(ext_c11_static_assert)
+DIAG_NAME_INDEX(ext_c99_array_usage)
+DIAG_NAME_INDEX(ext_c99_compound_literal)
+DIAG_NAME_INDEX(ext_c99_flexible_array_member)
+DIAG_NAME_INDEX(ext_c99_longlong)
+DIAG_NAME_INDEX(ext_c99_variable_decl_in_for_loop)
+DIAG_NAME_INDEX(ext_c99_whitespace_required_after_macro_name)
+DIAG_NAME_INDEX(ext_cannot_use_trivial_abi)
+DIAG_NAME_INDEX(ext_cast_fn_obj)
+DIAG_NAME_INDEX(ext_cce_narrowing)
+DIAG_NAME_INDEX(ext_charize_microsoft)
+DIAG_NAME_INDEX(ext_clang_c_enum_fixed_underlying_type)
+DIAG_NAME_INDEX(ext_clang_diagnose_if)
+DIAG_NAME_INDEX(ext_clang_enable_if)
+DIAG_NAME_INDEX(ext_comment_paste_microsoft)
+DIAG_NAME_INDEX(ext_complex_component_init)
+DIAG_NAME_INDEX(ext_constexpr_body_invalid_stmt)
+DIAG_NAME_INDEX(ext_constexpr_body_invalid_stmt_cxx2a)
+DIAG_NAME_INDEX(ext_constexpr_body_multiple_return)
+DIAG_NAME_INDEX(ext_constexpr_function_never_constant_expr)
+DIAG_NAME_INDEX(ext_constexpr_function_try_block_cxx2a)
+DIAG_NAME_INDEX(ext_constexpr_if)
+DIAG_NAME_INDEX(ext_constexpr_local_var)
+DIAG_NAME_INDEX(ext_constexpr_on_lambda_cxx17)
+DIAG_NAME_INDEX(ext_constexpr_type_definition)
+DIAG_NAME_INDEX(ext_ctrl_z_eof_microsoft)
+DIAG_NAME_INDEX(ext_cxx11_enum_fixed_underlying_type)
+DIAG_NAME_INDEX(ext_cxx11_longlong)
+DIAG_NAME_INDEX(ext_cxx14_attr)
+DIAG_NAME_INDEX(ext_cxx17_attr)
+DIAG_NAME_INDEX(ext_decltype_auto_type_specifier)
+DIAG_NAME_INDEX(ext_decomp_decl)
+DIAG_NAME_INDEX(ext_decomp_decl_cond)
+DIAG_NAME_INDEX(ext_decomp_decl_empty)
+DIAG_NAME_INDEX(ext_default_init_const)
+DIAG_NAME_INDEX(ext_defaulted_deleted_function)
+DIAG_NAME_INDEX(ext_delete_void_ptr_operand)
+DIAG_NAME_INDEX(ext_deprecated_string_literal_conversion)
+DIAG_NAME_INDEX(ext_designated_init)
+DIAG_NAME_INDEX(ext_dollar_in_identifier)
+DIAG_NAME_INDEX(ext_duplicate_declspec)
+DIAG_NAME_INDEX(ext_dynamic_exception_spec)
+DIAG_NAME_INDEX(ext_ellipsis_exception_spec)
+DIAG_NAME_INDEX(ext_embedded_directive)
+DIAG_NAME_INDEX(ext_empty_character)
+DIAG_NAME_INDEX(ext_empty_fnmacro_arg)
+DIAG_NAME_INDEX(ext_empty_struct_union)
+DIAG_NAME_INDEX(ext_empty_translation_unit)
+DIAG_NAME_INDEX(ext_enum_friend)
+DIAG_NAME_INDEX(ext_enum_too_large)
+DIAG_NAME_INDEX(ext_enum_value_not_int)
+DIAG_NAME_INDEX(ext_enumerator_increment_too_large)
+DIAG_NAME_INDEX(ext_enumerator_list_comma_c)
+DIAG_NAME_INDEX(ext_enumerator_list_comma_cxx)
+DIAG_NAME_INDEX(ext_enumerator_too_large)
+DIAG_NAME_INDEX(ext_equals_this_lambda_capture_cxx2a)
+DIAG_NAME_INDEX(ext_equivalent_internal_linkage_decl_in_modules)
+DIAG_NAME_INDEX(ext_excess_initializers)
+DIAG_NAME_INDEX(ext_excess_initializers_in_char_array_initializer)
+DIAG_NAME_INDEX(ext_expected_semi_decl_list)
+DIAG_NAME_INDEX(ext_explicit_conversion_functions)
+DIAG_NAME_INDEX(ext_explicit_instantiation_duplicate)
+DIAG_NAME_INDEX(ext_explicit_instantiation_without_qualified_id)
+DIAG_NAME_INDEX(ext_explicit_specialization_storage_class)
+DIAG_NAME_INDEX(ext_expr_not_ice)
+DIAG_NAME_INDEX(ext_extern_template)
+DIAG_NAME_INDEX(ext_extra_semi)
+DIAG_NAME_INDEX(ext_extra_semi_cxx11)
+DIAG_NAME_INDEX(ext_flexible_array_empty_aggregate_gnu)
+DIAG_NAME_INDEX(ext_flexible_array_empty_aggregate_ms)
+DIAG_NAME_INDEX(ext_flexible_array_in_array)
+DIAG_NAME_INDEX(ext_flexible_array_in_struct)
+DIAG_NAME_INDEX(ext_flexible_array_init)
+DIAG_NAME_INDEX(ext_flexible_array_union_gnu)
+DIAG_NAME_INDEX(ext_flexible_array_union_ms)
+DIAG_NAME_INDEX(ext_fold_expression)
+DIAG_NAME_INDEX(ext_for_range)
+DIAG_NAME_INDEX(ext_for_range_begin_end_types_differ)
+DIAG_NAME_INDEX(ext_for_range_init_stmt)
+DIAG_NAME_INDEX(ext_forward_ref_enum)
+DIAG_NAME_INDEX(ext_forward_ref_enum_def)
+DIAG_NAME_INDEX(ext_found_via_dependent_bases_lookup)
+DIAG_NAME_INDEX(ext_four_char_character_literal)
+DIAG_NAME_INDEX(ext_freestanding_complex)
+DIAG_NAME_INDEX(ext_friend_tag_redecl_outside_namespace)
+DIAG_NAME_INDEX(ext_generalized_initializer_lists)
+DIAG_NAME_INDEX(ext_gnu_address_of_label)
+DIAG_NAME_INDEX(ext_gnu_anonymous_struct)
+DIAG_NAME_INDEX(ext_gnu_array_range)
+DIAG_NAME_INDEX(ext_gnu_case_range)
+DIAG_NAME_INDEX(ext_gnu_conditional_expr)
+DIAG_NAME_INDEX(ext_gnu_empty_initializer)
+DIAG_NAME_INDEX(ext_gnu_indirect_goto)
+DIAG_NAME_INDEX(ext_gnu_missing_equal_designator)
+DIAG_NAME_INDEX(ext_gnu_old_style_field_designator)
+DIAG_NAME_INDEX(ext_gnu_ptr_func_arith)
+DIAG_NAME_INDEX(ext_gnu_statement_expr)
+DIAG_NAME_INDEX(ext_gnu_subscript_void_type)
+DIAG_NAME_INDEX(ext_gnu_void_ptr)
+DIAG_NAME_INDEX(ext_goto_into_protected_scope)
+DIAG_NAME_INDEX(ext_hex_constant_invalid)
+DIAG_NAME_INDEX(ext_hex_literal_invalid)
+DIAG_NAME_INDEX(ext_ident_list_in_param)
+DIAG_NAME_INDEX(ext_imaginary_constant)
+DIAG_NAME_INDEX(ext_implicit_exception_spec_mismatch)
+DIAG_NAME_INDEX(ext_implicit_function_decl)
+DIAG_NAME_INDEX(ext_implicit_lib_function_decl)
+DIAG_NAME_INDEX(ext_in_class_initializer_float_type)
+DIAG_NAME_INDEX(ext_in_class_initializer_float_type_cxx11)
+DIAG_NAME_INDEX(ext_in_class_initializer_non_constant)
+DIAG_NAME_INDEX(ext_incomplete_in_exception_spec)
+DIAG_NAME_INDEX(ext_increment_bool)
+DIAG_NAME_INDEX(ext_init_capture)
+DIAG_NAME_INDEX(ext_init_list_constant_narrowing)
+DIAG_NAME_INDEX(ext_init_list_type_narrowing)
+DIAG_NAME_INDEX(ext_init_list_variable_narrowing)
+DIAG_NAME_INDEX(ext_init_statement)
+DIAG_NAME_INDEX(ext_initializer_string_for_char_array_too_long)
+DIAG_NAME_INDEX(ext_inline_namespace)
+DIAG_NAME_INDEX(ext_inline_nested_namespace_definition)
+DIAG_NAME_INDEX(ext_inline_variable)
+DIAG_NAME_INDEX(ext_integer_complement_complex)
+DIAG_NAME_INDEX(ext_integer_complex)
+DIAG_NAME_INDEX(ext_integer_increment_complex)
+DIAG_NAME_INDEX(ext_integer_literal_too_large_for_signed)
+DIAG_NAME_INDEX(ext_internal_in_extern_inline)
+DIAG_NAME_INDEX(ext_internal_in_extern_inline_quiet)
+DIAG_NAME_INDEX(ext_invalid_sign_spec)
+DIAG_NAME_INDEX(ext_keyword_as_ident)
+DIAG_NAME_INDEX(ext_line_comment)
+DIAG_NAME_INDEX(ext_main_returns_nonint)
+DIAG_NAME_INDEX(ext_main_used)
+DIAG_NAME_INDEX(ext_many_braces_around_scalar_init)
+DIAG_NAME_INDEX(ext_member_redeclared)
+DIAG_NAME_INDEX(ext_mismatched_exception_spec)
+DIAG_NAME_INDEX(ext_mismatched_exception_spec_explicit_instantiation)
+DIAG_NAME_INDEX(ext_missing_declspec)
+DIAG_NAME_INDEX(ext_missing_exception_specification)
+DIAG_NAME_INDEX(ext_missing_type_specifier)
+DIAG_NAME_INDEX(ext_missing_varargs_arg)
+DIAG_NAME_INDEX(ext_missing_whitespace_after_macro_name)
+DIAG_NAME_INDEX(ext_mixed_decls_code)
+DIAG_NAME_INDEX(ext_module_import_in_extern_c)
+DIAG_NAME_INDEX(ext_module_import_not_at_top_level_noop)
+DIAG_NAME_INDEX(ext_ms_ambiguous_direct_base)
+DIAG_NAME_INDEX(ext_ms_anonymous_record)
+DIAG_NAME_INDEX(ext_ms_c_enum_fixed_underlying_type)
+DIAG_NAME_INDEX(ext_ms_cast_fn_obj)
+DIAG_NAME_INDEX(ext_ms_delayed_template_argument)
+DIAG_NAME_INDEX(ext_ms_deref_template_argument)
+DIAG_NAME_INDEX(ext_ms_explicit_constructor_call)
+DIAG_NAME_INDEX(ext_ms_forward_ref_enum)
+DIAG_NAME_INDEX(ext_ms_impcast_fn_obj)
+DIAG_NAME_INDEX(ext_ms_missing_exception_specification)
+DIAG_NAME_INDEX(ext_ms_reserved_user_defined_literal)
+DIAG_NAME_INDEX(ext_ms_sealed_keyword)
+DIAG_NAME_INDEX(ext_ms_template_spec_redecl_out_of_scope)
+DIAG_NAME_INDEX(ext_ms_template_type_arg_missing_typename)
+DIAG_NAME_INDEX(ext_ms_using_declaration_inaccessible)
+DIAG_NAME_INDEX(ext_multi_line_line_comment)
+DIAG_NAME_INDEX(ext_multi_using_declaration)
+DIAG_NAME_INDEX(ext_multichar_character_literal)
+DIAG_NAME_INDEX(ext_mutable_reference)
+DIAG_NAME_INDEX(ext_named_variadic_macro)
+DIAG_NAME_INDEX(ext_nested_name_member_ref_lookup_ambiguous)
+DIAG_NAME_INDEX(ext_nested_name_spec_is_enum)
+DIAG_NAME_INDEX(ext_nested_namespace_definition)
+DIAG_NAME_INDEX(ext_nested_pointer_qualifier_mismatch)
+DIAG_NAME_INDEX(ext_new_paren_array_nonconst)
+DIAG_NAME_INDEX(ext_no_declarators)
+DIAG_NAME_INDEX(ext_no_named_members_in_struct_union)
+DIAG_NAME_INDEX(ext_no_newline_eof)
+DIAG_NAME_INDEX(ext_nonclass_type_friend)
+DIAG_NAME_INDEX(ext_nonstandard_escape)
+DIAG_NAME_INDEX(ext_nonstatic_member_init)
+DIAG_NAME_INDEX(ext_noreturn_main)
+DIAG_NAME_INDEX(ext_ns_enum_attribute)
+DIAG_NAME_INDEX(ext_nullability)
+DIAG_NAME_INDEX(ext_offsetof_non_pod_type)
+DIAG_NAME_INDEX(ext_offsetof_non_standardlayout_type)
+DIAG_NAME_INDEX(ext_old_implicitly_unsigned_long_cxx)
+DIAG_NAME_INDEX(ext_omp_loop_not_canonical_init)
+DIAG_NAME_INDEX(ext_on_off_switch_syntax)
+DIAG_NAME_INDEX(ext_opencl_ext_vector_type_rgba_selector)
+DIAG_NAME_INDEX(ext_operator_new_delete_declared_inline)
+DIAG_NAME_INDEX(ext_out_of_line_declaration)
+DIAG_NAME_INDEX(ext_out_of_line_qualified_id_type_names_constructor)
+DIAG_NAME_INDEX(ext_override_control_keyword)
+DIAG_NAME_INDEX(ext_override_exception_spec)
+DIAG_NAME_INDEX(ext_param_default_argument_redefinition)
+DIAG_NAME_INDEX(ext_param_not_declared)
+DIAG_NAME_INDEX(ext_param_promoted_not_compatible_with_prototype)
+DIAG_NAME_INDEX(ext_partial_spec_not_more_specialized_than_primary)
+DIAG_NAME_INDEX(ext_partial_specs_not_deducible)
+DIAG_NAME_INDEX(ext_paste_comma)
+DIAG_NAME_INDEX(ext_plain_complex)
+DIAG_NAME_INDEX(ext_pointer_to_const_ref_member_on_rvalue)
+DIAG_NAME_INDEX(ext_pp_bad_paste_ms)
+DIAG_NAME_INDEX(ext_pp_bad_vaargs_use)
+DIAG_NAME_INDEX(ext_pp_bad_vaopt_use)
+DIAG_NAME_INDEX(ext_pp_comma_expr)
+DIAG_NAME_INDEX(ext_pp_extra_tokens_at_eol)
+DIAG_NAME_INDEX(ext_pp_ident_directive)
+DIAG_NAME_INDEX(ext_pp_import_directive)
+DIAG_NAME_INDEX(ext_pp_include_next_directive)
+DIAG_NAME_INDEX(ext_pp_include_search_ms)
+DIAG_NAME_INDEX(ext_pp_line_too_big)
+DIAG_NAME_INDEX(ext_pp_line_zero)
+DIAG_NAME_INDEX(ext_pp_macro_redef)
+DIAG_NAME_INDEX(ext_pp_operator_used_as_macro_name)
+DIAG_NAME_INDEX(ext_pp_redef_builtin_macro)
+DIAG_NAME_INDEX(ext_pp_undef_builtin_macro)
+DIAG_NAME_INDEX(ext_pp_warning_directive)
+DIAG_NAME_INDEX(ext_pragma_syntax_eod)
+DIAG_NAME_INDEX(ext_predef_outside_function)
+DIAG_NAME_INDEX(ext_pseudo_dtor_on_void)
+DIAG_NAME_INDEX(ext_pure_function_definition)
+DIAG_NAME_INDEX(ext_redefinition_of_typedef)
+DIAG_NAME_INDEX(ext_ref_qualifier)
+DIAG_NAME_INDEX(ext_register_storage_class)
+DIAG_NAME_INDEX(ext_reserved_user_defined_literal)
+DIAG_NAME_INDEX(ext_retained_language_linkage)
+DIAG_NAME_INDEX(ext_return_has_expr)
+DIAG_NAME_INDEX(ext_return_has_void_expr)
+DIAG_NAME_INDEX(ext_return_missing_expr)
+DIAG_NAME_INDEX(ext_rvalue_reference)
+DIAG_NAME_INDEX(ext_rvalue_to_reference_access_ctor)
+DIAG_NAME_INDEX(ext_rvalue_to_reference_temp_copy_no_viable)
+DIAG_NAME_INDEX(ext_scoped_enum)
+DIAG_NAME_INDEX(ext_sizeof_alignof_function_type)
+DIAG_NAME_INDEX(ext_sizeof_alignof_void_type)
+DIAG_NAME_INDEX(ext_standalone_specifier)
+DIAG_NAME_INDEX(ext_star_this_lambda_capture_cxx17)
+DIAG_NAME_INDEX(ext_static_assert_no_message)
+DIAG_NAME_INDEX(ext_static_data_member_in_union)
+DIAG_NAME_INDEX(ext_static_non_static)
+DIAG_NAME_INDEX(ext_static_out_of_line)
+DIAG_NAME_INDEX(ext_stdc_pragma_ignored)
+DIAG_NAME_INDEX(ext_string_literal_operator_template)
+DIAG_NAME_INDEX(ext_string_too_long)
+DIAG_NAME_INDEX(ext_subscript_non_lvalue)
+DIAG_NAME_INDEX(ext_template_arg_extra_parens)
+DIAG_NAME_INDEX(ext_template_arg_local_type)
+DIAG_NAME_INDEX(ext_template_arg_object_internal)
+DIAG_NAME_INDEX(ext_template_arg_unnamed_type)
+DIAG_NAME_INDEX(ext_template_outside_of_template)
+DIAG_NAME_INDEX(ext_template_parameter_default_in_function_template)
+DIAG_NAME_INDEX(ext_template_template_param_typename)
+DIAG_NAME_INDEX(ext_thread_before)
+DIAG_NAME_INDEX(ext_token_used)
+DIAG_NAME_INDEX(ext_typecheck_addrof_temporary)
+DIAG_NAME_INDEX(ext_typecheck_addrof_void)
+DIAG_NAME_INDEX(ext_typecheck_base_super)
+DIAG_NAME_INDEX(ext_typecheck_cast_nonscalar)
+DIAG_NAME_INDEX(ext_typecheck_cast_to_union)
+DIAG_NAME_INDEX(ext_typecheck_comparison_of_distinct_pointers)
+DIAG_NAME_INDEX(ext_typecheck_comparison_of_fptr_to_void)
+DIAG_NAME_INDEX(ext_typecheck_comparison_of_pointer_integer)
+DIAG_NAME_INDEX(ext_typecheck_cond_incompatible_operands)
+DIAG_NAME_INDEX(ext_typecheck_cond_incompatible_pointers)
+DIAG_NAME_INDEX(ext_typecheck_cond_one_void)
+DIAG_NAME_INDEX(ext_typecheck_cond_pointer_integer_mismatch)
+DIAG_NAME_INDEX(ext_typecheck_convert_discards_qualifiers)
+DIAG_NAME_INDEX(ext_typecheck_convert_incompatible_function_pointer)
+DIAG_NAME_INDEX(ext_typecheck_convert_incompatible_pointer)
+DIAG_NAME_INDEX(ext_typecheck_convert_incompatible_pointer_sign)
+DIAG_NAME_INDEX(ext_typecheck_convert_int_pointer)
+DIAG_NAME_INDEX(ext_typecheck_convert_pointer_int)
+DIAG_NAME_INDEX(ext_typecheck_convert_pointer_void_func)
+DIAG_NAME_INDEX(ext_typecheck_decl_incomplete_type)
+DIAG_NAME_INDEX(ext_typecheck_indirection_through_void_pointer)
+DIAG_NAME_INDEX(ext_typecheck_ordered_comparison_of_function_pointers)
+DIAG_NAME_INDEX(ext_typecheck_ordered_comparison_of_pointer_and_zero)
+DIAG_NAME_INDEX(ext_typecheck_ordered_comparison_of_pointer_integer)
+DIAG_NAME_INDEX(ext_typecheck_zero_array_size)
+DIAG_NAME_INDEX(ext_typedef_without_a_name)
+DIAG_NAME_INDEX(ext_typename_missing)
+DIAG_NAME_INDEX(ext_typename_outside_of_template)
+DIAG_NAME_INDEX(ext_undeclared_unqual_id_with_dependent_base)
+DIAG_NAME_INDEX(ext_undefined_internal_type)
+DIAG_NAME_INDEX(ext_unelaborated_friend_type)
+DIAG_NAME_INDEX(ext_unicode_whitespace)
+DIAG_NAME_INDEX(ext_union_member_of_reference_type)
+DIAG_NAME_INDEX(ext_unknown_escape)
+DIAG_NAME_INDEX(ext_unterminated_char_or_string)
+DIAG_NAME_INDEX(ext_use_out_of_scope_declaration)
+DIAG_NAME_INDEX(ext_using_attribute_ns)
+DIAG_NAME_INDEX(ext_using_declaration_pack)
+DIAG_NAME_INDEX(ext_using_undefined_std)
+DIAG_NAME_INDEX(ext_variable_sized_type_in_struct)
+DIAG_NAME_INDEX(ext_variable_template)
+DIAG_NAME_INDEX(ext_variadic_macro)
+DIAG_NAME_INDEX(ext_variadic_main)
+DIAG_NAME_INDEX(ext_variadic_templates)
+DIAG_NAME_INDEX(ext_vla)
+DIAG_NAME_INDEX(ext_vla_folded_to_constant)
+DIAG_NAME_INDEX(ext_warn_duplicate_declspec)
+DIAG_NAME_INDEX(ext_warn_gnu_final)
+DIAG_NAME_INDEX(fatal_too_many_errors)
+DIAG_NAME_INDEX(note_access_constrained_by_path)
+DIAG_NAME_INDEX(note_access_natural)
+DIAG_NAME_INDEX(note_access_protected_restricted_ctordtor)
+DIAG_NAME_INDEX(note_access_protected_restricted_noobject)
+DIAG_NAME_INDEX(note_access_protected_restricted_object)
+DIAG_NAME_INDEX(note_add_deprecation_attr)
+DIAG_NAME_INDEX(note_add_std_move)
+DIAG_NAME_INDEX(note_add_std_move_in_cxx11)
+DIAG_NAME_INDEX(note_add_synthesize_directive)
+DIAG_NAME_INDEX(note_additional_parens_for_variable_declaration)
+DIAG_NAME_INDEX(note_addrof_ovl_candidate_disabled_by_enable_if_attr)
+DIAG_NAME_INDEX(note_alignas_on_declaration)
+DIAG_NAME_INDEX(note_allocated_here)
+DIAG_NAME_INDEX(note_also_found)
+DIAG_NAME_INDEX(note_ambig_member_ref_object_type)
+DIAG_NAME_INDEX(note_ambig_member_ref_scope)
+DIAG_NAME_INDEX(note_ambiguous_candidate)
+DIAG_NAME_INDEX(note_ambiguous_inherited_constructor_using)
+DIAG_NAME_INDEX(note_ambiguous_member_found)
+DIAG_NAME_INDEX(note_ambiguous_type_conversion)
+DIAG_NAME_INDEX(note_arc_bridge)
+DIAG_NAME_INDEX(note_arc_bridge_retained)
+DIAG_NAME_INDEX(note_arc_bridge_transfer)
+DIAG_NAME_INDEX(note_arc_cstyle_bridge)
+DIAG_NAME_INDEX(note_arc_cstyle_bridge_retained)
+DIAG_NAME_INDEX(note_arc_cstyle_bridge_transfer)
+DIAG_NAME_INDEX(note_arc_field_with_ownership)
+DIAG_NAME_INDEX(note_arc_forbidden_type)
+DIAG_NAME_INDEX(note_arc_gained_method_convention)
+DIAG_NAME_INDEX(note_arc_init_returns_unrelated)
+DIAG_NAME_INDEX(note_arc_lost_method_convention)
+DIAG_NAME_INDEX(note_arc_retain_cycle_owner)
+DIAG_NAME_INDEX(note_arc_weak_also_accessed_here)
+DIAG_NAME_INDEX(note_arc_weak_disabled)
+DIAG_NAME_INDEX(note_arc_weak_no_runtime)
+DIAG_NAME_INDEX(note_array_index_out_of_bounds)
+DIAG_NAME_INDEX(note_array_init_plain_string_into_char8_t)
+DIAG_NAME_INDEX(note_array_size_conversion)
+DIAG_NAME_INDEX(note_asm_input_duplicate_first)
+DIAG_NAME_INDEX(note_asm_missing_constraint_modifier)
+DIAG_NAME_INDEX(note_assign_lhs_incomplete)
+DIAG_NAME_INDEX(note_atomic_property_fixup_suggest)
+DIAG_NAME_INDEX(note_attribute)
+DIAG_NAME_INDEX(note_attribute_overloadable_prev_overload)
+DIAG_NAME_INDEX(note_auto_readonly_iboutlet_fixup_suggest)
+DIAG_NAME_INDEX(note_availability_specified_here)
+DIAG_NAME_INDEX(note_await_ready_no_bool_conversion)
+DIAG_NAME_INDEX(note_bad_memaccess_silence)
+DIAG_NAME_INDEX(note_base_class_specified_here)
+DIAG_NAME_INDEX(note_bitfield_decl)
+DIAG_NAME_INDEX(note_block_var_fixit_add_initialization)
+DIAG_NAME_INDEX(note_bracket_depth)
+DIAG_NAME_INDEX(note_called_by)
+DIAG_NAME_INDEX(note_callee_decl)
+DIAG_NAME_INDEX(note_callee_static_array)
+DIAG_NAME_INDEX(note_carries_dependency_missing_first_decl)
+DIAG_NAME_INDEX(note_cast_to_void)
+DIAG_NAME_INDEX(note_cat_conform_to_noescape_prot)
+DIAG_NAME_INDEX(note_change_bitfield_sign)
+DIAG_NAME_INDEX(note_change_calling_conv_fixit)
+DIAG_NAME_INDEX(note_class_declared)
+DIAG_NAME_INDEX(note_cocoa_naming_declare_family)
+DIAG_NAME_INDEX(note_collapse_loop_count)
+DIAG_NAME_INDEX(note_compat_assoc)
+DIAG_NAME_INDEX(note_condition_assign_silence)
+DIAG_NAME_INDEX(note_condition_assign_to_comparison)
+DIAG_NAME_INDEX(note_condition_or_assign_to_comparison)
+DIAG_NAME_INDEX(note_conflicting_attribute)
+DIAG_NAME_INDEX(note_conflicting_try_here)
+DIAG_NAME_INDEX(note_constexpr_access_inactive_union_member)
+DIAG_NAME_INDEX(note_constexpr_access_null)
+DIAG_NAME_INDEX(note_constexpr_access_past_end)
+DIAG_NAME_INDEX(note_constexpr_access_static_temporary)
+DIAG_NAME_INDEX(note_constexpr_access_uninit)
+DIAG_NAME_INDEX(note_constexpr_access_unsized_array)
+DIAG_NAME_INDEX(note_constexpr_access_volatile_obj)
+DIAG_NAME_INDEX(note_constexpr_access_volatile_type)
+DIAG_NAME_INDEX(note_constexpr_array_index)
+DIAG_NAME_INDEX(note_constexpr_baa_insufficient_alignment)
+DIAG_NAME_INDEX(note_constexpr_baa_value_insufficient_alignment)
+DIAG_NAME_INDEX(note_constexpr_body_previous_return)
+DIAG_NAME_INDEX(note_constexpr_call_here)
+DIAG_NAME_INDEX(note_constexpr_call_limit_exceeded)
+DIAG_NAME_INDEX(note_constexpr_calls_suppressed)
+DIAG_NAME_INDEX(note_constexpr_compare_virtual_mem_ptr)
+DIAG_NAME_INDEX(note_constexpr_conditional_never_const)
+DIAG_NAME_INDEX(note_constexpr_ctor_missing_init)
+DIAG_NAME_INDEX(note_constexpr_depth_limit_exceeded)
+DIAG_NAME_INDEX(note_constexpr_float_arithmetic)
+DIAG_NAME_INDEX(note_constexpr_inherited_ctor_call_here)
+DIAG_NAME_INDEX(note_constexpr_invalid_cast)
+DIAG_NAME_INDEX(note_constexpr_invalid_downcast)
+DIAG_NAME_INDEX(note_constexpr_invalid_function)
+DIAG_NAME_INDEX(note_constexpr_invalid_inhctor)
+DIAG_NAME_INDEX(note_constexpr_large_shift)
+DIAG_NAME_INDEX(note_constexpr_lifetime_ended)
+DIAG_NAME_INDEX(note_constexpr_lshift_discards)
+DIAG_NAME_INDEX(note_constexpr_lshift_of_negative)
+DIAG_NAME_INDEX(note_constexpr_ltor_incomplete_type)
+DIAG_NAME_INDEX(note_constexpr_ltor_mutable)
+DIAG_NAME_INDEX(note_constexpr_ltor_non_const_int)
+DIAG_NAME_INDEX(note_constexpr_ltor_non_constexpr)
+DIAG_NAME_INDEX(note_constexpr_memcpy_incomplete_type)
+DIAG_NAME_INDEX(note_constexpr_memcpy_nontrivial)
+DIAG_NAME_INDEX(note_constexpr_memcpy_null)
+DIAG_NAME_INDEX(note_constexpr_memcpy_overlap)
+DIAG_NAME_INDEX(note_constexpr_memcpy_type_pun)
+DIAG_NAME_INDEX(note_constexpr_memcpy_unsupported)
+DIAG_NAME_INDEX(note_constexpr_modify_const_type)
+DIAG_NAME_INDEX(note_constexpr_modify_global)
+DIAG_NAME_INDEX(note_constexpr_negative_shift)
+DIAG_NAME_INDEX(note_constexpr_no_return)
+DIAG_NAME_INDEX(note_constexpr_non_global)
+DIAG_NAME_INDEX(note_constexpr_nonliteral)
+DIAG_NAME_INDEX(note_constexpr_null_subobject)
+DIAG_NAME_INDEX(note_constexpr_overflow)
+DIAG_NAME_INDEX(note_constexpr_past_end)
+DIAG_NAME_INDEX(note_constexpr_past_end_subobject)
+DIAG_NAME_INDEX(note_constexpr_pointer_comparison_base_classes)
+DIAG_NAME_INDEX(note_constexpr_pointer_comparison_base_field)
+DIAG_NAME_INDEX(note_constexpr_pointer_comparison_differing_access)
+DIAG_NAME_INDEX(note_constexpr_pointer_subtraction_not_same_array)
+DIAG_NAME_INDEX(note_constexpr_pointer_subtraction_zero_size)
+DIAG_NAME_INDEX(note_constexpr_step_limit_exceeded)
+DIAG_NAME_INDEX(note_constexpr_stmt_expr_unsupported)
+DIAG_NAME_INDEX(note_constexpr_temporary_here)
+DIAG_NAME_INDEX(note_constexpr_this)
+DIAG_NAME_INDEX(note_constexpr_typeid_polymorphic)
+DIAG_NAME_INDEX(note_constexpr_uninitialized)
+DIAG_NAME_INDEX(note_constexpr_unsized_array_indexed)
+DIAG_NAME_INDEX(note_constexpr_unsupported_unsized_array)
+DIAG_NAME_INDEX(note_constexpr_use_uninit_reference)
+DIAG_NAME_INDEX(note_constexpr_var_init_non_constant)
+DIAG_NAME_INDEX(note_constexpr_virtual_base)
+DIAG_NAME_INDEX(note_constexpr_virtual_base_here)
+DIAG_NAME_INDEX(note_constexpr_virtual_call)
+DIAG_NAME_INDEX(note_constexpr_void_comparison)
+DIAG_NAME_INDEX(note_conv_function_declared_at)
+DIAG_NAME_INDEX(note_convert_inline_to_static)
+DIAG_NAME_INDEX(note_coroutine_promise_call_implicitly_required)
+DIAG_NAME_INDEX(note_coroutine_promise_implicit_await_transform_required_here)
+DIAG_NAME_INDEX(note_coroutine_promise_suspend_implicitly_required)
+DIAG_NAME_INDEX(note_covariant_thunk)
+DIAG_NAME_INDEX(note_cuda_conflicting_device_function_declared_here)
+DIAG_NAME_INDEX(note_cuda_ovl_candidate_target_mismatch)
+DIAG_NAME_INDEX(note_cxx2a_compat_utf8_string_remove_u8)
+DIAG_NAME_INDEX(note_decl_hiding_tag_type)
+DIAG_NAME_INDEX(note_decl_unguarded_availability_silence)
+DIAG_NAME_INDEX(note_declaration_not_a_prototype)
+DIAG_NAME_INDEX(note_declare_parameter_strong)
+DIAG_NAME_INDEX(note_declared_at)
+DIAG_NAME_INDEX(note_declared_coroutine_here)
+DIAG_NAME_INDEX(note_declared_nonnull)
+DIAG_NAME_INDEX(note_declared_required_constant_init_here)
+DIAG_NAME_INDEX(note_deduced_template_arg_substitution_here)
+DIAG_NAME_INDEX(note_deduction_guide_access)
+DIAG_NAME_INDEX(note_deduction_guide_template_access)
+DIAG_NAME_INDEX(note_default_arg_instantiation_here)
+DIAG_NAME_INDEX(note_default_argument_declared_here)
+DIAG_NAME_INDEX(note_default_function_arg_instantiation_here)
+DIAG_NAME_INDEX(note_defined_here)
+DIAG_NAME_INDEX(note_delete_conversion)
+DIAG_NAME_INDEX(note_delete_non_virtual)
+DIAG_NAME_INDEX(note_deleted_assign_field)
+DIAG_NAME_INDEX(note_deleted_copy_ctor_rvalue_reference)
+DIAG_NAME_INDEX(note_deleted_copy_user_declared_move)
+DIAG_NAME_INDEX(note_deleted_default_ctor_all_const)
+DIAG_NAME_INDEX(note_deleted_default_ctor_uninit_field)
+DIAG_NAME_INDEX(note_deleted_dtor_no_operator_delete)
+DIAG_NAME_INDEX(note_deleted_special_member_class_subobject)
+DIAG_NAME_INDEX(note_deleted_type_mismatch)
+DIAG_NAME_INDEX(note_dependent_function_template_spec_discard_reason)
+DIAG_NAME_INDEX(note_dependent_non_type_default_arg_in_partial_spec)
+DIAG_NAME_INDEX(note_dependent_var_use)
+DIAG_NAME_INDEX(note_deprecated_this_capture)
+DIAG_NAME_INDEX(note_destructor_type_here)
+DIAG_NAME_INDEX(note_doc_block_command_previous)
+DIAG_NAME_INDEX(note_doc_block_command_previous_alias)
+DIAG_NAME_INDEX(note_doc_html_end_tag)
+DIAG_NAME_INDEX(note_doc_html_tag_started_here)
+DIAG_NAME_INDEX(note_doc_param_name_suggestion)
+DIAG_NAME_INDEX(note_doc_param_previous)
+DIAG_NAME_INDEX(note_doc_tparam_name_suggestion)
+DIAG_NAME_INDEX(note_doc_tparam_previous)
+DIAG_NAME_INDEX(note_drv_address_sanitizer_debug_runtime)
+DIAG_NAME_INDEX(note_drv_command_failed_diag_msg)
+DIAG_NAME_INDEX(note_drv_config_file_searched_in)
+DIAG_NAME_INDEX(note_drv_t_option_is_global)
+DIAG_NAME_INDEX(note_drv_use_standard)
+DIAG_NAME_INDEX(note_drv_verify_prefix_spelling)
+DIAG_NAME_INDEX(note_due_to_dllexported_class)
+DIAG_NAME_INDEX(note_duplicate_case_prev)
+DIAG_NAME_INDEX(note_duplicate_element)
+DIAG_NAME_INDEX(note_empty_body_on_separate_line)
+DIAG_NAME_INDEX(note_empty_parens_default_ctor)
+DIAG_NAME_INDEX(note_empty_parens_function_call)
+DIAG_NAME_INDEX(note_empty_parens_zero_initialize)
+DIAG_NAME_INDEX(note_enters_block_captures_cxx_obj)
+DIAG_NAME_INDEX(note_enters_block_captures_non_trivial_c_struct)
+DIAG_NAME_INDEX(note_enters_block_captures_strong)
+DIAG_NAME_INDEX(note_enters_block_captures_weak)
+DIAG_NAME_INDEX(note_entity_declared_at)
+DIAG_NAME_INDEX(note_enum_specialized_here)
+DIAG_NAME_INDEX(note_equality_comparison_silence)
+DIAG_NAME_INDEX(note_equality_comparison_to_assign)
+DIAG_NAME_INDEX(note_equivalent_internal_linkage_decl)
+DIAG_NAME_INDEX(note_evaluate_comparison_first)
+DIAG_NAME_INDEX(note_evaluating_exception_spec_here)
+DIAG_NAME_INDEX(note_exception_spec_deprecated)
+DIAG_NAME_INDEX(note_exits___block)
+DIAG_NAME_INDEX(note_exits_block_captures_cxx_obj)
+DIAG_NAME_INDEX(note_exits_block_captures_non_trivial_c_struct)
+DIAG_NAME_INDEX(note_exits_block_captures_strong)
+DIAG_NAME_INDEX(note_exits_block_captures_weak)
+DIAG_NAME_INDEX(note_exits_cleanup)
+DIAG_NAME_INDEX(note_exits_cxx_catch)
+DIAG_NAME_INDEX(note_exits_cxx_try)
+DIAG_NAME_INDEX(note_exits_dtor)
+DIAG_NAME_INDEX(note_exits_objc_autoreleasepool)
+DIAG_NAME_INDEX(note_exits_objc_catch)
+DIAG_NAME_INDEX(note_exits_objc_finally)
+DIAG_NAME_INDEX(note_exits_objc_strong)
+DIAG_NAME_INDEX(note_exits_objc_synchronized)
+DIAG_NAME_INDEX(note_exits_objc_try)
+DIAG_NAME_INDEX(note_exits_objc_weak)
+DIAG_NAME_INDEX(note_exits_seh_except)
+DIAG_NAME_INDEX(note_exits_seh_finally)
+DIAG_NAME_INDEX(note_exits_seh_try)
+DIAG_NAME_INDEX(note_exits_temporary_dtor)
+DIAG_NAME_INDEX(note_explicit_ctor_deduction_guide_here)
+DIAG_NAME_INDEX(note_explicit_instantiation_candidate)
+DIAG_NAME_INDEX(note_explicit_instantiation_definition_here)
+DIAG_NAME_INDEX(note_explicit_instantiation_here)
+DIAG_NAME_INDEX(note_explicit_specialization_declared_here)
+DIAG_NAME_INDEX(note_explicit_template_arg_substitution_here)
+DIAG_NAME_INDEX(note_explicit_template_spec_does_not_need_header)
+DIAG_NAME_INDEX(note_expr_divide_by_zero)
+DIAG_NAME_INDEX(note_extern_c_begins_here)
+DIAG_NAME_INDEX(note_extern_c_global_conflict)
+DIAG_NAME_INDEX(note_extra_comma_message_arg)
+DIAG_NAME_INDEX(note_fallthrough_insert_semi_fixit)
+DIAG_NAME_INDEX(note_fe_backend_frame_larger_than)
+DIAG_NAME_INDEX(note_fe_backend_invalid_loc)
+DIAG_NAME_INDEX(note_fe_backend_plugin)
+DIAG_NAME_INDEX(note_fe_inline_asm)
+DIAG_NAME_INDEX(note_fe_inline_asm_here)
+DIAG_NAME_INDEX(note_field_designator_found)
+DIAG_NAME_INDEX(note_final_overrider)
+DIAG_NAME_INDEX(note_first_module_difference)
+DIAG_NAME_INDEX(note_fixit_applied)
+DIAG_NAME_INDEX(note_fixit_failed)
+DIAG_NAME_INDEX(note_fixit_in_macro)
+DIAG_NAME_INDEX(note_fixit_unfixed_error)
+DIAG_NAME_INDEX(note_flexible_array_member)
+DIAG_NAME_INDEX(note_for_range_begin_end)
+DIAG_NAME_INDEX(note_for_range_invalid_iterator)
+DIAG_NAME_INDEX(note_for_range_member_begin_end_ignored)
+DIAG_NAME_INDEX(note_force_empty_selector_name)
+DIAG_NAME_INDEX(note_format_fix_specifier)
+DIAG_NAME_INDEX(note_format_security_fixit)
+DIAG_NAME_INDEX(note_format_string_defined)
+DIAG_NAME_INDEX(note_forward_class)
+DIAG_NAME_INDEX(note_forward_declaration)
+DIAG_NAME_INDEX(note_forward_template_decl)
+DIAG_NAME_INDEX(note_found_mutex_near_match)
+DIAG_NAME_INDEX(note_from_diagnose_if)
+DIAG_NAME_INDEX(note_function_style_cast_add_parentheses)
+DIAG_NAME_INDEX(note_function_suggestion)
+DIAG_NAME_INDEX(note_function_template_deduction_instantiation_here)
+DIAG_NAME_INDEX(note_function_template_spec_here)
+DIAG_NAME_INDEX(note_function_template_spec_matched)
+DIAG_NAME_INDEX(note_function_to_function_call)
+DIAG_NAME_INDEX(note_function_warning_silence)
+DIAG_NAME_INDEX(note_getter_unavailable)
+DIAG_NAME_INDEX(note_goto_ms_asm_label)
+DIAG_NAME_INDEX(note_guarded_by_declared_here)
+DIAG_NAME_INDEX(note_header_guard)
+DIAG_NAME_INDEX(note_hidden_overloaded_virtual_declared_here)
+DIAG_NAME_INDEX(note_hidden_tag)
+DIAG_NAME_INDEX(note_hiding_object)
+DIAG_NAME_INDEX(note_ice_conversion_here)
+DIAG_NAME_INDEX(note_illegal_field_declared_here)
+DIAG_NAME_INDEX(note_implementation_declared)
+DIAG_NAME_INDEX(note_implemented_by_class)
+DIAG_NAME_INDEX(note_implicit_delete_this_in_destructor_here)
+DIAG_NAME_INDEX(note_implicit_member_target_infer_collision)
+DIAG_NAME_INDEX(note_implicit_param_decl)
+DIAG_NAME_INDEX(note_implicit_top_level_module_import_here)
+DIAG_NAME_INDEX(note_implicitly_deleted)
+DIAG_NAME_INDEX(note_imported_by_pch_module_not_found)
+DIAG_NAME_INDEX(note_in_binding_decl_init)
+DIAG_NAME_INDEX(note_in_class_initializer_float_type_cxx11)
+DIAG_NAME_INDEX(note_in_class_initializer_not_yet_parsed)
+DIAG_NAME_INDEX(note_in_declaration_of_implicit_special_member)
+DIAG_NAME_INDEX(note_in_for_range)
+DIAG_NAME_INDEX(note_in_omitted_aggregate_initializer)
+DIAG_NAME_INDEX(note_in_reference_temporary_list_initializer)
+DIAG_NAME_INDEX(note_include_header_or_declare)
+DIAG_NAME_INDEX(note_incompatible_analyzer_plugin_api)
+DIAG_NAME_INDEX(note_incomplete_class_and_qualified_id)
+DIAG_NAME_INDEX(note_indirect_goto_target)
+DIAG_NAME_INDEX(note_indirection_through_null)
+DIAG_NAME_INDEX(note_inequality_comparison_to_or_assign)
+DIAG_NAME_INDEX(note_init_list_at_beginning_of_macro_argument)
+DIAG_NAME_INDEX(note_init_list_narrowing_silence)
+DIAG_NAME_INDEX(note_init_with_default_member_initalizer)
+DIAG_NAME_INDEX(note_insert_break_fixit)
+DIAG_NAME_INDEX(note_insert_fallthrough_fixit)
+DIAG_NAME_INDEX(note_inst_declaration_hint)
+DIAG_NAME_INDEX(note_instantiation_contexts_suppressed)
+DIAG_NAME_INDEX(note_instantiation_required_here)
+DIAG_NAME_INDEX(note_invalid_subexpr_in_const_expr)
+DIAG_NAME_INDEX(note_it_delegates_to)
+DIAG_NAME_INDEX(note_ivar_decl)
+DIAG_NAME_INDEX(note_lambda_decl)
+DIAG_NAME_INDEX(note_lambda_to_block_conv)
+DIAG_NAME_INDEX(note_lifetime_extending_member_declared_here)
+DIAG_NAME_INDEX(note_local_decl_close_match)
+DIAG_NAME_INDEX(note_local_decl_close_param_match)
+DIAG_NAME_INDEX(note_local_var_initializer)
+DIAG_NAME_INDEX(note_lock_exclusive_and_shared)
+DIAG_NAME_INDEX(note_locked_here)
+DIAG_NAME_INDEX(note_logical_instead_of_bitwise_change_operator)
+DIAG_NAME_INDEX(note_logical_instead_of_bitwise_remove_constant)
+DIAG_NAME_INDEX(note_logical_not_fix)
+DIAG_NAME_INDEX(note_logical_not_silence_with_parens)
+DIAG_NAME_INDEX(note_loop_iteration_here)
+DIAG_NAME_INDEX(note_macro_here)
+DIAG_NAME_INDEX(note_main_change_return_type)
+DIAG_NAME_INDEX(note_main_remove_noreturn)
+DIAG_NAME_INDEX(note_matching)
+DIAG_NAME_INDEX(note_meant_to_use_typename)
+DIAG_NAME_INDEX(note_member_declared_at)
+DIAG_NAME_INDEX(note_member_declared_here)
+DIAG_NAME_INDEX(note_member_def_close_const_match)
+DIAG_NAME_INDEX(note_member_def_close_match)
+DIAG_NAME_INDEX(note_member_def_close_param_match)
+DIAG_NAME_INDEX(note_member_first_declared_here)
+DIAG_NAME_INDEX(note_member_reference_arrow_from_operator_arrow)
+DIAG_NAME_INDEX(note_member_synthesized_at)
+DIAG_NAME_INDEX(note_memsize_comparison_cast_silence)
+DIAG_NAME_INDEX(note_memsize_comparison_paren)
+DIAG_NAME_INDEX(note_method_declared_at)
+DIAG_NAME_INDEX(note_method_return_type_change)
+DIAG_NAME_INDEX(note_method_sent_forward_class)
+DIAG_NAME_INDEX(note_misplaced_ellipsis_vararg_add_comma)
+DIAG_NAME_INDEX(note_misplaced_ellipsis_vararg_add_ellipsis)
+DIAG_NAME_INDEX(note_misplaced_ellipsis_vararg_existing_ellipsis)
+DIAG_NAME_INDEX(note_missing_end_of_definition_before)
+DIAG_NAME_INDEX(note_missing_selector_name)
+DIAG_NAME_INDEX(note_mmap_add_framework_keyword)
+DIAG_NAME_INDEX(note_mmap_lbrace_match)
+DIAG_NAME_INDEX(note_mmap_lsquare_match)
+DIAG_NAME_INDEX(note_mmap_prev_definition)
+DIAG_NAME_INDEX(note_mmap_rename_top_level_private_module)
+DIAG_NAME_INDEX(note_module_cache_path)
+DIAG_NAME_INDEX(note_module_def_undef_here)
+DIAG_NAME_INDEX(note_module_file_imported_by)
+DIAG_NAME_INDEX(note_module_import_here)
+DIAG_NAME_INDEX(note_module_import_not_at_top_level)
+DIAG_NAME_INDEX(note_module_odr_violation_definition_data)
+DIAG_NAME_INDEX(note_module_odr_violation_different_definitions)
+DIAG_NAME_INDEX(note_module_odr_violation_enum)
+DIAG_NAME_INDEX(note_module_odr_violation_function)
+DIAG_NAME_INDEX(note_module_odr_violation_mismatch_decl)
+DIAG_NAME_INDEX(note_module_odr_violation_mismatch_decl_diff)
+DIAG_NAME_INDEX(note_module_odr_violation_mismatch_decl_unknown)
+DIAG_NAME_INDEX(note_module_odr_violation_no_possible_decls)
+DIAG_NAME_INDEX(note_module_odr_violation_possible_decl)
+DIAG_NAME_INDEX(note_module_odr_violation_template_parameter)
+DIAG_NAME_INDEX(note_mt_message)
+DIAG_NAME_INDEX(note_multiversioning_caused_here)
+DIAG_NAME_INDEX(note_namespace_defined_here)
+DIAG_NAME_INDEX(note_neon_vector_initializer_non_portable)
+DIAG_NAME_INDEX(note_neon_vector_initializer_non_portable_q)
+DIAG_NAME_INDEX(note_next_field_declaration)
+DIAG_NAME_INDEX(note_next_ivar_declaration)
+DIAG_NAME_INDEX(note_non_deducible_parameter)
+DIAG_NAME_INDEX(note_non_instantiated_member_here)
+DIAG_NAME_INDEX(note_non_literal_base_class)
+DIAG_NAME_INDEX(note_non_literal_field)
+DIAG_NAME_INDEX(note_non_literal_incomplete)
+DIAG_NAME_INDEX(note_non_literal_lambda)
+DIAG_NAME_INDEX(note_non_literal_no_constexpr_ctors)
+DIAG_NAME_INDEX(note_non_literal_nontrivial_dtor)
+DIAG_NAME_INDEX(note_non_literal_user_provided_dtor)
+DIAG_NAME_INDEX(note_non_literal_virtual_base)
+DIAG_NAME_INDEX(note_non_template_in_template_id_found)
+DIAG_NAME_INDEX(note_non_usual_function_declared_here)
+DIAG_NAME_INDEX(note_nontemplate_decl_here)
+DIAG_NAME_INDEX(note_nontrivial_default_arg)
+DIAG_NAME_INDEX(note_nontrivial_field)
+DIAG_NAME_INDEX(note_nontrivial_has_virtual)
+DIAG_NAME_INDEX(note_nontrivial_in_class_init)
+DIAG_NAME_INDEX(note_nontrivial_no_copy)
+DIAG_NAME_INDEX(note_nontrivial_no_def_ctor)
+DIAG_NAME_INDEX(note_nontrivial_objc_ownership)
+DIAG_NAME_INDEX(note_nontrivial_param_type)
+DIAG_NAME_INDEX(note_nontrivial_subobject)
+DIAG_NAME_INDEX(note_nontrivial_user_provided)
+DIAG_NAME_INDEX(note_nontrivial_variadic)
+DIAG_NAME_INDEX(note_nontrivial_virtual_dtor)
+DIAG_NAME_INDEX(note_noreturn_missing_first_decl)
+DIAG_NAME_INDEX(note_not_found_by_two_phase_lookup)
+DIAG_NAME_INDEX(note_nullability_fix_it)
+DIAG_NAME_INDEX(note_nullability_here)
+DIAG_NAME_INDEX(note_nullability_type_specifier)
+DIAG_NAME_INDEX(note_objc_circular_container_declared_here)
+DIAG_NAME_INDEX(note_objc_container_start)
+DIAG_NAME_INDEX(note_objc_designated_init_marked_here)
+DIAG_NAME_INDEX(note_objc_literal_comparison_isequal)
+DIAG_NAME_INDEX(note_objc_literal_method_param)
+DIAG_NAME_INDEX(note_objc_literal_method_return)
+DIAG_NAME_INDEX(note_objc_needs_superclass)
+DIAG_NAME_INDEX(note_objc_type_param_here)
+DIAG_NAME_INDEX(note_objc_unsafe_perform_selector_method_declared_here)
+DIAG_NAME_INDEX(note_odr_base)
+DIAG_NAME_INDEX(note_odr_bit_field)
+DIAG_NAME_INDEX(note_odr_defined_here)
+DIAG_NAME_INDEX(note_odr_enumerator)
+DIAG_NAME_INDEX(note_odr_field)
+DIAG_NAME_INDEX(note_odr_field_name)
+DIAG_NAME_INDEX(note_odr_friend)
+DIAG_NAME_INDEX(note_odr_missing_base)
+DIAG_NAME_INDEX(note_odr_missing_enumerator)
+DIAG_NAME_INDEX(note_odr_missing_field)
+DIAG_NAME_INDEX(note_odr_missing_friend)
+DIAG_NAME_INDEX(note_odr_not_bit_field)
+DIAG_NAME_INDEX(note_odr_number_of_bases)
+DIAG_NAME_INDEX(note_odr_objc_method_here)
+DIAG_NAME_INDEX(note_odr_objc_missing_superclass)
+DIAG_NAME_INDEX(note_odr_objc_property_impl_kind)
+DIAG_NAME_INDEX(note_odr_objc_superclass)
+DIAG_NAME_INDEX(note_odr_objc_synthesize_ivar_here)
+DIAG_NAME_INDEX(note_odr_parameter_pack_non_pack)
+DIAG_NAME_INDEX(note_odr_tag_kind_here)
+DIAG_NAME_INDEX(note_odr_template_parameter_here)
+DIAG_NAME_INDEX(note_odr_template_parameter_list)
+DIAG_NAME_INDEX(note_odr_value_here)
+DIAG_NAME_INDEX(note_odr_virtual_base)
+DIAG_NAME_INDEX(note_omp_atomic_capture)
+DIAG_NAME_INDEX(note_omp_atomic_previous_clause)
+DIAG_NAME_INDEX(note_omp_atomic_read_write)
+DIAG_NAME_INDEX(note_omp_atomic_update)
+DIAG_NAME_INDEX(note_omp_collapse_ordered_expr)
+DIAG_NAME_INDEX(note_omp_conversion_here)
+DIAG_NAME_INDEX(note_omp_critical_hint_here)
+DIAG_NAME_INDEX(note_omp_critical_no_hint)
+DIAG_NAME_INDEX(note_omp_explicit_dsa)
+DIAG_NAME_INDEX(note_omp_implicit_dsa)
+DIAG_NAME_INDEX(note_omp_invalid_length_on_this_ptr_mapping)
+DIAG_NAME_INDEX(note_omp_invalid_lower_bound_on_this_ptr_mapping)
+DIAG_NAME_INDEX(note_omp_invalid_subscript_on_this_ptr_map)
+DIAG_NAME_INDEX(note_omp_loop_cond_requres_compatible_incr)
+DIAG_NAME_INDEX(note_omp_nested_statement_here)
+DIAG_NAME_INDEX(note_omp_nested_teams_construct_here)
+DIAG_NAME_INDEX(note_omp_nowait_clause_here)
+DIAG_NAME_INDEX(note_omp_ordered_param)
+DIAG_NAME_INDEX(note_omp_predetermined_dsa)
+DIAG_NAME_INDEX(note_omp_previous_critical_region)
+DIAG_NAME_INDEX(note_omp_previous_grainsize_num_tasks)
+DIAG_NAME_INDEX(note_omp_previous_named_if_clause)
+DIAG_NAME_INDEX(note_omp_previous_reduction_identifier)
+DIAG_NAME_INDEX(note_omp_referenced)
+DIAG_NAME_INDEX(note_omp_requires_previous_clause)
+DIAG_NAME_INDEX(note_omp_task_predetermined_firstprivate_here)
+DIAG_NAME_INDEX(note_opencl_typedef_access_qualifier)
+DIAG_NAME_INDEX(note_operator_arrow_depth)
+DIAG_NAME_INDEX(note_operator_arrow_here)
+DIAG_NAME_INDEX(note_operator_arrows_suppressed)
+DIAG_NAME_INDEX(note_overridden_marked_noescape)
+DIAG_NAME_INDEX(note_overridden_method)
+DIAG_NAME_INDEX(note_overridden_virtual_function)
+DIAG_NAME_INDEX(note_ovl_builtin_binary_candidate)
+DIAG_NAME_INDEX(note_ovl_builtin_unary_candidate)
+DIAG_NAME_INDEX(note_ovl_candidate)
+DIAG_NAME_INDEX(note_ovl_candidate_arity)
+DIAG_NAME_INDEX(note_ovl_candidate_arity_one)
+DIAG_NAME_INDEX(note_ovl_candidate_bad_addrspace)
+DIAG_NAME_INDEX(note_ovl_candidate_bad_arc_conv)
+DIAG_NAME_INDEX(note_ovl_candidate_bad_base_to_derived_conv)
+DIAG_NAME_INDEX(note_ovl_candidate_bad_conv)
+DIAG_NAME_INDEX(note_ovl_candidate_bad_conv_incomplete)
+DIAG_NAME_INDEX(note_ovl_candidate_bad_cvr)
+DIAG_NAME_INDEX(note_ovl_candidate_bad_cvr_this)
+DIAG_NAME_INDEX(note_ovl_candidate_bad_deduction)
+DIAG_NAME_INDEX(note_ovl_candidate_bad_gc)
+DIAG_NAME_INDEX(note_ovl_candidate_bad_list_argument)
+DIAG_NAME_INDEX(note_ovl_candidate_bad_lvalue)
+DIAG_NAME_INDEX(note_ovl_candidate_bad_overload)
+DIAG_NAME_INDEX(note_ovl_candidate_bad_ownership)
+DIAG_NAME_INDEX(note_ovl_candidate_bad_target)
+DIAG_NAME_INDEX(note_ovl_candidate_bad_unaligned)
+DIAG_NAME_INDEX(note_ovl_candidate_deduced_mismatch)
+DIAG_NAME_INDEX(note_ovl_candidate_deleted)
+DIAG_NAME_INDEX(note_ovl_candidate_disabled_by_enable_if)
+DIAG_NAME_INDEX(note_ovl_candidate_disabled_by_extension)
+DIAG_NAME_INDEX(note_ovl_candidate_disabled_by_function_cond_attr)
+DIAG_NAME_INDEX(note_ovl_candidate_disabled_by_requirement)
+DIAG_NAME_INDEX(note_ovl_candidate_explicit_arg_mismatch_named)
+DIAG_NAME_INDEX(note_ovl_candidate_explicit_arg_mismatch_unnamed)
+DIAG_NAME_INDEX(note_ovl_candidate_has_pass_object_size_params)
+DIAG_NAME_INDEX(note_ovl_candidate_illegal_constructor)
+DIAG_NAME_INDEX(note_ovl_candidate_incomplete_deduction)
+DIAG_NAME_INDEX(note_ovl_candidate_incomplete_deduction_pack)
+DIAG_NAME_INDEX(note_ovl_candidate_inconsistent_deduction)
+DIAG_NAME_INDEX(note_ovl_candidate_inconsistent_deduction_types)
+DIAG_NAME_INDEX(note_ovl_candidate_inherited_constructor)
+DIAG_NAME_INDEX(note_ovl_candidate_inherited_constructor_slice)
+DIAG_NAME_INDEX(note_ovl_candidate_instantiation_depth)
+DIAG_NAME_INDEX(note_ovl_candidate_non_deduced_mismatch)
+DIAG_NAME_INDEX(note_ovl_candidate_non_deduced_mismatch_qualified)
+DIAG_NAME_INDEX(note_ovl_candidate_substitution_failure)
+DIAG_NAME_INDEX(note_ovl_candidate_underqualified)
+DIAG_NAME_INDEX(note_ovl_surrogate_cand)
+DIAG_NAME_INDEX(note_ovl_too_many_candidates)
+DIAG_NAME_INDEX(note_ownership_returns_index_mismatch)
+DIAG_NAME_INDEX(note_parameter_here)
+DIAG_NAME_INDEX(note_parameter_named_here)
+DIAG_NAME_INDEX(note_parameter_pack_here)
+DIAG_NAME_INDEX(note_parameter_type)
+DIAG_NAME_INDEX(note_partial_availability_specified_here)
+DIAG_NAME_INDEX(note_partial_spec_match)
+DIAG_NAME_INDEX(note_partial_spec_not_more_specialized_than_primary)
+DIAG_NAME_INDEX(note_partial_specialization_declared_here)
+DIAG_NAME_INDEX(note_pch_rebuild_required)
+DIAG_NAME_INDEX(note_pch_required_by)
+DIAG_NAME_INDEX(note_performs_forbidden_arc_conversion)
+DIAG_NAME_INDEX(note_possibility)
+DIAG_NAME_INDEX(note_possible_target_of_call)
+DIAG_NAME_INDEX(note_pp_ambiguous_macro_chosen)
+DIAG_NAME_INDEX(note_pp_ambiguous_macro_other)
+DIAG_NAME_INDEX(note_pp_framework_without_header)
+DIAG_NAME_INDEX(note_pp_module_begin_here)
+DIAG_NAME_INDEX(note_pragma_attribute_applied_decl_here)
+DIAG_NAME_INDEX(note_pragma_attribute_namespace_on_attribute)
+DIAG_NAME_INDEX(note_pragma_attribute_region_ends_here)
+DIAG_NAME_INDEX(note_pragma_attribute_use_attribute_kw)
+DIAG_NAME_INDEX(note_pragma_entered_here)
+DIAG_NAME_INDEX(note_pragma_pack_here)
+DIAG_NAME_INDEX(note_pragma_pack_pop_instead_reset)
+DIAG_NAME_INDEX(note_precedence_bitwise_first)
+DIAG_NAME_INDEX(note_precedence_conditional_first)
+DIAG_NAME_INDEX(note_precedence_silence)
+DIAG_NAME_INDEX(note_prev_module_declaration)
+DIAG_NAME_INDEX(note_prev_module_definition)
+DIAG_NAME_INDEX(note_prev_module_definition_from_ast_file)
+DIAG_NAME_INDEX(note_prev_partial_spec_here)
+DIAG_NAME_INDEX(note_previous_access_declaration)
+DIAG_NAME_INDEX(note_previous_attribute)
+DIAG_NAME_INDEX(note_previous_builtin_declaration)
+DIAG_NAME_INDEX(note_previous_decl)
+DIAG_NAME_INDEX(note_previous_declaration)
+DIAG_NAME_INDEX(note_previous_default_assoc)
+DIAG_NAME_INDEX(note_previous_definition)
+DIAG_NAME_INDEX(note_previous_exception_handler)
+DIAG_NAME_INDEX(note_previous_explicit_instantiation)
+DIAG_NAME_INDEX(note_previous_implicit_declaration)
+DIAG_NAME_INDEX(note_previous_initializer)
+DIAG_NAME_INDEX(note_previous_ms_inheritance)
+DIAG_NAME_INDEX(note_previous_namespace_alias)
+DIAG_NAME_INDEX(note_previous_template_specialization)
+DIAG_NAME_INDEX(note_previous_use)
+DIAG_NAME_INDEX(note_previous_uuid)
+DIAG_NAME_INDEX(note_printf_c_str)
+DIAG_NAME_INDEX(note_prior_template_arg_substitution)
+DIAG_NAME_INDEX(note_private_extern)
+DIAG_NAME_INDEX(note_private_top_level_defined)
+DIAG_NAME_INDEX(note_property_attribute)
+DIAG_NAME_INDEX(note_property_declare)
+DIAG_NAME_INDEX(note_property_synthesize)
+DIAG_NAME_INDEX(note_protected_by___block)
+DIAG_NAME_INDEX(note_protected_by_cleanup)
+DIAG_NAME_INDEX(note_protected_by_constexpr_if)
+DIAG_NAME_INDEX(note_protected_by_cxx_catch)
+DIAG_NAME_INDEX(note_protected_by_cxx_try)
+DIAG_NAME_INDEX(note_protected_by_if_available)
+DIAG_NAME_INDEX(note_protected_by_non_trivial_c_struct_init)
+DIAG_NAME_INDEX(note_protected_by_objc_autoreleasepool)
+DIAG_NAME_INDEX(note_protected_by_objc_catch)
+DIAG_NAME_INDEX(note_protected_by_objc_fast_enumeration)
+DIAG_NAME_INDEX(note_protected_by_objc_finally)
+DIAG_NAME_INDEX(note_protected_by_objc_strong_init)
+DIAG_NAME_INDEX(note_protected_by_objc_synchronized)
+DIAG_NAME_INDEX(note_protected_by_objc_try)
+DIAG_NAME_INDEX(note_protected_by_objc_weak_init)
+DIAG_NAME_INDEX(note_protected_by_seh_except)
+DIAG_NAME_INDEX(note_protected_by_seh_finally)
+DIAG_NAME_INDEX(note_protected_by_seh_try)
+DIAG_NAME_INDEX(note_protected_by_variable_init)
+DIAG_NAME_INDEX(note_protected_by_variable_non_pod)
+DIAG_NAME_INDEX(note_protected_by_variable_nontriv_destructor)
+DIAG_NAME_INDEX(note_protected_by_vla)
+DIAG_NAME_INDEX(note_protected_by_vla_type_alias)
+DIAG_NAME_INDEX(note_protected_by_vla_typedef)
+DIAG_NAME_INDEX(note_protocol_decl)
+DIAG_NAME_INDEX(note_protocol_decl_undefined)
+DIAG_NAME_INDEX(note_protocol_method)
+DIAG_NAME_INDEX(note_protocol_property_declare)
+DIAG_NAME_INDEX(note_pure_qualified_call_kext)
+DIAG_NAME_INDEX(note_pure_virtual_function)
+DIAG_NAME_INDEX(note_raii_guard_add_name)
+DIAG_NAME_INDEX(note_receiver_class_declared)
+DIAG_NAME_INDEX(note_receiver_expr_here)
+DIAG_NAME_INDEX(note_receiver_is_id)
+DIAG_NAME_INDEX(note_redefinition_include_same_file)
+DIAG_NAME_INDEX(note_redefinition_modules_same_file)
+DIAG_NAME_INDEX(note_ref_or_ptr_member_declared_here)
+DIAG_NAME_INDEX(note_refconst_member_not_initialized)
+DIAG_NAME_INDEX(note_reference_is_return_value)
+DIAG_NAME_INDEX(note_referenced_class_template)
+DIAG_NAME_INDEX(note_reinterpret_updowncast_use_static)
+DIAG_NAME_INDEX(note_related_result_type_explicit)
+DIAG_NAME_INDEX(note_related_result_type_family)
+DIAG_NAME_INDEX(note_related_result_type_inferred)
+DIAG_NAME_INDEX(note_related_result_type_overridden)
+DIAG_NAME_INDEX(note_remove_abs)
+DIAG_NAME_INDEX(note_remove_max_call)
+DIAG_NAME_INDEX(note_remove_move)
+DIAG_NAME_INDEX(note_remove_parens_for_variable_declaration)
+DIAG_NAME_INDEX(note_replace_abs_function)
+DIAG_NAME_INDEX(note_riscv_repeated_interrupt_attribute)
+DIAG_NAME_INDEX(note_second_module_difference)
+DIAG_NAME_INDEX(note_sentinel_here)
+DIAG_NAME_INDEX(note_shadow_field)
+DIAG_NAME_INDEX(note_silence_aligned_allocation_unavailable)
+DIAG_NAME_INDEX(note_specialized_decl)
+DIAG_NAME_INDEX(note_specialized_entity)
+DIAG_NAME_INDEX(note_string_plus_scalar_silence)
+DIAG_NAME_INDEX(note_strlcpycat_wrong_size)
+DIAG_NAME_INDEX(note_strncat_wrong_size)
+DIAG_NAME_INDEX(note_struct_class_suggestion)
+DIAG_NAME_INDEX(note_suggest_disabling_all_checkers)
+DIAG_NAME_INDEX(note_suggest_parens_for_macro)
+DIAG_NAME_INDEX(note_suppress_ctad_maybe_unsupported)
+DIAG_NAME_INDEX(note_suppressed_class_declare)
+DIAG_NAME_INDEX(note_surrounding_namespace_ends_here)
+DIAG_NAME_INDEX(note_surrounding_namespace_starts_here)
+DIAG_NAME_INDEX(note_suspicious_bzero_size_silence)
+DIAG_NAME_INDEX(note_suspicious_sizeof_memset_silence)
+DIAG_NAME_INDEX(note_switch_conversion)
+DIAG_NAME_INDEX(note_template_arg_internal_object)
+DIAG_NAME_INDEX(note_template_arg_refers_here)
+DIAG_NAME_INDEX(note_template_arg_refers_here_func)
+DIAG_NAME_INDEX(note_template_class_explicit_specialization_was_here)
+DIAG_NAME_INDEX(note_template_class_instantiation_here)
+DIAG_NAME_INDEX(note_template_class_instantiation_was_here)
+DIAG_NAME_INDEX(note_template_decl_here)
+DIAG_NAME_INDEX(note_template_declared_here)
+DIAG_NAME_INDEX(note_template_default_arg_checking)
+DIAG_NAME_INDEX(note_template_enum_def_here)
+DIAG_NAME_INDEX(note_template_exception_spec_instantiation_here)
+DIAG_NAME_INDEX(note_template_kw_refers_to_non_template)
+DIAG_NAME_INDEX(note_template_member_class_here)
+DIAG_NAME_INDEX(note_template_member_function_here)
+DIAG_NAME_INDEX(note_template_nontype_parm_different_type)
+DIAG_NAME_INDEX(note_template_nontype_parm_prev_declaration)
+DIAG_NAME_INDEX(note_template_nsdmi_here)
+DIAG_NAME_INDEX(note_template_param_different_kind)
+DIAG_NAME_INDEX(note_template_param_here)
+DIAG_NAME_INDEX(note_template_param_list_different_arity)
+DIAG_NAME_INDEX(note_template_param_prev_default_arg)
+DIAG_NAME_INDEX(note_template_parameter_pack_here)
+DIAG_NAME_INDEX(note_template_parameter_pack_non_pack)
+DIAG_NAME_INDEX(note_template_prev_declaration)
+DIAG_NAME_INDEX(note_template_recursion_depth)
+DIAG_NAME_INDEX(note_template_static_data_member_def_here)
+DIAG_NAME_INDEX(note_template_type_alias_instantiation_here)
+DIAG_NAME_INDEX(note_template_unnamed_type_here)
+DIAG_NAME_INDEX(note_template_variable_def_here)
+DIAG_NAME_INDEX(note_thread_warning_in_fun)
+DIAG_NAME_INDEX(note_throw_in_dtor)
+DIAG_NAME_INDEX(note_throw_in_function)
+DIAG_NAME_INDEX(note_transparent_union_first_field_size_align)
+DIAG_NAME_INDEX(note_type_being_defined)
+DIAG_NAME_INDEX(note_type_incomplete)
+DIAG_NAME_INDEX(note_typecheck_assign_const)
+DIAG_NAME_INDEX(note_typecheck_invalid_operands_converted)
+DIAG_NAME_INDEX(note_typecheck_member_reference_suggestion)
+DIAG_NAME_INDEX(note_typedef_changes_linkage)
+DIAG_NAME_INDEX(note_typename_refers_here)
+DIAG_NAME_INDEX(note_ucn_four_not_eight)
+DIAG_NAME_INDEX(note_unguarded_available_silence)
+DIAG_NAME_INDEX(note_unimplemented_constexpr_lambda_feature_ast)
+DIAG_NAME_INDEX(note_uninit_fixit_remove_cond)
+DIAG_NAME_INDEX(note_uninit_in_this_constructor)
+DIAG_NAME_INDEX(note_uninit_reference_member)
+DIAG_NAME_INDEX(note_uninit_var_use)
+DIAG_NAME_INDEX(note_unreachable_silence)
+DIAG_NAME_INDEX(note_use_dashdash)
+DIAG_NAME_INDEX(note_use_ifdef_guards)
+DIAG_NAME_INDEX(note_use_non_reference_type)
+DIAG_NAME_INDEX(note_use_reference_type)
+DIAG_NAME_INDEX(note_use_thread_local)
+DIAG_NAME_INDEX(note_use_type_or_non_reference)
+DIAG_NAME_INDEX(note_used_here)
+DIAG_NAME_INDEX(note_used_in_initialization_here)
+DIAG_NAME_INDEX(note_user_declared_ctor)
+DIAG_NAME_INDEX(note_using)
+DIAG_NAME_INDEX(note_using_decl)
+DIAG_NAME_INDEX(note_using_decl_class_member_workaround)
+DIAG_NAME_INDEX(note_using_decl_conflict)
+DIAG_NAME_INDEX(note_using_decl_target)
+DIAG_NAME_INDEX(note_using_value_decl_missing_typename)
+DIAG_NAME_INDEX(note_valid_options)
+DIAG_NAME_INDEX(note_value_initialization_here)
+DIAG_NAME_INDEX(note_var_declared_here)
+DIAG_NAME_INDEX(note_var_explicitly_captured_here)
+DIAG_NAME_INDEX(note_var_fixit_add_initialization)
+DIAG_NAME_INDEX(note_var_prev_partial_spec_here)
+DIAG_NAME_INDEX(note_vbase_moved_here)
+DIAG_NAME_INDEX(note_vla_unsupported)
+DIAG_NAME_INDEX(note_which_delegates_to)
+DIAG_NAME_INDEX(note_while_in_implementation)
+DIAG_NAME_INDEX(note_widen_bitfield)
+DIAG_NAME_INDEX(note_within_field_of_type)
+DIAG_NAME_INDEX(null_in_char_or_string)
+DIAG_NAME_INDEX(null_in_file)
+DIAG_NAME_INDEX(override_keyword_hides_virtual_member_function)
+DIAG_NAME_INDEX(override_keyword_only_allowed_on_virtual_member_functions)
+DIAG_NAME_INDEX(pp_disabled_macro_expansion)
+DIAG_NAME_INDEX(pp_err_elif_after_else)
+DIAG_NAME_INDEX(pp_err_elif_without_if)
+DIAG_NAME_INDEX(pp_err_else_after_else)
+DIAG_NAME_INDEX(pp_err_else_without_if)
+DIAG_NAME_INDEX(pp_hash_warning)
+DIAG_NAME_INDEX(pp_include_macros_out_of_predefines)
+DIAG_NAME_INDEX(pp_include_next_absolute_path)
+DIAG_NAME_INDEX(pp_include_next_in_primary)
+DIAG_NAME_INDEX(pp_invalid_string_literal)
+DIAG_NAME_INDEX(pp_macro_not_used)
+DIAG_NAME_INDEX(pp_nonportable_path)
+DIAG_NAME_INDEX(pp_nonportable_system_path)
+DIAG_NAME_INDEX(pp_out_of_date_dependency)
+DIAG_NAME_INDEX(pp_poisoning_existing_macro)
+DIAG_NAME_INDEX(pp_pragma_once_in_main_file)
+DIAG_NAME_INDEX(pp_pragma_sysheader_in_main_file)
+DIAG_NAME_INDEX(remark_fe_backend_optimization_remark)
+DIAG_NAME_INDEX(remark_fe_backend_optimization_remark_analysis)
+DIAG_NAME_INDEX(remark_fe_backend_optimization_remark_analysis_aliasing)
+DIAG_NAME_INDEX(remark_fe_backend_optimization_remark_analysis_fpcommute)
+DIAG_NAME_INDEX(remark_fe_backend_optimization_remark_missed)
+DIAG_NAME_INDEX(remark_fe_backend_plugin)
+DIAG_NAME_INDEX(remark_module_build)
+DIAG_NAME_INDEX(remark_module_build_done)
+DIAG_NAME_INDEX(remark_module_lock_failure)
+DIAG_NAME_INDEX(remark_module_lock_timeout)
+DIAG_NAME_INDEX(remark_sanitize_address_insert_extra_padding_accepted)
+DIAG_NAME_INDEX(remark_sanitize_address_insert_extra_padding_rejected)
+DIAG_NAME_INDEX(trigraph_converted)
+DIAG_NAME_INDEX(trigraph_ends_block_comment)
+DIAG_NAME_INDEX(trigraph_ignored)
+DIAG_NAME_INDEX(trigraph_ignored_block_comment)
+DIAG_NAME_INDEX(warn_O4_is_O3)
+DIAG_NAME_INDEX(warn_abs_too_small)
+DIAG_NAME_INDEX(warn_abstract_final_class)
+DIAG_NAME_INDEX(warn_abstract_vbase_init_ignored)
+DIAG_NAME_INDEX(warn_access_decl_deprecated)
+DIAG_NAME_INDEX(warn_accessor_property_type_mismatch)
+DIAG_NAME_INDEX(warn_acquire_requires_negative_cap)
+DIAG_NAME_INDEX(warn_acquired_before)
+DIAG_NAME_INDEX(warn_acquired_before_after_cycle)
+DIAG_NAME_INDEX(warn_addition_in_bitshift)
+DIAG_NAME_INDEX(warn_address_of_reference_bool_conversion)
+DIAG_NAME_INDEX(warn_address_of_reference_null_compare)
+DIAG_NAME_INDEX(warn_alias_to_weak_alias)
+DIAG_NAME_INDEX(warn_alias_with_section)
+DIAG_NAME_INDEX(warn_alloca_align_alignof)
+DIAG_NAME_INDEX(warn_ambiguous_suitable_delete_function_found)
+DIAG_NAME_INDEX(warn_anon_bitfield_width_exceeds_type_width)
+DIAG_NAME_INDEX(warn_arc_bridge_cast_nonarc)
+DIAG_NAME_INDEX(warn_arc_lifetime_result_type)
+DIAG_NAME_INDEX(warn_arc_literal_assign)
+DIAG_NAME_INDEX(warn_arc_object_memaccess)
+DIAG_NAME_INDEX(warn_arc_perform_selector_leaks)
+DIAG_NAME_INDEX(warn_arc_possible_repeated_use_of_weak)
+DIAG_NAME_INDEX(warn_arc_repeated_use_of_weak)
+DIAG_NAME_INDEX(warn_arc_retain_cycle)
+DIAG_NAME_INDEX(warn_arc_retained_assign)
+DIAG_NAME_INDEX(warn_arc_retained_property_assign)
+DIAG_NAME_INDEX(warn_arc_strong_pointer_objc_pointer)
+DIAG_NAME_INDEX(warn_arcmt_nsalloc_realloc)
+DIAG_NAME_INDEX(warn_argument_invalid_range)
+DIAG_NAME_INDEX(warn_arm_interrupt_calling_convention)
+DIAG_NAME_INDEX(warn_array_index_exceeds_bounds)
+DIAG_NAME_INDEX(warn_array_index_precedes_bounds)
+DIAG_NAME_INDEX(warn_asm_label_on_auto_decl)
+DIAG_NAME_INDEX(warn_asm_mismatched_size_modifier)
+DIAG_NAME_INDEX(warn_asm_qualifier_ignored)
+DIAG_NAME_INDEX(warn_assume_side_effects)
+DIAG_NAME_INDEX(warn_at_available_unchecked_use)
+DIAG_NAME_INDEX(warn_atimport_in_framework_header)
+DIAG_NAME_INDEX(warn_atl_uuid_deprecated)
+DIAG_NAME_INDEX(warn_atomic_implicit_seq_cst)
+DIAG_NAME_INDEX(warn_atomic_op_has_invalid_memory_order)
+DIAG_NAME_INDEX(warn_atomic_op_misaligned)
+DIAG_NAME_INDEX(warn_atomic_property_rule)
+DIAG_NAME_INDEX(warn_attr_abi_tag_namespace)
+DIAG_NAME_INDEX(warn_attr_on_unconsumable_class)
+DIAG_NAME_INDEX(warn_attribute_address_multiple_identical_qualifiers)
+DIAG_NAME_INDEX(warn_attribute_after_definition_ignored)
+DIAG_NAME_INDEX(warn_attribute_argument_n_negative)
+DIAG_NAME_INDEX(warn_attribute_dll_instantiated_base_class)
+DIAG_NAME_INDEX(warn_attribute_dll_redeclaration)
+DIAG_NAME_INDEX(warn_attribute_dllexport_explicit_instantiation_decl)
+DIAG_NAME_INDEX(warn_attribute_dllimport_static_field_definition)
+DIAG_NAME_INDEX(warn_attribute_iboutlet)
+DIAG_NAME_INDEX(warn_attribute_ignored)
+DIAG_NAME_INDEX(warn_attribute_ignored_for_field_of_type)
+DIAG_NAME_INDEX(warn_attribute_ignored_on_inline)
+DIAG_NAME_INDEX(warn_attribute_invalid_on_definition)
+DIAG_NAME_INDEX(warn_attribute_no_decl)
+DIAG_NAME_INDEX(warn_attribute_nonnull_no_pointers)
+DIAG_NAME_INDEX(warn_attribute_nonnull_parm_no_args)
+DIAG_NAME_INDEX(warn_attribute_not_on_decl)
+DIAG_NAME_INDEX(warn_attribute_on_function_definition)
+DIAG_NAME_INDEX(warn_attribute_packed_for_bitfield)
+DIAG_NAME_INDEX(warn_attribute_pointer_or_reference_only)
+DIAG_NAME_INDEX(warn_attribute_pointers_only)
+DIAG_NAME_INDEX(warn_attribute_precede_definition)
+DIAG_NAME_INDEX(warn_attribute_protected_visibility)
+DIAG_NAME_INDEX(warn_attribute_return_pointers_only)
+DIAG_NAME_INDEX(warn_attribute_return_pointers_refs_only)
+DIAG_NAME_INDEX(warn_attribute_section_on_redeclaration)
+DIAG_NAME_INDEX(warn_attribute_sentinel_named_arguments)
+DIAG_NAME_INDEX(warn_attribute_sentinel_not_variadic)
+DIAG_NAME_INDEX(warn_attribute_type_not_supported)
+DIAG_NAME_INDEX(warn_attribute_unknown_visibility)
+DIAG_NAME_INDEX(warn_attribute_void_function_method)
+DIAG_NAME_INDEX(warn_attribute_weak_on_field)
+DIAG_NAME_INDEX(warn_attribute_weak_on_local)
+DIAG_NAME_INDEX(warn_attribute_wrong_decl_type)
+DIAG_NAME_INDEX(warn_attribute_wrong_decl_type_str)
+DIAG_NAME_INDEX(warn_auto_implicit_atomic_property)
+DIAG_NAME_INDEX(warn_auto_module_import)
+DIAG_NAME_INDEX(warn_auto_readonly_iboutlet_property)
+DIAG_NAME_INDEX(warn_auto_storage_class)
+DIAG_NAME_INDEX(warn_auto_synthesizing_protocol_property)
+DIAG_NAME_INDEX(warn_auto_var_is_id)
+DIAG_NAME_INDEX(warn_autosynthesis_property_in_superclass)
+DIAG_NAME_INDEX(warn_autosynthesis_property_ivar_match)
+DIAG_NAME_INDEX(warn_availability_and_unavailable)
+DIAG_NAME_INDEX(warn_availability_on_static_initializer)
+DIAG_NAME_INDEX(warn_availability_swift_unavailable_deprecated_only)
+DIAG_NAME_INDEX(warn_availability_unknown_platform)
+DIAG_NAME_INDEX(warn_availability_version_ordering)
+DIAG_NAME_INDEX(warn_bad_character_encoding)
+DIAG_NAME_INDEX(warn_bad_function_cast)
+DIAG_NAME_INDEX(warn_bad_receiver_type)
+DIAG_NAME_INDEX(warn_bad_string_encoding)
+DIAG_NAME_INDEX(warn_base_class_is_uninit)
+DIAG_NAME_INDEX(warn_bind_ref_member_to_parameter)
+DIAG_NAME_INDEX(warn_binding_null_to_reference)
+DIAG_NAME_INDEX(warn_bitfield_too_small_for_enum)
+DIAG_NAME_INDEX(warn_bitfield_width_exceeds_type_width)
+DIAG_NAME_INDEX(warn_bitwise_op_in_bitwise_op)
+DIAG_NAME_INDEX(warn_block_capture_autoreleasing)
+DIAG_NAME_INDEX(warn_block_literal_attributes_on_omitted_return_type)
+DIAG_NAME_INDEX(warn_block_literal_qualifiers_on_omitted_return_type)
+DIAG_NAME_INDEX(warn_bool_switch_condition)
+DIAG_NAME_INDEX(warn_braces_around_scalar_init)
+DIAG_NAME_INDEX(warn_break_binds_to_switch)
+DIAG_NAME_INDEX(warn_builtin_unknown)
+DIAG_NAME_INDEX(warn_c99_compat_unicode_id)
+DIAG_NAME_INDEX(warn_c99_compat_unicode_literal)
+DIAG_NAME_INDEX(warn_c_kext)
+DIAG_NAME_INDEX(warn_call_to_pure_virtual_member_function_from_ctor_dtor)
+DIAG_NAME_INDEX(warn_call_wrong_number_of_arguments)
+DIAG_NAME_INDEX(warn_cannot_pass_non_pod_arg_to_vararg)
+DIAG_NAME_INDEX(warn_cannot_resolve_lock)
+DIAG_NAME_INDEX(warn_case_empty_range)
+DIAG_NAME_INDEX(warn_case_value_overflow)
+DIAG_NAME_INDEX(warn_cast_align)
+DIAG_NAME_INDEX(warn_cast_calling_conv)
+DIAG_NAME_INDEX(warn_cast_nonnull_to_bool)
+DIAG_NAME_INDEX(warn_cast_pointer_from_sel)
+DIAG_NAME_INDEX(warn_cast_qual)
+DIAG_NAME_INDEX(warn_cast_qual2)
+DIAG_NAME_INDEX(warn_category_method_impl_match)
+DIAG_NAME_INDEX(warn_cconv_ignored)
+DIAG_NAME_INDEX(warn_cconv_knr)
+DIAG_NAME_INDEX(warn_cconv_structors)
+DIAG_NAME_INDEX(warn_cconv_varargs)
+DIAG_NAME_INDEX(warn_cdtor_function_try_handler_mem_expr)
+DIAG_NAME_INDEX(warn_cfstring_truncated)
+DIAG_NAME_INDEX(warn_char_constant_too_large)
+DIAG_NAME_INDEX(warn_class_method_not_found)
+DIAG_NAME_INDEX(warn_class_method_not_found_with_typo)
+DIAG_NAME_INDEX(warn_cleanup_ext)
+DIAG_NAME_INDEX(warn_cocoa_naming_owned_rule)
+DIAG_NAME_INDEX(warn_collection_expr_type)
+DIAG_NAME_INDEX(warn_comma_operator)
+DIAG_NAME_INDEX(warn_comparison_always)
+DIAG_NAME_INDEX(warn_comparison_bitwise_always)
+DIAG_NAME_INDEX(warn_comparison_of_mixed_enum_types)
+DIAG_NAME_INDEX(warn_comparison_of_mixed_enum_types_switch)
+DIAG_NAME_INDEX(warn_concatenated_nsarray_literal)
+DIAG_NAME_INDEX(warn_condition_is_assignment)
+DIAG_NAME_INDEX(warn_condition_is_idiomatic_assignment)
+DIAG_NAME_INDEX(warn_conflicting_nullability_attr_overriding_param_types)
+DIAG_NAME_INDEX(warn_conflicting_nullability_attr_overriding_ret_types)
+DIAG_NAME_INDEX(warn_conflicting_overriding_param_modifiers)
+DIAG_NAME_INDEX(warn_conflicting_overriding_param_types)
+DIAG_NAME_INDEX(warn_conflicting_overriding_ret_type_modifiers)
+DIAG_NAME_INDEX(warn_conflicting_overriding_ret_types)
+DIAG_NAME_INDEX(warn_conflicting_overriding_variadic)
+DIAG_NAME_INDEX(warn_conflicting_param_modifiers)
+DIAG_NAME_INDEX(warn_conflicting_param_types)
+DIAG_NAME_INDEX(warn_conflicting_ret_type_modifiers)
+DIAG_NAME_INDEX(warn_conflicting_ret_types)
+DIAG_NAME_INDEX(warn_conflicting_variadic)
+DIAG_NAME_INDEX(warn_conv_to_base_not_used)
+DIAG_NAME_INDEX(warn_conv_to_self_not_used)
+DIAG_NAME_INDEX(warn_conv_to_void_not_used)
+DIAG_NAME_INDEX(warn_coroutine_promise_unhandled_exception_required_with_exceptions)
+DIAG_NAME_INDEX(warn_correct_comment_command_name)
+DIAG_NAME_INDEX(warn_cstruct_memaccess)
+DIAG_NAME_INDEX(warn_cstyle_param)
+DIAG_NAME_INDEX(warn_ctad_maybe_unsupported)
+DIAG_NAME_INDEX(warn_ctor_parm_shadows_field)
+DIAG_NAME_INDEX(warn_ctu_incompat_triple)
+DIAG_NAME_INDEX(warn_cuda_attr_lambda_position)
+DIAG_NAME_INDEX(warn_cxx11_compat_binary_literal)
+DIAG_NAME_INDEX(warn_cxx11_compat_constexpr_body_invalid_stmt)
+DIAG_NAME_INDEX(warn_cxx11_compat_constexpr_body_multiple_return)
+DIAG_NAME_INDEX(warn_cxx11_compat_constexpr_body_no_return)
+DIAG_NAME_INDEX(warn_cxx11_compat_constexpr_local_var)
+DIAG_NAME_INDEX(warn_cxx11_compat_constexpr_type_definition)
+DIAG_NAME_INDEX(warn_cxx11_compat_decltype_auto_type_specifier)
+DIAG_NAME_INDEX(warn_cxx11_compat_deduced_return_type)
+DIAG_NAME_INDEX(warn_cxx11_compat_digit_separator)
+DIAG_NAME_INDEX(warn_cxx11_compat_generic_lambda)
+DIAG_NAME_INDEX(warn_cxx11_compat_init_capture)
+DIAG_NAME_INDEX(warn_cxx11_compat_reserved_user_defined_literal)
+DIAG_NAME_INDEX(warn_cxx11_compat_user_defined_literal)
+DIAG_NAME_INDEX(warn_cxx11_compat_variable_template)
+DIAG_NAME_INDEX(warn_cxx11_gnu_attribute_on_type)
+DIAG_NAME_INDEX(warn_cxx11_keyword)
+DIAG_NAME_INDEX(warn_cxx11_right_shift_in_template_arg)
+DIAG_NAME_INDEX(warn_cxx14_compat_class_template_argument_deduction)
+DIAG_NAME_INDEX(warn_cxx14_compat_constexpr_if)
+DIAG_NAME_INDEX(warn_cxx14_compat_constexpr_not_const)
+DIAG_NAME_INDEX(warn_cxx14_compat_constexpr_on_lambda)
+DIAG_NAME_INDEX(warn_cxx14_compat_decomp_decl)
+DIAG_NAME_INDEX(warn_cxx14_compat_fold_expression)
+DIAG_NAME_INDEX(warn_cxx14_compat_init_statement)
+DIAG_NAME_INDEX(warn_cxx14_compat_inline_variable)
+DIAG_NAME_INDEX(warn_cxx14_compat_nested_namespace_definition)
+DIAG_NAME_INDEX(warn_cxx14_compat_ns_enum_attribute)
+DIAG_NAME_INDEX(warn_cxx14_compat_star_this_lambda_capture)
+DIAG_NAME_INDEX(warn_cxx14_compat_static_assert_no_message)
+DIAG_NAME_INDEX(warn_cxx14_compat_template_nontype_parm_auto_type)
+DIAG_NAME_INDEX(warn_cxx14_compat_template_template_param_typename)
+DIAG_NAME_INDEX(warn_cxx14_compat_u8_character_literal)
+DIAG_NAME_INDEX(warn_cxx14_compat_using_attribute_ns)
+DIAG_NAME_INDEX(warn_cxx17_compat_bitfield_member_init)
+DIAG_NAME_INDEX(warn_cxx17_compat_constexpr_body_invalid_stmt)
+DIAG_NAME_INDEX(warn_cxx17_compat_constexpr_function_try_block)
+DIAG_NAME_INDEX(warn_cxx17_compat_defaulted_method_type_mismatch)
+DIAG_NAME_INDEX(warn_cxx17_compat_equals_this_lambda_capture)
+DIAG_NAME_INDEX(warn_cxx17_compat_exception_spec_in_signature)
+DIAG_NAME_INDEX(warn_cxx17_compat_for_range_init_stmt)
+DIAG_NAME_INDEX(warn_cxx17_compat_inline_nested_namespace_definition)
+DIAG_NAME_INDEX(warn_cxx17_compat_lambda_def_ctor_assign)
+DIAG_NAME_INDEX(warn_cxx17_compat_multi_using_declaration)
+DIAG_NAME_INDEX(warn_cxx17_compat_pointer_to_const_ref_member_on_rvalue)
+DIAG_NAME_INDEX(warn_cxx17_compat_spaceship)
+DIAG_NAME_INDEX(warn_cxx17_compat_unicode_type)
+DIAG_NAME_INDEX(warn_cxx17_compat_using_declaration_pack)
+DIAG_NAME_INDEX(warn_cxx17_hex_literal)
+DIAG_NAME_INDEX(warn_cxx2a_compat_aggregate_init_with_ctors)
+DIAG_NAME_INDEX(warn_cxx2a_compat_spaceship)
+DIAG_NAME_INDEX(warn_cxx2a_compat_utf8_string)
+DIAG_NAME_INDEX(warn_cxx2a_keyword)
+DIAG_NAME_INDEX(warn_cxx98_compat_alias_declaration)
+DIAG_NAME_INDEX(warn_cxx98_compat_alignas)
+DIAG_NAME_INDEX(warn_cxx98_compat_alignof)
+DIAG_NAME_INDEX(warn_cxx98_compat_array_size_conversion)
+DIAG_NAME_INDEX(warn_cxx98_compat_attribute)
+DIAG_NAME_INDEX(warn_cxx98_compat_auto_type_specifier)
+DIAG_NAME_INDEX(warn_cxx98_compat_cast_fn_obj)
+DIAG_NAME_INDEX(warn_cxx98_compat_constexpr)
+DIAG_NAME_INDEX(warn_cxx98_compat_ctor_list_init)
+DIAG_NAME_INDEX(warn_cxx98_compat_decltype)
+DIAG_NAME_INDEX(warn_cxx98_compat_defaulted_deleted_function)
+DIAG_NAME_INDEX(warn_cxx98_compat_delegating_ctor)
+DIAG_NAME_INDEX(warn_cxx98_compat_empty_fnmacro_arg)
+DIAG_NAME_INDEX(warn_cxx98_compat_empty_scalar_initializer)
+DIAG_NAME_INDEX(warn_cxx98_compat_enum_fixed_underlying_type)
+DIAG_NAME_INDEX(warn_cxx98_compat_enum_friend)
+DIAG_NAME_INDEX(warn_cxx98_compat_enum_nested_name_spec)
+DIAG_NAME_INDEX(warn_cxx98_compat_enumerator_list_comma)
+DIAG_NAME_INDEX(warn_cxx98_compat_explicit_conversion_functions)
+DIAG_NAME_INDEX(warn_cxx98_compat_extern_template)
+DIAG_NAME_INDEX(warn_cxx98_compat_for_range)
+DIAG_NAME_INDEX(warn_cxx98_compat_friend_is_member)
+DIAG_NAME_INDEX(warn_cxx98_compat_generalized_initializer_lists)
+DIAG_NAME_INDEX(warn_cxx98_compat_goto_into_protected_scope)
+DIAG_NAME_INDEX(warn_cxx98_compat_indirect_goto_in_protected_scope)
+DIAG_NAME_INDEX(warn_cxx98_compat_initializer_list_init)
+DIAG_NAME_INDEX(warn_cxx98_compat_inline_namespace)
+DIAG_NAME_INDEX(warn_cxx98_compat_lambda)
+DIAG_NAME_INDEX(warn_cxx98_compat_less_colon_colon)
+DIAG_NAME_INDEX(warn_cxx98_compat_literal_operator)
+DIAG_NAME_INDEX(warn_cxx98_compat_literal_ucn_control_character)
+DIAG_NAME_INDEX(warn_cxx98_compat_literal_ucn_escape_basic_scs)
+DIAG_NAME_INDEX(warn_cxx98_compat_longlong)
+DIAG_NAME_INDEX(warn_cxx98_compat_no_newline_eof)
+DIAG_NAME_INDEX(warn_cxx98_compat_noexcept_decl)
+DIAG_NAME_INDEX(warn_cxx98_compat_noexcept_expr)
+DIAG_NAME_INDEX(warn_cxx98_compat_non_static_member_use)
+DIAG_NAME_INDEX(warn_cxx98_compat_nonclass_type_friend)
+DIAG_NAME_INDEX(warn_cxx98_compat_nonstatic_member_init)
+DIAG_NAME_INDEX(warn_cxx98_compat_nontrivial_union_or_anon_struct_member)
+DIAG_NAME_INDEX(warn_cxx98_compat_nullptr)
+DIAG_NAME_INDEX(warn_cxx98_compat_override_control_keyword)
+DIAG_NAME_INDEX(warn_cxx98_compat_pass_non_pod_arg_to_vararg)
+DIAG_NAME_INDEX(warn_cxx98_compat_pp_line_too_big)
+DIAG_NAME_INDEX(warn_cxx98_compat_raw_string_literal)
+DIAG_NAME_INDEX(warn_cxx98_compat_ref_qualifier)
+DIAG_NAME_INDEX(warn_cxx98_compat_reference_list_init)
+DIAG_NAME_INDEX(warn_cxx98_compat_rvalue_reference)
+DIAG_NAME_INDEX(warn_cxx98_compat_scoped_enum)
+DIAG_NAME_INDEX(warn_cxx98_compat_sfinae_access_control)
+DIAG_NAME_INDEX(warn_cxx98_compat_static_assert)
+DIAG_NAME_INDEX(warn_cxx98_compat_static_data_member_in_union)
+DIAG_NAME_INDEX(warn_cxx98_compat_switch_into_protected_scope)
+DIAG_NAME_INDEX(warn_cxx98_compat_temp_copy)
+DIAG_NAME_INDEX(warn_cxx98_compat_template_arg_extra_parens)
+DIAG_NAME_INDEX(warn_cxx98_compat_template_arg_local_type)
+DIAG_NAME_INDEX(warn_cxx98_compat_template_arg_null)
+DIAG_NAME_INDEX(warn_cxx98_compat_template_arg_object_internal)
+DIAG_NAME_INDEX(warn_cxx98_compat_template_arg_unnamed_type)
+DIAG_NAME_INDEX(warn_cxx98_compat_template_outside_of_template)
+DIAG_NAME_INDEX(warn_cxx98_compat_template_parameter_default_in_function_template)
+DIAG_NAME_INDEX(warn_cxx98_compat_top_level_semi)
+DIAG_NAME_INDEX(warn_cxx98_compat_trailing_return_type)
+DIAG_NAME_INDEX(warn_cxx98_compat_two_right_angle_brackets)
+DIAG_NAME_INDEX(warn_cxx98_compat_typename_outside_of_template)
+DIAG_NAME_INDEX(warn_cxx98_compat_unelaborated_friend_type)
+DIAG_NAME_INDEX(warn_cxx98_compat_unicode_id)
+DIAG_NAME_INDEX(warn_cxx98_compat_unicode_literal)
+DIAG_NAME_INDEX(warn_cxx98_compat_unicode_type)
+DIAG_NAME_INDEX(warn_cxx98_compat_using_decl_constructor)
+DIAG_NAME_INDEX(warn_cxx98_compat_variadic_macro)
+DIAG_NAME_INDEX(warn_cxx98_compat_variadic_templates)
+DIAG_NAME_INDEX(warn_cxx_ms_struct)
+DIAG_NAME_INDEX(warn_dangling_else)
+DIAG_NAME_INDEX(warn_dangling_member)
+DIAG_NAME_INDEX(warn_dangling_variable)
+DIAG_NAME_INDEX(warn_dealloc_in_category)
+DIAG_NAME_INDEX(warn_debug_compression_unavailable)
+DIAG_NAME_INDEX(warn_decl_in_param_list)
+DIAG_NAME_INDEX(warn_decl_shadow)
+DIAG_NAME_INDEX(warn_decl_shadow_uncaptured_local)
+DIAG_NAME_INDEX(warn_declspec_attribute_ignored)
+DIAG_NAME_INDEX(warn_deep_exception_specs_differ)
+DIAG_NAME_INDEX(warn_def_missing_case)
+DIAG_NAME_INDEX(warn_default_atomic_custom_getter_setter)
+DIAG_NAME_INDEX(warn_defaulted_method_deleted)
+DIAG_NAME_INDEX(warn_defined_in_function_type_macro)
+DIAG_NAME_INDEX(warn_defined_in_object_type_macro)
+DIAG_NAME_INDEX(warn_delegating_ctor_cycle)
+DIAG_NAME_INDEX(warn_delete_abstract_non_virtual_dtor)
+DIAG_NAME_INDEX(warn_delete_array_type)
+DIAG_NAME_INDEX(warn_delete_incomplete)
+DIAG_NAME_INDEX(warn_delete_non_virtual_dtor)
+DIAG_NAME_INDEX(warn_deprecated)
+DIAG_NAME_INDEX(warn_deprecated_anonymous_namespace)
+DIAG_NAME_INDEX(warn_deprecated_copy_operation)
+DIAG_NAME_INDEX(warn_deprecated_def)
+DIAG_NAME_INDEX(warn_deprecated_fwdclass_message)
+DIAG_NAME_INDEX(warn_deprecated_message)
+DIAG_NAME_INDEX(warn_deprecated_redundant_constexpr_static_def)
+DIAG_NAME_INDEX(warn_deprecated_register)
+DIAG_NAME_INDEX(warn_deprecated_string_literal_conversion)
+DIAG_NAME_INDEX(warn_deprecated_this_capture)
+DIAG_NAME_INDEX(warn_dereference_of_noderef_type)
+DIAG_NAME_INDEX(warn_dereference_of_noderef_type_no_decl)
+DIAG_NAME_INDEX(warn_destructor_marked_not_override_overriding)
+DIAG_NAME_INDEX(warn_diagnose_if_succeeded)
+DIAG_NAME_INDEX(warn_direct_initialize_call)
+DIAG_NAME_INDEX(warn_direct_ivar_access)
+DIAG_NAME_INDEX(warn_direct_super_initialize_call)
+DIAG_NAME_INDEX(warn_dispatch_body_ignored)
+DIAG_NAME_INDEX(warn_division_sizeof_ptr)
+DIAG_NAME_INDEX(warn_dllimport_dropped_from_inline_function)
+DIAG_NAME_INDEX(warn_doc_api_container_decl_mismatch)
+DIAG_NAME_INDEX(warn_doc_block_command_duplicate)
+DIAG_NAME_INDEX(warn_doc_block_command_empty_paragraph)
+DIAG_NAME_INDEX(warn_doc_container_decl_mismatch)
+DIAG_NAME_INDEX(warn_doc_deprecated_not_sync)
+DIAG_NAME_INDEX(warn_doc_function_method_decl_mismatch)
+DIAG_NAME_INDEX(warn_doc_html_end_forbidden)
+DIAG_NAME_INDEX(warn_doc_html_end_unbalanced)
+DIAG_NAME_INDEX(warn_doc_html_missing_end_tag)
+DIAG_NAME_INDEX(warn_doc_html_start_end_mismatch)
+DIAG_NAME_INDEX(warn_doc_html_start_tag_expected_ident_or_greater)
+DIAG_NAME_INDEX(warn_doc_html_start_tag_expected_quoted_string)
+DIAG_NAME_INDEX(warn_doc_param_duplicate)
+DIAG_NAME_INDEX(warn_doc_param_invalid_direction)
+DIAG_NAME_INDEX(warn_doc_param_not_attached_to_a_function_decl)
+DIAG_NAME_INDEX(warn_doc_param_not_found)
+DIAG_NAME_INDEX(warn_doc_param_spaces_in_direction)
+DIAG_NAME_INDEX(warn_doc_returns_attached_to_a_void_function)
+DIAG_NAME_INDEX(warn_doc_returns_not_attached_to_a_function_decl)
+DIAG_NAME_INDEX(warn_doc_tparam_duplicate)
+DIAG_NAME_INDEX(warn_doc_tparam_not_attached_to_a_template_decl)
+DIAG_NAME_INDEX(warn_doc_tparam_not_found)
+DIAG_NAME_INDEX(warn_double_const_requires_fp64)
+DIAG_NAME_INDEX(warn_double_lock)
+DIAG_NAME_INDEX(warn_drv_assuming_mfloat_abi_is)
+DIAG_NAME_INDEX(warn_drv_clang_unsupported)
+DIAG_NAME_INDEX(warn_drv_darwin_sdk_invalid_settings)
+DIAG_NAME_INDEX(warn_drv_deprecated_arg)
+DIAG_NAME_INDEX(warn_drv_diagnostics_hotness_requires_pgo)
+DIAG_NAME_INDEX(warn_drv_disabling_vptr_no_rtti_default)
+DIAG_NAME_INDEX(warn_drv_empty_joined_argument)
+DIAG_NAME_INDEX(warn_drv_experimental_isel_incomplete)
+DIAG_NAME_INDEX(warn_drv_experimental_isel_incomplete_opt)
+DIAG_NAME_INDEX(warn_drv_fine_grained_bitfield_accesses_ignored)
+DIAG_NAME_INDEX(warn_drv_input_file_unused)
+DIAG_NAME_INDEX(warn_drv_input_file_unused_by_cpp)
+DIAG_NAME_INDEX(warn_drv_invoking_fallback)
+DIAG_NAME_INDEX(warn_drv_moutline_unsupported_opt)
+DIAG_NAME_INDEX(warn_drv_msp430_hwmult_mismatch)
+DIAG_NAME_INDEX(warn_drv_msp430_hwmult_no_device)
+DIAG_NAME_INDEX(warn_drv_msp430_hwmult_unsupported)
+DIAG_NAME_INDEX(warn_drv_msvc_not_found)
+DIAG_NAME_INDEX(warn_drv_object_size_disabled_O0)
+DIAG_NAME_INDEX(warn_drv_omp_offload_target_duplicate)
+DIAG_NAME_INDEX(warn_drv_omp_offload_target_missingbcruntime)
+DIAG_NAME_INDEX(warn_drv_optimization_value)
+DIAG_NAME_INDEX(warn_drv_overriding_flag_option)
+DIAG_NAME_INDEX(warn_drv_pch_not_first_include)
+DIAG_NAME_INDEX(warn_drv_preprocessed_input_file_unused)
+DIAG_NAME_INDEX(warn_drv_ps4_force_pic)
+DIAG_NAME_INDEX(warn_drv_ps4_sdk_dir)
+DIAG_NAME_INDEX(warn_drv_treating_input_as_cxx)
+DIAG_NAME_INDEX(warn_drv_unable_to_find_directory_expected)
+DIAG_NAME_INDEX(warn_drv_unknown_argument_clang_cl)
+DIAG_NAME_INDEX(warn_drv_unknown_argument_clang_cl_with_suggestion)
+DIAG_NAME_INDEX(warn_drv_unsupported_debug_info_opt_for_target)
+DIAG_NAME_INDEX(warn_drv_unsupported_gpopt)
+DIAG_NAME_INDEX(warn_drv_unsupported_longcalls)
+DIAG_NAME_INDEX(warn_drv_unsupported_opt_for_target)
+DIAG_NAME_INDEX(warn_drv_unsupported_pic_with_mabicalls)
+DIAG_NAME_INDEX(warn_drv_unused_argument)
+DIAG_NAME_INDEX(warn_drv_vectorize_needs_hvx)
+DIAG_NAME_INDEX(warn_drv_yc_multiple_inputs_clang_cl)
+DIAG_NAME_INDEX(warn_drv_ycyu_different_arg_clang_cl)
+DIAG_NAME_INDEX(warn_drv_ycyu_no_fi_arg_clang_cl)
+DIAG_NAME_INDEX(warn_dup_category_def)
+DIAG_NAME_INDEX(warn_duplicate_attribute)
+DIAG_NAME_INDEX(warn_duplicate_attribute_exact)
+DIAG_NAME_INDEX(warn_duplicate_codeseg_attribute)
+DIAG_NAME_INDEX(warn_duplicate_declspec)
+DIAG_NAME_INDEX(warn_duplicate_enum_values)
+DIAG_NAME_INDEX(warn_duplicate_method_decl)
+DIAG_NAME_INDEX(warn_duplicate_module_file_extension)
+DIAG_NAME_INDEX(warn_duplicate_protocol_def)
+DIAG_NAME_INDEX(warn_dyn_class_memaccess)
+DIAG_NAME_INDEX(warn_empty_for_body)
+DIAG_NAME_INDEX(warn_empty_format_string)
+DIAG_NAME_INDEX(warn_empty_if_body)
+DIAG_NAME_INDEX(warn_empty_init_statement)
+DIAG_NAME_INDEX(warn_empty_parens_are_function_decl)
+DIAG_NAME_INDEX(warn_empty_range_based_for_body)
+DIAG_NAME_INDEX(warn_empty_switch_body)
+DIAG_NAME_INDEX(warn_empty_while_body)
+DIAG_NAME_INDEX(warn_enum_value_overflow)
+DIAG_NAME_INDEX(warn_equality_with_extra_parens)
+DIAG_NAME_INDEX(warn_exception_caught_by_earlier_handler)
+DIAG_NAME_INDEX(warn_exception_spec_deprecated)
+DIAG_NAME_INDEX(warn_exit_time_destructor)
+DIAG_NAME_INDEX(warn_expected_consistent_version_separator)
+DIAG_NAME_INDEX(warn_expected_qualified_after_typename)
+DIAG_NAME_INDEX(warn_expecting_lock_held_on_loop)
+DIAG_NAME_INDEX(warn_expecting_locked)
+DIAG_NAME_INDEX(warn_explicit_instantiation_after_specialization)
+DIAG_NAME_INDEX(warn_explicit_instantiation_inline_0x)
+DIAG_NAME_INDEX(warn_explicit_instantiation_must_be_global_0x)
+DIAG_NAME_INDEX(warn_explicit_instantiation_out_of_scope_0x)
+DIAG_NAME_INDEX(warn_explicit_instantiation_unqualified_wrong_namespace_0x)
+DIAG_NAME_INDEX(warn_extern_init)
+DIAG_NAME_INDEX(warn_extra_semi_after_mem_fn_def)
+DIAG_NAME_INDEX(warn_extraneous_char_constant)
+DIAG_NAME_INDEX(warn_falloff_nonvoid_coroutine)
+DIAG_NAME_INDEX(warn_falloff_nonvoid_function)
+DIAG_NAME_INDEX(warn_falloff_nonvoid_lambda)
+DIAG_NAME_INDEX(warn_falloff_noreturn_function)
+DIAG_NAME_INDEX(warn_fallthrough_attr_unreachable)
+DIAG_NAME_INDEX(warn_fe_backend_frame_larger_than)
+DIAG_NAME_INDEX(warn_fe_backend_optimization_failure)
+DIAG_NAME_INDEX(warn_fe_backend_plugin)
+DIAG_NAME_INDEX(warn_fe_cc_log_diagnostics_failure)
+DIAG_NAME_INDEX(warn_fe_cc_print_header_failure)
+DIAG_NAME_INDEX(warn_fe_frame_larger_than)
+DIAG_NAME_INDEX(warn_fe_inline_asm)
+DIAG_NAME_INDEX(warn_fe_macro_contains_embedded_newline)
+DIAG_NAME_INDEX(warn_fe_override_module)
+DIAG_NAME_INDEX(warn_fe_serialized_diag_failure)
+DIAG_NAME_INDEX(warn_fe_serialized_diag_merge_failure)
+DIAG_NAME_INDEX(warn_fe_unable_to_open_stats_file)
+DIAG_NAME_INDEX(warn_field_is_uninit)
+DIAG_NAME_INDEX(warn_file_asm_volatile)
+DIAG_NAME_INDEX(warn_fixit_no_changes)
+DIAG_NAME_INDEX(warn_flag_enum_constant_out_of_range)
+DIAG_NAME_INDEX(warn_float_overflow)
+DIAG_NAME_INDEX(warn_float_underflow)
+DIAG_NAME_INDEX(warn_floatingpoint_eq)
+DIAG_NAME_INDEX(warn_for_range_begin_end_types_differ)
+DIAG_NAME_INDEX(warn_for_range_const_reference_copy)
+DIAG_NAME_INDEX(warn_for_range_copy)
+DIAG_NAME_INDEX(warn_for_range_variable_always_copy)
+DIAG_NAME_INDEX(warn_format_P_no_precision)
+DIAG_NAME_INDEX(warn_format_argument_needs_cast)
+DIAG_NAME_INDEX(warn_format_argument_needs_cast_pedantic)
+DIAG_NAME_INDEX(warn_format_conversion_argument_type_mismatch)
+DIAG_NAME_INDEX(warn_format_conversion_argument_type_mismatch_pedantic)
+DIAG_NAME_INDEX(warn_format_invalid_annotation)
+DIAG_NAME_INDEX(warn_format_invalid_conversion)
+DIAG_NAME_INDEX(warn_format_invalid_positional_specifier)
+DIAG_NAME_INDEX(warn_format_mix_positional_nonpositional_args)
+DIAG_NAME_INDEX(warn_format_non_standard)
+DIAG_NAME_INDEX(warn_format_non_standard_conversion_spec)
+DIAG_NAME_INDEX(warn_format_non_standard_positional_arg)
+DIAG_NAME_INDEX(warn_format_nonliteral)
+DIAG_NAME_INDEX(warn_format_nonliteral_noargs)
+DIAG_NAME_INDEX(warn_format_nonsensical_length)
+DIAG_NAME_INDEX(warn_format_string_is_wide_literal)
+DIAG_NAME_INDEX(warn_format_zero_positional_specifier)
+DIAG_NAME_INDEX(warn_forward_class_redefinition)
+DIAG_NAME_INDEX(warn_framework_include_private_from_public)
+DIAG_NAME_INDEX(warn_fun_excludes_mutex)
+DIAG_NAME_INDEX(warn_fun_requires_lock)
+DIAG_NAME_INDEX(warn_fun_requires_lock_precise)
+DIAG_NAME_INDEX(warn_func_template_missing)
+DIAG_NAME_INDEX(warn_function_def_in_objc_container)
+DIAG_NAME_INDEX(warn_function_marked_not_override_overriding)
+DIAG_NAME_INDEX(warn_gc_attribute_weak_on_local)
+DIAG_NAME_INDEX(warn_gcc_attribute_location)
+DIAG_NAME_INDEX(warn_gcc_ignores_type_attr)
+DIAG_NAME_INDEX(warn_gcc_variable_decl_in_for_loop)
+DIAG_NAME_INDEX(warn_global_constructor)
+DIAG_NAME_INDEX(warn_global_destructor)
+DIAG_NAME_INDEX(warn_gnu_inline_attribute_requires_inline)
+DIAG_NAME_INDEX(warn_gnu_null_ptr_arith)
+DIAG_NAME_INDEX(warn_guarded_pass_by_reference)
+DIAG_NAME_INDEX(warn_has_warning_invalid_option)
+DIAG_NAME_INDEX(warn_header_guard)
+DIAG_NAME_INDEX(warn_iboutlet_object_type)
+DIAG_NAME_INDEX(warn_iboutletcollection_property_assign)
+DIAG_NAME_INDEX(warn_identity_field_assign)
+DIAG_NAME_INDEX(warn_ignored_clang_option)
+DIAG_NAME_INDEX(warn_ignored_gcc_optimization)
+DIAG_NAME_INDEX(warn_ignored_ms_inheritance)
+DIAG_NAME_INDEX(warn_ignored_objc_externally_retained)
+DIAG_NAME_INDEX(warn_ignoring_ftabstop_value)
+DIAG_NAME_INDEX(warn_illegal_constant_array_size)
+DIAG_NAME_INDEX(warn_impcast_bitfield_precision_constant)
+DIAG_NAME_INDEX(warn_impcast_bool_to_null_pointer)
+DIAG_NAME_INDEX(warn_impcast_complex_scalar)
+DIAG_NAME_INDEX(warn_impcast_different_enum_types)
+DIAG_NAME_INDEX(warn_impcast_double_promotion)
+DIAG_NAME_INDEX(warn_impcast_fixed_point_range)
+DIAG_NAME_INDEX(warn_impcast_float_integer)
+DIAG_NAME_INDEX(warn_impcast_float_precision)
+DIAG_NAME_INDEX(warn_impcast_float_result_precision)
+DIAG_NAME_INDEX(warn_impcast_float_to_integer)
+DIAG_NAME_INDEX(warn_impcast_float_to_integer_out_of_range)
+DIAG_NAME_INDEX(warn_impcast_float_to_integer_zero)
+DIAG_NAME_INDEX(warn_impcast_floating_point_to_bool)
+DIAG_NAME_INDEX(warn_impcast_high_order_zero_bits)
+DIAG_NAME_INDEX(warn_impcast_integer_64_32)
+DIAG_NAME_INDEX(warn_impcast_integer_precision)
+DIAG_NAME_INDEX(warn_impcast_integer_precision_constant)
+DIAG_NAME_INDEX(warn_impcast_integer_sign)
+DIAG_NAME_INDEX(warn_impcast_integer_sign_conditional)
+DIAG_NAME_INDEX(warn_impcast_literal_float_to_integer)
+DIAG_NAME_INDEX(warn_impcast_literal_float_to_integer_out_of_range)
+DIAG_NAME_INDEX(warn_impcast_nonnegative_result)
+DIAG_NAME_INDEX(warn_impcast_null_pointer_to_integer)
+DIAG_NAME_INDEX(warn_impcast_objective_c_literal_to_bool)
+DIAG_NAME_INDEX(warn_impcast_pointer_to_bool)
+DIAG_NAME_INDEX(warn_impcast_string_literal_to_bool)
+DIAG_NAME_INDEX(warn_impcast_vector_scalar)
+DIAG_NAME_INDEX(warn_impl_required_for_class_property)
+DIAG_NAME_INDEX(warn_impl_required_in_category_for_class_property)
+DIAG_NAME_INDEX(warn_implements_nscopying)
+DIAG_NAME_INDEX(warn_implicit_atomic_property)
+DIAG_NAME_INDEX(warn_implicit_decl_requires_sysheader)
+DIAG_NAME_INDEX(warn_implicit_function_decl)
+DIAG_NAME_INDEX(warn_implicitly_retains_self)
+DIAG_NAME_INDEX(warn_inaccessible_base_class)
+DIAG_NAME_INDEX(warn_incompatible_analyzer_plugin_api)
+DIAG_NAME_INDEX(warn_incompatible_exception_specs)
+DIAG_NAME_INDEX(warn_incompatible_qualified_id)
+DIAG_NAME_INDEX(warn_incompatible_sysroot)
+DIAG_NAME_INDEX(warn_incompatible_vectors)
+DIAG_NAME_INDEX(warn_incomplete_encoded_type)
+DIAG_NAME_INDEX(warn_increment_bool)
+DIAG_NAME_INDEX(warn_independentclass_attribute)
+DIAG_NAME_INDEX(warn_indirection_through_null)
+DIAG_NAME_INDEX(warn_infinite_recursive_function)
+DIAG_NAME_INDEX(warn_init_list_constant_narrowing)
+DIAG_NAME_INDEX(warn_init_list_type_narrowing)
+DIAG_NAME_INDEX(warn_init_list_variable_narrowing)
+DIAG_NAME_INDEX(warn_init_ptr_member_to_parameter_addr)
+DIAG_NAME_INDEX(warn_initializer_out_of_order)
+DIAG_NAME_INDEX(warn_initializer_overrides)
+DIAG_NAME_INDEX(warn_inline_namespace_reopened_noninline)
+DIAG_NAME_INDEX(warn_inst_method_not_found)
+DIAG_NAME_INDEX(warn_instance_method_not_found_with_typo)
+DIAG_NAME_INDEX(warn_instance_method_on_class_found)
+DIAG_NAME_INDEX(warn_int_to_pointer_cast)
+DIAG_NAME_INDEX(warn_int_to_void_pointer_cast)
+DIAG_NAME_INDEX(warn_integer_constant_overflow)
+DIAG_NAME_INDEX(warn_internal_linkage_local_storage)
+DIAG_NAME_INDEX(warn_interrupt_attribute_invalid)
+DIAG_NAME_INDEX(warn_invalid_asm_cast_lvalue)
+DIAG_NAME_INDEX(warn_invalid_capability_name)
+DIAG_NAME_INDEX(warn_invalid_initializer_from_system_header)
+DIAG_NAME_INDEX(warn_invalid_ios_deployment_target)
+DIAG_NAME_INDEX(warn_ivar_use_hidden)
+DIAG_NAME_INDEX(warn_ivars_in_interface)
+DIAG_NAME_INDEX(warn_jump_out_of_seh_finally)
+DIAG_NAME_INDEX(warn_kern_is_inline)
+DIAG_NAME_INDEX(warn_kern_is_method)
+DIAG_NAME_INDEX(warn_lock_exclusive_and_shared)
+DIAG_NAME_INDEX(warn_lock_some_predecessors)
+DIAG_NAME_INDEX(warn_logical_and_in_logical_or)
+DIAG_NAME_INDEX(warn_logical_instead_of_bitwise)
+DIAG_NAME_INDEX(warn_logical_not_on_lhs_of_check)
+DIAG_NAME_INDEX(warn_loop_ctrl_binds_to_inner)
+DIAG_NAME_INDEX(warn_loop_state_mismatch)
+DIAG_NAME_INDEX(warn_main_one_arg)
+DIAG_NAME_INDEX(warn_main_redefined)
+DIAG_NAME_INDEX(warn_main_returns_bool_literal)
+DIAG_NAME_INDEX(warn_max_unsigned_zero)
+DIAG_NAME_INDEX(warn_maybe_falloff_nonvoid_coroutine)
+DIAG_NAME_INDEX(warn_maybe_falloff_nonvoid_function)
+DIAG_NAME_INDEX(warn_maybe_falloff_nonvoid_lambda)
+DIAG_NAME_INDEX(warn_maybe_uninit_var)
+DIAG_NAME_INDEX(warn_maynot_respond)
+DIAG_NAME_INDEX(warn_member_extra_qualification)
+DIAG_NAME_INDEX(warn_memcpy_chk_overflow)
+DIAG_NAME_INDEX(warn_memsize_comparison)
+DIAG_NAME_INDEX(warn_messaging_unqualified_id)
+DIAG_NAME_INDEX(warn_method_param_declaration)
+DIAG_NAME_INDEX(warn_method_param_redefinition)
+DIAG_NAME_INDEX(warn_microsoft_dependent_exists)
+DIAG_NAME_INDEX(warn_microsoft_qualifiers_ignored)
+DIAG_NAME_INDEX(warn_mismatched_availability)
+DIAG_NAME_INDEX(warn_mismatched_availability_override)
+DIAG_NAME_INDEX(warn_mismatched_availability_override_unavail)
+DIAG_NAME_INDEX(warn_mismatched_delete_new)
+DIAG_NAME_INDEX(warn_mismatched_nullability_attr)
+DIAG_NAME_INDEX(warn_mismatched_section)
+DIAG_NAME_INDEX(warn_misplaced_ellipsis_vararg)
+DIAG_NAME_INDEX(warn_missing_braces)
+DIAG_NAME_INDEX(warn_missing_case)
+DIAG_NAME_INDEX(warn_missing_case_for_condition)
+DIAG_NAME_INDEX(warn_missing_dependent_template_keyword)
+DIAG_NAME_INDEX(warn_missing_explicit_synthesis)
+DIAG_NAME_INDEX(warn_missing_field_initializers)
+DIAG_NAME_INDEX(warn_missing_format_string)
+DIAG_NAME_INDEX(warn_missing_method_return_type)
+DIAG_NAME_INDEX(warn_missing_prototype)
+DIAG_NAME_INDEX(warn_missing_selector_name)
+DIAG_NAME_INDEX(warn_missing_sentinel)
+DIAG_NAME_INDEX(warn_missing_submodule)
+DIAG_NAME_INDEX(warn_missing_sysroot)
+DIAG_NAME_INDEX(warn_missing_variable_declarations)
+DIAG_NAME_INDEX(warn_missing_whitespace_after_macro_name)
+DIAG_NAME_INDEX(warn_mixed_sign_comparison)
+DIAG_NAME_INDEX(warn_mmap_incomplete_framework_module_declaration)
+DIAG_NAME_INDEX(warn_mmap_mismatched_private_module_name)
+DIAG_NAME_INDEX(warn_mmap_mismatched_private_submodule)
+DIAG_NAME_INDEX(warn_mmap_redundant_export_as)
+DIAG_NAME_INDEX(warn_mmap_umbrella_dir_not_found)
+DIAG_NAME_INDEX(warn_mmap_unknown_attribute)
+DIAG_NAME_INDEX(warn_modifying_shadowing_decl)
+DIAG_NAME_INDEX(warn_module_config_macro_undef)
+DIAG_NAME_INDEX(warn_module_config_mismatch)
+DIAG_NAME_INDEX(warn_module_conflict)
+DIAG_NAME_INDEX(warn_module_system_bit_conflict)
+DIAG_NAME_INDEX(warn_module_uses_date_time)
+DIAG_NAME_INDEX(warn_mt_message)
+DIAG_NAME_INDEX(warn_multiple_method_decl)
+DIAG_NAME_INDEX(warn_multiple_selectors)
+DIAG_NAME_INDEX(warn_multiversion_duplicate_entries)
+DIAG_NAME_INDEX(warn_namespace_member_extra_qualification)
+DIAG_NAME_INDEX(warn_neon_vector_initializer_non_portable)
+DIAG_NAME_INDEX(warn_nested_block_comment)
+DIAG_NAME_INDEX(warn_new_dangling_initializer_list)
+DIAG_NAME_INDEX(warn_new_dangling_reference)
+DIAG_NAME_INDEX(warn_no_autosynthesis_property)
+DIAG_NAME_INDEX(warn_no_autosynthesis_shared_ivar_property)
+DIAG_NAME_INDEX(warn_no_constructor_for_refconst)
+DIAG_NAME_INDEX(warn_no_newline_eof)
+DIAG_NAME_INDEX(warn_no_priv_submodule_use_toplevel)
+DIAG_NAME_INDEX(warn_no_underlying_type_specified_for_enum_bitfield)
+DIAG_NAME_INDEX(warn_no_unlock)
+DIAG_NAME_INDEX(warn_nocf_check_attribute_ignored)
+DIAG_NAME_INDEX(warn_noderef_on_non_pointer_or_array)
+DIAG_NAME_INDEX(warn_noderef_to_dereferenceable_pointer)
+DIAG_NAME_INDEX(warn_non_contravariant_overriding_param_types)
+DIAG_NAME_INDEX(warn_non_contravariant_param_types)
+DIAG_NAME_INDEX(warn_non_covariant_overriding_ret_types)
+DIAG_NAME_INDEX(warn_non_covariant_ret_types)
+DIAG_NAME_INDEX(warn_non_literal_null_pointer)
+DIAG_NAME_INDEX(warn_non_modular_include_in_framework_module)
+DIAG_NAME_INDEX(warn_non_modular_include_in_module)
+DIAG_NAME_INDEX(warn_non_pod_vararg_with_format_string)
+DIAG_NAME_INDEX(warn_non_virtual_dtor)
+DIAG_NAME_INDEX(warn_nonnull_expr_compare)
+DIAG_NAME_INDEX(warn_noreturn_function_has_return_expr)
+DIAG_NAME_INDEX(warn_not_a_doxygen_trailing_member_comment)
+DIAG_NAME_INDEX(warn_not_compound_assign)
+DIAG_NAME_INDEX(warn_not_enough_argument)
+DIAG_NAME_INDEX(warn_not_in_enum)
+DIAG_NAME_INDEX(warn_not_in_enum_assignment)
+DIAG_NAME_INDEX(warn_npot_ms_struct)
+DIAG_NAME_INDEX(warn_ns_attribute_wrong_parameter_type)
+DIAG_NAME_INDEX(warn_ns_attribute_wrong_return_type)
+DIAG_NAME_INDEX(warn_nsconsumed_attribute_mismatch)
+DIAG_NAME_INDEX(warn_nsobject_attribute)
+DIAG_NAME_INDEX(warn_nsreturns_retained_attribute_mismatch)
+DIAG_NAME_INDEX(warn_null_arg)
+DIAG_NAME_INDEX(warn_null_in_arithmetic_operation)
+DIAG_NAME_INDEX(warn_null_in_comparison_operation)
+DIAG_NAME_INDEX(warn_null_pointer_compare)
+DIAG_NAME_INDEX(warn_null_resettable_setter)
+DIAG_NAME_INDEX(warn_null_ret)
+DIAG_NAME_INDEX(warn_null_statement)
+DIAG_NAME_INDEX(warn_nullability_declspec)
+DIAG_NAME_INDEX(warn_nullability_duplicate)
+DIAG_NAME_INDEX(warn_nullability_inferred_on_nested_type)
+DIAG_NAME_INDEX(warn_nullability_lost)
+DIAG_NAME_INDEX(warn_nullability_missing)
+DIAG_NAME_INDEX(warn_nullability_missing_array)
+DIAG_NAME_INDEX(warn_objc_cdirective_format_string)
+DIAG_NAME_INDEX(warn_objc_circular_container)
+DIAG_NAME_INDEX(warn_objc_collection_literal_element)
+DIAG_NAME_INDEX(warn_objc_designated_init_missing_super_call)
+DIAG_NAME_INDEX(warn_objc_designated_init_non_designated_init_call)
+DIAG_NAME_INDEX(warn_objc_designated_init_non_super_designated_init_call)
+DIAG_NAME_INDEX(warn_objc_implementation_missing_designated_init_override)
+DIAG_NAME_INDEX(warn_objc_invalid_bridge)
+DIAG_NAME_INDEX(warn_objc_invalid_bridge_to_cf)
+DIAG_NAME_INDEX(warn_objc_isa_assign)
+DIAG_NAME_INDEX(warn_objc_isa_use)
+DIAG_NAME_INDEX(warn_objc_literal_comparison)
+DIAG_NAME_INDEX(warn_objc_missing_super_call)
+DIAG_NAME_INDEX(warn_objc_pointer_cxx_catch_fragile)
+DIAG_NAME_INDEX(warn_objc_pointer_masking)
+DIAG_NAME_INDEX(warn_objc_pointer_masking_performSelector)
+DIAG_NAME_INDEX(warn_objc_precise_lifetime_meaningless)
+DIAG_NAME_INDEX(warn_objc_property_assign_on_object)
+DIAG_NAME_INDEX(warn_objc_property_copy_missing_on_block)
+DIAG_NAME_INDEX(warn_objc_property_default_assign_on_object)
+DIAG_NAME_INDEX(warn_objc_property_no_assignment_attribute)
+DIAG_NAME_INDEX(warn_objc_property_retain_of_block)
+DIAG_NAME_INDEX(warn_objc_protocol_qualifier_missing_id)
+DIAG_NAME_INDEX(warn_objc_readonly_property_has_setter)
+DIAG_NAME_INDEX(warn_objc_redundant_literal_use)
+DIAG_NAME_INDEX(warn_objc_redundant_qualified_class_type)
+DIAG_NAME_INDEX(warn_objc_requires_super_protocol)
+DIAG_NAME_INDEX(warn_objc_root_class_missing)
+DIAG_NAME_INDEX(warn_objc_secondary_init_missing_init_call)
+DIAG_NAME_INDEX(warn_objc_secondary_init_super_init_call)
+DIAG_NAME_INDEX(warn_objc_string_literal_comparison)
+DIAG_NAME_INDEX(warn_objc_unsafe_perform_selector)
+DIAG_NAME_INDEX(warn_odr_tag_type_inconsistent)
+DIAG_NAME_INDEX(warn_old_implicitly_unsigned_long)
+DIAG_NAME_INDEX(warn_old_implicitly_unsigned_long_cxx)
+DIAG_NAME_INDEX(warn_old_style_cast)
+DIAG_NAME_INDEX(warn_omp_alignment_not_power_of_two)
+DIAG_NAME_INDEX(warn_omp_extra_tokens_at_eol)
+DIAG_NAME_INDEX(warn_omp_linear_step_zero)
+DIAG_NAME_INDEX(warn_omp_loop_64_bit_var)
+DIAG_NAME_INDEX(warn_omp_nesting_simd)
+DIAG_NAME_INDEX(warn_omp_non_trivial_type_mapped)
+DIAG_NAME_INDEX(warn_omp_not_in_target_context)
+DIAG_NAME_INDEX(warn_omp_section_is_char)
+DIAG_NAME_INDEX(warn_on_superclass_use)
+DIAG_NAME_INDEX(warn_opencl_attr_deprecated_ignored)
+DIAG_NAME_INDEX(warn_opencl_generic_address_space_arg)
+DIAG_NAME_INDEX(warn_operator_new_returns_null)
+DIAG_NAME_INDEX(warn_option_invalid_ocl_version)
+DIAG_NAME_INDEX(warn_os_log_format_narg)
+DIAG_NAME_INDEX(warn_out_of_range_compare)
+DIAG_NAME_INDEX(warn_overaligned_type)
+DIAG_NAME_INDEX(warn_overloaded_shift_in_comparison)
+DIAG_NAME_INDEX(warn_overloaded_virtual)
+DIAG_NAME_INDEX(warn_overriding_method_missing_noescape)
+DIAG_NAME_INDEX(warn_padded_struct_anon_field)
+DIAG_NAME_INDEX(warn_padded_struct_field)
+DIAG_NAME_INDEX(warn_padded_struct_size)
+DIAG_NAME_INDEX(warn_param_return_typestate_mismatch)
+DIAG_NAME_INDEX(warn_param_typestate_mismatch)
+DIAG_NAME_INDEX(warn_parameter_size)
+DIAG_NAME_INDEX(warn_parens_disambiguated_as_function_declaration)
+DIAG_NAME_INDEX(warn_parens_disambiguated_as_variable_declaration)
+DIAG_NAME_INDEX(warn_pass_class_arg_to_vararg)
+DIAG_NAME_INDEX(warn_pessimizing_move_on_initialization)
+DIAG_NAME_INDEX(warn_pessimizing_move_on_return)
+DIAG_NAME_INDEX(warn_pointer_abs)
+DIAG_NAME_INDEX(warn_pointer_arith_null_ptr)
+DIAG_NAME_INDEX(warn_pointer_indirection_from_incompatible_type)
+DIAG_NAME_INDEX(warn_pp_ambiguous_macro)
+DIAG_NAME_INDEX(warn_pp_convert_to_positive)
+DIAG_NAME_INDEX(warn_pp_date_time)
+DIAG_NAME_INDEX(warn_pp_expr_overflow)
+DIAG_NAME_INDEX(warn_pp_hdrstop_filename_ignored)
+DIAG_NAME_INDEX(warn_pp_line_decimal)
+DIAG_NAME_INDEX(warn_pp_macro_def_mismatch_with_pch)
+DIAG_NAME_INDEX(warn_pp_macro_hides_keyword)
+DIAG_NAME_INDEX(warn_pp_macro_is_reserved_id)
+DIAG_NAME_INDEX(warn_pp_objc_macro_redef_ignored)
+DIAG_NAME_INDEX(warn_pp_undef_identifier)
+DIAG_NAME_INDEX(warn_pragma_align_expected_equal)
+DIAG_NAME_INDEX(warn_pragma_align_invalid_option)
+DIAG_NAME_INDEX(warn_pragma_attribute_unused)
+DIAG_NAME_INDEX(warn_pragma_begin_end_mismatch)
+DIAG_NAME_INDEX(warn_pragma_comment_ignored)
+DIAG_NAME_INDEX(warn_pragma_debug_missing_argument)
+DIAG_NAME_INDEX(warn_pragma_debug_unexpected_command)
+DIAG_NAME_INDEX(warn_pragma_diagnostic_cannot_pop)
+DIAG_NAME_INDEX(warn_pragma_diagnostic_invalid)
+DIAG_NAME_INDEX(warn_pragma_diagnostic_invalid_option)
+DIAG_NAME_INDEX(warn_pragma_diagnostic_invalid_token)
+DIAG_NAME_INDEX(warn_pragma_diagnostic_unknown_warning)
+DIAG_NAME_INDEX(warn_pragma_expected_action_or_r_paren)
+DIAG_NAME_INDEX(warn_pragma_expected_colon)
+DIAG_NAME_INDEX(warn_pragma_expected_colon_r_paren)
+DIAG_NAME_INDEX(warn_pragma_expected_comma)
+DIAG_NAME_INDEX(warn_pragma_expected_identifier)
+DIAG_NAME_INDEX(warn_pragma_expected_init_seg)
+DIAG_NAME_INDEX(warn_pragma_expected_integer)
+DIAG_NAME_INDEX(warn_pragma_expected_lparen)
+DIAG_NAME_INDEX(warn_pragma_expected_non_wide_string)
+DIAG_NAME_INDEX(warn_pragma_expected_predicate)
+DIAG_NAME_INDEX(warn_pragma_expected_punc)
+DIAG_NAME_INDEX(warn_pragma_expected_rparen)
+DIAG_NAME_INDEX(warn_pragma_expected_section_label_or_name)
+DIAG_NAME_INDEX(warn_pragma_expected_section_name)
+DIAG_NAME_INDEX(warn_pragma_expected_section_push_pop_or_name)
+DIAG_NAME_INDEX(warn_pragma_expected_string)
+DIAG_NAME_INDEX(warn_pragma_extension_is_core)
+DIAG_NAME_INDEX(warn_pragma_extra_tokens_at_eol)
+DIAG_NAME_INDEX(warn_pragma_force_cuda_host_device_bad_arg)
+DIAG_NAME_INDEX(warn_pragma_ignored)
+DIAG_NAME_INDEX(warn_pragma_include_alias_expected)
+DIAG_NAME_INDEX(warn_pragma_include_alias_expected_filename)
+DIAG_NAME_INDEX(warn_pragma_include_alias_mismatch_angle)
+DIAG_NAME_INDEX(warn_pragma_include_alias_mismatch_quote)
+DIAG_NAME_INDEX(warn_pragma_init_seg_unsupported_target)
+DIAG_NAME_INDEX(warn_pragma_intrinsic_builtin)
+DIAG_NAME_INDEX(warn_pragma_invalid_action)
+DIAG_NAME_INDEX(warn_pragma_invalid_argument)
+DIAG_NAME_INDEX(warn_pragma_invalid_specific_action)
+DIAG_NAME_INDEX(warn_pragma_message)
+DIAG_NAME_INDEX(warn_pragma_missing_argument)
+DIAG_NAME_INDEX(warn_pragma_ms_struct)
+DIAG_NAME_INDEX(warn_pragma_omp_ignored)
+DIAG_NAME_INDEX(warn_pragma_optimize)
+DIAG_NAME_INDEX(warn_pragma_options_align_reset_failed)
+DIAG_NAME_INDEX(warn_pragma_options_expected_align)
+DIAG_NAME_INDEX(warn_pragma_pack_invalid_alignment)
+DIAG_NAME_INDEX(warn_pragma_pack_malformed)
+DIAG_NAME_INDEX(warn_pragma_pack_modified_after_include)
+DIAG_NAME_INDEX(warn_pragma_pack_no_pop_eof)
+DIAG_NAME_INDEX(warn_pragma_pack_non_default_at_include)
+DIAG_NAME_INDEX(warn_pragma_pack_pop_identifier_and_alignment)
+DIAG_NAME_INDEX(warn_pragma_pack_show)
+DIAG_NAME_INDEX(warn_pragma_pop_failed)
+DIAG_NAME_INDEX(warn_pragma_pop_macro_no_push)
+DIAG_NAME_INDEX(warn_pragma_unknown_extension)
+DIAG_NAME_INDEX(warn_pragma_unroll_cuda_value_in_parens)
+DIAG_NAME_INDEX(warn_pragma_unsupported_action)
+DIAG_NAME_INDEX(warn_pragma_unsupported_extension)
+DIAG_NAME_INDEX(warn_pragma_unused_expected_var)
+DIAG_NAME_INDEX(warn_pragma_unused_expected_var_arg)
+DIAG_NAME_INDEX(warn_pragma_unused_undeclared_var)
+DIAG_NAME_INDEX(warn_pragma_warning_expected)
+DIAG_NAME_INDEX(warn_pragma_warning_expected_number)
+DIAG_NAME_INDEX(warn_pragma_warning_push_level)
+DIAG_NAME_INDEX(warn_pragma_warning_spec_invalid)
+DIAG_NAME_INDEX(warn_precedence_bitwise_rel)
+DIAG_NAME_INDEX(warn_precedence_conditional)
+DIAG_NAME_INDEX(warn_printf_ObjCflags_without_ObjCConversion)
+DIAG_NAME_INDEX(warn_printf_asterisk_missing_arg)
+DIAG_NAME_INDEX(warn_printf_asterisk_wrong_type)
+DIAG_NAME_INDEX(warn_printf_data_arg_not_used)
+DIAG_NAME_INDEX(warn_printf_empty_objc_flag)
+DIAG_NAME_INDEX(warn_printf_format_string_contains_null_char)
+DIAG_NAME_INDEX(warn_printf_format_string_not_null_terminated)
+DIAG_NAME_INDEX(warn_printf_ignored_flag)
+DIAG_NAME_INDEX(warn_printf_incomplete_specifier)
+DIAG_NAME_INDEX(warn_printf_insufficient_data_args)
+DIAG_NAME_INDEX(warn_printf_invalid_objc_flag)
+DIAG_NAME_INDEX(warn_printf_nonsensical_flag)
+DIAG_NAME_INDEX(warn_printf_nonsensical_optional_amount)
+DIAG_NAME_INDEX(warn_printf_positional_arg_exceeds_data_args)
+DIAG_NAME_INDEX(warn_private_extern)
+DIAG_NAME_INDEX(warn_profile_data_missing)
+DIAG_NAME_INDEX(warn_profile_data_out_of_date)
+DIAG_NAME_INDEX(warn_profile_data_unprofiled)
+DIAG_NAME_INDEX(warn_property_access_suggest)
+DIAG_NAME_INDEX(warn_property_attr_mismatch)
+DIAG_NAME_INDEX(warn_property_attribute)
+DIAG_NAME_INDEX(warn_property_getter_owning_mismatch)
+DIAG_NAME_INDEX(warn_property_implicitly_mismatched)
+DIAG_NAME_INDEX(warn_property_method_deprecated)
+DIAG_NAME_INDEX(warn_property_redecl_getter_mismatch)
+DIAG_NAME_INDEX(warn_property_types_are_incompatible)
+DIAG_NAME_INDEX(warn_protocol_property_mismatch)
+DIAG_NAME_INDEX(warn_pt_guarded_pass_by_reference)
+DIAG_NAME_INDEX(warn_ptr_arith_exceeds_bounds)
+DIAG_NAME_INDEX(warn_ptr_arith_precedes_bounds)
+DIAG_NAME_INDEX(warn_ptr_independentclass_attribute)
+DIAG_NAME_INDEX(warn_qual_return_type)
+DIAG_NAME_INDEX(warn_quoted_include_in_framework_header)
+DIAG_NAME_INDEX(warn_readonly_property)
+DIAG_NAME_INDEX(warn_receiver_forward_class)
+DIAG_NAME_INDEX(warn_receiver_forward_instance)
+DIAG_NAME_INDEX(warn_redecl_library_builtin)
+DIAG_NAME_INDEX(warn_redeclaration_without_attribute_prev_attribute_ignored)
+DIAG_NAME_INDEX(warn_redeclaration_without_import_attribute)
+DIAG_NAME_INDEX(warn_redefine_extname_not_applied)
+DIAG_NAME_INDEX(warn_redefinition_in_param_list)
+DIAG_NAME_INDEX(warn_redundant_loop_iteration)
+DIAG_NAME_INDEX(warn_redundant_move_on_return)
+DIAG_NAME_INDEX(warn_redundant_parens_around_declarator)
+DIAG_NAME_INDEX(warn_reference_field_is_uninit)
+DIAG_NAME_INDEX(warn_register_objc_catch_parm)
+DIAG_NAME_INDEX(warn_reinterpret_different_from_static)
+DIAG_NAME_INDEX(warn_related_result_type_compatibility_class)
+DIAG_NAME_INDEX(warn_related_result_type_compatibility_protocol)
+DIAG_NAME_INDEX(warn_remainder_division_by_zero)
+DIAG_NAME_INDEX(warn_ret_addr_label)
+DIAG_NAME_INDEX(warn_ret_local_temp_addr_ref)
+DIAG_NAME_INDEX(warn_ret_stack_addr_ref)
+DIAG_NAME_INDEX(warn_return_missing_expr)
+DIAG_NAME_INDEX(warn_return_std_move)
+DIAG_NAME_INDEX(warn_return_std_move_in_cxx11)
+DIAG_NAME_INDEX(warn_return_typestate_for_unconsumable_type)
+DIAG_NAME_INDEX(warn_return_typestate_mismatch)
+DIAG_NAME_INDEX(warn_return_value_size)
+DIAG_NAME_INDEX(warn_return_value_udt)
+DIAG_NAME_INDEX(warn_return_value_udt_incomplete)
+DIAG_NAME_INDEX(warn_riscv_repeated_interrupt_attribute)
+DIAG_NAME_INDEX(warn_root_inst_method_not_found)
+DIAG_NAME_INDEX(warn_sampler_initializer_invalid_bits)
+DIAG_NAME_INDEX(warn_scanf_nonzero_width)
+DIAG_NAME_INDEX(warn_scanf_scanlist_incomplete)
+DIAG_NAME_INDEX(warn_second_arg_of_va_start_not_last_named_param)
+DIAG_NAME_INDEX(warn_second_parameter_to_va_arg_never_compatible)
+DIAG_NAME_INDEX(warn_second_parameter_to_va_arg_not_pod)
+DIAG_NAME_INDEX(warn_second_parameter_to_va_arg_ownership_qualified)
+DIAG_NAME_INDEX(warn_self_assignment_builtin)
+DIAG_NAME_INDEX(warn_self_assignment_overloaded)
+DIAG_NAME_INDEX(warn_self_move)
+DIAG_NAME_INDEX(warn_semicolon_before_method_body)
+DIAG_NAME_INDEX(warn_setter_getter_impl_required)
+DIAG_NAME_INDEX(warn_setter_getter_impl_required_in_category)
+DIAG_NAME_INDEX(warn_shadow_field)
+DIAG_NAME_INDEX(warn_shift_gt_typewidth)
+DIAG_NAME_INDEX(warn_shift_lhs_negative)
+DIAG_NAME_INDEX(warn_shift_negative)
+DIAG_NAME_INDEX(warn_shift_result_gt_typewidth)
+DIAG_NAME_INDEX(warn_shift_result_sets_sign_bit)
+DIAG_NAME_INDEX(warn_side_effects_typeid)
+DIAG_NAME_INDEX(warn_side_effects_unevaluated_context)
+DIAG_NAME_INDEX(warn_signed_bitfield_enum_conversion)
+DIAG_NAME_INDEX(warn_sizeof_array_decay)
+DIAG_NAME_INDEX(warn_sizeof_array_param)
+DIAG_NAME_INDEX(warn_sizeof_pointer_expr_memaccess)
+DIAG_NAME_INDEX(warn_sizeof_pointer_expr_memaccess_note)
+DIAG_NAME_INDEX(warn_sizeof_pointer_type_memaccess)
+DIAG_NAME_INDEX(warn_slash_u_filename)
+DIAG_NAME_INDEX(warn_sometimes_uninit_var)
+DIAG_NAME_INDEX(warn_standalone_specifier)
+DIAG_NAME_INDEX(warn_static_array_too_small)
+DIAG_NAME_INDEX(warn_static_inline_explicit_inst_ignored)
+DIAG_NAME_INDEX(warn_static_local_in_extern_inline)
+DIAG_NAME_INDEX(warn_static_main)
+DIAG_NAME_INDEX(warn_static_self_reference_in_init)
+DIAG_NAME_INDEX(warn_stdc_fenv_access_not_supported)
+DIAG_NAME_INDEX(warn_stdlibcxx_not_found)
+DIAG_NAME_INDEX(warn_strict_multiple_method_decl)
+DIAG_NAME_INDEX(warn_strict_prototypes)
+DIAG_NAME_INDEX(warn_string_plus_char)
+DIAG_NAME_INDEX(warn_string_plus_int)
+DIAG_NAME_INDEX(warn_stringcompare)
+DIAG_NAME_INDEX(warn_strlcpycat_wrong_size)
+DIAG_NAME_INDEX(warn_strncat_large_size)
+DIAG_NAME_INDEX(warn_strncat_src_size)
+DIAG_NAME_INDEX(warn_strncat_wrong_size)
+DIAG_NAME_INDEX(warn_struct_class_previous_tag_mismatch)
+DIAG_NAME_INDEX(warn_struct_class_tag_mismatch)
+DIAG_NAME_INDEX(warn_sub_ptr_zero_size_types)
+DIAG_NAME_INDEX(warn_subobject_initializer_overrides)
+DIAG_NAME_INDEX(warn_subscript_is_char)
+DIAG_NAME_INDEX(warn_suggest_noreturn_block)
+DIAG_NAME_INDEX(warn_suggest_noreturn_function)
+DIAG_NAME_INDEX(warn_superclass_variable_sized_type_not_at_end)
+DIAG_NAME_INDEX(warn_suspicious_bzero_size)
+DIAG_NAME_INDEX(warn_suspicious_sizeof_memset)
+DIAG_NAME_INDEX(warn_sync_fetch_and_nand_semantics_change)
+DIAG_NAME_INDEX(warn_taking_address_of_packed_member)
+DIAG_NAME_INDEX(warn_target_unsupported_abs2008)
+DIAG_NAME_INDEX(warn_target_unsupported_abslegacy)
+DIAG_NAME_INDEX(warn_target_unsupported_compact_branches)
+DIAG_NAME_INDEX(warn_target_unsupported_nan2008)
+DIAG_NAME_INDEX(warn_target_unsupported_nanlegacy)
+DIAG_NAME_INDEX(warn_tautological_bool_compare)
+DIAG_NAME_INDEX(warn_tautological_constant_compare)
+DIAG_NAME_INDEX(warn_tautological_overlap_comparison)
+DIAG_NAME_INDEX(warn_template_arg_negative)
+DIAG_NAME_INDEX(warn_template_arg_too_large)
+DIAG_NAME_INDEX(warn_template_export_unsupported)
+DIAG_NAME_INDEX(warn_template_qualified_friend_ignored)
+DIAG_NAME_INDEX(warn_template_qualified_friend_unsupported)
+DIAG_NAME_INDEX(warn_template_spec_extra_headers)
+DIAG_NAME_INDEX(warn_tentative_incomplete_array)
+DIAG_NAME_INDEX(warn_this_bool_conversion)
+DIAG_NAME_INDEX(warn_this_null_compare)
+DIAG_NAME_INDEX(warn_thread_attribute_argument_not_lockable)
+DIAG_NAME_INDEX(warn_thread_attribute_decl_not_lockable)
+DIAG_NAME_INDEX(warn_thread_attribute_decl_not_pointer)
+DIAG_NAME_INDEX(warn_thread_attribute_ignored)
+DIAG_NAME_INDEX(warn_thread_attribute_not_on_capability_member)
+DIAG_NAME_INDEX(warn_thread_attribute_not_on_non_static_member)
+DIAG_NAME_INDEX(warn_thread_safety_beta)
+DIAG_NAME_INDEX(warn_thread_safety_verbose)
+DIAG_NAME_INDEX(warn_throw_in_noexcept_func)
+DIAG_NAME_INDEX(warn_transparent_union_attribute_field_size_align)
+DIAG_NAME_INDEX(warn_transparent_union_attribute_floating)
+DIAG_NAME_INDEX(warn_transparent_union_attribute_not_definition)
+DIAG_NAME_INDEX(warn_transparent_union_attribute_zero_fields)
+DIAG_NAME_INDEX(warn_type_attribute_wrong_type)
+DIAG_NAME_INDEX(warn_type_safety_null_pointer_required)
+DIAG_NAME_INDEX(warn_type_safety_type_mismatch)
+DIAG_NAME_INDEX(warn_type_tag_for_datatype_wrong_kind)
+DIAG_NAME_INDEX(warn_typecheck_function_qualifiers_ignored)
+DIAG_NAME_INDEX(warn_typecheck_function_qualifiers_unspecified)
+DIAG_NAME_INDEX(warn_typecheck_reference_qualifiers)
+DIAG_NAME_INDEX(warn_typecheck_vector_element_sizes_not_equal)
+DIAG_NAME_INDEX(warn_typecheck_zero_static_array_size)
+DIAG_NAME_INDEX(warn_ucn_escape_incomplete)
+DIAG_NAME_INDEX(warn_ucn_escape_no_digits)
+DIAG_NAME_INDEX(warn_ucn_escape_surrogate)
+DIAG_NAME_INDEX(warn_ucn_not_valid_in_c89)
+DIAG_NAME_INDEX(warn_ucn_not_valid_in_c89_literal)
+DIAG_NAME_INDEX(warn_unannotated_fallthrough)
+DIAG_NAME_INDEX(warn_unannotated_fallthrough_per_function)
+DIAG_NAME_INDEX(warn_unavailable_def)
+DIAG_NAME_INDEX(warn_unavailable_fwdclass_message)
+DIAG_NAME_INDEX(warn_uncovered_module_header)
+DIAG_NAME_INDEX(warn_undeclared_selector)
+DIAG_NAME_INDEX(warn_undeclared_selector_with_typo)
+DIAG_NAME_INDEX(warn_undef_interface)
+DIAG_NAME_INDEX(warn_undef_interface_suggest)
+DIAG_NAME_INDEX(warn_undef_method_impl)
+DIAG_NAME_INDEX(warn_undef_protocolref)
+DIAG_NAME_INDEX(warn_undefined_inline)
+DIAG_NAME_INDEX(warn_undefined_internal)
+DIAG_NAME_INDEX(warn_undefined_reinterpret_cast)
+DIAG_NAME_INDEX(warn_unguarded_availability)
+DIAG_NAME_INDEX(warn_unguarded_availability_new)
+DIAG_NAME_INDEX(warn_unhandled_ms_attribute_ignored)
+DIAG_NAME_INDEX(warn_unimplemented_protocol_method)
+DIAG_NAME_INDEX(warn_unimplemented_selector)
+DIAG_NAME_INDEX(warn_uninit_byref_blockvar_captured_by_block)
+DIAG_NAME_INDEX(warn_uninit_self_reference_in_init)
+DIAG_NAME_INDEX(warn_uninit_self_reference_in_reference_init)
+DIAG_NAME_INDEX(warn_uninit_var)
+DIAG_NAME_INDEX(warn_unknown_attribute_ignored)
+DIAG_NAME_INDEX(warn_unknown_comment_command_name)
+DIAG_NAME_INDEX(warn_unknown_diag_option)
+DIAG_NAME_INDEX(warn_unknown_sanitizer_ignored)
+DIAG_NAME_INDEX(warn_unknown_warning_specifier)
+DIAG_NAME_INDEX(warn_unlock_but_no_lock)
+DIAG_NAME_INDEX(warn_unlock_kind_mismatch)
+DIAG_NAME_INDEX(warn_unnecessary_packed)
+DIAG_NAME_INDEX(warn_unneeded_internal_decl)
+DIAG_NAME_INDEX(warn_unneeded_member_function)
+DIAG_NAME_INDEX(warn_unneeded_static_internal_decl)
+DIAG_NAME_INDEX(warn_unreachable)
+DIAG_NAME_INDEX(warn_unreachable_break)
+DIAG_NAME_INDEX(warn_unreachable_default)
+DIAG_NAME_INDEX(warn_unreachable_loop_increment)
+DIAG_NAME_INDEX(warn_unreachable_return)
+DIAG_NAME_INDEX(warn_unsequenced_mod_mod)
+DIAG_NAME_INDEX(warn_unsequenced_mod_use)
+DIAG_NAME_INDEX(warn_unsigned_abs)
+DIAG_NAME_INDEX(warn_unsigned_always_true_comparison)
+DIAG_NAME_INDEX(warn_unsigned_bitfield_assigned_signed_enum)
+DIAG_NAME_INDEX(warn_unsigned_enum_always_true_comparison)
+DIAG_NAME_INDEX(warn_unsupported_lifetime_extension)
+DIAG_NAME_INDEX(warn_unsupported_target_attribute)
+DIAG_NAME_INDEX(warn_unused_call)
+DIAG_NAME_INDEX(warn_unused_comparison)
+DIAG_NAME_INDEX(warn_unused_const_variable)
+DIAG_NAME_INDEX(warn_unused_container_subscript_expr)
+DIAG_NAME_INDEX(warn_unused_exception_param)
+DIAG_NAME_INDEX(warn_unused_expr)
+DIAG_NAME_INDEX(warn_unused_function)
+DIAG_NAME_INDEX(warn_unused_label)
+DIAG_NAME_INDEX(warn_unused_lambda_capture)
+DIAG_NAME_INDEX(warn_unused_local_typedef)
+DIAG_NAME_INDEX(warn_unused_member_function)
+DIAG_NAME_INDEX(warn_unused_parameter)
+DIAG_NAME_INDEX(warn_unused_private_field)
+DIAG_NAME_INDEX(warn_unused_property_backing_ivar)
+DIAG_NAME_INDEX(warn_unused_property_expr)
+DIAG_NAME_INDEX(warn_unused_result)
+DIAG_NAME_INDEX(warn_unused_template)
+DIAG_NAME_INDEX(warn_unused_variable)
+DIAG_NAME_INDEX(warn_unused_voidptr)
+DIAG_NAME_INDEX(warn_unused_volatile)
+DIAG_NAME_INDEX(warn_use_in_invalid_state)
+DIAG_NAME_INDEX(warn_use_of_private_header_outside_module)
+DIAG_NAME_INDEX(warn_use_of_temp_in_invalid_state)
+DIAG_NAME_INDEX(warn_used_but_marked_unused)
+DIAG_NAME_INDEX(warn_user_literal_reserved)
+DIAG_NAME_INDEX(warn_using_directive_in_header)
+DIAG_NAME_INDEX(warn_utf8_symbol_homoglyph)
+DIAG_NAME_INDEX(warn_utf8_symbol_zero_width)
+DIAG_NAME_INDEX(warn_va_start_type_is_undefined)
+DIAG_NAME_INDEX(warn_var_deref_requires_any_lock)
+DIAG_NAME_INDEX(warn_var_deref_requires_lock)
+DIAG_NAME_INDEX(warn_var_deref_requires_lock_precise)
+DIAG_NAME_INDEX(warn_var_template_missing)
+DIAG_NAME_INDEX(warn_variable_requires_any_lock)
+DIAG_NAME_INDEX(warn_variable_requires_lock)
+DIAG_NAME_INDEX(warn_variable_requires_lock_precise)
+DIAG_NAME_INDEX(warn_variable_sized_ivar_visibility)
+DIAG_NAME_INDEX(warn_variables_not_in_loop_body)
+DIAG_NAME_INDEX(warn_vbase_moved_multiple_times)
+DIAG_NAME_INDEX(warn_vector_long_decl_spec_combination)
+DIAG_NAME_INDEX(warn_vector_mode_deprecated)
+DIAG_NAME_INDEX(warn_verbatim_block_end_without_start)
+DIAG_NAME_INDEX(warn_vla_used)
+DIAG_NAME_INDEX(warn_weak_identifier_undeclared)
+DIAG_NAME_INDEX(warn_weak_import)
+DIAG_NAME_INDEX(warn_weak_template_vtable)
+DIAG_NAME_INDEX(warn_weak_vtable)
+DIAG_NAME_INDEX(warn_wrong_absolute_value_type)
+DIAG_NAME_INDEX(warn_wrong_clang_attr_namespace)
+DIAG_NAME_INDEX(warn_zero_as_null_pointer_constant)
+DIAG_NAME_INDEX(warn_zero_size_struct_union_compat)
+DIAG_NAME_INDEX(warn_zero_size_struct_union_in_extern_c)
diff --git a/clang-r353983/include/clang/Basic/DiagnosticLex.h b/clang-r353983/include/clang/Basic/DiagnosticLex.h
new file mode 100644
index 00000000..33789051
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/DiagnosticLex.h
@@ -0,0 +1,28 @@
+//===--- DiagnosticLex.h - Diagnostics for liblex ---------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_DIAGNOSTICLEX_H
+#define LLVM_CLANG_BASIC_DIAGNOSTICLEX_H
+
+#include "clang/Basic/Diagnostic.h"
+
+namespace clang {
+namespace diag {
+enum {
+#define DIAG(ENUM, FLAGS, DEFAULT_MAPPING, DESC, GROUP, SFINAE, NOWERROR, \
+ SHOWINSYSHEADER, CATEGORY) \
+ ENUM,
+#define LEXSTART
+#include "clang/Basic/DiagnosticLexKinds.inc"
+#undef DIAG
+ NUM_BUILTIN_LEX_DIAGNOSTICS
+};
+} // end namespace diag
+} // end namespace clang
+
+#endif // LLVM_CLANG_BASIC_DIAGNOSTICLEX_H
diff --git a/clang-r353983/include/clang/Basic/DiagnosticLexKinds.inc b/clang-r353983/include/clang/Basic/DiagnosticLexKinds.inc
new file mode 100644
index 00000000..a482bec7
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/DiagnosticLexKinds.inc
@@ -0,0 +1,330 @@
+#ifdef LEXSTART
+__LEXSTART = DIAG_START_LEX,
+#undef LEXSTART
+#endif
+
+DIAG(backslash_newline_space, CLASS_WARNING, (unsigned)diag::Severity::Warning, "backslash and newline separated by space", 54, SFINAE_Suppress, false, false, 1)
+DIAG(err__Pragma_malformed, CLASS_ERROR, (unsigned)diag::Severity::Error, "_Pragma takes a parenthesized string literal", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_bad_character_encoding, CLASS_ERROR, (unsigned)diag::Severity::Error, "illegal character encoding in character literal", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_bad_string_encoding, CLASS_ERROR, (unsigned)diag::Severity::Error, "illegal character encoding in string literal", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_character_too_large, CLASS_ERROR, (unsigned)diag::Severity::Error, "character too large for enclosing character literal type", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_conflict_marker, CLASS_ERROR, (unsigned)diag::Severity::Error, "version control conflict marker in file", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_defined_macro_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "'defined' cannot be used as a macro name", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_digit_separator_not_between_digits, CLASS_ERROR, (unsigned)diag::Severity::Error, "digit separator cannot appear at %select{start|end}0 of digit sequence", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_embedded_directive, CLASS_ERROR, (unsigned)diag::Severity::Error, "embedding a #%0 directive within macro arguments is not supported", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_escape_too_large, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{hex|octal}0 escape sequence out of range", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_expected_id_building_module, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected a module name in '__building_module' expression", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_exponent_has_no_digits, CLASS_ERROR, (unsigned)diag::Severity::Error, "exponent has no digits", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_feature_check_malformed, CLASS_ERROR, (unsigned)diag::Severity::Error, "builtin feature check macro requires a parenthesized identifier", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_hex_constant_requires, CLASS_ERROR, (unsigned)diag::Severity::Error, "hexadecimal floating %select{constant|literal}0 requires %select{an exponent|a significand}1", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_hex_escape_no_digits, CLASS_ERROR, (unsigned)diag::Severity::Error, "\\%0 used with no following hex digits", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_invalid_char_raw_delim, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid character '%0' character in raw string delimiter; use PREFIX( )PREFIX to delimit raw string", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_invalid_character_to_charify, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid argument to convert to character", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_invalid_digit, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid digit '%0' in %select{decimal|octal|binary}1 constant", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_invalid_suffix_constant, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid suffix '%0' on %select{integer|floating}1 constant", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_invalid_utf8, CLASS_ERROR, (unsigned)diag::Severity::Error, "source file is not valid UTF-8", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_lexing_string, CLASS_ERROR, (unsigned)diag::Severity::Error, "failure when lexing a string", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_config_macro_submodule, CLASS_ERROR, (unsigned)diag::Severity::Error, "configuration macros are only allowed in top-level modules", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_conflicting_export_as, CLASS_ERROR, (unsigned)diag::Severity::Error, "conflicting re-export of module '%0' as '%1' or '%2'", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_duplicate_header_attribute, CLASS_ERROR, (unsigned)diag::Severity::Error, "header attribute '%0' specified multiple times", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_expected_attribute, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected an attribute name", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_expected_config_macro, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected configuration macro name after ','", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_expected_conflicts_comma, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected ',' after conflicting module name", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_expected_conflicts_message, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected a message describing the conflict with '%0'", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_expected_export_wildcard, CLASS_ERROR, (unsigned)diag::Severity::Error, "only '*' can be exported from an inferred submodule", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_expected_feature, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected a feature name", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_expected_header, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected a header name after '%0'", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_expected_header_attribute, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected a header attribute name ('size' or 'mtime')", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_expected_inferred_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected %select{module exclusion with 'exclude'|'export *'}0", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_expected_lbrace, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected '{' to start module '%0'", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_expected_lbrace_wildcard, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected '{' to start inferred submodule", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_expected_library_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected %select{library|framework}0 name as a string", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_expected_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected umbrella, header, submodule, or module export", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_expected_mmap_file, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected a module map file name", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_expected_module, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected module declaration", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_expected_module_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected module name", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_expected_rbrace, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected '}'", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_expected_rsquare, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected ']' to close attribute", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_explicit_inferred_framework, CLASS_ERROR, (unsigned)diag::Severity::Error, "inferred framework modules cannot be 'explicit'", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_explicit_top_level, CLASS_ERROR, (unsigned)diag::Severity::Error, "'explicit' is not permitted on top-level modules", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_inferred_framework_submodule, CLASS_ERROR, (unsigned)diag::Severity::Error, "inferred submodule cannot be a framework submodule", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_inferred_no_umbrella, CLASS_ERROR, (unsigned)diag::Severity::Error, "inferred submodules require a module with an umbrella", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_inferred_redef, CLASS_ERROR, (unsigned)diag::Severity::Error, "redefinition of inferred submodule", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_invalid_header_attribute_value, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected integer literal as value for header attribute '%0'", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_missing_exclude_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected excluded module name", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_missing_module_qualified, CLASS_ERROR, (unsigned)diag::Severity::Error, "no module named '%0' in '%1'", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_missing_module_unqualified, CLASS_ERROR, (unsigned)diag::Severity::Error, "no module named '%0' visible from '%1'", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_module_id, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected a module name or '*'", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_module_redefinition, CLASS_ERROR, (unsigned)diag::Severity::Error, "redefinition of module '%0'", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_nested_submodule_id, CLASS_ERROR, (unsigned)diag::Severity::Error, "qualified module name can only be used to define modules at the top level", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_submodule_export_as, CLASS_ERROR, (unsigned)diag::Severity::Error, "only top-level modules can be re-exported as public", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_top_level_inferred_submodule, CLASS_ERROR, (unsigned)diag::Severity::Error, "only submodules and framework modules may be inferred with wildcard syntax", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_umbrella_clash, CLASS_ERROR, (unsigned)diag::Severity::Error, "umbrella for module '%0' already covers this directory", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_unknown_token, CLASS_ERROR, (unsigned)diag::Severity::Error, "skipping stray token", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_mmap_use_decl_submodule, CLASS_ERROR, (unsigned)diag::Severity::Error, "use declarations are only allowed in top-level modules", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_multichar_utf_character_literal, CLASS_ERROR, (unsigned)diag::Severity::Error, "Unicode character literals may not contain multiple characters", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_non_ascii, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-ASCII characters are not allowed outside of literals and identifiers", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pascal_string_too_long, CLASS_ERROR, (unsigned)diag::Severity::Error, "Pascal string is too long", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_paste_at_end, CLASS_ERROR, (unsigned)diag::Severity::Error, "'##' cannot appear at end of macro expansion", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_paste_at_start, CLASS_ERROR, (unsigned)diag::Severity::Error, "'##' cannot appear at start of macro expansion", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_placeholder_in_source, CLASS_ERROR, (unsigned)diag::Severity::Error, "editor placeholder in source file", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_arc_cf_code_audited_syntax, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected 'begin' or 'end'", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_assume_nonnull_syntax, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected 'begin' or 'end'", 0, SFINAE_SubstitutionFailure, false, true, 19)
+DIAG(err_pp_bad_paste, CLASS_ERROR, (unsigned)diag::Severity::Error, "pasting formed '%0', an invalid preprocessing token", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_colon_without_question, CLASS_ERROR, (unsigned)diag::Severity::Error, "':' without preceding '?'", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_directive_required, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 must be used within a preprocessing directive", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_division_by_zero, CLASS_ERROR, (unsigned)diag::Severity::Error, "division by zero in preprocessor expression", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_double_begin_of_arc_cf_code_audited, CLASS_ERROR, (unsigned)diag::Severity::Error, "already inside '#pragma clang arc_cf_code_audited'", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_double_begin_of_assume_nonnull, CLASS_ERROR, (unsigned)diag::Severity::Error, "already inside '#pragma clang assume_nonnull'", 0, SFINAE_SubstitutionFailure, false, true, 19)
+DIAG(err_pp_duplicate_name_in_arg_list, CLASS_ERROR, (unsigned)diag::Severity::Error, "duplicate macro parameter name %0", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_empty_filename, CLASS_ERROR, (unsigned)diag::Severity::Error, "empty filename", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_endif_without_if, CLASS_ERROR, (unsigned)diag::Severity::Error, "#endif without #if", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_eof_in_arc_cf_code_audited, CLASS_ERROR, (unsigned)diag::Severity::Error, "'#pragma clang arc_cf_code_audited' was not ended within this file", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_eof_in_assume_nonnull, CLASS_ERROR, (unsigned)diag::Severity::Error, "'#pragma clang assume_nonnull' was not ended within this file", 0, SFINAE_SubstitutionFailure, false, true, 19)
+DIAG(err_pp_error_opening_file, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "error opening file '%0': %1", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_expected_after, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing %1 after %0", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_expected_comma_in_arg_list, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected comma in macro parameter list", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_expected_eol, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected end of line in preprocessor expression", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_expected_ident_in_arg_list, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected identifier in macro parameter list", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_expected_module_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected %select{identifier after '.' in |}0module name", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_expected_rparen, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected ')' in preprocessor expression", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_expected_value_in_expr, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected value in expression", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_expects_filename, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected \"FILENAME\" or <FILENAME>", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_expr_bad_token_binop, CLASS_ERROR, (unsigned)diag::Severity::Error, "token is not a valid binary operator in a preprocessor subexpression", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_expr_bad_token_lparen, CLASS_ERROR, (unsigned)diag::Severity::Error, "function-like macro %0 is not defined", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_expr_bad_token_start_expr, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid token at start of a preprocessor expression", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_file_not_found, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "'%0' file not found", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_file_not_found_angled_include_not_fatal, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' file not found with <angled> include; use \"quotes\" instead", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_file_not_found_typo_not_fatal, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' file not found, did you mean '%1'?", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_hash_error, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0", 0, SFINAE_SubstitutionFailure, false, true, 21)
+DIAG(err_pp_identifier_arg_not_identifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot convert %0 token to an identifier", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_illegal_floating_literal, CLASS_ERROR, (unsigned)diag::Severity::Error, "floating point literal in preprocessor expression", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_import_directive_ms, CLASS_ERROR, (unsigned)diag::Severity::Error, "#import of type library is an unsupported Microsoft feature", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_include_in_arc_cf_code_audited, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot #include files inside '#pragma clang arc_cf_code_audited'", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_include_in_assume_nonnull, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot #include files inside '#pragma clang assume_nonnull'", 0, SFINAE_SubstitutionFailure, false, true, 19)
+DIAG(err_pp_include_too_deep, CLASS_ERROR, (unsigned)diag::Severity::Error, "#include nested too deeply", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_invalid_directive, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid preprocessing directive", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_invalid_poison, CLASS_ERROR, (unsigned)diag::Severity::Error, "can only poison identifier tokens", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_invalid_tok_in_arg_list, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid token in macro parameter list", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_invalid_udl, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{character|integer}0 literal with user-defined suffix cannot be used in preprocessor constant expression", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_line_digit_sequence, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{#line|GNU line marker}0 directive requires a simple digit sequence", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_line_invalid_filename, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid filename for #line directive", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_line_requires_integer, CLASS_ERROR, (unsigned)diag::Severity::Error, "#line directive requires a positive integer argument", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_linemarker_invalid_filename, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid filename for line marker directive", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_linemarker_invalid_flag, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid flag line marker directive", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_linemarker_invalid_pop, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid line marker flag '2': cannot pop empty include stack", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_linemarker_requires_integer, CLASS_ERROR, (unsigned)diag::Severity::Error, "line marker directive requires a positive integer argument", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_macro_not_identifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "macro name must be an identifier", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_malformed_ident, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid #ident directive", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_missing_lparen_in_vaopt_use, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing '(' following __VA_OPT__", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_missing_macro_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "macro name missing", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_missing_rparen_in_macro_def, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing ')' in macro parameter list", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_module_begin_no_module_map, CLASS_ERROR, (unsigned)diag::Severity::Error, "no module map available for module %0", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_module_begin_no_submodule, CLASS_ERROR, (unsigned)diag::Severity::Error, "submodule %0.%1 not declared in module map", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_module_begin_without_module_end, CLASS_ERROR, (unsigned)diag::Severity::Error, "no matching '#pragma clang module end' for this '#pragma clang module begin'", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_module_begin_wrong_module, CLASS_ERROR, (unsigned)diag::Severity::Error, "must specify '-fmodule-name=%0' to enter %select{|submodule of }1this module%select{ (current module is %3)|}2", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_module_build_missing_end, CLASS_ERROR, (unsigned)diag::Severity::Error, "no matching '#pragma clang module endbuild' for this '#pragma clang module build'", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_module_end_without_module_begin, CLASS_ERROR, (unsigned)diag::Severity::Error, "no matching '#pragma clang module begin' for this '#pragma clang module end'", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_nested_paren, CLASS_ERROR, (unsigned)diag::Severity::Error, "nested parentheses not permitted in %0", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_opencl_variadic_macros, CLASS_ERROR, (unsigned)diag::Severity::Error, "variadic macros not supported in OpenCL", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_operator_used_as_macro_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "C++ operator %0 (aka %1) used as a macro name", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_pragma_hdrstop_not_seen, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "#pragma hdrstop not seen while attempting to use precompiled header", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_remainder_by_zero, CLASS_ERROR, (unsigned)diag::Severity::Error, "remainder by zero in preprocessor expression", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_stringize_not_parameter, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%select{#|#@}0' is not followed by a macro parameter", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_through_header_not_found, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "'%0' required for precompiled header not found", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_through_header_not_seen, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "#include of '%0' not seen while attempting to %select{create|use}1 precompiled header", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_unmatched_end_of_arc_cf_code_audited, CLASS_ERROR, (unsigned)diag::Severity::Error, "not currently inside '#pragma clang arc_cf_code_audited'", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_unmatched_end_of_assume_nonnull, CLASS_ERROR, (unsigned)diag::Severity::Error, "not currently inside '#pragma clang assume_nonnull'", 0, SFINAE_SubstitutionFailure, false, true, 19)
+DIAG(err_pp_unterminated_conditional, CLASS_ERROR, (unsigned)diag::Severity::Error, "unterminated conditional directive", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_used_poisoned_id, CLASS_ERROR, (unsigned)diag::Severity::Error, "attempt to use a poisoned identifier", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_vaopt_nested_use, CLASS_ERROR, (unsigned)diag::Severity::Error, "__VA_OPT__ cannot be nested within its own replacement tokens", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_visibility_non_macro, CLASS_ERROR, (unsigned)diag::Severity::Error, "no macro named %0", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pragma_message, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pragma_message_malformed, CLASS_ERROR, (unsigned)diag::Severity::Error, "pragma %select{message|warning|error}0 requires parenthesized string", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pragma_push_pop_macro_malformed, CLASS_ERROR, (unsigned)diag::Severity::Error, "pragma %0 requires a parenthesized string", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_raw_delim_too_long, CLASS_ERROR, (unsigned)diag::Severity::Error, "raw string delimiter longer than 16 characters; use PREFIX( )PREFIX to delimit raw string", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_string_concat_mixed_suffix, CLASS_ERROR, (unsigned)diag::Severity::Error, "differing user-defined suffixes ('%0' and '%1') in string literal concatenation", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_too_few_args_in_macro_invoc, CLASS_ERROR, (unsigned)diag::Severity::Error, "too few arguments provided to function-like macro invocation", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_too_many_args_in_macro_invoc, CLASS_ERROR, (unsigned)diag::Severity::Error, "too many arguments provided to function-like macro invocation", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_ucn_control_character, CLASS_ERROR, (unsigned)diag::Severity::Error, "universal character name refers to a control character", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_ucn_escape_basic_scs, CLASS_ERROR, (unsigned)diag::Severity::Error, "character '%0' cannot be specified by a universal character name", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_ucn_escape_incomplete, CLASS_ERROR, (unsigned)diag::Severity::Error, "incomplete universal character name", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_ucn_escape_invalid, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid universal character", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_undeclared_use_of_module, CLASS_ERROR, (unsigned)diag::Severity::Error, "module %0 does not depend on a module exporting '%1'", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_unsupported_string_concat, CLASS_ERROR, (unsigned)diag::Severity::Error, "unsupported non-standard concatenation of string literals", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_unterm_macro_invoc, CLASS_ERROR, (unsigned)diag::Severity::Error, "unterminated function-like macro invocation", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_unterminated___pragma, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing terminating ')' character", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_unterminated_block_comment, CLASS_ERROR, (unsigned)diag::Severity::Error, "unterminated /* comment", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_unterminated_raw_string, CLASS_ERROR, (unsigned)diag::Severity::Error, "raw string missing terminating delimiter )%0\"", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_vaopt_paste_at_end, CLASS_ERROR, (unsigned)diag::Severity::Error, "'##' cannot appear at end of __VA_OPT__ argument", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_vaopt_paste_at_start, CLASS_ERROR, (unsigned)diag::Severity::Error, "'##' cannot appear at start of __VA_OPT__ argument", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(escaped_newline_block_comment_end, CLASS_WARNING, (unsigned)diag::Severity::Warning, "escaped newline between */ characters at block comment end", 126, SFINAE_Suppress, false, false, 1)
+DIAG(ext_binary_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "binary integer literals are a GNU extension", 257, SFINAE_Suppress, false, false, 1)
+DIAG(ext_binary_literal_cxx14, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "binary integer literals are a C++14 extension", 84, SFINAE_Suppress, false, false, 1)
+DIAG(ext_c99_whitespace_required_after_macro_name, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C99 requires whitespace after the macro name", 114, SFINAE_Suppress, false, false, 1)
+DIAG(ext_charize_microsoft, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "charizing operator #@ is a Microsoft extension", 374, SFINAE_Suppress, false, false, 1)
+DIAG(ext_comment_paste_microsoft, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "pasting two '/' tokens into a '//' comment is a Microsoft extension", 375, SFINAE_Suppress, false, false, 1)
+DIAG(ext_ctrl_z_eof_microsoft, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "treating Ctrl-Z as end-of-file is a Microsoft extension", 379, SFINAE_Suppress, false, false, 1)
+DIAG(ext_dollar_in_identifier, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'$' in identifier", 191, SFINAE_Suppress, false, false, 1)
+DIAG(ext_embedded_directive, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "embedding a directive within macro arguments has undefined behavior", 201, SFINAE_Suppress, false, false, 1)
+DIAG(ext_empty_character, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "empty character constant", 345, SFINAE_Suppress, false, false, 1)
+DIAG(ext_empty_fnmacro_arg, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "empty macro arguments are a C99 feature", 114, SFINAE_Suppress, false, false, 1)
+DIAG(ext_four_char_character_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "multi-character character constant", 244, SFINAE_Suppress, false, false, 1)
+DIAG(ext_hex_constant_invalid, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "hexadecimal floating constants are a C99 feature", 114, SFINAE_Suppress, false, false, 1)
+DIAG(ext_hex_literal_invalid, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "hexadecimal floating literals are a C++17 feature", 91, SFINAE_Suppress, false, false, 1)
+DIAG(ext_line_comment, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "// comments are not allowed in this language", 126, SFINAE_Suppress, false, false, 1)
+DIAG(ext_missing_varargs_arg, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "must specify at least one argument for '...' parameter of variadic macro", 278, SFINAE_Suppress, false, false, 1)
+DIAG(ext_missing_whitespace_after_macro_name, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "whitespace required after macro name", 0, SFINAE_Suppress, false, false, 1)
+DIAG(ext_ms_reserved_user_defined_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "invalid suffix on literal; C++11 requires a space between literal and identifier", 570, SFINAE_Suppress, false, false, 1)
+DIAG(ext_multi_line_line_comment, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "multi-line // comment", 126, SFINAE_Suppress, false, false, 1)
+DIAG(ext_multichar_character_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "multi-character character constant", 429, SFINAE_Suppress, false, false, 1)
+DIAG(ext_named_variadic_macro, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "named variadic macros are a GNU extension", 744, SFINAE_Suppress, false, false, 1)
+DIAG(ext_no_newline_eof, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "no newline at end of file", 435, SFINAE_Suppress, false, false, 1)
+DIAG(ext_nonstandard_escape, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of non-standard escape character '\\%0'", 527, SFINAE_Suppress, false, false, 1)
+DIAG(ext_on_off_switch_syntax, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "expected 'ON' or 'OFF' or 'DEFAULT' in pragma", 696, SFINAE_Suppress, false, false, 1)
+DIAG(ext_paste_comma, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "token pasting of ',' and __VA_ARGS__ is a GNU extension", 278, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_bad_paste_ms, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "pasting formed '%0', an invalid preprocessing token", 347, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_bad_vaargs_use, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro", 527, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_bad_vaopt_use, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "__VA_OPT__ can only appear in the expansion of a variadic macro", 744, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_comma_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "comma operator in operand of #if", 527, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_extra_tokens_at_eol, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "extra tokens at end of #%0 directive", 224, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_ident_directive, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "#ident is a language extension", 527, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_import_directive, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "#import is a language extension", 302, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_include_next_directive, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "#include_next is a language extension", 269, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_include_search_ms, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "#include resolved using non-portable Microsoft search rules as: %0", 390, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_line_too_big, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "C requires #line number to be less than %0, allowed as extension", 527, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_line_zero, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "#line directive with zero argument is a GNU extension", 277, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_macro_redef, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%0 macro redefined", 362, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_operator_used_as_macro_name, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "C++ operator %0 (aka %1) used as a macro name", 377, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_redef_builtin_macro, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "redefining builtin macro", 68, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_undef_builtin_macro, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "undefining builtin macro", 68, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_warning_directive, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "#warning is a language extension", 527, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pragma_syntax_eod, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "expected end of directive in pragma", 696, SFINAE_Suppress, false, false, 1)
+DIAG(ext_reserved_user_defined_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "invalid suffix on literal; C++11 requires a space between literal and identifier", 570, SFINAE_Suppress, false, false, 1)
+DIAG(ext_string_too_long, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "string literal of length %0 exceeds maximum length %1 that %select{C90|ISO C99|C++}2 compilers are required to support", 510, SFINAE_Suppress, false, false, 1)
+DIAG(ext_token_used, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "extension used", 352, SFINAE_Suppress, false, false, 1)
+DIAG(ext_unicode_whitespace, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "treating Unicode character as whitespace", 690, SFINAE_Suppress, false, false, 1)
+DIAG(ext_unknown_escape, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "unknown escape sequence '\\%0'", 695, SFINAE_Suppress, false, false, 1)
+DIAG(ext_unterminated_char_or_string, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "missing terminating %select{'|'\"'}0 character", 345, SFINAE_Suppress, false, false, 1)
+DIAG(ext_variadic_macro, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "variadic macros are a C99 feature", 744, SFINAE_Suppress, false, false, 1)
+DIAG(note_header_guard, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 is defined here; did you mean %1?", 0, SFINAE_Suppress, false, false, 1)
+DIAG(note_implicit_top_level_module_import_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "submodule of top-level module '%0' implicitly imported here", 0, SFINAE_Suppress, false, false, 1)
+DIAG(note_init_list_at_beginning_of_macro_argument, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "cannot use initializer list at the beginning of a macro argument", 0, SFINAE_Suppress, false, false, 1)
+DIAG(note_macro_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "macro %0 defined here", 0, SFINAE_Suppress, false, false, 1)
+DIAG(note_mmap_add_framework_keyword, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use 'framework module' to declare module '%0'", 0, SFINAE_Suppress, false, false, 1)
+DIAG(note_mmap_lbrace_match, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "to match this '{'", 0, SFINAE_Suppress, false, false, 1)
+DIAG(note_mmap_lsquare_match, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "to match this ']'", 0, SFINAE_Suppress, false, false, 1)
+DIAG(note_mmap_prev_definition, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previously defined here", 0, SFINAE_Suppress, false, false, 1)
+DIAG(note_mmap_rename_top_level_private_module, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "rename '%0' to ensure it can be found by name", 0, SFINAE_Suppress, false, false, 1)
+DIAG(note_pp_ambiguous_macro_chosen, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "expanding this definition of %0", 0, SFINAE_Suppress, false, false, 1)
+DIAG(note_pp_ambiguous_macro_other, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "other definition of %0", 0, SFINAE_Suppress, false, false, 1)
+DIAG(note_pp_framework_without_header, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "did not find header '%0' in framework '%1' (loaded from '%2')", 0, SFINAE_Suppress, false, false, 1)
+DIAG(note_pp_module_begin_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "entering module '%0' due to this pragma", 0, SFINAE_Suppress, false, false, 1)
+DIAG(note_suggest_parens_for_macro, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "parentheses are required around macro argument containing braced initializer list", 0, SFINAE_Suppress, false, false, 1)
+DIAG(note_ucn_four_not_eight, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "did you mean to use '\\u'?", 0, SFINAE_Suppress, false, false, 1)
+DIAG(null_in_char_or_string, CLASS_WARNING, (unsigned)diag::Severity::Warning, "null character(s) preserved in %select{char|string}0 literal", 453, SFINAE_Suppress, false, false, 1)
+DIAG(null_in_file, CLASS_WARNING, (unsigned)diag::Severity::Warning, "null character ignored", 453, SFINAE_Suppress, false, false, 1)
+DIAG(pp_disabled_macro_expansion, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "disabled expansion of recursive macro", 177, SFINAE_Suppress, false, false, 1)
+DIAG(pp_err_elif_after_else, CLASS_ERROR, (unsigned)diag::Severity::Error, "#elif after #else", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(pp_err_elif_without_if, CLASS_ERROR, (unsigned)diag::Severity::Error, "#elif without #if", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(pp_err_else_after_else, CLASS_ERROR, (unsigned)diag::Severity::Error, "#else after #else", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(pp_err_else_without_if, CLASS_ERROR, (unsigned)diag::Severity::Error, "#else without #if", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(pp_hash_warning, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 2, SFINAE_Suppress, false, true, 21)
+DIAG(pp_include_macros_out_of_predefines, CLASS_ERROR, (unsigned)diag::Severity::Error, "the #__include_macros directive is only for internal use by -imacros", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(pp_include_next_absolute_path, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#include_next with absolute path", 304, SFINAE_Suppress, false, false, 1)
+DIAG(pp_include_next_in_primary, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#include_next in primary source file", 305, SFINAE_Suppress, false, false, 1)
+DIAG(pp_invalid_string_literal, CLASS_WARNING, (unsigned)diag::Severity::Warning, "invalid string literal, ignoring final '\\'", 0, SFINAE_Suppress, false, false, 1)
+DIAG(pp_macro_not_used, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "macro is not used", 730, SFINAE_Suppress, false, false, 1)
+DIAG(pp_nonportable_path, CLASS_WARNING, (unsigned)diag::Severity::Warning, "non-portable path to file '%0'; specified path differs in case from file name on disk", 446, SFINAE_Suppress, false, false, 1)
+DIAG(pp_nonportable_system_path, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-portable path to file '%0'; specified path differs in case from file name on disk", 447, SFINAE_Suppress, false, false, 1)
+DIAG(pp_out_of_date_dependency, CLASS_WARNING, (unsigned)diag::Severity::Warning, "current file is older than dependency %0", 0, SFINAE_Suppress, false, false, 1)
+DIAG(pp_poisoning_existing_macro, CLASS_WARNING, (unsigned)diag::Severity::Warning, "poisoning existing macro", 0, SFINAE_Suppress, false, false, 1)
+DIAG(pp_pragma_once_in_main_file, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#pragma once in main file", 538, SFINAE_Suppress, false, false, 1)
+DIAG(pp_pragma_sysheader_in_main_file, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#pragma system_header ignored in main file", 541, SFINAE_Suppress, false, false, 1)
+DIAG(trigraph_converted, CLASS_WARNING, (unsigned)diag::Severity::Warning, "trigraph converted to '%0' character", 669, SFINAE_Suppress, false, false, 1)
+DIAG(trigraph_ends_block_comment, CLASS_WARNING, (unsigned)diag::Severity::Warning, "trigraph ends block comment", 669, SFINAE_Suppress, false, false, 1)
+DIAG(trigraph_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "trigraph ignored", 669, SFINAE_Suppress, false, false, 1)
+DIAG(trigraph_ignored_block_comment, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignored trigraph would end block comment", 669, SFINAE_Suppress, false, false, 1)
+DIAG(warn_auto_module_import, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "treating #%select{include|import|include_next|__include_macros}0 as an import of module '%1'", 49, SFINAE_Suppress, false, false, 1)
+DIAG(warn_bad_character_encoding, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "illegal character encoding in character literal", 346, SFINAE_Suppress, false, false, 1)
+DIAG(warn_bad_string_encoding, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "illegal character encoding in string literal", 346, SFINAE_Suppress, false, false, 1)
+DIAG(warn_c99_compat_unicode_id, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{using this character in an identifier|starting an identifier with this character}0 is incompatible with C99", 113, SFINAE_Suppress, false, false, 1)
+DIAG(warn_c99_compat_unicode_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unicode literals are incompatible with C99", 113, SFINAE_Suppress, false, false, 1)
+DIAG(warn_char_constant_too_large, CLASS_WARNING, (unsigned)diag::Severity::Warning, "character constant too long for its type", 0, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx11_compat_binary_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "binary integer literals are incompatible with C++ standards before C++14", 104, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx11_compat_digit_separator, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "digit separators are incompatible with C++ standards before C++14", 103, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx11_compat_reserved_user_defined_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "identifier after literal will be treated as a reserved user-defined literal suffix in C++11", 78, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx11_compat_user_defined_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "identifier after literal will be treated as a user-defined literal suffix in C++11", 75, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx11_keyword, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%0' is a keyword in C++11", 75, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx14_compat_u8_character_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unicode literals are incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx17_compat_spaceship, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'<=>' operator is incompatible with C++ standards before C++2a", 99, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx17_hex_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "hexadecimal floating literals are incompatible with C++ standards before C++17", 102, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx2a_compat_spaceship, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'<=>' is a single token in C++2a; add a space to avoid a change in behavior", 96, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx2a_keyword, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%0' is a keyword in C++2a", 96, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx98_compat_empty_fnmacro_arg, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "empty macro arguments are incompatible with C++98", 110, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx98_compat_less_colon_colon, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'<::' is treated as digraph '<:' (aka '[') followed by ':' in C++98", 106, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx98_compat_literal_ucn_control_character, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "universal character name referring to a control character is incompatible with C++98", 106, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx98_compat_literal_ucn_escape_basic_scs, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "specifying character '%0' with a universal character name is incompatible with C++98", 106, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx98_compat_no_newline_eof, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "C++98 requires newline at end of file", 110, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx98_compat_pp_line_too_big, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "#line number greater than 32767 is incompatible with C++98", 110, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx98_compat_raw_string_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "raw string literals are incompatible with C++98", 106, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx98_compat_unicode_id, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "using this character in an identifier is incompatible with C++98", 106, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx98_compat_unicode_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unicode literals are incompatible with C++98", 106, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx98_compat_variadic_macro, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variadic macros are incompatible with C++98", 110, SFINAE_Suppress, false, false, 1)
+DIAG(warn_defined_in_function_type_macro, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "macro expansion producing 'defined' has undefined behavior", 214, SFINAE_Suppress, false, false, 1)
+DIAG(warn_defined_in_object_type_macro, CLASS_WARNING, (unsigned)diag::Severity::Warning, "macro expansion producing 'defined' has undefined behavior", 214, SFINAE_Suppress, false, false, 1)
+DIAG(warn_extraneous_char_constant, CLASS_WARNING, (unsigned)diag::Severity::Warning, "extraneous characters in character constant ignored", 0, SFINAE_Suppress, false, false, 1)
+DIAG(warn_framework_include_private_from_public, CLASS_WARNING, (unsigned)diag::Severity::Warning, "public framework header includes private framework header '%0'", 246, SFINAE_Suppress, false, false, 1)
+DIAG(warn_has_warning_invalid_option, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "__has_warning expected option name (e.g. \"-Wundef\")", 365, SFINAE_Suppress, false, false, 1)
+DIAG(warn_header_guard, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is used as a header guard here, followed by #define of a different macro", 279, SFINAE_Suppress, false, false, 1)
+DIAG(warn_missing_whitespace_after_macro_name, CLASS_WARNING, (unsigned)diag::Severity::Warning, "whitespace recommended after macro name", 0, SFINAE_Suppress, false, false, 1)
+DIAG(warn_mmap_incomplete_framework_module_declaration, CLASS_WARNING, (unsigned)diag::Severity::Warning, "skipping '%0' because module declaration of '%1' lacks the 'framework' qualifier", 314, SFINAE_Suppress, false, false, 1)
+DIAG(warn_mmap_mismatched_private_module_name, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected canonical name for private module '%0'", 546, SFINAE_Suppress, false, false, 1)
+DIAG(warn_mmap_mismatched_private_submodule, CLASS_WARNING, (unsigned)diag::Severity::Warning, "private submodule '%0' in private module map, expected top-level module", 546, SFINAE_Suppress, false, false, 1)
+DIAG(warn_mmap_redundant_export_as, CLASS_WARNING, (unsigned)diag::Severity::Warning, "module '%0' already re-exported as '%1'", 546, SFINAE_Suppress, false, false, 1)
+DIAG(warn_mmap_umbrella_dir_not_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "umbrella directory '%0' not found", 317, SFINAE_Suppress, false, false, 1)
+DIAG(warn_mmap_unknown_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown attribute '%0'", 282, SFINAE_Suppress, false, false, 1)
+DIAG(warn_module_conflict, CLASS_WARNING, (unsigned)diag::Severity::Warning, "module '%0' conflicts with already-imported module '%1': %2", 419, SFINAE_Suppress, false, false, 1)
+DIAG(warn_nested_block_comment, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'/*' within block comment", 126, SFINAE_Suppress, false, false, 1)
+DIAG(warn_no_newline_eof, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "no newline at end of file", 435, SFINAE_Suppress, false, false, 1)
+DIAG(warn_non_modular_include_in_framework_module, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "include of non-modular header inside framework module '%0': '%1'", 440, SFINAE_Suppress, false, false, 1)
+DIAG(warn_non_modular_include_in_module, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "include of non-modular header inside module '%0': '%1'", 441, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pp_ambiguous_macro, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ambiguous expansion of macro %0", 19, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pp_convert_to_positive, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{left|right}0 side of operator converted from negative value to unsigned: %1", 0, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pp_date_time, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "expansion of date or time macro is not reproducible", 154, SFINAE_Suppress, false, true, 1)
+DIAG(warn_pp_expr_overflow, CLASS_WARNING, (unsigned)diag::Severity::Warning, "integer overflow in preprocessor expression", 0, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pp_hdrstop_filename_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#pragma hdrstop filename not supported, /Fp can be used to specify precompiled header filename", 123, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pp_line_decimal, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{#line|GNU line marker}0 directive interprets number as decimal, not octal", 0, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pp_macro_def_mismatch_with_pch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "definition of macro %0 does not match definition in precompiled header", 123, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pp_macro_hides_keyword, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "keyword is hidden by macro definition", 350, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pp_macro_is_reserved_id, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "macro name is a reserved identifier", 569, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pp_objc_macro_redef_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring redefinition of Objective-C qualifier macro", 473, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pp_undef_identifier, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 is not defined, evaluates to 0", 677, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_debug_missing_argument, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing argument to debug command '%0'", 286, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_debug_unexpected_command, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unexpected debug command '%0'", 286, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_diagnostic_cannot_pop, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pragma diagnostic pop could not pop, no matching push", 696, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_diagnostic_invalid, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pragma diagnostic expected 'error', 'warning', 'ignored', 'fatal', 'push', or 'pop'", 696, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_diagnostic_invalid_option, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pragma diagnostic expected option name (e.g. \"-Wundef\")", 696, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_diagnostic_invalid_token, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "unexpected token in pragma diagnostic", 696, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_diagnostic_unknown_warning, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "unknown warning group '%0', ignored", 698, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_ignored, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unknown pragma ignored", 696, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_include_alias_expected, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pragma include_alias expected '%0'", 696, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_include_alias_expected_filename, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pragma include_alias expected include filename", 696, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_include_alias_mismatch_angle, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "angle-bracketed include <%0> cannot be aliased to double-quoted include \"%1\"", 696, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_include_alias_mismatch_quote, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "double-quoted include \"%0\" cannot be aliased to angle-bracketed include <%1>", 696, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_message, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 1, SFINAE_Suppress, true, false, 30)
+DIAG(warn_pragma_pop_macro_no_push, CLASS_WARNING, (unsigned)diag::Severity::Warning, "pragma pop_macro could not pop '%0', no matching push_macro", 286, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_warning_expected, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "#pragma warning expected '%0'", 696, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_warning_expected_number, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "#pragma warning expected a warning number", 696, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_warning_push_level, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "#pragma warning(push, level) requires a level between 0 and 4", 696, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_warning_spec_invalid, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "#pragma warning expected 'push', 'pop', 'default', 'disable', 'error', 'once', 'suppress', 1, 2, 3, or 4", 696, SFINAE_Suppress, false, false, 1)
+DIAG(warn_quoted_include_in_framework_header, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "double-quoted include \"%0\" in framework header, expected angle-bracketed instead", 555, SFINAE_Suppress, false, false, 1)
+DIAG(warn_ucn_escape_incomplete, CLASS_WARNING, (unsigned)diag::Severity::Warning, "incomplete universal character name; treating as '\\' followed by identifier", 688, SFINAE_Suppress, false, false, 1)
+DIAG(warn_ucn_escape_no_digits, CLASS_WARNING, (unsigned)diag::Severity::Warning, "\\%0 used with no following hex digits; treating as '\\' followed by identifier", 688, SFINAE_Suppress, false, false, 1)
+DIAG(warn_ucn_escape_surrogate, CLASS_WARNING, (unsigned)diag::Severity::Warning, "universal character name refers to a surrogate character", 688, SFINAE_Suppress, false, false, 1)
+DIAG(warn_ucn_not_valid_in_c89, CLASS_WARNING, (unsigned)diag::Severity::Warning, "universal character names are only valid in C99 or C++; treating as '\\' followed by identifier", 688, SFINAE_Suppress, false, false, 1)
+DIAG(warn_ucn_not_valid_in_c89_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "universal character names are only valid in C99 or C++", 688, SFINAE_Suppress, false, false, 1)
+DIAG(warn_uncovered_module_header, CLASS_WARNING, (unsigned)diag::Severity::Warning, "umbrella header for module '%0' does not include header '%1'", 317, SFINAE_Suppress, false, false, 1)
+DIAG(warn_use_of_private_header_outside_module, CLASS_WARNING, (unsigned)diag::Severity::Error, "use of private header from outside its module: '%0'", 545, SFINAE_Suppress, false, false, 1)
+DIAG(warn_utf8_symbol_homoglyph, CLASS_WARNING, (unsigned)diag::Severity::Warning, "treating Unicode character <U+%0> as identifier character rather than as '%1' symbol", 689, SFINAE_Suppress, false, false, 1)
+DIAG(warn_utf8_symbol_zero_width, CLASS_WARNING, (unsigned)diag::Severity::Warning, "identifier contains Unicode character <U+%0> that is invisible in some environments", 691, SFINAE_Suppress, false, false, 1)
diff --git a/clang-r353983/include/clang/Basic/DiagnosticOptions.def b/clang-r353983/include/clang/Basic/DiagnosticOptions.def
new file mode 100644
index 00000000..baafd7ac
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/DiagnosticOptions.def
@@ -0,0 +1,101 @@
+//===--- DiagOptions.def - Diagnostic option database ------------- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the diagnostic options. Users of this file
+// must define the DIAGOPT macro to make use of this information.
+// Optionally, the user may also define ENUM_DIAGOPT (for options
+// that have enumeration type and VALUE_DIAGOPT (for options that
+// describe a value rather than a flag). The SEMANTIC_* variants of these macros
+// indicate options that affect the processing of the program, rather than
+// simply the output.
+//
+//===----------------------------------------------------------------------===//
+#ifndef DIAGOPT
+# error Define the DIAGOPT macro to handle language options
+#endif
+
+#ifndef VALUE_DIAGOPT
+# define VALUE_DIAGOPT(Name, Bits, Default) \
+DIAGOPT(Name, Bits, Default)
+#endif
+
+#ifndef ENUM_DIAGOPT
+# define ENUM_DIAGOPT(Name, Type, Bits, Default) \
+DIAGOPT(Name, Bits, Default)
+#endif
+
+#ifndef SEMANTIC_DIAGOPT
+# define SEMANTIC_DIAGOPT(Name, Bits, Default) DIAGOPT(Name, Bits, Default)
+#endif
+
+#ifndef SEMANTIC_VALUE_DIAGOPT
+# define SEMANTIC_VALUE_DIAGOPT(Name, Bits, Default) \
+ VALUE_DIAGOPT(Name, Bits, Default)
+#endif
+
+#ifndef SEMANTIC_ENUM_DIAGOPT
+# define SEMANTIC_ENUM_DIAGOPT(Name, Type, Bits, Default) \
+ ENUM_DIAGOPT(Name, Type, Bits, Default)
+#endif
+
+SEMANTIC_DIAGOPT(IgnoreWarnings, 1, 0) /// -w
+DIAGOPT(NoRewriteMacros, 1, 0) /// -Wno-rewrite-macros
+DIAGOPT(Pedantic, 1, 0) /// -pedantic
+DIAGOPT(PedanticErrors, 1, 0) /// -pedantic-errors
+DIAGOPT(ShowColumn, 1, 1) /// Show column number on diagnostics.
+DIAGOPT(ShowLocation, 1, 1) /// Show source location information.
+DIAGOPT(AbsolutePath, 1, 0) /// Use absolute paths.
+DIAGOPT(ShowCarets, 1, 1) /// Show carets in diagnostics.
+DIAGOPT(ShowFixits, 1, 1) /// Show fixit information.
+DIAGOPT(ShowSourceRanges, 1, 0) /// Show source ranges in numeric form.
+DIAGOPT(ShowParseableFixits, 1, 0) /// Show machine parseable fix-its.
+DIAGOPT(ShowPresumedLoc, 1, 0) /// Show presumed location for diagnostics.
+DIAGOPT(ShowOptionNames, 1, 0) /// Show the option name for mappable
+ /// diagnostics.
+DIAGOPT(ShowNoteIncludeStack, 1, 0) /// Show include stacks for notes.
+VALUE_DIAGOPT(ShowCategories, 2, 0) /// Show categories: 0 -> none, 1 -> Number,
+ /// 2 -> Full Name.
+
+ENUM_DIAGOPT(Format, TextDiagnosticFormat, 2, Clang) /// Format for diagnostics:
+
+DIAGOPT(ShowColors, 1, 0) /// Show diagnostics with ANSI color sequences.
+ENUM_DIAGOPT(ShowOverloads, OverloadsShown, 1,
+ Ovl_All) /// Overload candidates to show.
+DIAGOPT(VerifyDiagnostics, 1, 0) /// Check that diagnostics match the expected
+ /// diagnostics, indicated by markers in the
+ /// input source file.
+ENUM_DIAGOPT(VerifyIgnoreUnexpected, DiagnosticLevelMask, 4,
+ DiagnosticLevelMask::None) /// Ignore unexpected diagnostics of
+ /// the specified levels when using
+ /// -verify.
+DIAGOPT(ElideType, 1, 0) /// Elide identical types in template diffing
+DIAGOPT(ShowTemplateTree, 1, 0) /// Print a template tree when diffing
+DIAGOPT(CLFallbackMode, 1, 0) /// Format for clang-cl fallback mode
+
+VALUE_DIAGOPT(ErrorLimit, 32, 0) /// Limit # errors emitted.
+/// Limit depth of macro expansion backtrace.
+VALUE_DIAGOPT(MacroBacktraceLimit, 32, DefaultMacroBacktraceLimit)
+/// Limit depth of instantiation backtrace.
+VALUE_DIAGOPT(TemplateBacktraceLimit, 32, DefaultTemplateBacktraceLimit)
+/// Limit depth of constexpr backtrace.
+VALUE_DIAGOPT(ConstexprBacktraceLimit, 32, DefaultConstexprBacktraceLimit)
+/// Limit number of times to perform spell checking.
+VALUE_DIAGOPT(SpellCheckingLimit, 32, DefaultSpellCheckingLimit)
+/// Limit number of lines shown in a snippet.
+VALUE_DIAGOPT(SnippetLineLimit, 32, DefaultSnippetLineLimit)
+
+VALUE_DIAGOPT(TabStop, 32, DefaultTabStop) /// The distance between tab stops.
+/// Column limit for formatting message diagnostics, or 0 if unused.
+VALUE_DIAGOPT(MessageLength, 32, 0)
+
+#undef DIAGOPT
+#undef ENUM_DIAGOPT
+#undef VALUE_DIAGOPT
+#undef SEMANTIC_DIAGOPT
+#undef SEMANTIC_ENUM_DIAGOPT
+#undef SEMANTIC_VALUE_DIAGOPT
diff --git a/clang-r353983/include/clang/Basic/DiagnosticOptions.h b/clang-r353983/include/clang/Basic/DiagnosticOptions.h
new file mode 100644
index 00000000..3e3c4e50
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/DiagnosticOptions.h
@@ -0,0 +1,128 @@
+//===- DiagnosticOptions.h --------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_DIAGNOSTICOPTIONS_H
+#define LLVM_CLANG_BASIC_DIAGNOSTICOPTIONS_H
+
+#include "clang/Basic/LLVM.h"
+#include "llvm/ADT/IntrusiveRefCntPtr.h"
+#include <string>
+#include <type_traits>
+#include <vector>
+
+namespace clang {
+
+/// Specifies which overload candidates to display when overload
+/// resolution fails.
+enum OverloadsShown : unsigned {
+ /// Show all overloads.
+ Ovl_All,
+
+ /// Show just the "best" overload candidates.
+ Ovl_Best
+};
+
+/// A bitmask representing the diagnostic levels used by
+/// VerifyDiagnosticConsumer.
+enum class DiagnosticLevelMask : unsigned {
+ None = 0,
+ Note = 1 << 0,
+ Remark = 1 << 1,
+ Warning = 1 << 2,
+ Error = 1 << 3,
+ All = Note | Remark | Warning | Error
+};
+
+inline DiagnosticLevelMask operator~(DiagnosticLevelMask M) {
+ using UT = std::underlying_type<DiagnosticLevelMask>::type;
+ return static_cast<DiagnosticLevelMask>(~static_cast<UT>(M));
+}
+
+inline DiagnosticLevelMask operator|(DiagnosticLevelMask LHS,
+ DiagnosticLevelMask RHS) {
+ using UT = std::underlying_type<DiagnosticLevelMask>::type;
+ return static_cast<DiagnosticLevelMask>(
+ static_cast<UT>(LHS) | static_cast<UT>(RHS));
+}
+
+inline DiagnosticLevelMask operator&(DiagnosticLevelMask LHS,
+ DiagnosticLevelMask RHS) {
+ using UT = std::underlying_type<DiagnosticLevelMask>::type;
+ return static_cast<DiagnosticLevelMask>(
+ static_cast<UT>(LHS) & static_cast<UT>(RHS));
+}
+
+raw_ostream& operator<<(raw_ostream& Out, DiagnosticLevelMask M);
+
+/// Options for controlling the compiler diagnostics engine.
+class DiagnosticOptions : public RefCountedBase<DiagnosticOptions>{
+public:
+ enum TextDiagnosticFormat { Clang, MSVC, Vi };
+
+ // Default values.
+ enum {
+ DefaultTabStop = 8,
+ MaxTabStop = 100,
+ DefaultMacroBacktraceLimit = 6,
+ DefaultTemplateBacktraceLimit = 10,
+ DefaultConstexprBacktraceLimit = 10,
+ DefaultSpellCheckingLimit = 50,
+ DefaultSnippetLineLimit = 1,
+ };
+
+ // Define simple diagnostic options (with no accessors).
+#define DIAGOPT(Name, Bits, Default) unsigned Name : Bits;
+#define ENUM_DIAGOPT(Name, Type, Bits, Default)
+#include "clang/Basic/DiagnosticOptions.def"
+
+protected:
+ // Define diagnostic options of enumeration type. These are private, and will
+ // have accessors (below).
+#define DIAGOPT(Name, Bits, Default)
+#define ENUM_DIAGOPT(Name, Type, Bits, Default) unsigned Name : Bits;
+#include "clang/Basic/DiagnosticOptions.def"
+
+public:
+ /// The file to log diagnostic output to.
+ std::string DiagnosticLogFile;
+
+ /// The file to serialize diagnostics to (non-appending).
+ std::string DiagnosticSerializationFile;
+
+ /// The list of -W... options used to alter the diagnostic mappings, with the
+ /// prefixes removed.
+ std::vector<std::string> Warnings;
+
+ /// The list of -R... options used to alter the diagnostic mappings, with the
+ /// prefixes removed.
+ std::vector<std::string> Remarks;
+
+ /// The prefixes for comment directives sought by -verify ("expected" by
+ /// default).
+ std::vector<std::string> VerifyPrefixes;
+
+public:
+ // Define accessors/mutators for diagnostic options of enumeration type.
+#define DIAGOPT(Name, Bits, Default)
+#define ENUM_DIAGOPT(Name, Type, Bits, Default) \
+ Type get##Name() const { return static_cast<Type>(Name); } \
+ void set##Name(Type Value) { Name = static_cast<unsigned>(Value); }
+#include "clang/Basic/DiagnosticOptions.def"
+
+ DiagnosticOptions() {
+#define DIAGOPT(Name, Bits, Default) Name = Default;
+#define ENUM_DIAGOPT(Name, Type, Bits, Default) set##Name(Default);
+#include "clang/Basic/DiagnosticOptions.def"
+ }
+};
+
+using TextDiagnosticFormat = DiagnosticOptions::TextDiagnosticFormat;
+
+} // namespace clang
+
+#endif // LLVM_CLANG_BASIC_DIAGNOSTICOPTIONS_H
diff --git a/clang-r353983/include/clang/Basic/DiagnosticParse.h b/clang-r353983/include/clang/Basic/DiagnosticParse.h
new file mode 100644
index 00000000..0c21ff93
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/DiagnosticParse.h
@@ -0,0 +1,28 @@
+//===--- DiagnosticParse.h - Diagnostics for libparse -----------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_DIAGNOSTICPARSE_H
+#define LLVM_CLANG_BASIC_DIAGNOSTICPARSE_H
+
+#include "clang/Basic/Diagnostic.h"
+
+namespace clang {
+namespace diag {
+enum {
+#define DIAG(ENUM, FLAGS, DEFAULT_MAPPING, DESC, GROUP, SFINAE, NOWERROR, \
+ SHOWINSYSHEADER, CATEGORY) \
+ ENUM,
+#define PARSESTART
+#include "clang/Basic/DiagnosticParseKinds.inc"
+#undef DIAG
+ NUM_BUILTIN_PARSE_DIAGNOSTICS
+};
+} // end namespace diag
+} // end namespace clang
+
+#endif // LLVM_CLANG_BASIC_DIAGNOSTICPARSE_H
diff --git a/clang-r353983/include/clang/Basic/DiagnosticParseKinds.inc b/clang-r353983/include/clang/Basic/DiagnosticParseKinds.inc
new file mode 100644
index 00000000..f18ef7fc
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/DiagnosticParseKinds.inc
@@ -0,0 +1,490 @@
+#ifdef PARSESTART
+__PARSESTART = DIAG_START_PARSE,
+#undef PARSESTART
+#endif
+
+DIAG(err_access_specifier_interface, CLASS_ERROR, (unsigned)diag::Severity::Error, "interface types cannot specify '%select{private|protected}0' access", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_address_of_label_outside_fn, CLASS_ERROR, (unsigned)diag::Severity::Error, "use of address-of-label extension outside of a function body", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_alias_declaration_not_identifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "name defined in alias declaration must be an identifier", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_alias_declaration_pack_expansion, CLASS_ERROR, (unsigned)diag::Severity::Error, "alias declaration cannot be a pack expansion", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_alias_declaration_specialization, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{partial specialization|explicit specialization|explicit instantiation}0 of alias templates is not permitted", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_anon_type_definition, CLASS_ERROR, (unsigned)diag::Severity::Error, "declaration of anonymous %0 must be a definition", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_arc_bridge_retain, CLASS_ERROR, (unsigned)diag::Severity::Error, "unknown cast annotation __bridge_retain; did you mean __bridge_retained?", 0, SFINAE_SubstitutionFailure, false, true, 8)
+DIAG(err_argument_required_after_attribute, CLASS_ERROR, (unsigned)diag::Severity::Error, "argument required after attribute", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_asm_empty, CLASS_ERROR, (unsigned)diag::Severity::Error, "__asm used with no assembly instructions", 0, SFINAE_SubstitutionFailure, false, true, 12)
+DIAG(err_asm_goto_not_supported_yet, CLASS_ERROR, (unsigned)diag::Severity::Error, "'asm goto' constructs are not supported yet", 0, SFINAE_SubstitutionFailure, false, true, 12)
+DIAG(err_asm_operand_wide_string_literal, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot use %select{unicode|wide}0 string literal in 'asm'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_at_defs_cxx, CLASS_ERROR, (unsigned)diag::Severity::Error, "@defs is not supported in Objective-C++", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_at_in_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected '@' in member specification", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_atimport, CLASS_ERROR, (unsigned)diag::Severity::Error, "use of '@import' when modules are disabled", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_attribute_not_import_attr, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute cannot be applied to a module import", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_attribute_not_module_attr, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute cannot be applied to a module", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_attribute_requires_arguments, CLASS_ERROR, (unsigned)diag::Severity::Error, "parentheses must be omitted if %0 attribute's argument list is empty", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_attributes_misplaced, CLASS_ERROR, (unsigned)diag::Severity::Error, "misplaced attributes; expected attributes here", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_attributes_not_allowed, CLASS_ERROR, (unsigned)diag::Severity::Error, "an attribute list cannot appear here", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_avail_query_expected_platform_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected a platform name here", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_avail_query_unrecognized_platform_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "unrecognized platform name %0", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_availability_expected_change, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected 'introduced', 'deprecated', or 'obsoleted'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_availability_expected_platform, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected a platform name, e.g., 'macos'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_availability_query_repeated_platform, CLASS_ERROR, (unsigned)diag::Severity::Error, "version for '%0' already specified", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_availability_query_repeated_star, CLASS_ERROR, (unsigned)diag::Severity::Error, "'*' query has already been specified", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_availability_query_wildcard_required, CLASS_ERROR, (unsigned)diag::Severity::Error, "must handle potential future platforms with '*'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_availability_redundant, CLASS_ERROR, (unsigned)diag::Severity::Error, "redundant %0 availability change; only the last specified change will be used", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_availability_unknown_change, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 is not an availability stage; use 'introduced', 'deprecated', or 'obsoleted'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_bool_redeclaration, CLASS_ERROR, (unsigned)diag::Severity::Error, "redeclaration of C++ built-in type 'bool'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_bracket_depth_exceeded, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "bracket nesting level exceeded maximum of %0", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_brackets_go_after_unqualified_id, CLASS_ERROR, (unsigned)diag::Severity::Error, "brackets are not allowed here; to declare an array, place the brackets after the %select{identifier|name}0", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_c11_noreturn_misplaced, CLASS_ERROR, (unsigned)diag::Severity::Error, "'_Noreturn' keyword must precede function declarator", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_class_on_template_template_param, CLASS_ERROR, (unsigned)diag::Severity::Error, "template template parameter requires 'class' after the parameter list", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_constructor_bad_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing return type for function %0; did you mean the constructor name %1?", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_ctor_init_missing_comma, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing ',' between base or member initializers", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_cxx11_attribute_forbids_arguments, CLASS_ERROR, (unsigned)diag::Severity::Error, "attribute %0 cannot have an argument list", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_cxx11_attribute_forbids_ellipsis, CLASS_ERROR, (unsigned)diag::Severity::Error, "attribute %0 cannot be used as an attribute pack", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_cxx11_attribute_repeated, CLASS_ERROR, (unsigned)diag::Severity::Error, "attribute %0 cannot appear multiple times in an attribute specifier", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_declaration_does_not_declare_param, CLASS_ERROR, (unsigned)diag::Severity::Error, "declaration does not declare a parameter", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_declspec_after_virtspec, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' qualifier may not appear after the virtual specifier '%1'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_default_arg_unparsed, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected end of default argument expression", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_default_delete_in_multiple_declaration, CLASS_ERROR, (unsigned)diag::Severity::Error, "'= %select{default|delete}0' is a function definition and must occur in a standalone declaration", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_default_template_template_parameter_not_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "default template argument for a template template parameter must be a class template", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_destructor_template_id, CLASS_ERROR, (unsigned)diag::Severity::Error, "destructor name %0 does not refer to a template", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_destructor_tilde_identifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected a class name after '~' to name a destructor", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_destructor_tilde_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "'~' in destructor name should be after nested name specifier", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_dup_virtual, CLASS_ERROR, (unsigned)diag::Severity::Error, "duplicate 'virtual' in base specifier", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_duplicate_default_assoc, CLASS_ERROR, (unsigned)diag::Severity::Error, "duplicate default generic association", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_duplicate_virt_specifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "class member already marked '%0'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_dynamic_and_noexcept_specification, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot have both throw() and noexcept() clause on the same function", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_empty_enum, CLASS_ERROR, (unsigned)diag::Severity::Error, "use of empty enum", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_enumerator_list_missing_comma, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing ',' between enumerators", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_enumerator_unnamed_no_def, CLASS_ERROR, (unsigned)diag::Severity::Error, "unnamed enumeration must be a definition", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_except_spec_unparsed, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected end of exception specification", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_capture, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected variable name or 'this' in lambda capture list", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_case_before_expression, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected 'case' keyword before expression", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_catch, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected catch", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_class_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected class name", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_class_name_not_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "'typename' is redundant; base classes are implicitly types", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_coloncolon_after_super, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected '::' after '__super'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_comma_greater, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected ',' or '>' in template-parameter-list", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_comma_or_rsquare, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected ',' or ']' in lambda capture list", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_end_declare_target, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected '#pragma omp end declare target'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_end_of_enumerator, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected '= constant-expression' or end of enumerator definition", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_equal_designator, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected '=' or another designator", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_expression, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected expression", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_external_declaration, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected external declaration", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_field_designator, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected a field designator, such as '.field = 4'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_fn_body, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected function body after function declarator", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_fold_operator, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected a foldable binary operator in fold expression", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_init_in_condition, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable declaration in condition must have an initializer", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_init_in_condition_lparen, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable declaration in condition cannot have a parenthesized initializer", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_lambda_body, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected body of lambda expression", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_lbrace_after_base_specifiers, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected '{' after base class list", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_lbrace_in_compound_literal, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected '{' in compound literal", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_less_after, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected '<' after '%0'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_lparen_after, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected '(' after '%0'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_lparen_after_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected '(' for function-style cast or type construction", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_member_name_or_semi, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected member name or ';' after declaration specifiers", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_member_name_or_semi_objcxx_keyword, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected member name or ';' after declaration specifiers; %0 is a keyword in Objective-C++", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_member_or_base_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected class member or base class name", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_method_body, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected method body", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_minus_or_plus, CLASS_ERROR, (unsigned)diag::Severity::Error, "method type specifier must start with '-' or '+'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_objc_container, CLASS_ERROR, (unsigned)diag::Severity::Error, "'@end' must appear in an Objective-C context", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_parameter_pack, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected the name of a parameter pack", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_parentheses_around_typename, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected parentheses around type name in %0 expression", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_property_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected property name", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_punc, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected ')' or ',' after '%0'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_qualified_after_typename, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected a qualified name after 'typename'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_rparen_after, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected ')' after '%0'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_selector_for_method, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected selector for Objective-C method", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_semi_after_attribute_list, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected ';' after attribute list", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_semi_after_expr, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected ';' after expression", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_semi_after_method_proto, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected ';' after method prototype", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_semi_after_namespace_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected ';' after namespace name", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_semi_after_static_assert, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected ';' after static_assert", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_semi_after_stmt, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected ';' after %0 statement", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_semi_decl_list, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected ';' at end of declaration list", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_semi_declaration, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected ';' at end of declaration", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_semi_for, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected ';' in 'for' statement specifier", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_star_this_capture, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected 'this' following '*' in lambda capture list", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_statement, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected statement", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected template", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_template_parameter, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected template parameter", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_token_instead_of_objcxx_keyword, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected %0; %1 is a keyword in Objective-C++", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected a type", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_type_name_after_typename, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected an identifier or template-id after '::'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_unqualified_id, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected %select{identifier|unqualified-id}0", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_version, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected a version of the form 'major[.minor[.subminor]]'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_expected_while, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected 'while' in do/while loop", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_explicit_instantiation_enum, CLASS_ERROR, (unsigned)diag::Severity::Error, "enumerations cannot be explicitly instantiated", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_explicit_instantiation_with_definition, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit template instantiation cannot have a definition; if this definition is meant to be an explicit specialization, add '<>' after the 'template' keyword", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_explicit_spec_non_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit %select{specialization|instantiation}0 of non-template %1 %2", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_export_empty, CLASS_ERROR, (unsigned)diag::Severity::Error, "export declaration cannot be empty", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_external_source_symbol_duplicate_clause, CLASS_ERROR, (unsigned)diag::Severity::Error, "duplicate %0 clause in an 'external_source_symbol' attribute", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_external_source_symbol_expected_keyword, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected 'language', 'defined_in', or 'generated_declaration'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_extraneous_closing_brace, CLASS_ERROR, (unsigned)diag::Severity::Error, "extraneous closing brace ('}')", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_extraneous_rparen_in_condition, CLASS_ERROR, (unsigned)diag::Severity::Error, "extraneous ')' after condition, expected a statement", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_extraneous_token_before_semi, CLASS_ERROR, (unsigned)diag::Severity::Error, "extraneous '%0' before ';'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_fold_operator_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "operators in fold expression must be the same", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_for_co_await_not_range_for, CLASS_ERROR, (unsigned)diag::Severity::Error, "'co_await' modifier can only be applied to range-based for loop", 0, SFINAE_SubstitutionFailure, false, true, 14)
+DIAG(err_for_range_expected_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "for range declaration must declare a variable", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_for_range_identifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "range-based for loop requires type for loop variable", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_friend_decl_defines_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot define a type in a friend declaration", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_friend_explicit_instantiation, CLASS_ERROR, (unsigned)diag::Severity::Error, "friend cannot be declared in an explicit instantiation; if this declaration is meant to be a friend declaration, remove the 'template' keyword", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_friend_invalid_in_context, CLASS_ERROR, (unsigned)diag::Severity::Error, "'friend' used outside of class", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_func_def_no_params, CLASS_ERROR, (unsigned)diag::Severity::Error, "function definition does not declare parameters", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_function_declared_typedef, CLASS_ERROR, (unsigned)diag::Severity::Error, "function definition declared 'typedef'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_function_definition_not_allowed, CLASS_ERROR, (unsigned)diag::Severity::Error, "function definition is not allowed here", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_function_is_not_record, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected %0 in function call; perhaps remove the %0?", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_gnu_inline_asm_disabled, CLASS_ERROR, (unsigned)diag::Severity::Error, "GNU-style inline assembly is disabled", 0, SFINAE_SubstitutionFailure, false, true, 12)
+DIAG(err_id_after_template_in_nested_name_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected template name after 'template' keyword in nested name specifier", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_illegal_decl_reference_to_reference, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 declared as a reference to a reference", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_illegal_super_cast, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot cast 'super' (it isn't an expression)", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_incomplete_array_member_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "array bound cannot be deduced from an in-class initializer", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_init_list_bin_op, CLASS_ERROR, (unsigned)diag::Severity::Error, "initializer list cannot be used on the %select{left|right}0 hand side of operator '%1'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_inline_ms_asm_parsing, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0", 0, SFINAE_SubstitutionFailure, false, true, 12)
+DIAG(err_inline_namespace_alias, CLASS_ERROR, (unsigned)diag::Severity::Error, "namespace alias cannot be inline", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_inline_nested_namespace_definition, CLASS_ERROR, (unsigned)diag::Severity::Error, "nested namespace definition cannot be 'inline'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_invalid_operator_on_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot use %select{dot|arrow}0 operator on a type", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_invalid_reference_qualifier_application, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' qualifier may not be applied to a reference", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_invalid_token_after_declarator_suggest_equal, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid %0 at end of declaration; did you mean '='?", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_invalid_token_after_toplevel_declarator, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected ';' after top level declarator", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_l_square_l_square_not_attribute, CLASS_ERROR, (unsigned)diag::Severity::Error, "C++11 only allows consecutive left square brackets when introducing an attribute", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_label_end_of_compound_statement, CLASS_ERROR, (unsigned)diag::Severity::Error, "label at end of compound statement: expected statement", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_lambda_decl_specifier_repeated, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{'mutable'|'constexpr'}0 cannot appear multiple times in a lambda declarator", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_lambda_missing_parens, CLASS_ERROR, (unsigned)diag::Severity::Error, "lambda requires '()' before %select{'mutable'|return type|attribute specifier|'constexpr'}0", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_literal_operator_string_not_empty, CLASS_ERROR, (unsigned)diag::Severity::Error, "string literal after 'operator' must be '\"\"'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_literal_operator_string_prefix, CLASS_ERROR, (unsigned)diag::Severity::Error, "string literal after 'operator' cannot have an encoding prefix", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_misplaced_ellipsis_in_declaration, CLASS_ERROR, (unsigned)diag::Severity::Error, "'...' must %select{immediately precede declared identifier|be innermost component of anonymous pack declaration}0", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_missing_before_module_end, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected %0 at end of module", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_missing_catch_finally, CLASS_ERROR, (unsigned)diag::Severity::Error, "@try statement without a @catch and @finally clause", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_missing_comma_before_ellipsis, CLASS_ERROR, (unsigned)diag::Severity::Error, "C requires a comma prior to the ellipsis in a variadic function type", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_missing_dependent_template_keyword, CLASS_ERROR, (unsigned)diag::Severity::Error, "use 'template' keyword to treat '%0' as a dependent template name", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_missing_end_of_definition, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing '}' at end of definition of %q0", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_missing_param, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected parameter declarator", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_missing_whitespace_digraph, CLASS_ERROR, (unsigned)diag::Severity::Error, "found '<::' after a %select{template name|const_cast|dynamic_cast|reinterpret_cast|static_cast}0 which forms the digraph '<:' (aka '[') and a ':', did you mean '< ::'?", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_module_expected_ident, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected a module name after '%select{module|import}0'", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_module_expected_semi, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected ';' after module name", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_module_implementation_partition, CLASS_ERROR, (unsigned)diag::Severity::Error, "module partition must be declared 'export'", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_ms_attributes_not_enabled, CLASS_ERROR, (unsigned)diag::Severity::Error, "'__declspec' attributes are not enabled; use '-fdeclspec' or '-fms-extensions' to enable support for __declspec attributes", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_ms_declspec_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "__declspec attributes must be an identifier or string literal", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_ms_property_duplicate_accessor, CLASS_ERROR, (unsigned)diag::Severity::Error, "property declaration specifies '%0' accessor twice", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_ms_property_expected_accessor_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected name of accessor method", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_ms_property_expected_comma_or_rparen, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected ',' or ')' at end of property accessor list", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_ms_property_expected_equal, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected '=' after '%0'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_ms_property_has_set_accessor, CLASS_ERROR, (unsigned)diag::Severity::Error, "putter for property must be specified as 'put', not 'set'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_ms_property_initializer, CLASS_ERROR, (unsigned)diag::Severity::Error, "property declaration cannot have an in-class initializer", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_ms_property_missing_accessor_kind, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing 'get=' or 'put='", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_ms_property_no_getter_or_putter, CLASS_ERROR, (unsigned)diag::Severity::Error, "property does not specify a getter or a putter", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_ms_property_unknown_accessor, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected 'get' or 'put' in property declaration", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_msasm_unable_to_create_target, CLASS_ERROR, (unsigned)diag::Severity::Error, "MS-style inline assembly is not available: %0", 0, SFINAE_SubstitutionFailure, false, true, 12)
+DIAG(err_msasm_unsupported_arch, CLASS_ERROR, (unsigned)diag::Severity::Error, "Unsupported architecture '%0' for MS-style inline assembly", 0, SFINAE_SubstitutionFailure, false, true, 12)
+DIAG(err_multiple_template_declarators, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{|a template declaration|an explicit template specialization|an explicit template instantiation}0 can only %select{|declare|declare|instantiate}0 a single entity", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_namespace_nonnamespace_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "namespaces can only be defined in global or namespace scope", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_no_matching_param, CLASS_ERROR, (unsigned)diag::Severity::Error, "parameter named %0 is missing", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_nsnumber_nonliteral_unary, CLASS_ERROR, (unsigned)diag::Severity::Error, "@%0 must be followed by a number to form an NSNumber object", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_objc_concat_string, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected token after Objective-C string", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_objc_directive_only_in_protocol, CLASS_ERROR, (unsigned)diag::Severity::Error, "directive may only be specified in protocols only", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_objc_expected_equal_for_getter, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected '=' for Objective-C getter", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_objc_expected_equal_for_setter, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected '=' for Objective-C setter", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_objc_expected_property_attr, CLASS_ERROR, (unsigned)diag::Severity::Error, "unknown property attribute %0", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_objc_expected_selector_for_getter_setter, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected selector for Objective-C %select{setter|getter}0", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_objc_expected_type_parameter, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected type parameter name", 0, SFINAE_SubstitutionFailure, false, true, 20)
+DIAG(err_objc_illegal_interface_qual, CLASS_ERROR, (unsigned)diag::Severity::Error, "illegal interface qualifier", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_objc_illegal_visibility_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "illegal visibility specification", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_objc_missing_end, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing '@end'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_objc_parameterized_implementation, CLASS_ERROR, (unsigned)diag::Severity::Error, "@implementation cannot have type parameters", 0, SFINAE_SubstitutionFailure, false, true, 20)
+DIAG(err_objc_postfix_attribute, CLASS_ERROR, (unsigned)diag::Severity::Error, "postfix attributes are not allowed on Objective-C directives", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_objc_postfix_attribute_hint, CLASS_ERROR, (unsigned)diag::Severity::Error, "postfix attributes are not allowed on Objective-C directives, place them in front of '%select{@interface|@protocol}0'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_objc_properties_require_objc2, CLASS_ERROR, (unsigned)diag::Severity::Error, "properties are an Objective-C 2 feature", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_objc_property_bitfield, CLASS_ERROR, (unsigned)diag::Severity::Error, "property name cannot be a bit-field", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_objc_property_requires_field_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "property requires fields to be named", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_objc_type_args_after_protocols, CLASS_ERROR, (unsigned)diag::Severity::Error, "protocol qualifiers must precede type arguments", 0, SFINAE_SubstitutionFailure, false, true, 20)
+DIAG(err_objc_unexpected_atend, CLASS_ERROR, (unsigned)diag::Severity::Error, "'@end' appears where closing brace '}' is expected", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_objc_unexpected_attr, CLASS_ERROR, (unsigned)diag::Severity::Error, "prefix attribute must be followed by an interface or protocol", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_objc_unknown_at, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected an Objective-C directive after '@'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_objcbridge_related_expected_related_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected a related ObjectiveC class name, e.g., 'NSColor'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_objcbridge_related_selector_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected a class method selector with single argument, e.g., 'colorWithCGColor:'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_omp_decl_in_declare_simd, CLASS_ERROR, (unsigned)diag::Severity::Error, "function declaration is expected after 'declare simd' directive", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_omp_declare_simd_inbranch_notinbranch, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected '%0' clause, '%1' is specified already", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_omp_declare_target_unexpected_clause, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected '%0' clause, only 'to' or 'link' clauses expected", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_omp_expected_clause, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected at least one clause on '#pragma omp %0' directive", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_omp_expected_identifier_for_critical, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected identifier specifying the name of the 'omp critical' directive", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_omp_expected_punc, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected ',' or ')' in '%0' %select{clause|directive}1", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_omp_expected_reduction_identifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected identifier or one of the following operators: '+', '-', '*', '&', '|', '^', '&&', or '||'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_omp_immediate_directive, CLASS_ERROR, (unsigned)diag::Severity::Error, "'#pragma omp %0' %select{|with '%2' clause }1cannot be an immediate substatement", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_omp_map_type_missing, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing map type", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_omp_map_type_modifier_missing, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing map type modifier", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_omp_mapper_expected_declarator, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected declarator on 'omp declare mapper' directive", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_omp_mapper_illegal_identifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "illegal identifier on 'omp declare mapper' directive", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_omp_unexpected_clause, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected OpenMP clause '%0' in directive '#pragma omp %1'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_omp_unexpected_directive, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected OpenMP directive %select{|'#pragma omp %1'}0", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_omp_unknown_directive, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected an OpenMP directive", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_omp_unknown_map_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "incorrect map type, expected one of 'to', 'from', 'tofrom', 'alloc', 'release', or 'delete'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_omp_unknown_map_type_modifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "incorrect map type modifier, expected 'always' or 'close'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_opencl_logical_exclusive_or, CLASS_ERROR, (unsigned)diag::Severity::Error, "^^ is a reserved operator in OpenCL", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_opencl_taking_function_address_parser, CLASS_ERROR, (unsigned)diag::Severity::Error, "taking address of function is not allowed", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_opencl_unroll_hint_on_non_loop, CLASS_ERROR, (unsigned)diag::Severity::Error, "OpenCL only supports 'opencl_unroll_hint' attribute on for, while, and do statements", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_openclcxx_reserved, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' is a reserved keyword in OpenCL C++", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_openclcxx_virtual_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "virtual functions are not supported in OpenCL C++", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_out_of_line_constructor_template_id, CLASS_ERROR, (unsigned)diag::Severity::Error, "out-of-line constructor for %0 cannot have template arguments", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_override_control_interface, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' keyword not permitted with interface types", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_paren_sizeof_parameter_pack, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing parentheses around the size of parameter pack %0", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_attribute_duplicate_subject, CLASS_ERROR, (unsigned)diag::Severity::Error, "duplicate attribute subject matcher '%0'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_attribute_expected_attribute, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected an attribute after '('", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_attribute_expected_attribute_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected identifier that represents an attribute name", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_attribute_expected_attribute_syntax, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected an attribute that is specified using the GNU, C++11 or '__declspec' syntax", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_attribute_expected_period, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected '.' after pragma attribute namespace %0", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_attribute_expected_push_pop_paren, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected 'push', 'pop', or '(' after '#pragma clang attribute'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_attribute_expected_subject_identifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected an identifier that corresponds to an attribute subject rule", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_attribute_expected_subject_sub_identifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected an identifier that corresponds to an attribute subject matcher sub-rule; '%0' matcher %select{does not support sub-rules|supports the following sub-rules: %2|}1", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_attribute_extra_tokens_after_attribute, CLASS_ERROR, (unsigned)diag::Severity::Error, "extra tokens after attribute in a '#pragma clang attribute push'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_attribute_invalid_argument, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected argument '%0' to '#pragma clang attribute'; expected 'push' or 'pop'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_attribute_invalid_subject_set_specifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected attribute subject set specifier 'apply_to'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_attribute_multiple_attributes, CLASS_ERROR, (unsigned)diag::Severity::Error, "more than one attribute specified in '#pragma clang attribute push'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_attribute_namespace_on_attribute, CLASS_ERROR, (unsigned)diag::Severity::Error, "namespace can only apply to 'push' or 'pop' directives", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_attribute_unknown_subject_rule, CLASS_ERROR, (unsigned)diag::Severity::Error, "unknown attribute subject rule '%0'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_attribute_unknown_subject_sub_rule, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{invalid use of|unknown}2 attribute subject matcher sub-rule '%0'; '%1' matcher %select{does not support sub-rules|supports the following sub-rules: %3}2", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_attribute_unsupported_attribute, CLASS_ERROR, (unsigned)diag::Severity::Error, "attribute %0 is not supported by '#pragma clang attribute'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_cannot_end_force_cuda_host_device, CLASS_ERROR, (unsigned)diag::Severity::Error, "force_cuda_host_device end pragma without matching force_cuda_host_device begin", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_clang_section_expected_equal, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected '=' following '#pragma clang section %select{invalid|bss|data|rodata|text}0'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_comment_malformed, CLASS_ERROR, (unsigned)diag::Severity::Error, "pragma comment requires parenthesized identifier and optional string", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_comment_unknown_kind, CLASS_ERROR, (unsigned)diag::Severity::Error, "unknown kind of pragma comment", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_detect_mismatch_malformed, CLASS_ERROR, (unsigned)diag::Severity::Error, "pragma detect_mismatch is malformed; it requires two comma-separated string literals", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_expected_clang_section_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected one of [bss|data|rodata|text] section kind in '#pragma %0'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_fp_contract_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "'#pragma fp_contract' can only appear at file scope or at the start of a compound statement", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_fp_invalid_argument, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected argument '%0' to '#pragma clang fp %1'; expected 'on', 'fast' or 'off'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_fp_invalid_option, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{invalid|missing}0 option%select{ %1|}0; expected contract", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_fp_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "'#pragma clang fp' can only appear at file scope or at the start of a compound statement", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_invalid_keyword, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid argument; expected 'enable'%select{|, 'full'}0%select{|, 'assume_safety'}1 or 'disable'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_loop_invalid_option, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{invalid|missing}0 option%select{ %1|}0; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, or distribute", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_loop_missing_argument, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing argument; expected %select{an integer value|'enable'%select{|, 'full'}1%select{|, 'assume_safety'}2 or 'disable'}0", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_missing_argument, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing argument to '#pragma %0'%select{|; expected %2}1", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_optimize_extra_argument, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected extra argument '%0' to '#pragma clang optimize'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_optimize_invalid_argument, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected argument '%0' to '#pragma clang optimize'; expected 'on' or 'off'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_pipeline_invalid_keyword, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid argument; expected 'disable'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_pragma_pointers_to_members_unknown_kind, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected %0, expected to see one of %select{|'best_case', 'full_generality', }1'single_inheritance', 'multiple_inheritance', or 'virtual_inheritance'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_right_angle_bracket_equal_needs_space, CLASS_ERROR, (unsigned)diag::Severity::Error, "a space is required between a right angle bracket and an equals sign (use '> =')", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_scoped_enum_missing_identifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "scoped enumeration requires a name", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_single_decl_assign_in_for_range, CLASS_ERROR, (unsigned)diag::Severity::Error, "range-based 'for' statement uses ':', not '='", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_sizeof_parameter_pack, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected parenthesized parameter pack name in 'sizeof...' expression", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_stmtexpr_file_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "statement expression not allowed at file scope", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_super_in_using_declaration, CLASS_ERROR, (unsigned)diag::Severity::Error, "'__super' cannot be used with a using declaration", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_synthesized_property_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected a property name in @synthesize", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_template_defn_explicit_instantiation, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{function|class|variable}0 cannot be defined in an explicit instantiation; if this declaration is meant to be a %select{function|class|variable}0 definition, remove the 'template' keyword", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_template_spec_syntax_non_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "identifier followed by '<' indicates a class template specialization but %0 %select{does not refer to a template|refers to a function template|<unused>|refers to a variable template|<unused>}1", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_templated_invalid_declaration, CLASS_ERROR, (unsigned)diag::Severity::Error, "a static_assert declaration cannot be a template", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_templated_using_directive_declaration, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot template a using %select{directive|declaration}0", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_this_captured_by_reference, CLASS_ERROR, (unsigned)diag::Severity::Error, "'this' cannot be captured by reference", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_two_right_angle_brackets_need_space, CLASS_ERROR, (unsigned)diag::Severity::Error, "a space is required between consecutive right angle brackets (use '> >')", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_type_safety_unknown_flag, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid comparison flag %0; use 'layout_compatible' or 'must_be_null'", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_type_trait_arity, CLASS_ERROR, (unsigned)diag::Severity::Error, "type trait requires %0%select{| or more}1 argument%select{|s}2; have %3 argument%s3", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_typename_identifiers_only, CLASS_ERROR, (unsigned)diag::Severity::Error, "typename is allowed for identifiers only", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_typename_invalid_constexpr, CLASS_ERROR, (unsigned)diag::Severity::Error, "type name does not allow constexpr specifier to be specified", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_typename_invalid_functionspec, CLASS_ERROR, (unsigned)diag::Severity::Error, "type name does not allow function specifier to be specified", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_typename_invalid_storageclass, CLASS_ERROR, (unsigned)diag::Severity::Error, "type name does not allow storage class to be specified", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_typename_refers_to_non_type_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "typename specifier refers to a non-type template", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_typename_requires_specqual, CLASS_ERROR, (unsigned)diag::Severity::Error, "type name requires a specifier or qualifier", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_unexpected_at, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected '@' in program", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_unexpected_colon_in_nested_name_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected ':' in nested name specifier; did you mean '::'?", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_unexpected_module_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "module declaration can only appear at the top level", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_unexpected_namespace_attributes_alias, CLASS_ERROR, (unsigned)diag::Severity::Error, "attributes cannot be specified on namespace alias", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_unexpected_nested_namespace_attribute, CLASS_ERROR, (unsigned)diag::Severity::Error, "attributes cannot be specified on a nested namespace definition", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_unexpected_protocol_qualifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "@implementation declaration cannot be protocol qualified", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_unexpected_scope_on_base_decltype, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected namespace scope prior to decltype", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_unexpected_semi, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected ';' before %0", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_unexpected_template_in_unqualified_id, CLASS_ERROR, (unsigned)diag::Severity::Error, "'template' keyword not permitted here", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_unexpected_token_in_nested_name_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' cannot be a part of nested name specifier; did you mean ':'?", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_unexpected_typedef_ident, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected type name %0: expected identifier", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_unexpected_unqualified_id, CLASS_ERROR, (unsigned)diag::Severity::Error, "type-id cannot have a name", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_unknown_template_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "unknown template name %0", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_unspecified_size_with_static, CLASS_ERROR, (unsigned)diag::Severity::Error, "'static' may not be used without an array size", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_unspecified_vla_size_with_static, CLASS_ERROR, (unsigned)diag::Severity::Error, "'static' may not be used with an unspecified variable length array size", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_using_attribute_ns_conflict, CLASS_ERROR, (unsigned)diag::Severity::Error, "attribute with scope specifier cannot follow default scope specifier", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_using_namespace_in_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "'using namespace' is not allowed in classes", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_zero_version, CLASS_ERROR, (unsigned)diag::Severity::Error, "version number must have non-zero major, minor, or sub-minor version", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(ext_abstract_pack_declarator_parens, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++11 requires a parenthesized pack declaration to have a name", 22, SFINAE_Suppress, false, false, 4)
+DIAG(ext_alias_declaration, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "alias declarations are a C++11 extension", 79, SFINAE_Suppress, false, false, 4)
+DIAG(ext_alignof_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%0 applied to an expression is a GNU extension", 253, SFINAE_Suppress, false, false, 4)
+DIAG(ext_auto_storage_class, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'auto' storage class specifier is not permitted in C++11, and will not be supported in future releases", 50, SFINAE_Suppress, false, false, 4)
+DIAG(ext_auto_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'__auto_type' is a GNU extension", 256, SFINAE_Suppress, false, false, 4)
+DIAG(ext_bitfield_member_init, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "default member initializer for bit-field is a C++2a extension", 98, SFINAE_Suppress, false, false, 4)
+DIAG(ext_c11_alignment, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "%0 is a C11-specific feature", 112, SFINAE_Suppress, false, false, 4)
+DIAG(ext_c11_generic_selection, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "generic selections are a C11-specific feature", 112, SFINAE_Suppress, false, false, 4)
+DIAG(ext_c11_noreturn, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "_Noreturn functions are a C11-specific feature", 112, SFINAE_Suppress, false, false, 4)
+DIAG(ext_c11_static_assert, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "_Static_assert is a C11-specific feature", 112, SFINAE_Suppress, false, false, 4)
+DIAG(ext_c99_compound_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "compound literals are a C99-specific feature", 114, SFINAE_Suppress, false, false, 4)
+DIAG(ext_c99_variable_decl_in_for_loop, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "variable declaration in for loop is a C99-specific feature", 114, SFINAE_Suppress, false, false, 4)
+DIAG(ext_clang_c_enum_fixed_underlying_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "enumeration types with a fixed underlying type are a Clang extension", 226, SFINAE_Suppress, false, false, 4)
+DIAG(ext_constexpr_if, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "constexpr if is a C++17 extension", 91, SFINAE_Suppress, false, false, 4)
+DIAG(ext_constexpr_on_lambda_cxx17, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'constexpr' on lambda expressions is a C++17 extension", 91, SFINAE_Suppress, false, false, 4)
+DIAG(ext_cxx11_enum_fixed_underlying_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "enumeration types with a fixed underlying type are a C++11 extension", 79, SFINAE_Suppress, false, false, 4)
+DIAG(ext_decltype_auto_type_specifier, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'decltype(auto)' type specifier is a C++14 extension", 87, SFINAE_Suppress, false, false, 4)
+DIAG(ext_decomp_decl_empty, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++17 does not allow a decomposition group to be empty", 203, SFINAE_Suppress, false, false, 4)
+DIAG(ext_defaulted_deleted_function, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%select{defaulted|deleted}0 function definitions are a C++11 extension", 79, SFINAE_Suppress, false, false, 4)
+DIAG(ext_dynamic_exception_spec, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "ISO C++17 does not allow dynamic exception specifications", 199, SFINAE_Suppress, false, false, 4)
+DIAG(ext_ellipsis_exception_spec, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "exception specification of '...' is a Microsoft extension", 382, SFINAE_Suppress, false, false, 4)
+DIAG(ext_empty_translation_unit, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C requires a translation unit to contain at least one declaration", 205, SFINAE_Suppress, false, false, 4)
+DIAG(ext_enumerator_list_comma_c, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "commas at the end of enumerator lists are a C99-specific feature", 114, SFINAE_Suppress, false, false, 4)
+DIAG(ext_enumerator_list_comma_cxx, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "commas at the end of enumerator lists are a C++11 extension", 79, SFINAE_Suppress, false, false, 4)
+DIAG(ext_expected_semi_decl_list, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "expected ';' at end of declaration list", 0, SFINAE_Suppress, false, false, 4)
+DIAG(ext_extern_template, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "extern templates are a C++11 extension", 79, SFINAE_Suppress, false, false, 4)
+DIAG(ext_extra_semi, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "extra ';' %select{outside of a function|inside a %1|inside instance variable list|after member function definition}0", 222, SFINAE_Suppress, false, false, 4)
+DIAG(ext_extra_semi_cxx11, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "extra ';' outside of a function is a C++11 extension", 80, SFINAE_Suppress, false, false, 4)
+DIAG(ext_fold_expression, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pack fold expression is a C++17 extension", 91, SFINAE_Suppress, false, false, 4)
+DIAG(ext_for_range, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "range-based for loop is a C++11 extension", 79, SFINAE_Suppress, false, false, 4)
+DIAG(ext_for_range_init_stmt, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "range-based for loop initialization statements are a C++2a extension", 98, SFINAE_Suppress, false, false, 4)
+DIAG(ext_generalized_initializer_lists, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "generalized initializer lists are a C++11 extension", 79, SFINAE_Suppress, false, false, 4)
+DIAG(ext_gnu_address_of_label, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU address-of-label extension", 270, SFINAE_Suppress, false, false, 4)
+DIAG(ext_gnu_array_range, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU array range extension", 262, SFINAE_Suppress, false, false, 4)
+DIAG(ext_gnu_case_range, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU case range extension", 258, SFINAE_Suppress, false, false, 4)
+DIAG(ext_gnu_conditional_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU ?: conditional expression extension, omitting middle operand", 261, SFINAE_Suppress, false, false, 4)
+DIAG(ext_gnu_empty_initializer, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU empty initializer extension", 263, SFINAE_Suppress, false, false, 4)
+DIAG(ext_gnu_indirect_goto, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU indirect-goto extension", 270, SFINAE_Suppress, false, false, 4)
+DIAG(ext_gnu_missing_equal_designator, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of GNU 'missing =' extension in designator", 262, SFINAE_Suppress, false, false, 4)
+DIAG(ext_gnu_old_style_field_designator, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of GNU old-style field designator extension", 262, SFINAE_Suppress, false, false, 4)
+DIAG(ext_gnu_statement_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU statement expression extension", 272, SFINAE_Suppress, false, false, 4)
+DIAG(ext_ident_list_in_param, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "type-less parameter names in function declaration", 527, SFINAE_Suppress, false, false, 4)
+DIAG(ext_init_statement, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'%select{if|switch}0' initialization statements are a C++17 extension", 91, SFINAE_Suppress, false, false, 4)
+DIAG(ext_inline_namespace, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "inline namespaces are a C++11 feature", 81, SFINAE_Suppress, false, false, 4)
+DIAG(ext_inline_nested_namespace_definition, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "inline nested namespace definition is a C++2a extension", 98, SFINAE_Suppress, false, false, 4)
+DIAG(ext_keyword_as_ident, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "keyword '%0' will be made available as an identifier %select{here|for the remainder of the translation unit}1", 349, SFINAE_Suppress, false, false, 4)
+DIAG(ext_ms_c_enum_fixed_underlying_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "enumeration types with a fixed underlying type are a Microsoft extension", 386, SFINAE_Suppress, false, false, 4)
+DIAG(ext_ms_sealed_keyword, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'sealed' keyword is a Microsoft extension", 394, SFINAE_Suppress, false, false, 4)
+DIAG(ext_multi_using_declaration, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of multiple declarators in a single using declaration is a C++17 extension", 91, SFINAE_Suppress, false, false, 4)
+DIAG(ext_nested_namespace_definition, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "nested namespace definition is a C++17 extension; define each namespace separately", 91, SFINAE_Suppress, false, false, 4)
+DIAG(ext_nonstatic_member_init, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "in-class initialization of non-static data member is a C++11 extension", 79, SFINAE_Suppress, false, false, 4)
+DIAG(ext_ns_enum_attribute, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "attributes on %select{a namespace|an enumerator}0 declaration are a C++17 extension", 91, SFINAE_Suppress, false, false, 4)
+DIAG(ext_nullability, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "type nullability specifier %0 is a Clang extension", 461, SFINAE_Suppress, false, false, 4)
+DIAG(ext_override_control_keyword, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'%0' keyword is a C++11 extension", 79, SFINAE_Suppress, false, false, 4)
+DIAG(ext_ref_qualifier, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "reference qualifiers on functions are a C++11 extension", 79, SFINAE_Suppress, false, false, 4)
+DIAG(ext_rvalue_reference, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "rvalue references are a C++11 extension", 79, SFINAE_Suppress, false, false, 4)
+DIAG(ext_scoped_enum, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "scoped enumerations are a C++11 extension", 79, SFINAE_Suppress, false, false, 4)
+DIAG(ext_static_assert_no_message, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "static_assert with no message is a C++17 extension", 91, SFINAE_Suppress, false, false, 4)
+DIAG(ext_stdc_pragma_ignored, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "unknown pragma in STDC namespace", 696, SFINAE_Suppress, false, false, 4)
+DIAG(ext_template_template_param_typename, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "template template parameter using 'typename' is a C++17 extension", 91, SFINAE_Suppress, false, false, 4)
+DIAG(ext_thread_before, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'__thread' before '%0'", 527, SFINAE_Suppress, false, false, 4)
+DIAG(ext_using_attribute_ns, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "default scope specifier for attributes is a C++17 extension", 91, SFINAE_Suppress, false, false, 4)
+DIAG(ext_using_declaration_pack, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pack expansion of using declaration is a C++17 extension", 91, SFINAE_Suppress, false, false, 4)
+DIAG(ext_warn_gnu_final, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "__final is a GNU extension, consider using C++11 final", 250, SFINAE_Suppress, false, false, 4)
+DIAG(note_bracket_depth, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use -fbracket-depth=N to increase maximum nesting level", 0, SFINAE_Suppress, false, false, 4)
+DIAG(note_exception_spec_deprecated, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use '%0' instead", 0, SFINAE_Suppress, false, false, 4)
+DIAG(note_extra_comma_message_arg, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "comma separating Objective-C messaging arguments", 0, SFINAE_Suppress, false, false, 4)
+DIAG(note_force_empty_selector_name, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "or insert whitespace before ':' to use %0 as parameter name and have an empty entry in the selector", 0, SFINAE_Suppress, false, false, 4)
+DIAG(note_meant_to_use_typename, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "did you mean to use 'typename'?", 0, SFINAE_Suppress, false, false, 20)
+DIAG(note_misplaced_ellipsis_vararg_add_comma, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "insert ',' before '...' to silence this warning", 0, SFINAE_Suppress, false, false, 4)
+DIAG(note_misplaced_ellipsis_vararg_add_ellipsis, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "place '...' %select{immediately before declared identifier|here}0 to declare a function parameter pack", 0, SFINAE_Suppress, false, false, 4)
+DIAG(note_misplaced_ellipsis_vararg_existing_ellipsis, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "preceding '...' declares a function parameter pack", 0, SFINAE_Suppress, false, false, 4)
+DIAG(note_missing_end_of_definition_before, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "still within definition of %q0 here", 0, SFINAE_Suppress, false, false, 4)
+DIAG(note_missing_selector_name, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "introduce a parameter name to make %0 part of the selector", 0, SFINAE_Suppress, false, false, 4)
+DIAG(note_objc_container_start, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{class|protocol|category|class extension|implementation|category implementation}0 started here", 0, SFINAE_Suppress, false, false, 4)
+DIAG(note_pragma_attribute_namespace_on_attribute, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "omit the namespace to add attributes to the most-recently pushed attribute group", 0, SFINAE_Suppress, false, false, 4)
+DIAG(note_pragma_attribute_use_attribute_kw, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use the GNU '__attribute__' syntax", 0, SFINAE_Suppress, false, false, 4)
+DIAG(note_previous_default_assoc, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous default generic association is here", 0, SFINAE_Suppress, false, false, 4)
+DIAG(warn_arc_bridge_cast_nonarc, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' casts have no effect when not using ARC", 24, SFINAE_Suppress, false, false, 8)
+DIAG(warn_asm_qualifier_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignored %0 qualifier on asm", 35, SFINAE_Suppress, false, false, 12)
+DIAG(warn_atimport_in_framework_header, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use of '@import' in framework header is discouraged, including this header requires -fmodules", 40, SFINAE_Suppress, false, false, 4)
+DIAG(warn_attribute_no_decl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 ignored, because it is not attached to a declaration", 282, SFINAE_Suppress, false, false, 4)
+DIAG(warn_attribute_on_function_definition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "GCC does not allow %0 attribute in this position on a function definition", 250, SFINAE_Suppress, false, false, 4)
+DIAG(warn_availability_and_unavailable, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'unavailable' availability overrides all other availability information", 52, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cstyle_param, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use of C-style parameters in Objective-C method declarations is deprecated", 166, SFINAE_Suppress, false, false, 27)
+DIAG(warn_cuda_attr_lambda_position, CLASS_WARNING, (unsigned)diag::Severity::Warning, "nvcc does not allow '__%0__' to appear after '()' in lambdas", 147, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx11_compat_decltype_auto_type_specifier, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'decltype(auto)' type specifier is incompatible with C++ standards before C++14", 103, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx11_right_shift_in_template_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use of right-shift operator ('>>') in template argument will require parentheses in C++11", 75, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx14_compat_constexpr_if, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "constexpr if is incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx14_compat_constexpr_on_lambda, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "constexpr on lambda expressions is incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx14_compat_fold_expression, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "pack fold expression is incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx14_compat_init_statement, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{if|switch}0 initialization statements are incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx14_compat_nested_namespace_definition, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "nested namespace definition is incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx14_compat_ns_enum_attribute, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "attributes on %select{a namespace|an enumerator}0 declaration are incompatible with C++ standards before C++17", 102, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx14_compat_static_assert_no_message, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "static_assert with no message is incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx14_compat_template_template_param_typename, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "template template parameter using 'typename' is incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx14_compat_using_attribute_ns, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "default scope specifier for attributes is incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx17_compat_bitfield_member_init, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "default member initializer for bit-field is incompatible with C++ standards before C++2a", 99, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx17_compat_for_range_init_stmt, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "range-based for loop initialization statements are incompatible with C++ standards before C++2a", 99, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx17_compat_inline_nested_namespace_definition, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "inline nested namespace definition is incompatible with C++ standards before C++2a", 99, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx17_compat_multi_using_declaration, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of multiple declarators in a single using declaration is incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx17_compat_using_declaration_pack, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "pack expansion using declaration is incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_alias_declaration, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "alias declarations are incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_alignas, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'alignas' is incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_alignof, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "alignof expressions are incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_attribute, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "C++11 attribute syntax is incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_decltype, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'decltype' type specifier is incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_defaulted_deleted_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{defaulted|deleted}0 function definitions are incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_enum_fixed_underlying_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "enumeration types with a fixed underlying type are incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_enumerator_list_comma, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "commas at the end of enumerator lists are incompatible with C++98", 110, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_extern_template, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "extern templates are incompatible with C++98", 110, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_for_range, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "range-based for loop is incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_generalized_initializer_lists, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "generalized initializer lists are incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_inline_namespace, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "inline namespaces are incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_lambda, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "lambda expressions are incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_literal_operator, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "literal operators are incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_noexcept_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "noexcept specifications are incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_noexcept_expr, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "noexcept expressions are incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_nonstatic_member_init, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "in-class initialization of non-static data members is incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_nullptr, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'nullptr' is incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_override_control_keyword, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%0' keyword is incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_ref_qualifier, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "reference qualifiers on functions are incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_rvalue_reference, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "rvalue references are incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_scoped_enum, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "scoped enumerations are incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_static_assert, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "static_assert declarations are incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_top_level_semi, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "extra ';' outside of a function is incompatible with C++98", 108, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_trailing_return_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "trailing return types are incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_two_right_angle_brackets, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "consecutive right angle brackets are incompatible with C++98 (use '> >')", 106, SFINAE_Suppress, false, false, 4)
+DIAG(warn_dangling_else, CLASS_WARNING, (unsigned)diag::Severity::Warning, "add explicit braces to avoid dangling else", 150, SFINAE_Suppress, false, false, 4)
+DIAG(warn_empty_init_statement, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "empty initialization statement of '%select{if|switch|range-based for}0' has no effect", 204, SFINAE_Suppress, false, false, 4)
+DIAG(warn_exception_spec_deprecated, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "dynamic exception specifications are deprecated", 167, SFINAE_Suppress, false, false, 27)
+DIAG(warn_expected_consistent_version_separator, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use same version number separators '_' or '.'; as in 'major[.minor[.subminor]]'", 52, SFINAE_Suppress, false, false, 4)
+DIAG(warn_expected_qualified_after_typename, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "expected a qualified name after 'typename'", 0, SFINAE_Suppress, false, false, 4)
+DIAG(warn_extra_semi_after_mem_fn_def, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "extra ';' after member function definition", 222, SFINAE_Suppress, false, false, 4)
+DIAG(warn_file_asm_volatile, CLASS_WARNING, (unsigned)diag::Severity::Warning, "meaningless 'volatile' on asm outside function", 35, SFINAE_Suppress, false, false, 12)
+DIAG(warn_gcc_attribute_location, CLASS_WARNING, (unsigned)diag::Severity::Warning, "GCC does not allow an attribute in this position on a function declaration", 250, SFINAE_Suppress, false, false, 4)
+DIAG(warn_gcc_variable_decl_in_for_loop, CLASS_WARNING, (unsigned)diag::Severity::Warning, "GCC does not allow variable declarations in for loop initializers before C99", 250, SFINAE_Suppress, false, false, 4)
+DIAG(warn_microsoft_dependent_exists, CLASS_WARNING, (unsigned)diag::Severity::Warning, "dependent %select{__if_not_exists|__if_exists}0 declarations are ignored", 383, SFINAE_Suppress, false, false, 4)
+DIAG(warn_microsoft_qualifiers_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "qualifiers after comma in declarator list are ignored", 282, SFINAE_Suppress, false, false, 4)
+DIAG(warn_misplaced_ellipsis_vararg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'...' in this location creates a C-style varargs function%select{, not a function parameter pack|}0", 18, SFINAE_Suppress, false, false, 4)
+DIAG(warn_missing_dependent_template_keyword, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use 'template' keyword to treat '%0' as a dependent template name", 0, SFINAE_Suppress, false, false, 4)
+DIAG(warn_missing_selector_name, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 used as the name of the previous parameter rather than as part of the selector", 415, SFINAE_Suppress, false, false, 4)
+DIAG(warn_null_statement, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "empty expression statement has no effect; remove unnecessary ';' to silence this warning", 223, SFINAE_Suppress, false, false, 4)
+DIAG(warn_objc_protocol_qualifier_missing_id, CLASS_WARNING, (unsigned)diag::Severity::Warning, "protocol has no object type specified; defaults to qualified 'id'", 0, SFINAE_Suppress, false, false, 4)
+DIAG(warn_omp_extra_tokens_at_eol, CLASS_WARNING, (unsigned)diag::Severity::Warning, "extra tokens at the end of '#pragma omp %0' are ignored", 224, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_align_expected_equal, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected '=' following '#pragma %select{align|options align}0' - ignored", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_align_invalid_option, CLASS_WARNING, (unsigned)diag::Severity::Warning, "invalid alignment option in '#pragma %select{align|options align}0' - ignored", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_begin_end_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "OpenCL extension end directive mismatches begin directive - ignoring", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_comment_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'#pragma comment %0' ignored", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_action_or_r_paren, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected action or ')' in '#pragma %0' - ignored", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_colon, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing ':' after %0 - ignoring", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_colon_r_paren, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing ':' or ')' after %0 - ignoring", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_comma, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected ',' in '#pragma %0'", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_identifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected identifier in '#pragma %0' - ignored", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_init_seg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected 'compiler', 'lib', 'user', or a string literal for the section name in '#pragma %0' - ignored", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_integer, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected integer between %0 and %1 inclusive in '#pragma %2' - ignored", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_lparen, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing '(' after '#pragma %0' - ignoring", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_non_wide_string, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected non-wide string literal in '#pragma %0'", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_predicate, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected %select{'enable', 'disable', 'begin' or 'end'|'disable'}0 - ignoring", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_punc, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected ')' or ',' in '#pragma %0'", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_rparen, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing ')' after '#pragma %0' - ignoring", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_section_label_or_name, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected a stack label or a string literal for the section name in '#pragma %0' - ignored", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_section_name, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected a string literal for the section name in '#pragma %0' - ignored", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_section_push_pop_or_name, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected push, pop or a string literal for the section name in '#pragma %0' - ignored", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_string, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected string literal in '#pragma %0' - ignoring", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_extension_is_core, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "OpenCL extension %0 is core feature or supported optional core feature - ignoring", 528, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_extra_tokens_at_eol, CLASS_WARNING, (unsigned)diag::Severity::Warning, "extra tokens at end of '#pragma %0' - ignored", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_force_cuda_host_device_bad_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "incorrect use of #pragma clang force_cuda_host_device begin|end", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_init_seg_unsupported_target, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'#pragma init_seg' is only supported when targeting a Microsoft environment", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_intrinsic_builtin, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is not a recognized builtin%select{|; consider including <intrin.h> to access non-builtin intrinsics}1", 284, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_invalid_action, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown action for '#pragma %0' - ignored", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_invalid_argument, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unexpected argument '%0' to '#pragma %1'%select{|; expected %3}2", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_invalid_specific_action, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown action '%1' for '#pragma %0' - ignored", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_missing_argument, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing argument to '#pragma %0'%select{|; expected %2}1", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_ms_struct, CLASS_WARNING, (unsigned)diag::Severity::Warning, "incorrect use of '#pragma ms_struct on|off' - ignored", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_omp_ignored, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unexpected '#pragma omp ...' in program", 613, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_optimize, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'#pragma optimize' is not supported", 285, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_options_expected_align, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected 'align' following '#pragma options' - ignored", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_pack_malformed, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected integer or identifier in '#pragma pack' - ignored", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_unknown_extension, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown OpenCL extension %0 - ignoring", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_unroll_cuda_value_in_parens, CLASS_WARNING, (unsigned)diag::Severity::Warning, "argument to '#pragma unroll' should not be in parentheses in CUDA C/C++", 147, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_unsupported_action, CLASS_WARNING, (unsigned)diag::Severity::Warning, "known but unsupported action '%1' for '#pragma %0' - ignored", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_unsupported_extension, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unsupported OpenCL extension %0 - ignoring", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_unused_expected_var, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected '#pragma unused' argument to be a variable name", 286, SFINAE_Suppress, false, false, 4)
+DIAG(warn_semicolon_before_method_body, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "semicolon before method body is ignored", 585, SFINAE_Suppress, false, false, 4)
+DIAG(warn_static_inline_explicit_inst_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '%select{static|inline}0' keyword on explicit template instantiation", 618, SFINAE_Suppress, false, false, 4)
+DIAG(warn_stdc_fenv_access_not_supported, CLASS_WARNING, (unsigned)diag::Severity::Warning, "pragma STDC FENV_ACCESS ON is not supported, ignoring pragma", 696, SFINAE_Suppress, false, false, 4)
+DIAG(warn_wrong_clang_attr_namespace, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'__clang__' is a predefined macro name, not an attribute scope specifier; did you mean '_Clang' instead?", 282, SFINAE_Suppress, false, false, 4)
diff --git a/clang-r353983/include/clang/Basic/DiagnosticRefactoring.h b/clang-r353983/include/clang/Basic/DiagnosticRefactoring.h
new file mode 100644
index 00000000..aded0162
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/DiagnosticRefactoring.h
@@ -0,0 +1,28 @@
+//===--- DiagnosticRefactoring.h - ------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_DIAGNOSTICREFACTORING_H
+#define LLVM_CLANG_BASIC_DIAGNOSTICREFACTORING_H
+
+#include "clang/Basic/Diagnostic.h"
+
+namespace clang {
+namespace diag {
+enum {
+#define DIAG(ENUM, FLAGS, DEFAULT_MAPPING, DESC, GROUP, SFINAE, NOWERROR, \
+ SHOWINSYSHEADER, CATEGORY) \
+ ENUM,
+#define REFACTORINGSTART
+#include "clang/Basic/DiagnosticRefactoringKinds.inc"
+#undef DIAG
+ NUM_BUILTIN_REFACTORING_DIAGNOSTICS
+};
+} // end namespace diag
+} // end namespace clang
+
+#endif // LLVM_CLANG_BASIC_DIAGNOSTICREFACTORING_H
diff --git a/clang-r353983/include/clang/Basic/DiagnosticRefactoringKinds.inc b/clang-r353983/include/clang/Basic/DiagnosticRefactoringKinds.inc
new file mode 100644
index 00000000..28cf7af8
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/DiagnosticRefactoringKinds.inc
@@ -0,0 +1,11 @@
+#ifdef REFACTORINGSTART
+__REFACTORINGSTART = DIAG_START_REFACTORING,
+#undef REFACTORINGSTART
+#endif
+
+DIAG(err_refactor_code_outside_of_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "the selected code is not a part of a function's / method's body", 0, SFINAE_SubstitutionFailure, false, true, 22)
+DIAG(err_refactor_extract_prohibited_expression, CLASS_ERROR, (unsigned)diag::Severity::Error, "the selected expression can't be extracted", 0, SFINAE_SubstitutionFailure, false, true, 22)
+DIAG(err_refactor_extract_simple_expression, CLASS_ERROR, (unsigned)diag::Severity::Error, "the selected expression is too simple to extract", 0, SFINAE_SubstitutionFailure, false, true, 22)
+DIAG(err_refactor_no_selection, CLASS_ERROR, (unsigned)diag::Severity::Error, "refactoring action can't be initiated without a selection", 0, SFINAE_SubstitutionFailure, false, true, 22)
+DIAG(err_refactor_selection_invalid_ast, CLASS_ERROR, (unsigned)diag::Severity::Error, "the provided selection does not overlap with the AST nodes of interest", 0, SFINAE_SubstitutionFailure, false, true, 22)
+DIAG(err_refactor_selection_no_symbol, CLASS_ERROR, (unsigned)diag::Severity::Error, "there is no symbol at the given location", 0, SFINAE_SubstitutionFailure, false, true, 22)
diff --git a/clang-r353983/include/clang/Basic/DiagnosticSema.h b/clang-r353983/include/clang/Basic/DiagnosticSema.h
new file mode 100644
index 00000000..72a6b975
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/DiagnosticSema.h
@@ -0,0 +1,28 @@
+//===--- DiagnosticSema.h - Diagnostics for libsema -------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_DIAGNOSTICSEMA_H
+#define LLVM_CLANG_BASIC_DIAGNOSTICSEMA_H
+
+#include "clang/Basic/Diagnostic.h"
+
+namespace clang {
+namespace diag {
+enum {
+#define DIAG(ENUM, FLAGS, DEFAULT_MAPPING, DESC, GROUP, SFINAE, NOWERROR, \
+ SHOWINSYSHEADER, CATEGORY) \
+ ENUM,
+#define SEMASTART
+#include "clang/Basic/DiagnosticSemaKinds.inc"
+#undef DIAG
+ NUM_BUILTIN_SEMA_DIAGNOSTICS
+};
+} // end namespace diag
+} // end namespace clang
+
+#endif // LLVM_CLANG_BASIC_DIAGNOSTICSEMA_H
diff --git a/clang-r353983/include/clang/Basic/DiagnosticSemaKinds.inc b/clang-r353983/include/clang/Basic/DiagnosticSemaKinds.inc
new file mode 100644
index 00000000..f7aae163
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/DiagnosticSemaKinds.inc
@@ -0,0 +1,3459 @@
+#ifdef SEMASTART
+__SEMASTART = DIAG_START_SEMA,
+#undef SEMASTART
+#endif
+
+DIAG(err_32_bit_builtin_64_bit_tgt, CLASS_ERROR, (unsigned)diag::Severity::Error, "this builtin is only available on 32-bit targets", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_64_bit_builtin_32_bit_tgt, CLASS_ERROR, (unsigned)diag::Severity::Error, "this builtin is only available on 64-bit targets", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_abi_tag_on_redeclaration, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot add 'abi_tag' attribute in a redeclaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_abstract_type_in_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{return|parameter|variable|field|instance variable|synthesized instance variable}0 type %1 is an abstract class", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_access, CLASS_ERROR, (unsigned)diag::Severity::Error, "%1 is a %select{private|protected}0 member of %3", 0, SFINAE_AccessControl, false, true, 2)
+DIAG(err_access_base_ctor, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{base class|inherited virtual base class}0 %1 has %select{private|protected}3 %select{default |copy |move |*ERROR* |*ERROR* |*ERROR*|}2constructor", 0, SFINAE_AccessControl, false, true, 2)
+DIAG(err_access_ctor, CLASS_ERROR, (unsigned)diag::Severity::Error, "calling a %select{private|protected}0 constructor of class %2", 0, SFINAE_AccessControl, false, true, 2)
+DIAG(err_access_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "ISO C++11 does not allow access declarations; use using declarations instead", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_access_dtor, CLASS_ERROR, (unsigned)diag::Severity::Error, "calling a %select{private|protected}1 destructor of class %0", 0, SFINAE_AccessControl, false, true, 2)
+DIAG(err_access_dtor_base, CLASS_ERROR, (unsigned)diag::Severity::Error, "base class %0 has %select{private|protected}1 destructor", 0, SFINAE_AccessControl, false, true, 2)
+DIAG(err_access_dtor_exception, CLASS_ERROR, (unsigned)diag::Severity::Error, "exception object of type %0 has %select{private|protected}1 destructor", 0, SFINAE_AccessControl, false, true, 2)
+DIAG(err_access_dtor_field, CLASS_ERROR, (unsigned)diag::Severity::Error, "field of type %1 has %select{private|protected}2 destructor", 0, SFINAE_AccessControl, false, true, 2)
+DIAG(err_access_dtor_ivar, CLASS_ERROR, (unsigned)diag::Severity::Error, "instance variable of type %0 has %select{private|protected}1 destructor", 0, SFINAE_AccessControl, false, true, 2)
+DIAG(err_access_dtor_temp, CLASS_ERROR, (unsigned)diag::Severity::Error, "temporary of type %0 has %select{private|protected}1 destructor", 0, SFINAE_AccessControl, false, true, 2)
+DIAG(err_access_dtor_var, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable of type %1 has %select{private|protected}2 destructor", 0, SFINAE_AccessControl, false, true, 2)
+DIAG(err_access_dtor_vbase, CLASS_ERROR, (unsigned)diag::Severity::Error, "inherited virtual base class %1 has %select{private|protected}2 destructor", 0, SFINAE_AccessControl, false, true, 2)
+DIAG(err_access_field_ctor, CLASS_ERROR, (unsigned)diag::Severity::Error, "field of type %0 has %select{private|protected}2 %select{default |copy |move |*ERROR* |*ERROR* |*ERROR* |}1constructor", 0, SFINAE_AccessControl, false, true, 2)
+DIAG(err_access_friend_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "friend function %1 is a %select{private|protected}0 member of %3", 0, SFINAE_AccessControl, false, true, 2)
+DIAG(err_access_lambda_capture, CLASS_ERROR, (unsigned)diag::Severity::Error, "capture of variable '%0' as type %1 calls %select{private|protected}3 %select{default |copy |move |*ERROR* |*ERROR* |*ERROR* |}2constructor", 0, SFINAE_AccessControl, false, true, 3)
+DIAG(err_addr_ovl_ambiguous, CLASS_ERROR, (unsigned)diag::Severity::Error, "address of overloaded function %0 is ambiguous", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_addr_ovl_no_qualifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot form member pointer of type %0 without '&' and class name", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_addr_ovl_no_viable, CLASS_ERROR, (unsigned)diag::Severity::Error, "address of overloaded function %0 does not match required type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_addr_ovl_not_func_ptrref, CLASS_ERROR, (unsigned)diag::Severity::Error, "address of overloaded function %0 cannot be converted to type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_address_of_function_with_pass_object_size_params, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot take address of function %0 because parameter %1 has pass_object_size attribute", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_address_space_mismatch_templ_inst, CLASS_ERROR, (unsigned)diag::Severity::Error, "conflicting address space qualifiers are provided between types %0 and %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_address_space_qualified_delete, CLASS_ERROR, (unsigned)diag::Severity::Error, "'delete' cannot delete objects of type %0 in address space '%1'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_address_space_qualified_new, CLASS_ERROR, (unsigned)diag::Severity::Error, "'new' cannot allocate objects of type %0 in address space '%1'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_addrof_function_disabled_by_enable_if_attr, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot take address of function %0 because it has one or more non-tautological enable_if conditions", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_alias_after_tentative, CLASS_ERROR, (unsigned)diag::Severity::Error, "alias definition of %0 after tentative definition", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_alias_is_definition, CLASS_ERROR, (unsigned)diag::Severity::Error, "definition %0 cannot also be an %select{alias|ifunc}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_alias_not_supported_on_darwin, CLASS_ERROR, (unsigned)diag::Severity::Error, "aliases are not supported on darwin", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_alias_not_supported_on_nvptx, CLASS_ERROR, (unsigned)diag::Severity::Error, "CUDA does not support aliases", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_alias_template_expansion_into_fixed_list, CLASS_ERROR, (unsigned)diag::Severity::Error, "pack expansion used as argument for non-pack parameter of alias template", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_alias_template_extra_headers, CLASS_ERROR, (unsigned)diag::Severity::Error, "extraneous template parameter list in alias template declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_align_value_attribute_argument_not_int, CLASS_ERROR, (unsigned)diag::Severity::Error, "'align_value' attribute requires integer constant", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_alignas_attribute_wrong_decl_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute cannot be applied to a %select{function parameter|variable with 'register' storage class|'catch' variable|bit-field}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_alignas_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "redeclaration has different alignment requirement (%1 vs %0)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_alignas_missing_on_definition, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 must be specified on definition if it is specified on any declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_alignas_underaligned, CLASS_ERROR, (unsigned)diag::Severity::Error, "requested alignment is less than minimum alignment of %1 for type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_aligned_allocation_unavailable, CLASS_ERROR, (unsigned)diag::Severity::Error, "aligned %select{allocation|deallocation}0 function of type '%1' is only available on %2 %3 or newer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_aligned_attribute_argument_not_int, CLASS_ERROR, (unsigned)diag::Severity::Error, "'aligned' attribute requires integer constant", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_alignment_dependent_typedef_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "requested alignment is dependent but declaration is not dependent", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_alignment_not_power_of_two, CLASS_ERROR, (unsigned)diag::Severity::Error, "requested alignment is not a power of 2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_alignment_too_big, CLASS_ERROR, (unsigned)diag::Severity::Error, "requested alignment must be %0 or smaller", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_alignment_too_small, CLASS_ERROR, (unsigned)diag::Severity::Error, "requested alignment must be %0 or greater", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_alignof_member_of_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid application of 'alignof' to a field of a class still being defined", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_allocation_of_abstract_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "allocating an object of abstract class type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_altivec_empty_initializer, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected initializer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ambiguous_base_to_derived_cast, CLASS_ERROR, (unsigned)diag::Severity::Error, "ambiguous cast from base %0 to derived %1:%2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ambiguous_delete_operand, CLASS_ERROR, (unsigned)diag::Severity::Error, "ambiguous conversion of delete expression of type %0 to a pointer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ambiguous_derived_to_base_conv, CLASS_ERROR, (unsigned)diag::Severity::Error, "ambiguous conversion from derived class %0 to base class %1:%2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ambiguous_inherited_constructor, CLASS_ERROR, (unsigned)diag::Severity::Error, "constructor of %0 inherited from multiple base class subobjects", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ambiguous_member_multiple_subobject_types, CLASS_ERROR, (unsigned)diag::Severity::Error, "member %0 found in multiple base classes of different types", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ambiguous_member_multiple_subobjects, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-static member %0 found in multiple base-class subobjects of type %1:%2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ambiguous_memptr_conv, CLASS_ERROR, (unsigned)diag::Severity::Error, "ambiguous conversion from pointer to member of %select{base|derived}0 class %1 to pointer to member of %select{derived|base}0 class %2:%3", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ambiguous_reference, CLASS_ERROR, (unsigned)diag::Severity::Error, "reference to %0 is ambiguous", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ambiguous_suitable_delete_member_function_found, CLASS_ERROR, (unsigned)diag::Severity::Error, "multiple suitable %0 functions in %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ambiguous_tag_hiding, CLASS_ERROR, (unsigned)diag::Severity::Error, "a type named %0 is hidden by a declaration in a different namespace", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_anon_bitfield_has_negative_width, CLASS_ERROR, (unsigned)diag::Severity::Error, "anonymous bit-field has negative width (%0)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_anon_bitfield_qualifiers, CLASS_ERROR, (unsigned)diag::Severity::Error, "anonymous bit-field cannot have qualifiers", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_anon_bitfield_width_exceeds_type_width, CLASS_ERROR, (unsigned)diag::Severity::Error, "width of anonymous bit-field (%0 bits) exceeds %select{width|size}1 of its type (%2 bit%s2)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_anonymous_property, CLASS_ERROR, (unsigned)diag::Severity::Error, "anonymous property is not supported", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_anonymous_record_bad_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "anonymous %select{struct|union}0 can only contain non-static data members", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_anonymous_record_member_redecl, CLASS_ERROR, (unsigned)diag::Severity::Error, "member of anonymous %select{struct|union}0 redeclares %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_anonymous_record_nonpublic_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "anonymous %select{struct|union}0 cannot contain a %select{private|protected}1 data member", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_anonymous_record_with_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "functions cannot be declared in an anonymous %select{struct|union}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_anonymous_record_with_static, CLASS_ERROR, (unsigned)diag::Severity::Error, "static members cannot be declared in an anonymous %select{struct|union}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_anonymous_record_with_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "types cannot be declared in an anonymous %select{struct|union}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_anonymous_struct_not_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "anonymous %select{structs|structs and classes}0 must be %select{struct or union|class}0 members", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_anonymous_union_not_static, CLASS_ERROR, (unsigned)diag::Severity::Error, "anonymous unions at namespace or global scope must be declared 'static'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_anonymous_union_with_storage_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "anonymous union at class scope must not have a storage specifier", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_anyx86_interrupt_attribute, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{x86|x86-64}0 'interrupt' attribute only applies to functions that have %select{a 'void' return type|only a pointer parameter optionally followed by an integer parameter|a pointer as the first parameter|a %2 type as the second parameter}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_anyx86_interrupt_called, CLASS_ERROR, (unsigned)diag::Severity::Error, "interrupt service routine cannot be called directly", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_arc_array_param_no_ownership, CLASS_ERROR, (unsigned)diag::Severity::Error, "must explicitly describe intended ownership of an object array parameter", 0, SFINAE_SubstitutionFailure, false, true, 5)
+DIAG(err_arc_assign_property_ownership, CLASS_ERROR, (unsigned)diag::Severity::Error, "existing instance variable %1 for property %0 with %select{unsafe_unretained|assign}2 attribute must be __unsafe_unretained", 0, SFINAE_SubstitutionFailure, false, true, 6)
+DIAG(err_arc_atomic_ownership, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot perform atomic operation on a pointer to type %0: type has non-trivial ownership", 0, SFINAE_SubstitutionFailure, false, true, 5)
+DIAG(err_arc_autoreleasing_capture, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot capture __autoreleasing variable in a %select{block|lambda by copy}0", 0, SFINAE_SubstitutionFailure, false, true, 5)
+DIAG(err_arc_autoreleasing_var, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{__block variables|global variables|fields|instance variables}0 cannot have __autoreleasing ownership", 0, SFINAE_SubstitutionFailure, false, true, 5)
+DIAG(err_arc_bridge_cast_incompatible, CLASS_ERROR, (unsigned)diag::Severity::Error, "incompatible types casting %0 to %1 with a %select{__bridge|__bridge_transfer|__bridge_retained}2 cast", 0, SFINAE_SubstitutionFailure, false, true, 7)
+DIAG(err_arc_bridge_cast_wrong_kind, CLASS_ERROR, (unsigned)diag::Severity::Error, "cast of %select{Objective-C|block|C}0 pointer type %1 to %select{Objective-C|block|C}2 pointer type %3 cannot use %select{__bridge|__bridge_transfer|__bridge_retained}4", 0, SFINAE_SubstitutionFailure, false, true, 7)
+DIAG(err_arc_cast_requires_bridge, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{cast|implicit conversion}0 of %select{Objective-C|block|C}1 pointer type %2 to %select{Objective-C|block|C}3 pointer type %4 requires a bridged cast", 0, SFINAE_SubstitutionFailure, false, true, 7)
+DIAG(err_arc_collection_forward, CLASS_ERROR, (unsigned)diag::Severity::Error, "collection expression type %0 is a forward declaration", 0, SFINAE_SubstitutionFailure, false, true, 5)
+DIAG(err_arc_convesion_of_weak_unavailable, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{implicit conversion|cast}0 of weak-unavailable object of type %1 to a __weak object of type %2", 0, SFINAE_SubstitutionFailure, false, true, 9)
+DIAG(err_arc_gained_method_convention, CLASS_ERROR, (unsigned)diag::Severity::Error, "method implementation does not match its declaration", 0, SFINAE_SubstitutionFailure, false, true, 5)
+DIAG(err_arc_illegal_explicit_message, CLASS_ERROR, (unsigned)diag::Severity::Error, "ARC forbids explicit message send of %0", 0, SFINAE_SubstitutionFailure, false, true, 10)
+DIAG(err_arc_illegal_method_def, CLASS_ERROR, (unsigned)diag::Severity::Error, "ARC forbids %select{implementation|synthesis}0 of %1", 0, SFINAE_SubstitutionFailure, false, true, 10)
+DIAG(err_arc_illegal_selector, CLASS_ERROR, (unsigned)diag::Severity::Error, "ARC forbids use of %0 in a @selector", 0, SFINAE_SubstitutionFailure, false, true, 10)
+DIAG(err_arc_inconsistent_property_ownership, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{|unsafe_unretained|strong|weak}1 property %0 may not also be declared %select{|__unsafe_unretained|__strong|__weak|__autoreleasing}2", 0, SFINAE_SubstitutionFailure, false, true, 6)
+DIAG(err_arc_indirect_no_ownership, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{pointer|reference}1 to non-const type %0 with no explicit ownership", 0, SFINAE_SubstitutionFailure, false, true, 5)
+DIAG(err_arc_init_method_unrelated_result_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "init methods must return a type related to the receiver type", 0, SFINAE_SubstitutionFailure, false, true, 5)
+DIAG(err_arc_lost_method_convention, CLASS_ERROR, (unsigned)diag::Severity::Error, "method was declared as %select{an 'alloc'|a 'copy'|an 'init'|a 'new'}0 method, but its implementation doesn't match because %select{its result type is not an object pointer|its result type is unrelated to its receiver type}1", 0, SFINAE_SubstitutionFailure, false, true, 5)
+DIAG(err_arc_may_not_respond, CLASS_ERROR, (unsigned)diag::Severity::Error, "no visible @interface for %0 declares the selector %1", 0, SFINAE_SubstitutionFailure, false, true, 5)
+DIAG(err_arc_method_not_found, CLASS_ERROR, (unsigned)diag::Severity::Error, "no known %select{instance|class}1 method for selector %0", 0, SFINAE_SubstitutionFailure, false, true, 5)
+DIAG(err_arc_mismatched_cast, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{implicit conversion|cast}0 of %select{%2|a non-Objective-C pointer type %2|a block pointer|an Objective-C pointer|an indirect pointer to an Objective-C pointer}1 to %3 is disallowed with ARC", 0, SFINAE_SubstitutionFailure, false, true, 10)
+DIAG(err_arc_multiple_method_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "multiple methods named %0 found with mismatched result, parameter type or attributes", 0, SFINAE_SubstitutionFailure, false, true, 5)
+DIAG(err_arc_new_array_without_ownership, CLASS_ERROR, (unsigned)diag::Severity::Error, "'new' cannot allocate an array of %0 with no explicit ownership", 0, SFINAE_SubstitutionFailure, false, true, 5)
+DIAG(err_arc_nolifetime_behavior, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit ownership qualifier on cast result has no effect", 0, SFINAE_SubstitutionFailure, false, true, 10)
+DIAG(err_arc_nonlocal_writeback, CLASS_ERROR, (unsigned)diag::Severity::Error, "passing address of %select{non-local|non-scalar}0 object to __autoreleasing parameter for write-back", 0, SFINAE_SubstitutionFailure, false, true, 5)
+DIAG(err_arc_objc_object_in_tag, CLASS_ERROR, (unsigned)diag::Severity::Error, "ARC forbids %select{Objective-C objects|blocks}0 in %select{struct|interface|union|<<ERROR>>|enum}1", 0, SFINAE_SubstitutionFailure, false, true, 10)
+DIAG(err_arc_objc_property_default_assign_on_object, CLASS_ERROR, (unsigned)diag::Severity::Error, "ARC forbids synthesizing a property of an Objective-C object with unspecified ownership or storage attribute", 0, SFINAE_SubstitutionFailure, false, true, 10)
+DIAG(err_arc_perform_selector_retains, CLASS_ERROR, (unsigned)diag::Severity::Error, "performSelector names a selector which retains the object", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_arc_pseudo_dtor_inconstant_quals, CLASS_ERROR, (unsigned)diag::Severity::Error, "pseudo-destructor destroys object of type %0 with inconsistently-qualified type %1", 0, SFINAE_SubstitutionFailure, false, true, 5)
+DIAG(err_arc_receiver_forward_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "receiver %0 for class message is a forward declaration", 0, SFINAE_SubstitutionFailure, false, true, 5)
+DIAG(err_arc_receiver_forward_instance, CLASS_ERROR, (unsigned)diag::Severity::Error, "receiver type %0 for instance message is a forward declaration", 0, SFINAE_SubstitutionFailure, false, true, 5)
+DIAG(err_arc_strong_property_ownership, CLASS_ERROR, (unsigned)diag::Severity::Error, "existing instance variable %1 for strong property %0 may not be %select{|__unsafe_unretained||__weak}2", 0, SFINAE_SubstitutionFailure, false, true, 6)
+DIAG(err_arc_thread_ownership, CLASS_ERROR, (unsigned)diag::Severity::Error, "thread-local variable has non-trivial ownership: type is %0", 0, SFINAE_SubstitutionFailure, false, true, 5)
+DIAG(err_arc_typecheck_convert_incompatible_pointer, CLASS_ERROR, (unsigned)diag::Severity::Error, "incompatible pointer types passing retainable parameter of type %0to a CF function expecting %1 type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_arc_unsupported_weak_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "class is incompatible with __weak references", 0, SFINAE_SubstitutionFailure, false, true, 9)
+DIAG(err_arc_unused_init_message, CLASS_ERROR, (unsigned)diag::Severity::Error, "the result of a delegate init call must be immediately returned or assigned to 'self'", 0, SFINAE_SubstitutionFailure, false, true, 10)
+DIAG(err_arc_weak_disabled, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot create __weak reference in file using manual reference counting", 0, SFINAE_SubstitutionFailure, false, true, 9)
+DIAG(err_arc_weak_ivar_access, CLASS_ERROR, (unsigned)diag::Severity::Error, "dereferencing a __weak pointer is not allowed due to possible null value caused by race condition, assign it to strong variable first", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_arc_weak_no_runtime, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot create __weak reference because the current deployment target does not support weak references", 0, SFINAE_SubstitutionFailure, false, true, 9)
+DIAG(err_arc_weak_unavailable_assign, CLASS_ERROR, (unsigned)diag::Severity::Error, "assignment of a weak-unavailable object to a __weak object", 0, SFINAE_SubstitutionFailure, false, true, 9)
+DIAG(err_arc_weak_unavailable_property, CLASS_ERROR, (unsigned)diag::Severity::Error, "synthesizing __weak instance variable of type %0, which does not support weak references", 0, SFINAE_SubstitutionFailure, false, true, 9)
+DIAG(err_arg_with_address_space, CLASS_ERROR, (unsigned)diag::Severity::Error, "parameter may not be qualified with an address space", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_argument_invalid_range, CLASS_ERROR, (unsigned)diag::Severity::Error, "argument value %0 is outside the valid range [%1, %2]", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_argument_not_multiple, CLASS_ERROR, (unsigned)diag::Severity::Error, "argument should be a multiple of %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_arithmetic_nonfragile_interface, CLASS_ERROR, (unsigned)diag::Severity::Error, "arithmetic on pointer to interface %0, which is not a constant size for this architecture and platform", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_arm_invalid_specialreg, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid special register for builtin", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_array_designator_empty_range, CLASS_ERROR, (unsigned)diag::Severity::Error, "array designator range [%0, %1] is empty", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_array_designator_negative, CLASS_ERROR, (unsigned)diag::Severity::Error, "array designator value '%0' is negative", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_array_designator_non_array, CLASS_ERROR, (unsigned)diag::Severity::Error, "array designator cannot initialize non-array type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_array_designator_too_large, CLASS_ERROR, (unsigned)diag::Severity::Error, "array designator index (%0) exceeds array bounds (%1)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_array_init_different_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot initialize array %diff{of type $ with array of type $|with different type of array}0,1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_array_init_incompat_wide_string_into_wchar, CLASS_ERROR, (unsigned)diag::Severity::Error, "initializing wide char array with incompatible wide string literal", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_array_init_narrow_string_into_wchar, CLASS_ERROR, (unsigned)diag::Severity::Error, "initializing wide char array with non-wide string literal", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_array_init_non_constant_array, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot initialize array %diff{of type $ with non-constant array of type $|with different type of array}0,1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_array_init_not_init_list, CLASS_ERROR, (unsigned)diag::Severity::Error, "array initializer must be an initializer list%select{| or string literal| or wide string literal}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_array_init_plain_string_into_char8_t, CLASS_ERROR, (unsigned)diag::Severity::Error, "initializing 'char8_t' array with plain string literal", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_array_init_utf8_string_into_char, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{|ISO C++20 does not permit }0initialization of char array with UTF-8 string literal%select{ is not permitted by '-fchar8_t'|}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_array_init_wide_string_into_char, CLASS_ERROR, (unsigned)diag::Severity::Error, "initializing char array with wide string literal", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_array_new_needs_size, CLASS_ERROR, (unsigned)diag::Severity::Error, "array size must be specified in new expressions", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_array_of_abstract_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "array of abstract class type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_array_section_does_not_specify_contiguous_storage, CLASS_ERROR, (unsigned)diag::Severity::Error, "array section does not specify contiguous storage", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_array_size_ambiguous_conversion, CLASS_ERROR, (unsigned)diag::Severity::Error, "ambiguous conversion of array size expression of type %0 to an integral or enumeration type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_array_size_explicit_conversion, CLASS_ERROR, (unsigned)diag::Severity::Error, "array size expression of type %0 requires explicit conversion to type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_array_size_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "array size expression has incomplete class type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_array_size_non_int, CLASS_ERROR, (unsigned)diag::Severity::Error, "size of array has non-integer type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_array_size_not_integral, CLASS_ERROR, (unsigned)diag::Severity::Error, "array size expression must have integral or %select{|unscoped }0enumeration type, not %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_array_star_in_function_definition, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable length array must be bound in function definition", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_array_star_outside_prototype, CLASS_ERROR, (unsigned)diag::Severity::Error, "star modifier used outside of function prototype", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_array_static_not_outermost, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 used in non-outermost array type derivation", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_array_static_outside_prototype, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 used in array declarator outside of function prototype", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_array_too_large, CLASS_ERROR, (unsigned)diag::Severity::Error, "array is too large (%0 elements)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_as_qualified_auto_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "automatic variable qualified with an%select{| invalid}0 address space", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_asm_bad_register_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "bad type for named register variable", 0, SFINAE_SubstitutionFailure, false, true, 12)
+DIAG(err_asm_immediate_expected, CLASS_ERROR, (unsigned)diag::Severity::Error, "constraint '%0' expects an integer constant expression", 0, SFINAE_SubstitutionFailure, false, true, 12)
+DIAG(err_asm_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "asm operand has incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 12)
+DIAG(err_asm_input_duplicate_match, CLASS_ERROR, (unsigned)diag::Severity::Error, "more than one input constraint matches the same output '%0'", 0, SFINAE_SubstitutionFailure, false, true, 12)
+DIAG(err_asm_invalid_global_var_reg, CLASS_ERROR, (unsigned)diag::Severity::Error, "register '%0' unsuitable for global register variables on this target", 0, SFINAE_SubstitutionFailure, false, true, 12)
+DIAG(err_asm_invalid_input_constraint, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid input constraint '%0' in asm", 0, SFINAE_SubstitutionFailure, false, true, 12)
+DIAG(err_asm_invalid_input_size, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid input size for constraint '%0'", 0, SFINAE_SubstitutionFailure, false, true, 12)
+DIAG(err_asm_invalid_lvalue_in_input, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid lvalue in asm input for constraint '%0'", 0, SFINAE_SubstitutionFailure, false, true, 12)
+DIAG(err_asm_invalid_lvalue_in_output, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid lvalue in asm output", 0, SFINAE_SubstitutionFailure, false, true, 12)
+DIAG(err_asm_invalid_output_constraint, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid output constraint '%0' in asm", 0, SFINAE_SubstitutionFailure, false, true, 12)
+DIAG(err_asm_invalid_output_size, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid output size for constraint '%0'", 0, SFINAE_SubstitutionFailure, false, true, 12)
+DIAG(err_asm_naked_parm_ref, CLASS_ERROR, (unsigned)diag::Severity::Error, "parameter references not allowed in naked functions", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_asm_naked_this_ref, CLASS_ERROR, (unsigned)diag::Severity::Error, "'this' pointer references not allowed in naked functions", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_asm_non_addr_value_in_memory_constraint, CLASS_ERROR, (unsigned)diag::Severity::Error, "reference to a %select{bit-field|vector element|global register variable}0 in asm %select{input|output}1 with a memory constraint '%2'", 0, SFINAE_SubstitutionFailure, false, true, 12)
+DIAG(err_asm_register_size_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "size of register '%0' does not match variable size", 0, SFINAE_SubstitutionFailure, false, true, 12)
+DIAG(err_asm_tying_incompatible_types, CLASS_ERROR, (unsigned)diag::Severity::Error, "unsupported inline asm: input with type %diff{$ matching output with type $|}0,1", 0, SFINAE_SubstitutionFailure, false, true, 12)
+DIAG(err_asm_unexpected_constraint_alternatives, CLASS_ERROR, (unsigned)diag::Severity::Error, "asm constraint has an unexpected number of alternatives: %0 vs %1", 0, SFINAE_SubstitutionFailure, false, true, 12)
+DIAG(err_asm_unknown_register_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "unknown register name '%0' in asm", 0, SFINAE_SubstitutionFailure, false, true, 12)
+DIAG(err_assoc_compatible_types, CLASS_ERROR, (unsigned)diag::Severity::Error, "type %0 in generic association compatible with previously specified type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_assoc_type_incomplete, CLASS_ERROR, (unsigned)diag::Severity::Error, "type %0 in generic association incomplete", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_assoc_type_nonobject, CLASS_ERROR, (unsigned)diag::Severity::Error, "type %0 in generic association not an object type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_assoc_type_variably_modified, CLASS_ERROR, (unsigned)diag::Severity::Error, "type %0 in generic association is a variably modified type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_atdef_nonfragile_interface, CLASS_ERROR, (unsigned)diag::Severity::Error, "use of @defs is not supported on this architecture and platform", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_atomic_builtin_cannot_be_const, CLASS_ERROR, (unsigned)diag::Severity::Error, "address argument to atomic builtin cannot be const-qualified (%0 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_atomic_builtin_must_be_pointer, CLASS_ERROR, (unsigned)diag::Severity::Error, "address argument to atomic builtin must be a pointer (%0 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_atomic_builtin_must_be_pointer_intfltptr, CLASS_ERROR, (unsigned)diag::Severity::Error, "address argument to atomic builtin must be a pointer to integer, floating-point or pointer (%0 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_atomic_builtin_must_be_pointer_intptr, CLASS_ERROR, (unsigned)diag::Severity::Error, "address argument to atomic builtin must be a pointer to integer or pointer (%0 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_atomic_builtin_pointer_size, CLASS_ERROR, (unsigned)diag::Severity::Error, "address argument to atomic builtin must be a pointer to 1,2,4,8 or 16 byte type (%0 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_atomic_exclusive_builtin_pointer_size, CLASS_ERROR, (unsigned)diag::Severity::Error, "address argument to load or store exclusive builtin must be a pointer to 1,2,4 or 8 byte type (%0 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_atomic_load_store_uses_lib, CLASS_ERROR, (unsigned)diag::Severity::Error, "atomic %select{load|store}0 requires runtime support that is not available for this target", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_atomic_op_bitwise_needs_atomic_int, CLASS_ERROR, (unsigned)diag::Severity::Error, "address argument to bitwise atomic operation must be a pointer to %select{|atomic }0integer (%1 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_atomic_op_has_invalid_synch_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "synchronization scope argument to atomic operation is invalid", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_atomic_op_needs_atomic, CLASS_ERROR, (unsigned)diag::Severity::Error, "address argument to atomic operation must be a pointer to _Atomic type (%0 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_atomic_op_needs_atomic_int_or_ptr, CLASS_ERROR, (unsigned)diag::Severity::Error, "address argument to atomic operation must be a pointer to %select{|atomic }0integer or pointer (%1 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_atomic_op_needs_int32_or_ptr, CLASS_ERROR, (unsigned)diag::Severity::Error, "address argument to atomic operation must be a pointer to signed or unsigned 32-bit integer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_atomic_op_needs_non_const_atomic, CLASS_ERROR, (unsigned)diag::Severity::Error, "address argument to atomic operation must be a pointer to non-%select{const|constant}0 _Atomic type (%1 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_atomic_op_needs_non_const_pointer, CLASS_ERROR, (unsigned)diag::Severity::Error, "address argument to atomic operation must be a pointer to non-const type (%0 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_atomic_op_needs_trivial_copy, CLASS_ERROR, (unsigned)diag::Severity::Error, "address argument to atomic operation must be a pointer to a trivially-copyable type (%0 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_atomic_property_nontrivial_assign_op, CLASS_ERROR, (unsigned)diag::Severity::Error, "atomic property of reference type %0 cannot have non-trivial assignment operator", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_atomic_specifier_bad_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "_Atomic cannot be applied to %select{incomplete |array |function |reference |atomic |qualified |}0type %1 %select{||||||which is not trivially copyable}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_atprotocol_protocol, CLASS_ERROR, (unsigned)diag::Severity::Error, "@protocol is using a forward protocol declaration of %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attr_cond_never_constant_expr, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute expression never produces a constant expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attr_objc_ownership_redundant, CLASS_ERROR, (unsigned)diag::Severity::Error, "the type %0 is already explicitly ownership-qualified", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attr_tlsmodel_arg, CLASS_ERROR, (unsigned)diag::Severity::Error, "tls_model must be \"global-dynamic\", \"local-dynamic\", \"initial-exec\" or \"local-exec\"", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_address_function_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "function type may not be qualified with an address space", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_address_multiple_qualifiers, CLASS_ERROR, (unsigned)diag::Severity::Error, "multiple address spaces specified for type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_address_space_negative, CLASS_ERROR, (unsigned)diag::Severity::Error, "address space is negative", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_address_space_too_high, CLASS_ERROR, (unsigned)diag::Severity::Error, "address space is larger than the maximum supported (%0)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_aligned_too_great, CLASS_ERROR, (unsigned)diag::Severity::Error, "requested alignment must be %0 bytes or smaller", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_argument_invalid, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute argument is invalid: %select{max must be 0 since min is 0|min must not be greater than max}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_argument_is_zero, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute must be greater than 0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_argument_n_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute requires parameter %1 to be %select{int or bool|an integer constant|a string|an identifier}2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_argument_out_of_bounds, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute parameter %1 is out of bounds", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_argument_out_of_bounds_extra_info, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute parameter %1 is out of bounds: %plural{0:no parameters to index into|1:can only be 1, since there is one parameter|:must be between 1 and %2}2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_argument_out_of_range, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute requires integer constant between %1 and %2 inclusive", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_argument_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute requires %select{int or bool|an integer constant|a string|an identifier}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_argument_vec_type_hint, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid attribute argument %0 - expecting a vector or vectorizable scalar type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_bad_neon_vector_size, CLASS_ERROR, (unsigned)diag::Severity::Error, "Neon vector size must be 64 or 128 bits", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_cleanup_arg_not_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "'cleanup' argument %select{|%1 |%1 }0is not a %select{||single }0function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_cleanup_func_arg_incompatible_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "'cleanup' function %0 parameter has %diff{type $ which is incompatible with type $|incompatible type}1,2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_cleanup_func_must_take_one_arg, CLASS_ERROR, (unsigned)diag::Severity::Error, "'cleanup' function %0 must take 1 parameter", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_dll_ambiguous_default_ctor, CLASS_ERROR, (unsigned)diag::Severity::Error, "'__declspec(dllexport)' cannot be applied to more than one default constructor in %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_dll_deleted, CLASS_ERROR, (unsigned)diag::Severity::Error, "attribute %q0 cannot be applied to a deleted function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_dll_lambda, CLASS_ERROR, (unsigned)diag::Severity::Error, "lambda cannot be declared %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_dll_member_of_dll_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "attribute %q0 cannot be applied to member of %q1 class", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_dll_not_extern, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 must have external linkage when declared %q1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_dll_redeclaration, CLASS_ERROR, (unsigned)diag::Severity::Error, "redeclaration of %q0 cannot add %q1 attribute", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_dll_thread_local, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 cannot be thread local when declared %q1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_dllimport_data_definition, CLASS_ERROR, (unsigned)diag::Severity::Error, "definition of dllimport data", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_dllimport_function_definition, CLASS_ERROR, (unsigned)diag::Severity::Error, "dllimport cannot be applied to non-inline function definition", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_dllimport_static_field_definition, CLASS_ERROR, (unsigned)diag::Severity::Error, "definition of dllimport static field not allowed", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_integers_only, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute argument may only refer to a function parameter of integer type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_invalid_implicit_this_argument, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute is invalid for the implicit this argument", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_invalid_size, CLASS_ERROR, (unsigned)diag::Severity::Error, "vector size not an integral multiple of component size", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_invalid_vector_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid vector element type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_multiple_objc_gc, CLASS_ERROR, (unsigned)diag::Severity::Error, "multiple garbage collection attributes specified for type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_no_member_pointers, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute cannot be used with pointers to members", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_not_supported_in_lang, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute is not supported in %select{C|C++|Objective-C}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_not_supported_on_arch, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute is not supported on '%1'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_only_once_per_parameter, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute can only be applied once per parameter", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_overloadable_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "redeclaration of %0 must %select{not |}1have the 'overloadable' attribute", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_overloadable_multiple_unmarked_overloads, CLASS_ERROR, (unsigned)diag::Severity::Error, "at most one overload for a given name may lack the 'overloadable' attribute", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_overloadable_no_prototype, CLASS_ERROR, (unsigned)diag::Severity::Error, "'overloadable' function %0 must have a prototype", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_pointers_only, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute only applies to%select{| constant}1 pointer arguments", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_regparm_invalid_number, CLASS_ERROR, (unsigned)diag::Severity::Error, "'regparm' parameter must be between 0 and %0 inclusive", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_regparm_wrong_platform, CLASS_ERROR, (unsigned)diag::Severity::Error, "'regparm' is not valid on this platform", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_requires_opencl_version, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute requires OpenCL version %1%select{| or above}2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_requires_positive_integer, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute requires a %select{positive|non-negative}1 integral compile time constant expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_section_invalid_for_target, CLASS_ERROR, (unsigned)diag::Severity::Error, "argument to %select{'code_seg'|'section'}1 attribute is not valid for this target: %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_selectany_non_extern_data, CLASS_ERROR, (unsigned)diag::Severity::Error, "'selectany' can only be applied to data items with external linkage", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_sentinel_less_than_zero, CLASS_ERROR, (unsigned)diag::Severity::Error, "'sentinel' parameter 1 less than zero", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_sentinel_not_zero_or_one, CLASS_ERROR, (unsigned)diag::Severity::Error, "'sentinel' parameter 2 not 0 or 1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_size_too_large, CLASS_ERROR, (unsigned)diag::Severity::Error, "vector size too large", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_too_few_arguments, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute takes at least %1 argument%s1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_too_many_arguments, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute takes no more than %1 argument%s1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_unsupported, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute is not supported for this target", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_vecreturn_only_pod_record, CLASS_ERROR, (unsigned)diag::Severity::Error, "the vecreturn attribute can only be used on a POD (plain old data) class or structure (i.e. no virtual functions)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_vecreturn_only_vector_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "the vecreturn attribute can only be used on a class or structure with one member, which must be a vector", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_weak_static, CLASS_ERROR, (unsigned)diag::Severity::Error, "weak declaration cannot have internal linkage", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_weakref_not_global_context, CLASS_ERROR, (unsigned)diag::Severity::Error, "weakref declaration of %0 must be in a global context", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_weakref_not_static, CLASS_ERROR, (unsigned)diag::Severity::Error, "weakref declaration must have internal linkage", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_weakref_without_alias, CLASS_ERROR, (unsigned)diag::Severity::Error, "weakref declaration of %0 must also have an alias attribute", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_wrong_decl_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute only applies to %select{functions|unions|variables and functions|functions and methods|functions, methods and blocks|functions, methods, and parameters|variables|variables and fields|variables, data members and tag types|types and namespaces|variables, functions and classes|kernel functions|non-K&R-style functions}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_wrong_decl_type_str, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute only applies to %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_wrong_number_arguments, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute %plural{0:takes no arguments|1:takes one argument|:requires exactly %1 arguments}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_zero_size, CLASS_ERROR, (unsigned)diag::Severity::Error, "zero vector size", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attributes_are_not_compatible, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 and %1 attributes are not compatible", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_auto_bitfield, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot pass bit-field as __auto_type initializer in C", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_auto_different_deductions, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{'auto'|'decltype(auto)'|'__auto_type'|template arguments}0 deduced as %1 in declaration of %2 and deduced as %3 in declaration of %4", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_auto_fn_deduction_failure, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot deduce return type %0 from returned value of type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_auto_fn_different_deductions, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%select{auto|decltype(auto)}0' in return type deduced as %1 here but deduced as %2 in earlier return statement", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_auto_fn_no_return_but_not_auto, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot deduce return type %0 for function with no return statements", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_auto_fn_return_init_list, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot deduce return type from initializer list", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_auto_fn_return_void_but_not_auto, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot deduce return type %0 from omitted return expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_auto_fn_used_before_defined, CLASS_ERROR, (unsigned)diag::Severity::Error, "function %0 with deduced return type cannot be used before it is defined", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_auto_fn_virtual, CLASS_ERROR, (unsigned)diag::Severity::Error, "function with deduced return type cannot be virtual", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_auto_inconsistent_deduction, CLASS_ERROR, (unsigned)diag::Severity::Error, "deduced conflicting types %diff{($ vs $) |}0,1for initializer list element type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_auto_init_list_from_c, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot use __auto_type with initializer list in C", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_auto_missing_trailing_return, CLASS_ERROR, (unsigned)diag::Severity::Error, "'auto' return without trailing return type; deduced return types are a C++14 extension", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_auto_new_ctor_multiple_expressions, CLASS_ERROR, (unsigned)diag::Severity::Error, "new expression for type %0 contains multiple constructor arguments", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_auto_new_deduction_failure, CLASS_ERROR, (unsigned)diag::Severity::Error, "new expression for type %0 has incompatible constructor argument of type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_auto_new_requires_ctor_arg, CLASS_ERROR, (unsigned)diag::Severity::Error, "new expression for type %0 requires a constructor argument", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_auto_non_deduced_not_alone, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{function with deduced return type|declaration with trailing return type}0 must be the only declaration in its group", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_auto_not_allowed, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{'auto'|'decltype(auto)'|'__auto_type'|use of %select{class template|function template|variable template|alias template|template template parameter|template}2 %3 requires template arguments; argument deduction}0 not allowed %select{in function prototype|in non-static struct member|in struct member|in non-static union member|in union member|in non-static class member|in interface member|in exception declaration|in template parameter until C++17|in block literal|in template argument|in typedef|in type alias|in function return type|in conversion function type|here|in lambda parameter|in type allocated by 'new'|in K&R-style function parameter|in template parameter|in friend declaration}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_auto_not_allowed_var_inst, CLASS_ERROR, (unsigned)diag::Severity::Error, "'auto' variable template instantiation is not allowed", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_auto_var_deduction_failure, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable %0 with type %1 has incompatible initializer of type %2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_auto_var_deduction_failure_from_init_list, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot deduce actual type for variable %0 with type %1 from initializer list", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_auto_var_init_multiple_expressions, CLASS_ERROR, (unsigned)diag::Severity::Error, "initializer for variable %0 with type %1 contains multiple expressions", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_auto_var_init_no_expression, CLASS_ERROR, (unsigned)diag::Severity::Error, "initializer for variable %0 with type %1 is empty", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_auto_var_init_paren_braces, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot deduce type for variable %1 with type %2 from %select{parenthesized|nested}0 initializer list", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_auto_var_requires_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "declaration of variable %0 with deduced type %1 requires an initializer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_auto_variable_cannot_appear_in_own_initializer, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable %0 declared with deduced type %1 cannot appear in its own initializer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_await_suspend_invalid_return_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "return type of 'await_suspend' is required to be 'void' or 'bool' (have %0)", 0, SFINAE_SubstitutionFailure, false, true, 14)
+DIAG(err_bad_category_property_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "property implementation must have its declaration in the category %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_const_cast_dest, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{const_cast||||C-style cast|functional-style cast}0 to %2, which is not a reference, pointer-to-object, or pointer-to-data-member", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_cstyle_cast_overload, CLASS_ERROR, (unsigned)diag::Severity::Error, "address of overloaded function %0 cannot be cast to type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_cxx_cast_bitfield, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from bit-field lvalue to reference type %2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_cxx_cast_generic, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from %1 to %2 is not allowed", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_cxx_cast_member_pointer_size, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot %select{||reinterpret_cast||C-style cast|}0 from member pointer type %1 to member pointer type %2 of different size", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_cxx_cast_qualifiers_away, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from %1 to %2 casts away qualifiers", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_cxx_cast_rvalue, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from rvalue to reference type %2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_cxx_cast_scalar_to_vector_different_size, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{||reinterpret_cast||C-style cast|}0 from scalar %1 to vector %2 of different size", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_cxx_cast_unrelated_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from %1 to %2, which are not related by inheritance, is not allowed", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_cxx_cast_vector_to_scalar_different_size, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{||reinterpret_cast||C-style cast|}0 from vector %1 to scalar %2 of different size", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_cxx_cast_vector_to_vector_different_size, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{||reinterpret_cast||C-style cast|}0 from vector %1 to vector %2 of different size", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_dynamic_cast_incomplete, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 is an incomplete type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_dynamic_cast_not_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 is not a class", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_dynamic_cast_not_polymorphic, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 is not polymorphic", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_dynamic_cast_not_ptr, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 is not a pointer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_dynamic_cast_not_ref_or_ptr, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 is not a reference or pointer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_kernel_param_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 cannot be used as the type of a kernel parameter", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_lvalue_to_rvalue_cast, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot cast from lvalue of type %1 to rvalue reference type %2; types are not compatible", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_memptr_lhs, CLASS_ERROR, (unsigned)diag::Severity::Error, "left hand operand to %0 must be a %select{|pointer to }1class compatible with the right hand operand, but is %2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_memptr_rhs, CLASS_ERROR, (unsigned)diag::Severity::Error, "right hand operand to %0 has non-pointer-to-member type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_multiversion_option, CLASS_ERROR, (unsigned)diag::Severity::Error, "function multiversioning doesn't support %select{feature|architecture}0 '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_bad_new_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot allocate %select{function|reference}1 type %0 with new", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_parameter_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 cannot be the name of a parameter", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_property_context, CLASS_ERROR, (unsigned)diag::Severity::Error, "property implementation must be in a class or category implementation", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_property_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "property implementation must have its declaration in interface %0 or one of its extensions", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_receiver_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "bad receiver type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_reinterpret_cast_overload, CLASS_ERROR, (unsigned)diag::Severity::Error, "reinterpret_cast cannot resolve overloaded function %0 to type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_reinterpret_cast_reference, CLASS_ERROR, (unsigned)diag::Severity::Error, "reinterpret_cast of a %0 to %1 needs its address, which is not allowed", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_reinterpret_cast_small_int, CLASS_ERROR, (unsigned)diag::Severity::Error, "cast from pointer to smaller type %2 loses information", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_rvalue_to_rvalue_cast, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot cast from rvalue of type %1 to rvalue reference type %2; types are not compatible", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_static_cast_member_pointer_nonmp, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot cast from type %1 to member pointer type %2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_static_cast_overload, CLASS_ERROR, (unsigned)diag::Severity::Error, "address of overloaded function %0 cannot be static_cast to type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_static_cast_pointer_nonpointer, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot cast from type %1 to pointer type %2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bad_variable_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 cannot be the name of a variable or data member", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_base_class_has_flexible_array_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "base class %0 has a flexible array member", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_base_clause_on_union, CLASS_ERROR, (unsigned)diag::Severity::Error, "unions cannot have base classes", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_base_init_direct_and_virtual, CLASS_ERROR, (unsigned)diag::Severity::Error, "base class initializer %0 names both a direct base class and an inherited virtual base class", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_base_init_does_not_name_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "constructor initializer %0 does not name a class", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_base_must_be_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "base specifier must name a class", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_base_specifier_attribute, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute cannot be applied to a base specifier", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_binding_cannot_appear_in_own_initializer, CLASS_ERROR, (unsigned)diag::Severity::Error, "binding %0 cannot appear in the initializer of its own decomposition declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bitfield_has_negative_width, CLASS_ERROR, (unsigned)diag::Severity::Error, "bit-field %0 has negative width (%1)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bitfield_has_zero_width, CLASS_ERROR, (unsigned)diag::Severity::Error, "named bit-field %0 has zero width", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bitfield_width_exceeds_type_width, CLASS_ERROR, (unsigned)diag::Severity::Error, "width of bit-field %0 (%1 bits) exceeds %select{width|size}2 of its type (%3 bit%s3)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_block_decl_ref_not_modifiable_lvalue, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable is not assignable (missing __block type specifier)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_block_extern_cant_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "'extern' variable cannot have an initializer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_block_on_nonlocal, CLASS_ERROR, (unsigned)diag::Severity::Error, "__block attribute not allowed, only allowed on local variables", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_block_on_vm, CLASS_ERROR, (unsigned)diag::Severity::Error, "__block attribute not allowed on declaration with a variably modified type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_block_return_missing_expr, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-void block should return a value", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_block_returning_array_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "block cannot return %select{array|function}0 type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_blocks_disable, CLASS_ERROR, (unsigned)diag::Severity::Error, "blocks support disabled - compile with -fblocks or %select{pick a deployment target that supports them|for OpenCL 2.0}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_bound_member_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "reference to non-static member function must be called%select{|; did you mean to call it with no arguments?}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_box_literal_collection, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{string|character|boolean|numeric}0 literal must be prefixed by '@' in a collection", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_break_not_in_loop_or_switch, CLASS_ERROR, (unsigned)diag::Severity::Error, "'break' statement not in loop or switch statement", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_builtin_annotation_first_arg, CLASS_ERROR, (unsigned)diag::Severity::Error, "first argument to __builtin_annotation must be an integer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_builtin_annotation_second_arg, CLASS_ERROR, (unsigned)diag::Severity::Error, "second argument to __builtin_annotation must be a non-wide string constant", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_builtin_definition, CLASS_ERROR, (unsigned)diag::Severity::Error, "definition of builtin function %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_builtin_fn_use, CLASS_ERROR, (unsigned)diag::Severity::Error, "builtin functions must be directly called", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_builtin_func_cast_more_than_one_arg, CLASS_ERROR, (unsigned)diag::Severity::Error, "function-style cast to a builtin type can only take one argument", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_builtin_launder_invalid_arg, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{non-pointer|function pointer|void pointer}0 argument to '__builtin_launder' is not allowed", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_builtin_longjmp_invalid_val, CLASS_ERROR, (unsigned)diag::Severity::Error, "argument to __builtin_longjmp must be a constant 1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_builtin_longjmp_unsupported, CLASS_ERROR, (unsigned)diag::Severity::Error, "__builtin_longjmp is not supported for the current target", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_builtin_operator_new_delete_not_usual, CLASS_ERROR, (unsigned)diag::Severity::Error, "call to '%select{__builtin_operator_new|__builtin_operator_delete}0' selects non-usual %select{allocation|deallocation}0 function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_builtin_redeclare, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot redeclare builtin function %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_builtin_requires_language, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' is only available in %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_builtin_setjmp_unsupported, CLASS_ERROR, (unsigned)diag::Severity::Error, "__builtin_setjmp is not supported for the current target", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_builtin_target_unsupported, CLASS_ERROR, (unsigned)diag::Severity::Error, "builtin is not supported on this target", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_builtin_x64_aarch64_only, CLASS_ERROR, (unsigned)diag::Severity::Error, "this builtin is only available on x86-64 and aarch64 targets", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_c99_array_usage_cxx, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{qualifier in |static |}0array size %select{||'[*] '}0is a C99 feature, not permitted in C++", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_call_function_incomplete_return, CLASS_ERROR, (unsigned)diag::Severity::Error, "calling %0 with incomplete return type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_call_incomplete_argument, CLASS_ERROR, (unsigned)diag::Severity::Error, "argument type %0 is incomplete", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_call_incomplete_return, CLASS_ERROR, (unsigned)diag::Severity::Error, "calling function with incomplete return type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_callback_attribute_argument_unknown, CLASS_ERROR, (unsigned)diag::Severity::Error, "'callback' attribute argument %0 is not a known function parameter", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_callback_attribute_invalid_callee, CLASS_ERROR, (unsigned)diag::Severity::Error, "'callback' attribute specifies invalid callback callee", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_callback_attribute_multiple, CLASS_ERROR, (unsigned)diag::Severity::Error, "multiple 'callback' attributes specified", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_callback_attribute_no_callee, CLASS_ERROR, (unsigned)diag::Severity::Error, "'callback' attribute specifies no callback callee", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_callback_callee_is_variadic, CLASS_ERROR, (unsigned)diag::Severity::Error, "'callback' attribute callee may not be variadic", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_callback_callee_no_function_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "'callback' attribute callee does not have function type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_callback_implicit_this_not_available, CLASS_ERROR, (unsigned)diag::Severity::Error, "'callback' argument at position %0 references unavailable implicit 'this'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_cannot_find_suitable_accessor, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot find suitable %select{getter|setter}0 for property %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_cannot_form_pointer_to_member_of_reference_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot form a pointer-to-member to member %0 of reference type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_cannot_pass_non_trivial_c_struct_to_vararg, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot pass non-trivial C object of type %0 by value to variadic %select{function|block|method|constructor}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_cannot_pass_objc_interface_to_vararg, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot pass object with interface type %0 by value through variadic %select{function|block|method|constructor}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_cannot_pass_objc_interface_to_vararg_format, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot pass object with interface type %1 by value to variadic %select{function|block|method|constructor}2; expected type from format string was %3", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_cannot_pass_to_vararg, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot pass %select{expression of type %1|initializer list}0 to variadic %select{function|block|method|constructor}2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_cannot_pass_to_vararg_format, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot pass %select{expression of type %1|initializer list}0 to variadic %select{function|block|method|constructor}2; expected type from format string was %3", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_capture_block_variable, CLASS_ERROR, (unsigned)diag::Severity::Error, "__block variable %0 cannot be captured in a %select{lambda expression|captured statement}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_capture_default_non_local, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-local lambda expression cannot have a capture-default", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_capture_does_not_name_variable, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 in capture list does not name a variable", 0, SFINAE_SubstitutionFailure, false, true, 3)
+DIAG(err_capture_more_than_once, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 can appear only once in a capture list", 0, SFINAE_SubstitutionFailure, false, true, 3)
+DIAG(err_capture_non_automatic_variable, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 cannot be captured because it does not have automatic storage duration", 0, SFINAE_SubstitutionFailure, false, true, 3)
+DIAG(err_capture_of_abstract_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "by-copy capture of value of abstract type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_capture_of_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "by-copy capture of variable %0 with incomplete type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_carries_dependency_missing_on_first_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{function|parameter}0 declared '[[carries_dependency]]' after its first declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_carries_dependency_param_not_function_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "'[[carries_dependency]]' attribute only allowed on parameter in a function declaration or lambda", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_case_not_in_switch, CLASS_ERROR, (unsigned)diag::Severity::Error, "'case' statement not in switch statement", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_cast_pointer_from_non_pointer_int, CLASS_ERROR, (unsigned)diag::Severity::Error, "operand of type %0 cannot be cast to a pointer type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_cast_pointer_to_non_pointer_int, CLASS_ERROR, (unsigned)diag::Severity::Error, "pointer cannot be cast to type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_cast_selector_expr, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot type cast @selector expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_catch_incomplete, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot catch incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_catch_incomplete_ptr, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot catch pointer to incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_catch_incomplete_ref, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot catch reference to incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_catch_param_not_objc_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "@catch parameter is not a pointer to an interface type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_catch_rvalue_ref, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot catch exceptions by rvalue reference", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_catch_variably_modified, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot catch variably modified type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_category_forward_interface, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot define %select{category|class extension}0 for undefined class %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_category_property, CLASS_ERROR, (unsigned)diag::Severity::Error, "property declared in category %0 cannot be implemented in class implementation", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_cconv_change, CLASS_ERROR, (unsigned)diag::Severity::Error, "function declared '%0' here was previously declared %select{'%2'|without calling convention}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_cconv_knr, CLASS_ERROR, (unsigned)diag::Severity::Error, "function with no prototype cannot use the %0 calling convention", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_cconv_varargs, CLASS_ERROR, (unsigned)diag::Severity::Error, "variadic function cannot use %0 calling convention", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_cfstring_literal_not_string_constant, CLASS_ERROR, (unsigned)diag::Severity::Error, "CFString literal is not a string constant", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_circular_inheritance, CLASS_ERROR, (unsigned)diag::Severity::Error, "circular inheritance between %0 and %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_class_extension_after_impl, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot declare class extension for %0 after class implementation", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_class_marked_final_used_as_base, CLASS_ERROR, (unsigned)diag::Severity::Error, "base %0 is marked '%select{final|sealed}1'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_class_property_found, CLASS_ERROR, (unsigned)diag::Severity::Error, "property %0 is a class property; did you mean to access it with class '%1'?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_class_redeclared_with_different_access, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 redeclared with '%1' access", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_cocoa_naming_owned_rule, CLASS_ERROR, (unsigned)diag::Severity::Error, "property follows Cocoa naming convention for returning 'owned' objects", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_collection_expr_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "the type %0 is not a pointer to a fast-enumerable object", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_complex_mode_vector_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "type of machine mode does not support base vector types", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_compound_literal_with_address_space, CLASS_ERROR, (unsigned)diag::Severity::Error, "compound literal in function scope may not be qualified with an address space", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_compound_qualified_function_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{block pointer|pointer|reference}0 to function type %select{%2 |}1cannot have '%3' qualifier", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_concept_decl_invalid_specifiers, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{variable|function}0 concept cannot be declared '%select{thread_local|inline|friend|constexpr}1'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_concept_decls_may_only_appear_in_namespace_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "concept declarations may only appear in namespace scope", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_concept_specialized, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{function|variable}0 concept cannot be %select{explicitly instantiated|explicitly specialized|partially specialized}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_concept_specified_specialization, CLASS_ERROR, (unsigned)diag::Severity::Error, "'concept' cannot be applied on an %select{explicit instantiation|explicit specialization|partial specialization}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_concept_wrong_decl_kind, CLASS_ERROR, (unsigned)diag::Severity::Error, "'concept' can only appear on the definition of a function template or variable template", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_cond_voidptr_arc, CLASS_ERROR, (unsigned)diag::Severity::Error, "operands to conditional of types%diff{ $ and $|}0,1 are incompatible in ARC mode", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_conditional_ambiguous, CLASS_ERROR, (unsigned)diag::Severity::Error, "conditional expression is ambiguous; %diff{$ can be converted to $ and vice versa|types can be convert to each other}0,1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_conditional_ambiguous_ovl, CLASS_ERROR, (unsigned)diag::Severity::Error, "conditional expression is ambiguous; %diff{$ and $|types}0,1 can be converted to several common types", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_conditional_vector_element_size, CLASS_ERROR, (unsigned)diag::Severity::Error, "vector condition type %0 and result type %1 do not have elements of the same size", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_conditional_vector_size, CLASS_ERROR, (unsigned)diag::Severity::Error, "vector condition type %0 and result type %1 do not have the same number of elements", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_conditional_void_nonvoid, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{left|right}1 operand to ? is void, but %select{right|left}1 operand is of type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_config_scalar_return, CLASS_ERROR, (unsigned)diag::Severity::Error, "CUDA special function '%0' must have scalar return type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_conflicting_aliasing_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "conflicting types for alias %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_conflicting_codeseg_attribute, CLASS_ERROR, (unsigned)diag::Severity::Error, "conflicting code segment specifiers", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_conflicting_ivar_bitwidth, CLASS_ERROR, (unsigned)diag::Severity::Error, "instance variable %0 has conflicting bit-field width", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_conflicting_ivar_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "conflicting instance variable names: %0 vs %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_conflicting_ivar_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "instance variable %0 has conflicting type%diff{: $ vs $|}1,2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_conflicting_overriding_cc_attributes, CLASS_ERROR, (unsigned)diag::Severity::Error, "virtual function %0 has different calling convention attributes %diff{($) than the function it overrides (which has calling convention $)|than the function it overrides}1,2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_conflicting_super_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "conflicting super class name %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_conflicting_types, CLASS_ERROR, (unsigned)diag::Severity::Error, "conflicting types for %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constant_integer_arg_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "argument to %0 must be a constant integer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constexpr_body_invalid_stmt, CLASS_ERROR, (unsigned)diag::Severity::Error, "statement not allowed in constexpr %select{function|constructor}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constexpr_body_no_return, CLASS_ERROR, (unsigned)diag::Severity::Error, "no return statement in constexpr function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constexpr_ctor_missing_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "constexpr constructor must initialize all members", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constexpr_dtor, CLASS_ERROR, (unsigned)diag::Severity::Error, "destructor cannot be marked constexpr", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constexpr_function_try_block, CLASS_ERROR, (unsigned)diag::Severity::Error, "function try block not allowed in constexpr %select{function|constructor}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constexpr_local_var_no_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "variables defined in a constexpr %select{function|constructor}0 must be initialized", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constexpr_local_var_non_literal_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable of non-literal type %1 cannot be defined in a constexpr %select{function|constructor}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constexpr_local_var_static, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{static|thread_local}1 variable not permitted in a constexpr %select{function|constructor}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constexpr_main, CLASS_ERROR, (unsigned)diag::Severity::Error, "'main' is not allowed to be declared constexpr", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constexpr_no_declarators, CLASS_ERROR, (unsigned)diag::Severity::Error, "constexpr can only be used in variable and function declarations", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constexpr_non_literal_param, CLASS_ERROR, (unsigned)diag::Severity::Error, "constexpr %select{function|constructor}1's %ordinal0 parameter type %2 is not a literal type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constexpr_non_literal_return, CLASS_ERROR, (unsigned)diag::Severity::Error, "constexpr function's return type %0 is not a literal type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constexpr_redecl_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{non-constexpr declaration of %0 follows constexpr declaration|constexpr declaration of %0 follows non-constexpr declaration}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constexpr_return_missing_expr, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-void constexpr function %0 should return a value", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constexpr_static_mem_var_requires_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "declaration of constexpr static data member %0 requires an initializer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constexpr_tag, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{class|struct|interface|union|enum}0 cannot be marked constexpr", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constexpr_union_ctor_no_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "constexpr union constructor does not initialize any member", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constexpr_var_non_literal, CLASS_ERROR, (unsigned)diag::Severity::Error, "constexpr variable cannot have non-literal type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constexpr_var_requires_const_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "constexpr variable %0 must be initialized by a constant expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constexpr_virtual, CLASS_ERROR, (unsigned)diag::Severity::Error, "virtual function cannot be constexpr", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constexpr_virtual_base, CLASS_ERROR, (unsigned)diag::Severity::Error, "constexpr %select{member function|constructor}0 not allowed in %select{struct|interface|class}1 with virtual base %plural{1:class|:classes}2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constexpr_vla, CLASS_ERROR, (unsigned)diag::Severity::Error, "variably-modified type %0 cannot be used in a constexpr %select{function|constructor}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constructor_byvalue_arg, CLASS_ERROR, (unsigned)diag::Severity::Error, "copy constructor must pass its first argument by reference", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constructor_cannot_be, CLASS_ERROR, (unsigned)diag::Severity::Error, "constructor cannot be declared '%0'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constructor_redeclared, CLASS_ERROR, (unsigned)diag::Severity::Error, "constructor cannot be redeclared", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_constructor_return_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "constructor cannot have a return type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_continuation_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "class extension has no primary class", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_continue_not_in_loop, CLASS_ERROR, (unsigned)diag::Severity::Error, "'continue' statement not in loop statement", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_conv_function_not_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "conversion function must be a non-static member function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_conv_function_redeclared, CLASS_ERROR, (unsigned)diag::Severity::Error, "conversion function cannot be redeclared", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_conv_function_return_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "conversion function cannot have a return type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_conv_function_to_array, CLASS_ERROR, (unsigned)diag::Severity::Error, "conversion function cannot convert to an array type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_conv_function_to_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "conversion function cannot convert to a function type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_conv_function_variadic, CLASS_ERROR, (unsigned)diag::Severity::Error, "conversion function cannot be variadic", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_conv_function_with_complex_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot specify any part of a return type in the declaration of a conversion function%select{; put the complete type after 'operator'|; use a typedef to declare a conversion to %1|; use an alias template to declare a conversion to %1|}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_conv_function_with_params, CLASS_ERROR, (unsigned)diag::Severity::Error, "conversion function cannot have any parameters", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_convertvector_incompatible_vector, CLASS_ERROR, (unsigned)diag::Severity::Error, "first two arguments to __builtin_convertvector must have the same number of elements", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_convertvector_non_vector, CLASS_ERROR, (unsigned)diag::Severity::Error, "first argument to __builtin_convertvector must be a vector", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_convertvector_non_vector_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "second argument to __builtin_convertvector must be a vector type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_copy_capture_with_copy_default, CLASS_ERROR, (unsigned)diag::Severity::Error, "'&' must precede a capture when the capture default is '='", 0, SFINAE_SubstitutionFailure, false, true, 3)
+DIAG(err_coroutine_handle_missing_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "std::experimental::coroutine_handle missing a member named '%0'", 0, SFINAE_SubstitutionFailure, false, true, 14)
+DIAG(err_coroutine_invalid_func_context, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%1' cannot be used in %select{a constructor|a destructor|a copy assignment operator|a move assignment operator|the 'main' function|a constexpr function|a function with a deduced return type|a varargs function}0", 0, SFINAE_SubstitutionFailure, false, true, 14)
+DIAG(err_coroutine_objc_method, CLASS_ERROR, (unsigned)diag::Severity::Error, "Objective-C methods as coroutines are not yet supported", 0, SFINAE_SubstitutionFailure, false, true, 14)
+DIAG(err_coroutine_outside_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' cannot be used outside a function", 0, SFINAE_SubstitutionFailure, false, true, 14)
+DIAG(err_coroutine_promise_get_return_object_on_allocation_failure, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0: 'get_return_object_on_allocation_failure()' must be a static member function", 0, SFINAE_SubstitutionFailure, false, true, 14)
+DIAG(err_coroutine_promise_incompatible_return_functions, CLASS_ERROR, (unsigned)diag::Severity::Error, "the coroutine promise type %0 declares both 'return_value' and 'return_void'", 0, SFINAE_SubstitutionFailure, false, true, 14)
+DIAG(err_coroutine_promise_new_requires_nothrow, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 is required to have a non-throwing noexcept specification when the promise type declares 'get_return_object_on_allocation_failure()'", 0, SFINAE_SubstitutionFailure, false, true, 14)
+DIAG(err_coroutine_promise_requires_return_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "the coroutine promise type %0 must declare either 'return_value' or 'return_void'", 0, SFINAE_SubstitutionFailure, false, true, 14)
+DIAG(err_coroutine_promise_type_incomplete, CLASS_ERROR, (unsigned)diag::Severity::Error, "this function cannot be a coroutine: %0 is an incomplete type", 0, SFINAE_SubstitutionFailure, false, true, 14)
+DIAG(err_coroutine_promise_unhandled_exception_required, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 is required to declare the member 'unhandled_exception()'", 0, SFINAE_SubstitutionFailure, false, true, 14)
+DIAG(err_coroutine_type_missing_specialization, CLASS_ERROR, (unsigned)diag::Severity::Error, "this function cannot be a coroutine: missing definition of specialization %0", 0, SFINAE_SubstitutionFailure, false, true, 14)
+DIAG(err_coroutine_unevaluated_context, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' cannot be used in an unevaluated context", 0, SFINAE_SubstitutionFailure, false, true, 14)
+DIAG(err_covariant_return_ambiguous_derived_to_base_conv, CLASS_ERROR, (unsigned)diag::Severity::Error, "return type of virtual function %3 is not covariant with the return type of the function it overrides (ambiguous conversion from derived class %0 to base class %1:%2)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_covariant_return_inaccessible_base, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid covariant return for virtual function: %1 is a %select{private|protected}2 base class of %0", 0, SFINAE_AccessControl, false, true, 2)
+DIAG(err_covariant_return_incomplete, CLASS_ERROR, (unsigned)diag::Severity::Error, "return type of virtual function %0 is not covariant with the return type of the function it overrides (%1 is incomplete)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_covariant_return_not_derived, CLASS_ERROR, (unsigned)diag::Severity::Error, "return type of virtual function %0 is not covariant with the return type of the function it overrides (%1 is not derived from %2)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_covariant_return_type_class_type_more_qualified, CLASS_ERROR, (unsigned)diag::Severity::Error, "return type of virtual function %0 is not covariant with the return type of the function it overrides (class type %1 is more qualified than class type %2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_covariant_return_type_different_qualifications, CLASS_ERROR, (unsigned)diag::Severity::Error, "return type of virtual function %0 is not covariant with the return type of the function it overrides (%1 has different qualifiers than %2)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_cpu_dispatch_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "'cpu_dispatch' function redeclared with different CPUs", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_cpu_specific_multiple_defs, CLASS_ERROR, (unsigned)diag::Severity::Error, "multiple 'cpu_specific' functions cannot specify the same CPU: %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_ctor_dtor_returns_void, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{constructor|destructor}1 %0 must not return void expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_cuda_device_exceptions, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot use '%0' in %select{__device__|__global__|__host__|__host__ __device__}1 function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_cuda_extern_shared, CLASS_ERROR, (unsigned)diag::Severity::Error, "__shared__ variable %0 cannot be 'extern'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_cuda_host_shared, CLASS_ERROR, (unsigned)diag::Severity::Error, "__shared__ local variables not allowed in %select{__device__|__global__|__host__|__host__ __device__}0 functions", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_cuda_nonglobal_constant, CLASS_ERROR, (unsigned)diag::Severity::Error, "__constant__ variables must be global", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_cuda_ovl_target, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{__device__|__global__|__host__|__host__ __device__}0 function %1 cannot overload %select{__device__|__global__|__host__|__host__ __device__}2 function %3", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_cuda_unattributed_constexpr_cannot_overload_device, CLASS_ERROR, (unsigned)diag::Severity::Error, "constexpr function %0 without __host__ or __device__ attributes cannot overload __device__ function with same signature. Add a __host__ attribute, or build with -fno-cuda-host-device-constexpr.", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_cuda_vla, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot use variable-length arrays in %select{__device__|__global__|__host__|__host__ __device__}0 functions", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_current_module_name_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "module name '%0' specified on command line does not match name of module", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_dangling_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{reference|backing array for 'std::initializer_list'}2 %select{|subobject of }1member %0 %select{binds to|is}2 a temporary object whose lifetime would be shorter than the lifetime of the constructed object", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_dealloc_bad_result_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "dealloc return type must be correctly specified as 'void' under ARC, instead of %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_decimal_unsupported, CLASS_ERROR, (unsigned)diag::Severity::Error, "GNU decimal type extension not supported", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_decl_attribute_invalid_on_stmt, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute cannot be applied to a statement", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_decl_negative_array_size, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' declared as an array with a negative size", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_declarator_need_ident, CLASS_ERROR, (unsigned)diag::Severity::Error, "declarator requires an identifier", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_declspec_thread_on_thread_variable, CLASS_ERROR, (unsigned)diag::Severity::Error, "'__declspec(thread)' applied to variable that already has a thread-local storage specifier", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_decltype_auto_cannot_be_combined, CLASS_ERROR, (unsigned)diag::Severity::Error, "'decltype(auto)' cannot be combined with other type specifiers", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_decltype_auto_compound_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot form %select{pointer to|reference to|array of}0 'decltype(auto)'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_decltype_auto_function_declarator_not_declaration, CLASS_ERROR, (unsigned)diag::Severity::Error, "'decltype(auto)' can only be used as a return type in a function declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_decltype_auto_initializer_list, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot deduce 'decltype(auto)' from initializer list", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_decltype_auto_invalid, CLASS_ERROR, (unsigned)diag::Severity::Error, "'decltype(auto)' not allowed here", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_decltype_in_declarator, CLASS_ERROR, (unsigned)diag::Severity::Error, "'decltype' cannot be used to name a declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_decomp_decl_ambiguous_base, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot decompose members of ambiguous base class %1 of %0:%2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_decomp_decl_anon_union_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot decompose class type %0 because it has an anonymous %select{struct|union}1 member", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_decomp_decl_context, CLASS_ERROR, (unsigned)diag::Severity::Error, "decomposition declaration not permitted in this context", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_decomp_decl_inaccessible_base, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot decompose members of inaccessible base class %1 of %0", 0, SFINAE_AccessControl, false, true, 2)
+DIAG(err_decomp_decl_inaccessible_field, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot decompose %select{private|protected}0 member %1 of %3", 0, SFINAE_AccessControl, false, true, 2)
+DIAG(err_decomp_decl_multiple_bases_with_members, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot decompose class type %1: %select{its base classes %2 and|both it and its base class}0 %3 have non-static data members", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_decomp_decl_not_alone, CLASS_ERROR, (unsigned)diag::Severity::Error, "decomposition declaration must be the only declaration in its group", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_decomp_decl_parens, CLASS_ERROR, (unsigned)diag::Severity::Error, "decomposition declaration cannot be declared with parentheses", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_decomp_decl_requires_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "decomposition declaration %0 requires an initializer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_decomp_decl_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "decomposition declaration cannot be declared %plural{1:'%1'|:with '%1' specifiers}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_decomp_decl_std_tuple_element_not_specialized, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot decompose this type; 'std::tuple_element<%0>::type' does not name a type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_decomp_decl_std_tuple_size_not_constant, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot decompose this type; 'std::tuple_size<%0>::value' is not a valid integral constant expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_decomp_decl_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "decomposition declaration template not supported", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_decomp_decl_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "decomposition declaration cannot be declared with type %0; declared type must be 'auto' or reference to 'auto'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_decomp_decl_unbindable_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot decompose %select{union|non-class, non-array}1 type %2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_decomp_decl_wrong_number_bindings, CLASS_ERROR, (unsigned)diag::Severity::Error, "type %0 decomposes into %2 elements, but %select{only |}3%1 names were provided", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_decrement_bool, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot decrement expression of type bool", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_deduced_class_template_compound_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot %select{form pointer to|form reference to|form array of|form function returning|use parentheses when declaring variable with}0 deduced class template specialization type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_deduced_class_template_ctor_ambiguous, CLASS_ERROR, (unsigned)diag::Severity::Error, "ambiguous deduction for template arguments of %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_deduced_class_template_ctor_no_viable, CLASS_ERROR, (unsigned)diag::Severity::Error, "no viable constructor or deduction guide for deduction of template arguments of %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_deduced_class_template_deleted, CLASS_ERROR, (unsigned)diag::Severity::Error, "class template argument deduction for %0 selected a deleted constructor", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_deduced_class_template_explicit, CLASS_ERROR, (unsigned)diag::Severity::Error, "class template argument deduction for %0 selected an explicit %select{constructor|deduction guide}1 for copy-list-initialization", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_deduced_class_template_incomplete, CLASS_ERROR, (unsigned)diag::Severity::Error, "template %0 has no definition and no %select{|viable }1deduction guides for deduction of template arguments", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_deduced_non_class_template_specialization_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{<error>|function template|variable template|alias template|template template parameter|template}0 %1 requires template arguments; argument deduction only allowed for class templates", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_deduced_non_type_template_arg_type_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "deduced non-type template argument does not have the same type as the corresponding template parameter%diff{ ($ vs $)|}0,1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_deduced_return_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "deduced return types are a C++14 extension", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_deduction_guide_bad_trailing_return_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "deduced type %1 of deduction guide is not %select{|written as }2a specialization of template %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_deduction_guide_defines_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "deduction guide cannot have a function definition", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_deduction_guide_explicit_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "deduction guide is %select{not |}0declared 'explicit' but previous declaration was%select{ not|}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_deduction_guide_invalid_specifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "deduction guide cannot be declared '%0'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_deduction_guide_name_not_class_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot specify deduction guide for %select{<error>|function template|variable template|alias template|template template parameter|dependent template name}0 %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_deduction_guide_no_trailing_return_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "deduction guide declaration without trailing return type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_deduction_guide_specialized, CLASS_ERROR, (unsigned)diag::Severity::Error, "deduction guide cannot be %select{explicitly instantiated|explicitly specialized}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_deduction_guide_template_not_deducible, CLASS_ERROR, (unsigned)diag::Severity::Error, "deduction guide template contains %select{a template parameter|template parameters}0 that cannot be deduced", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_deduction_guide_with_complex_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot specify any part of a return type in the declaration of a deduction guide", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_deduction_guide_wrong_access, CLASS_ERROR, (unsigned)diag::Severity::Error, "deduction guide has different access from the corresponding member template", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_deduction_guide_wrong_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "deduction guide must be declared in the same scope as template %q0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_deep_exception_specs_differ, CLASS_ERROR, (unsigned)diag::Severity::Error, "exception specifications of %select{return|argument}0 types differ", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_default_arg_in_partial_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "default template argument in a class template partial specialization", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_default_arg_makes_ctor_special, CLASS_ERROR, (unsigned)diag::Severity::Error, "addition of default argument on redeclaration makes this constructor a %select{default|copy|move}0 constructor", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_default_init_const, CLASS_ERROR, (unsigned)diag::Severity::Error, "default initialization of an object of const type %0%select{| without a user-provided default constructor}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_default_not_in_switch, CLASS_ERROR, (unsigned)diag::Severity::Error, "'default' statement not in switch statement", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_defaulted_copy_assign_not_ref, CLASS_ERROR, (unsigned)diag::Severity::Error, "the parameter for an explicitly-defaulted copy assignment operator must be an lvalue reference type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_defaulted_special_member_copy_const_param, CLASS_ERROR, (unsigned)diag::Severity::Error, "the parameter for this explicitly-defaulted copy %select{constructor|assignment operator}0 is const, but a member or base requires it to be non-const", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_defaulted_special_member_move_const_param, CLASS_ERROR, (unsigned)diag::Severity::Error, "the parameter for an explicitly-defaulted move %select{constructor|assignment operator}0 may not be const", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_defaulted_special_member_params, CLASS_ERROR, (unsigned)diag::Severity::Error, "an explicitly-defaulted %select{|copy |move }0constructor cannot have default arguments", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_defaulted_special_member_quals, CLASS_ERROR, (unsigned)diag::Severity::Error, "an explicitly-defaulted %select{copy|move}0 assignment operator may not have 'const'%select{, 'constexpr'|}1 or 'volatile' qualifiers", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_defaulted_special_member_return_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicitly-defaulted %select{copy|move}0 assignment operator must return %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_defaulted_special_member_variadic, CLASS_ERROR, (unsigned)diag::Severity::Error, "an explicitly-defaulted %select{|copy |move }0constructor cannot be variadic", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_defaulted_special_member_volatile_param, CLASS_ERROR, (unsigned)diag::Severity::Error, "the parameter for an explicitly-defaulted %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 may not be volatile", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_definition_of_explicitly_defaulted_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "definition of explicitly defaulted %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor|function}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_definition_of_implicitly_declared_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "definition of implicitly declared %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor|function}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_delegating_ctor, CLASS_ERROR, (unsigned)diag::Severity::Error, "delegating constructors are permitted only in C++11", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_delegating_initializer_alone, CLASS_ERROR, (unsigned)diag::Severity::Error, "an initializer for a delegating constructor must appear alone", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_delete_explicit_conversion, CLASS_ERROR, (unsigned)diag::Severity::Error, "converting delete expression from type %0 to type %1 invokes an explicit conversion function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_delete_incomplete_class_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "deleting incomplete class type %0; no conversions to pointer type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_delete_operand, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot delete expression of type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_deleted_decl_not_first, CLASS_ERROR, (unsigned)diag::Severity::Error, "deleted definition must be first declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_deleted_function_use, CLASS_ERROR, (unsigned)diag::Severity::Error, "attempt to use a deleted function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_deleted_inherited_ctor_use, CLASS_ERROR, (unsigned)diag::Severity::Error, "constructor inherited by %0 from base class %1 is implicitly deleted", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_deleted_main, CLASS_ERROR, (unsigned)diag::Severity::Error, "'main' is not allowed to be deleted", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_deleted_override, CLASS_ERROR, (unsigned)diag::Severity::Error, "deleted function %0 cannot override a non-deleted function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_dependent_deduced_tst, CLASS_ERROR, (unsigned)diag::Severity::Error, "typename specifier refers to %select{class template|function template|variable template|alias template|template template parameter|template}0 member in %1; argument deduction not allowed here", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_dependent_function_template_spec_no_match, CLASS_ERROR, (unsigned)diag::Severity::Error, "no candidate function template was found for dependent friend function template specialization", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_dependent_nested_name_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "nested name specifier for a declaration cannot depend on a template parameter", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_dependent_non_type_arg_in_partial_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "type of specialized non-type template argument depends on a template parameter of the partial specialization", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_dependent_tag_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{declaration|definition}0 of %select{struct|interface|union|class|enum}1 in a dependent scope", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_dependent_typed_non_type_arg_in_partial_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-type template argument specializes a template parameter with dependent type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_dereference_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "dereference of pointer to incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_designated_init_attr_non_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "'objc_designated_initializer' attribute only applies to init methods of interface or class extension declarations", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_designator_for_scalar_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "designator in initializer for scalar type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_designator_into_flexible_array_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "designator into flexible array member subobject", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_destroy_attr_on_non_static_var, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{no_destroy|always_destroy}0 attribute can only be applied to a variable with static or thread storage duration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_destroying_operator_delete_not_usual, CLASS_ERROR, (unsigned)diag::Severity::Error, "destroying operator delete can have only an optional size and optional alignment parameter", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_destructor_cannot_be, CLASS_ERROR, (unsigned)diag::Severity::Error, "destructor cannot be declared '%0'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_destructor_class_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected the class name after '~' to name a destructor", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_destructor_expr_type_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "destructor type %0 in object destruction expression does not match the type %1 of the object being destroyed", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_destructor_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected the class name after '~' to name the enclosing class", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_destructor_not_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "destructor must be a non-static member function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_destructor_redeclared, CLASS_ERROR, (unsigned)diag::Severity::Error, "destructor cannot be redeclared", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_destructor_return_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "destructor cannot have a return type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_destructor_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "destructor cannot be declared as a template", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_destructor_typedef_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "destructor cannot be declared using a %select{typedef|type alias}1 %0 of the class name", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_destructor_variadic, CLASS_ERROR, (unsigned)diag::Severity::Error, "destructor cannot be variadic", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_destructor_with_params, CLASS_ERROR, (unsigned)diag::Severity::Error, "destructor cannot have any parameters", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_device_static_local_var, CLASS_ERROR, (unsigned)diag::Severity::Error, "within a %select{__device__|__global__|__host__|__host__ __device__}0 function, only __shared__ variables or const variables without device memory qualifier may be marked 'static'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_diagnose_if_invalid_diagnostic_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid diagnostic type for 'diagnose_if'; use \"error\" or \"warning\" instead", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_diagnose_if_succeeded, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_different_asm_label, CLASS_ERROR, (unsigned)diag::Severity::Error, "conflicting asm label", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_different_language_linkage, CLASS_ERROR, (unsigned)diag::Severity::Error, "declaration of %0 has a different language linkage", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_different_pass_object_size_params, CLASS_ERROR, (unsigned)diag::Severity::Error, "conflicting pass_object_size attributes on parameters", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_different_return_type_for_overriding_virtual_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "virtual function %0 has a different return type %diff{($) than the function it overrides (which has return type $)|than the function it overrides}1,2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_dimension_expr_not_constant_integer, CLASS_ERROR, (unsigned)diag::Severity::Error, "dimension expression does not evaluate to a constant unsigned int", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_distant_exception_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "exception specifications are not allowed beyond a single level of indirection", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_downcast_from_inaccessible_base, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot cast %select{private|protected}2 base class %1 to %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_dtor_expr_without_call, CLASS_ERROR, (unsigned)diag::Severity::Error, "reference to %select{destructor|pseudo-destructor}0 must be called%select{|; did you mean to call it with no arguments?}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_dup_implementation_category, CLASS_ERROR, (unsigned)diag::Severity::Error, "reimplementation of category %1 for class %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_dup_implementation_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "reimplementation of class %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_duplicate_base_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "base class %0 specified more than once as a direct base class", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_duplicate_case, CLASS_ERROR, (unsigned)diag::Severity::Error, "duplicate case value '%0'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_duplicate_case_differing_expr, CLASS_ERROR, (unsigned)diag::Severity::Error, "duplicate case value: '%0' and '%1' both equal '%2'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_duplicate_class_def, CLASS_ERROR, (unsigned)diag::Severity::Error, "duplicate interface definition for class %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_duplicate_ivar_declaration, CLASS_ERROR, (unsigned)diag::Severity::Error, "instance variable is already declared", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_duplicate_ivar_use, CLASS_ERROR, (unsigned)diag::Severity::Error, "synthesized properties %0 and %1 both claim instance variable %2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_duplicate_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "duplicate member %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_duplicate_method_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "duplicate declaration of method %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_duplicate_property, CLASS_ERROR, (unsigned)diag::Severity::Error, "property has a previous declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_dynamic_property_ivar_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "dynamic property cannot have instance variable specification", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_dynamic_var_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_early_catch_all, CLASS_ERROR, (unsigned)diag::Severity::Error, "catch-all handler must come last", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ellipsis_first_param, CLASS_ERROR, (unsigned)diag::Severity::Error, "ISO C requires a named parameter before '...'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ellipsis_in_declarator_not_parameter, CLASS_ERROR, (unsigned)diag::Severity::Error, "only function and template parameters can be parameter packs", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_empty_scalar_initializer, CLASS_ERROR, (unsigned)diag::Severity::Error, "scalar initializer cannot be empty", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_enum_class_reference, CLASS_ERROR, (unsigned)diag::Severity::Error, "reference to %select{|scoped }0enumeration must use 'enum' not 'enum class'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_enum_invalid_underlying, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-integral type %0 is an invalid underlying type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_enum_mode_vector_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "mode %0 is not supported for enumeration types", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_enum_redeclare_fixed_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "enumeration previously declared with %select{non|}0fixed underlying type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_enum_redeclare_scoped_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "enumeration previously declared as %select{un|}0scoped", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_enum_redeclare_type_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "enumeration redeclared with different underlying type %0 (was %1)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_enumerator_does_not_exist, CLASS_ERROR, (unsigned)diag::Severity::Error, "enumerator %0 does not exist in instantiation of %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_enumerator_too_large, CLASS_ERROR, (unsigned)diag::Severity::Error, "enumerator value is not representable in the underlying type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_enumerator_wrapped, CLASS_ERROR, (unsigned)diag::Severity::Error, "enumerator value %0 is not representable in the underlying type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_event_t_addr_space_qual, CLASS_ERROR, (unsigned)diag::Severity::Error, "the event_t type can only be used with __private address space qualifier", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_exception_spec_cycle, CLASS_ERROR, (unsigned)diag::Severity::Error, "exception specification of %0 uses itself", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_exception_spec_in_typedef, CLASS_ERROR, (unsigned)diag::Severity::Error, "exception specifications are not allowed in %select{typedefs|type aliases}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_exception_spec_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "exception specification needed for member of incomplete class %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_exception_spec_not_parsed, CLASS_ERROR, (unsigned)diag::Severity::Error, "exception specification is not available until end of class definition", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_exceptions_disabled, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot use '%0' with exceptions disabled", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_excess_initializers, CLASS_ERROR, (unsigned)diag::Severity::Error, "excess elements in %select{array|vector|scalar|union|struct}0 initializer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_excess_initializers_in_char_array_initializer, CLASS_ERROR, (unsigned)diag::Severity::Error, "excess elements in char array initializer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_expected_class_or_namespace, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 is not a class%select{ or namespace|, namespace, or enumeration}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_expected_kernel_void_return_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "kernel must have void return type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_explicit_instantiation_ambiguous, CLASS_ERROR, (unsigned)diag::Severity::Error, "partial ordering for explicit instantiation of %0 is ambiguous", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_explicit_instantiation_constexpr, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit instantiation cannot be 'constexpr'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_explicit_instantiation_data_member_not_instantiated, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit instantiation refers to static data member %q0 that is not an instantiation", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_explicit_instantiation_declaration_after_definition, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit instantiation declaration (with 'extern') follows explicit instantiation definition (without 'extern')", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_explicit_instantiation_duplicate, CLASS_ERROR, (unsigned)diag::Severity::Error, "duplicate explicit instantiation of %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_explicit_instantiation_in_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit instantiation of %0 in class scope", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_explicit_instantiation_inline, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit instantiation cannot be 'inline'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_explicit_instantiation_member_function_not_instantiated, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit instantiation refers to member function %q0 that is not an instantiation", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_explicit_instantiation_must_be_global, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit instantiation of %0 must occur at global scope", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_explicit_instantiation_nontemplate_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit instantiation of non-templated type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_explicit_instantiation_not_known, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit instantiation of %0 does not refer to a function template, variable template, member function, member class, or static data member", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_explicit_instantiation_of_typedef, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit instantiation of typedef %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_explicit_instantiation_out_of_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit instantiation of %0 not in a namespace enclosing %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_explicit_instantiation_requires_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit instantiation declaration requires a name", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_explicit_instantiation_storage_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit instantiation cannot have a storage class", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_explicit_instantiation_undefined_func_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit instantiation of undefined function template %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_explicit_instantiation_undefined_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit instantiation of undefined %select{member class|member function|static data member}0 %1 of class template %2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_explicit_instantiation_undefined_var_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit instantiation of undefined variable template %q0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_explicit_instantiation_unqualified_wrong_namespace, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit instantiation of %q0 must occur in namespace %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_explicit_instantiation_without_template_id, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit instantiation of %q0 must specify a template argument list", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_explicit_non_ctor_or_conv_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "'explicit' can only be applied to a constructor or conversion function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_explicit_non_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "'explicit' can only appear on non-static member functions", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_explicit_out_of_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "'explicit' can only be specified inside the class definition", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_explicit_specialization_inconsistent_storage_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit specialization has extraneous, inconsistent storage class '%select{none|extern|static|__private_extern__|auto|register}0'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_export_not_in_module_interface, CLASS_ERROR, (unsigned)diag::Severity::Error, "export declaration can only be used within a module interface unit after the module declaration", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_export_within_export, CLASS_ERROR, (unsigned)diag::Severity::Error, "export declaration appears within another export declaration", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_expr_not_cce, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{case value|enumerator value|non-type template argument|array size|constexpr if condition}0 is not a constant expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_expr_not_ice, CLASS_ERROR, (unsigned)diag::Severity::Error, "expression is not an %select{integer|integral}0 constant expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_expr_not_string_literal, CLASS_ERROR, (unsigned)diag::Severity::Error, "expression is not a string literal", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ext_vector_component_exceeds_length, CLASS_ERROR, (unsigned)diag::Severity::Error, "vector component access exceeds type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ext_vector_component_name_illegal, CLASS_ERROR, (unsigned)diag::Severity::Error, "illegal vector component name '%0'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_extern_c_global_conflict, CLASS_ERROR, (unsigned)diag::Severity::Error, "declaration of %1 %select{with C language linkage|in global scope}0 conflicts with declaration %select{in global scope|with C language linkage}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_extern_non_extern, CLASS_ERROR, (unsigned)diag::Severity::Error, "extern declaration of %0 follows non-extern declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_falloff_nonvoid_block, CLASS_ERROR, (unsigned)diag::Severity::Error, "control reaches end of non-void block", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_fallthrough_attr_invalid_placement, CLASS_ERROR, (unsigned)diag::Severity::Error, "fallthrough annotation does not directly precede switch label", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_fallthrough_attr_outside_switch, CLASS_ERROR, (unsigned)diag::Severity::Error, "fallthrough annotation is outside switch statement", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_fallthrough_attr_wrong_target, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute is only allowed on empty statements", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_field_declared_as_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "field %0 declared as a function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_field_designator_non_aggr, CLASS_ERROR, (unsigned)diag::Severity::Error, "field designator cannot initialize a %select{non-struct, non-union|non-class}0 type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_field_designator_nonfield, CLASS_ERROR, (unsigned)diag::Severity::Error, "field designator %0 does not refer to a non-static data member", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_field_designator_unknown, CLASS_ERROR, (unsigned)diag::Severity::Error, "field designator %0 does not refer to any field in type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_field_designator_unknown_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "field designator %0 does not refer to any field in type %1; did you mean %2?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_field_incomplete, CLASS_ERROR, (unsigned)diag::Severity::Error, "field has incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_field_instantiates_to_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "data member instantiated with function type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_field_with_address_space, CLASS_ERROR, (unsigned)diag::Severity::Error, "field may not be qualified with an address space", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_filter_expression_integral, CLASS_ERROR, (unsigned)diag::Severity::Error, "filter expression type should be an integral value not %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_final_function_overridden, CLASS_ERROR, (unsigned)diag::Severity::Error, "declaration of %0 overrides a '%select{final|sealed}1' function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_first_argument_to_cwsc_block_call, CLASS_ERROR, (unsigned)diag::Severity::Error, "first argument to __builtin_call_with_static_chain must not be a block call", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_first_argument_to_cwsc_builtin_call, CLASS_ERROR, (unsigned)diag::Severity::Error, "first argument to __builtin_call_with_static_chain must not be a builtin call", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_first_argument_to_cwsc_not_call, CLASS_ERROR, (unsigned)diag::Severity::Error, "first argument to __builtin_call_with_static_chain must be a non-member call expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_first_argument_to_cwsc_pdtor_call, CLASS_ERROR, (unsigned)diag::Severity::Error, "first argument to __builtin_call_with_static_chain must not be a pseudo-destructor call", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_first_argument_to_va_arg_not_of_type_va_list, CLASS_ERROR, (unsigned)diag::Severity::Error, "first argument to 'va_arg' is of type %0 and not 'va_list'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_flexible_array_arc_retainable, CLASS_ERROR, (unsigned)diag::Severity::Error, "ARC forbids flexible array members with retainable object type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_flexible_array_empty_aggregate, CLASS_ERROR, (unsigned)diag::Severity::Error, "flexible array member %0 not allowed in otherwise empty %select{struct|interface|union|class|enum}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_flexible_array_has_nontrivial_dtor, CLASS_ERROR, (unsigned)diag::Severity::Error, "flexible array member %0 of type %1 with non-trivial destruction", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_flexible_array_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "initialization of flexible array member is not allowed", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_flexible_array_init_needs_braces, CLASS_ERROR, (unsigned)diag::Severity::Error, "flexible array requires brace-enclosed initializer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_flexible_array_not_at_end, CLASS_ERROR, (unsigned)diag::Severity::Error, "flexible array member %0 with type %1 is not at the end of %select{struct|interface|union|class|enum}2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_flexible_array_union, CLASS_ERROR, (unsigned)diag::Severity::Error, "flexible array member %0 in a union is not allowed", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_flexible_array_virtual_base, CLASS_ERROR, (unsigned)diag::Severity::Error, "flexible array member %0 not allowed in %select{struct|interface|union|class|enum}1 which has a virtual base class", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_fold_expression_bad_operand, CLASS_ERROR, (unsigned)diag::Severity::Error, "expression not permitted as operand of fold expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_fold_expression_empty, CLASS_ERROR, (unsigned)diag::Severity::Error, "unary fold expression has empty expansion for operator '%0' with no fallback value", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_fold_expression_packs_both_sides, CLASS_ERROR, (unsigned)diag::Severity::Error, "binary fold expression has unexpanded parameter packs in both operands", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_for_range_decl_must_be_var, CLASS_ERROR, (unsigned)diag::Severity::Error, "for range declaration must declare a variable", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_for_range_deduction_failure, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot use type %0 as a range", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_for_range_dereference, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid range expression of type %0; did you mean to dereference it with '*'?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_for_range_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot use incomplete type %0 as a range", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_for_range_invalid, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid range expression of type %0; no viable '%select{begin|end}1' function available", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_for_range_iter_deduction_failure, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot use type %0 as an iterator", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_for_range_storage_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "loop variable %0 may not be declared %select{'extern'|'static'|'__private_extern__'|'auto'|'register'|'constexpr'}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_format_attribute_implicit_this_format_string, CLASS_ERROR, (unsigned)diag::Severity::Error, "format attribute cannot specify the implicit this argument as the format string", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_format_attribute_not, CLASS_ERROR, (unsigned)diag::Severity::Error, "format argument not %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_format_attribute_requires_variadic, CLASS_ERROR, (unsigned)diag::Severity::Error, "format attribute requires variadic function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_format_attribute_result_not, CLASS_ERROR, (unsigned)diag::Severity::Error, "function does not return %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_format_strftime_third_parameter, CLASS_ERROR, (unsigned)diag::Severity::Error, "strftime format attribute requires 3rd parameter to be 0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_fortify_std_lib_bad_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "'fortify_stdlib' attribute applied to an unknown function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_forward_ref_enum, CLASS_ERROR, (unsigned)diag::Severity::Error, "ISO C++ forbids forward references to 'enum' types", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_forward_superclass, CLASS_ERROR, (unsigned)diag::Severity::Error, "attempting to use the forward class %0 as superclass of %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_friend_decl_does_not_match, CLASS_ERROR, (unsigned)diag::Severity::Error, "friend declaration of %0 does not match any declaration in %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_friend_decl_with_def_arg_must_be_def, CLASS_ERROR, (unsigned)diag::Severity::Error, "friend declaration specifying a default argument must be a definition", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_friend_decl_with_def_arg_redeclared, CLASS_ERROR, (unsigned)diag::Severity::Error, "friend declaration specifying a default argument must be the only declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_friend_def_in_local_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "friend function cannot be defined in a local class", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_friend_is_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "friends cannot be members of the declaring class", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_friend_not_first_in_declaration, CLASS_ERROR, (unsigned)diag::Severity::Error, "'friend' must appear first in a non-function declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_func_def_incomplete_result, CLASS_ERROR, (unsigned)diag::Severity::Error, "incomplete result type %0 in function definition", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_func_returning_array_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "function cannot return %select{array|function}0 type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_func_returning_qualified_void, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "function cannot return qualified void type %0", 554, SFINAE_Suppress, false, false, 2)
+DIAG(err_function_attribute_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "function declared with %0 attribute was previously declared without the %0 attribute", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_function_concept_bool_ret, CLASS_ERROR, (unsigned)diag::Severity::Error, "declared return type of function concept must be 'bool'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_function_concept_exception_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "function concept cannot have exception specification", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_function_concept_not_defined, CLASS_ERROR, (unsigned)diag::Severity::Error, "function concept declaration must be a definition", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_function_concept_with_params, CLASS_ERROR, (unsigned)diag::Severity::Error, "function concept cannot have any parameters", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_function_marked_override_not_overriding, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 marked 'override' but does not override any member functions", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_function_parameter_pack_without_parameter_packs, CLASS_ERROR, (unsigned)diag::Severity::Error, "type %0 of function parameter pack does not contain any unexpanded parameter packs", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_function_template_partial_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "function template partial specialization is not allowed", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_function_template_spec_ambiguous, CLASS_ERROR, (unsigned)diag::Severity::Error, "function template specialization %0 ambiguously refers to more than one function template; explicitly specify%select{| additional}1 template arguments to identify a particular function template", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_function_template_spec_no_match, CLASS_ERROR, (unsigned)diag::Severity::Error, "no function template matches function template specialization %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_gc_weak_property_strong_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "weak attribute declared on a __strong type property in GC mode", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_generic_sel_multi_match, CLASS_ERROR, (unsigned)diag::Severity::Error, "controlling expression type %0 compatible with %1 generic association types", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_generic_sel_no_match, CLASS_ERROR, (unsigned)diag::Severity::Error, "controlling expression type %0 not compatible with any generic association type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_getter_not_found, CLASS_ERROR, (unsigned)diag::Severity::Error, "no getter method for read from property", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_global_call_not_config, CLASS_ERROR, (unsigned)diag::Severity::Error, "call to global function %0 not configured", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_goto_into_protected_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot jump from this goto statement to its label", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_goto_ms_asm_label, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot jump from this goto statement to label %0 inside an inline assembly block", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_half_const_requires_fp16, CLASS_ERROR, (unsigned)diag::Severity::Error, "half precision constant requires cl_khr_fp16", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_hexagon_builtin_requires_hvx, CLASS_ERROR, (unsigned)diag::Severity::Error, "builtin requires HVX", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_hexagon_builtin_unsupported_cpu, CLASS_ERROR, (unsigned)diag::Severity::Error, "builtin is not supported on this CPU", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_hexagon_builtin_unsupported_hvx, CLASS_ERROR, (unsigned)diag::Severity::Error, "builtin is not supported on this version of HVX", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_iboutletcollection_builtintype, CLASS_ERROR, (unsigned)diag::Severity::Error, "type argument of iboutletcollection attribute cannot be a builtin type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_iboutletcollection_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid type %0 as argument of iboutletcollection attribute", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ice_ambiguous_conversion, CLASS_ERROR, (unsigned)diag::Severity::Error, "ambiguous conversion from type %0 to an integral or unscoped enumeration type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ice_explicit_conversion, CLASS_ERROR, (unsigned)diag::Severity::Error, "integral constant expression requires explicit conversion from %0 to %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ice_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "integral constant expression has incomplete class type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ice_not_integral, CLASS_ERROR, (unsigned)diag::Severity::Error, "integral constant expression must have integral or unscoped enumeration type, not %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ice_too_large, CLASS_ERROR, (unsigned)diag::Severity::Error, "integer constant expression evaluates to value %0 that cannot be represented in a %1-bit %select{signed|unsigned}2 integer type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ident_in_dtor_not_a_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "identifier %0 in object destruction expression does not name a type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ident_list_in_fn_declaration, CLASS_ERROR, (unsigned)diag::Severity::Error, "a parameter list without types is only allowed in a function definition", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_illegal_container_subscripting_op, CLASS_ERROR, (unsigned)diag::Severity::Error, "illegal operation on Objective-C container subscripting", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_illegal_decl_array_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "array has incomplete element type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_illegal_decl_array_of_auto, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' declared as array of %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_illegal_decl_array_of_functions, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' declared as array of functions of type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_illegal_decl_array_of_references, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' declared as array of references of type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_illegal_decl_mempointer_in_nonclass, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' does not point into a class", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_illegal_decl_mempointer_to_reference, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' declared as a member pointer to a reference of type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_illegal_decl_mempointer_to_void, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' declared as a member pointer to void", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_illegal_decl_pointer_to_reference, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' declared as a pointer to a reference of type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_illegal_initializer, CLASS_ERROR, (unsigned)diag::Severity::Error, "illegal initializer (only variables can be initialized)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_illegal_initializer_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "illegal initializer type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_illegal_message_expr_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "Objective-C message has incomplete result type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_illegal_qualifiers_on_catch_parm, CLASS_ERROR, (unsigned)diag::Severity::Error, "illegal qualifiers on @catch parameter", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_illegal_union_or_anon_struct_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{anonymous struct|union}0 member %1 has a non-trivial %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_imaginary_not_supported, CLASS_ERROR, (unsigned)diag::Severity::Error, "imaginary types are not supported", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_impcast_complex_scalar, CLASS_ERROR, (unsigned)diag::Severity::Error, "implicit conversion from %0 to %1 is not permitted in C++", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_implicit_coroutine_std_nothrow_type_not_found, CLASS_ERROR, (unsigned)diag::Severity::Error, "std::nothrow was not found; include <new> before defining a coroutine which uses get_return_object_on_allocation_failure()", 0, SFINAE_SubstitutionFailure, false, true, 14)
+DIAG(err_implicit_empty_initializer, CLASS_ERROR, (unsigned)diag::Severity::Error, "initializer for aggregate with no elements requires explicit braces", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_implicit_instantiate_member_undefined, CLASS_ERROR, (unsigned)diag::Severity::Error, "implicit instantiation of undefined member %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_implied_comparison_category_type_not_found, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot deduce return type of 'operator<=>' because type '%0' was not found; include <compare>", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_implied_coroutine_type_not_found, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 type was not found; include <experimental/coroutine> before defining a coroutine", 0, SFINAE_SubstitutionFailure, false, true, 14)
+DIAG(err_implied_std_coroutine_traits_promise_type_not_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "this function cannot be a coroutine: %0 is not a class", 0, SFINAE_SubstitutionFailure, false, true, 14)
+DIAG(err_implied_std_coroutine_traits_promise_type_not_found, CLASS_ERROR, (unsigned)diag::Severity::Error, "this function cannot be a coroutine: %q0 has no member named 'promise_type'", 0, SFINAE_SubstitutionFailure, false, true, 14)
+DIAG(err_implied_std_initializer_list_not_found, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot deduce type of initializer list because std::initializer_list was not found; include <initializer_list>", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_in_class_initializer_bad_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "static data member of type %0 must be initialized out of line", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_in_class_initializer_cycle, CLASS_ERROR, (unsigned)diag::Severity::Error, "default member initializer for %0 uses itself", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_in_class_initializer_literal_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "in-class initializer for static data member of type %0 requires 'constexpr' specifier", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_in_class_initializer_non_const, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-const static data member must be initialized out of line", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_in_class_initializer_non_constant, CLASS_ERROR, (unsigned)diag::Severity::Error, "in-class initializer for static data member is not a constant expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_in_class_initializer_not_yet_parsed, CLASS_ERROR, (unsigned)diag::Severity::Error, "default member initializer for %1 needed within definition of enclosing class %0 outside of member functions", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_in_class_initializer_volatile, CLASS_ERROR, (unsigned)diag::Severity::Error, "static const volatile data member must be initialized out of line", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_incompatible_exception_specs, CLASS_ERROR, (unsigned)diag::Severity::Error, "target exception specification is not superset of source", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_incomplete_base_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "base class has incomplete type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_incomplete_in_exception_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{|pointer to |reference to }0incomplete type %1 is not allowed in exception specification", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_incomplete_member_access, CLASS_ERROR, (unsigned)diag::Severity::Error, "member access into incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_incomplete_nested_name_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "incomplete type %0 named in nested name specifier", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_incomplete_object_call, CLASS_ERROR, (unsigned)diag::Severity::Error, "incomplete type in call to object of type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_incomplete_receiver_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "incomplete receiver type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_incomplete_synthesized_property, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot synthesize property %0 with incomplete type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "incomplete type %0 where a complete type is required", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_incomplete_type_objc_at_encode, CLASS_ERROR, (unsigned)diag::Severity::Error, "'@encode' of incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_incomplete_type_used_in_type_trait_expr, CLASS_ERROR, (unsigned)diag::Severity::Error, "incomplete type %0 used in type trait expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_incomplete_typeid, CLASS_ERROR, (unsigned)diag::Severity::Error, "'typeid' of incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_inconsistent_ivar_count, CLASS_ERROR, (unsigned)diag::Severity::Error, "inconsistent number of instance variables specified", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_incorrect_defaulted_constexpr, CLASS_ERROR, (unsigned)diag::Severity::Error, "defaulted definition of %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 is not constexpr", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_incorrect_defaulted_exception_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "exception specification of explicitly defaulted %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 does not match the calculated one", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_incorrect_number_of_vector_initializers, CLASS_ERROR, (unsigned)diag::Severity::Error, "number of elements must be either one or match the size of the vector", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_increment_decrement_enum, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot %select{decrement|increment}0 expression of enum type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_indirect_goto_in_protected_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot jump from this indirect goto statement to one of its possible targets", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_indirect_goto_without_addrlabel, CLASS_ERROR, (unsigned)diag::Severity::Error, "indirect goto in function with no address-of-label expressions", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_init_capture_deduction_failure, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot deduce type for lambda capture %0 from initializer of type %2", 0, SFINAE_SubstitutionFailure, false, true, 3)
+DIAG(err_init_capture_deduction_failure_from_init_list, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot deduce type for lambda capture %0 from initializer list", 0, SFINAE_SubstitutionFailure, false, true, 3)
+DIAG(err_init_capture_multiple_expressions, CLASS_ERROR, (unsigned)diag::Severity::Error, "initializer for lambda capture %0 contains multiple expressions", 0, SFINAE_SubstitutionFailure, false, true, 3)
+DIAG(err_init_capture_no_expression, CLASS_ERROR, (unsigned)diag::Severity::Error, "initializer missing for lambda capture %0", 0, SFINAE_SubstitutionFailure, false, true, 3)
+DIAG(err_init_capture_paren_braces, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot deduce type for lambda capture %1 from %select{parenthesized|nested}0 initializer list", 0, SFINAE_SubstitutionFailure, false, true, 3)
+DIAG(err_init_conversion_failed, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot initialize %select{a variable|a parameter|return object|statement expression result|an exception object|a member subobject|an array element|a new value|a value|a base class|a constructor delegation|a vector element|a block element|a block element|a complex element|a lambda capture|a compound literal initializer|a related result|a parameter of CF audited function}0 %diff{of type $ with an %select{rvalue|lvalue}2 of type $|with an %select{rvalue|lvalue}2 of incompatible type}1,3%select{|: different classes%diff{ ($ vs $)|}5,6|: different number of parameters (%5 vs %6)|: type mismatch at %ordinal5 parameter%diff{ ($ vs $)|}6,7|: different return type%diff{ ($ vs $)|}5,6|: different qualifiers (%5 vs %6)|: different exception specifications}4", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_init_element_not_constant, CLASS_ERROR, (unsigned)diag::Severity::Error, "initializer element is not a compile-time constant", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_init_for_function_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot create object of function type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_init_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "initialization of incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_init_list_bad_dest_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{|non-aggregate }0type %1 cannot be initialized with an initializer list", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_init_method_bad_return_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "init methods must return an object pointer type, not %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_init_non_aggr_init_list, CLASS_ERROR, (unsigned)diag::Severity::Error, "initialization of non-aggregate type %0 with an initializer list", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_init_objc_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot initialize Objective-C class type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_init_priority_object_attr, CLASS_ERROR, (unsigned)diag::Severity::Error, "can only use 'init_priority' attribute on file-scope definitions of objects of class type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_init_reference_member_uninitialized, CLASS_ERROR, (unsigned)diag::Severity::Error, "reference member of type %0 uninitialized", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_initializer_string_for_char_array_too_long, CLASS_ERROR, (unsigned)diag::Severity::Error, "initializer-string for char array is too long", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_inline_decl_follows_def, CLASS_ERROR, (unsigned)diag::Severity::Error, "inline declaration of %0 follows non-inline definition", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_inline_declaration_block_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "inline declaration of %0 not allowed in block scope", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_inline_main, CLASS_ERROR, (unsigned)diag::Severity::Error, "'main' is not allowed to be declared inline", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_inline_namespace_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-inline namespace cannot be reopened as inline", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_inline_non_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "'inline' can only appear on functions%select{| and non-local variables}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_int_to_block_pointer, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid block pointer conversion %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_integer_sequence_integral_element_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "integer sequences must have integral element type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_integer_sequence_negative_length, CLASS_ERROR, (unsigned)diag::Severity::Error, "integer sequences must have non-negative sequence length", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_internal_linkage_redeclaration, CLASS_ERROR, (unsigned)diag::Severity::Error, "'internal_linkage' attribute does not appear on the first declaration of %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_introducing_special_friend, CLASS_ERROR, (unsigned)diag::Severity::Error, "%plural{[0,2]:must use a qualified name when declaring|3:cannot declare}0 a %select{constructor|destructor|conversion operator|deduction guide}0 as a friend", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_asm_cast_lvalue, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid use of a cast in a inline asm context requiring an l-value: remove the cast or build with -fheinous-gnu-extensions", 0, SFINAE_SubstitutionFailure, false, true, 12)
+DIAG(err_invalid_asm_value_for_constraint, CLASS_ERROR, (unsigned)diag::Severity::Error, "value '%0' out of range for constraint '%1'", 0, SFINAE_SubstitutionFailure, false, true, 12)
+DIAG(err_invalid_astype_of_different_size, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid reinterpretation: sizes of %0 and %1 must match", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_attribute_on_virtual_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute cannot be applied to virtual functions", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_base_in_interface, CLASS_ERROR, (unsigned)diag::Severity::Error, "interface type cannot inherit from %select{struct|non-public interface|class}0 %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_collection_element, CLASS_ERROR, (unsigned)diag::Severity::Error, "collection element of type %0 is not an Objective-C object", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_complex_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "'_Complex %0' is invalid", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_constexpr, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{function parameter|typedef|non-static data member}0 cannot be constexpr", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_constexpr_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-static data member cannot be constexpr%select{; did you intend to make it %select{const|static}0?|}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_constexpr_var_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "constexpr variable declaration must be a definition", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_conversion_between_ext_vectors, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid conversion between ext-vector type %0 and %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_conversion_between_vector_and_integer, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid conversion between vector type %0 and integer type %1 of different size", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_conversion_between_vector_and_scalar, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid conversion between vector type %0 and scalar type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_conversion_between_vectors, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid conversion between vector type%diff{ $ and $|}0,1 of different size", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_cpu_is, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid cpu name for builtin", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_cpu_specific_dispatch_value, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid option '%0' for %select{cpu_specific|cpu_dispatch}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_cpu_supports, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid cpu feature string for builtin", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_decl_spec_combination, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot combine with previous '%0' declaration specifier", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_decl_specifier_in_nontype_parm, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid declaration specifier in template non-type parameter", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_declarator_global_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "definition or redeclaration of %0 cannot name the global scope", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_declarator_in_block, CLASS_ERROR, (unsigned)diag::Severity::Error, "definition or redeclaration of %0 not allowed inside a block", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_declarator_in_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "definition or redeclaration of %0 not allowed inside a function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_declarator_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot define or redeclare %0 here because namespace %1 does not enclose namespace %2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_form_pointer_member_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot create a non-constant pointer to member function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_incomplete_type_use, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid use of incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_mask_type_size, CLASS_ERROR, (unsigned)diag::Severity::Error, "mask type size must be between 1-byte and 8-bytes", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_member_use_in_static_method, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid use of member %0 in static member function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_neon_type_code, CLASS_ERROR, (unsigned)diag::Severity::Error, "incompatible constant for this __builtin_neon function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_non_static_member_use, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid use of non-static data member %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_nsnumber_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 is not a valid literal type for NSNumber", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_pcs, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid PCS type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_pixel_decl_spec_combination, CLASS_ERROR, (unsigned)diag::Severity::Error, "'__pixel' must be preceded by '__vector'. '%0' declaration specifier not allowed here", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_property_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 is not a valid property name (accessing an object of type %1)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_protocol_qualifiers, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid protocol qualifiers on non-ObjC type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_qualified_constructor, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' qualifier is not allowed on a constructor", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_qualified_destructor, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' qualifier is not allowed on a destructor", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_qualified_function_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{non-member function|static member function|deduction guide}0 %select{of type %2 |}1cannot have '%3' qualifier", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_receiver_class_message, CLASS_ERROR, (unsigned)diag::Severity::Error, "receiver type %0 is not an Objective-C class", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_receiver_to_message_super, CLASS_ERROR, (unsigned)diag::Severity::Error, "'super' is only valid in a method body", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_saturation_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "'_Sat' specifier is only valid on '_Fract' or '_Accum', not '%0'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_sign_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' cannot be signed or unsigned", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_super_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid use of '__super', this keyword can only be used inside class or member function scope", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_this_use, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid use of 'this' outside of a non-static member function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_thread, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' is only allowed on variable declarations", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_type_for_program_scope_var, CLASS_ERROR, (unsigned)diag::Severity::Error, "the %0 type cannot be used to declare a program scope variable", 0, SFINAE_SubstitutionFailure, false, true, 17)
+DIAG(err_invalid_use_of_array_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "an array type is not allowed here", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_use_of_function_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "a function type is not allowed here", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_var_template_spec_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "type %2 of %select{explicit instantiation|explicit specialization|partial specialization|redeclaration}0 of %1 does not match expected type %3", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_vector_bool_decl_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot use '%0' with '__vector bool'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_vector_decl_spec_combination, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot combine with previous '%0' declaration specifier. '__vector' must be first", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_vector_double_decl_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "use of 'double' with '__vector' requires VSX support to be enabled (available on POWER7 or later)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_vector_float_decl_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot use 'float' with '__vector'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_vector_long_decl_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot use 'long' with '__vector'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_vector_long_double_decl_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot use 'long double' with '__vector'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_vector_long_long_decl_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "use of 'long long' with '__vector bool' requires VSX support (available on POWER7 or later) or extended Altivec support (available on POWER8 or later) to be enabled", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_width_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%select{|short|long|long long}0 %1' is invalid", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ivar_access_using_property_syntax_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "property %0 not found on object of type %1; did you mean to access instance variable %2?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ivar_in_superclass_use, CLASS_ERROR, (unsigned)diag::Severity::Error, "property %0 attempting to use instance variable %1 declared in super class %2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ivar_reference_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "instance variables cannot be of reference type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ivar_use_in_class_method, CLASS_ERROR, (unsigned)diag::Severity::Error, "instance variable %0 accessed in class method", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_kern_call_not_global_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "kernel call to non-global function %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_kern_is_nonstatic_method, CLASS_ERROR, (unsigned)diag::Severity::Error, "kernel function %0 must be a free function or static member function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_kern_type_not_void_return, CLASS_ERROR, (unsigned)diag::Severity::Error, "kernel function type %0 must have void return type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_kernel_arg_address_space, CLASS_ERROR, (unsigned)diag::Severity::Error, "pointer arguments to kernel functions must reside in '__global', '__constant' or '__local' address space", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_lambda_capture_anonymous_var, CLASS_ERROR, (unsigned)diag::Severity::Error, "unnamed variable cannot be implicitly captured in a lambda expression", 0, SFINAE_SubstitutionFailure, false, true, 3)
+DIAG(err_lambda_capture_default_arg, CLASS_ERROR, (unsigned)diag::Severity::Error, "lambda expression in default argument cannot capture any entity", 0, SFINAE_SubstitutionFailure, false, true, 3)
+DIAG(err_lambda_capture_flexarray_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable %0 with flexible array member cannot be captured in a lambda expression", 0, SFINAE_SubstitutionFailure, false, true, 3)
+DIAG(err_lambda_decl_ref_not_modifiable_lvalue, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot assign to a variable captured by copy in a non-mutable lambda", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_lambda_impcap, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable %0 cannot be implicitly captured in a lambda with no capture-default specified", 0, SFINAE_SubstitutionFailure, false, true, 3)
+DIAG(err_lambda_in_constant_expression, CLASS_ERROR, (unsigned)diag::Severity::Error, "a lambda expression may not appear inside of a constant expression", 0, SFINAE_SubstitutionFailure, false, true, 3)
+DIAG(err_lambda_in_invalid_context, CLASS_ERROR, (unsigned)diag::Severity::Error, "a lambda expression cannot appear in this context", 0, SFINAE_SubstitutionFailure, false, true, 3)
+DIAG(err_lambda_incomplete_result, CLASS_ERROR, (unsigned)diag::Severity::Error, "incomplete result type %0 in lambda expression", 0, SFINAE_SubstitutionFailure, false, true, 3)
+DIAG(err_lambda_return_init_list, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot deduce lambda return type from initializer list", 0, SFINAE_SubstitutionFailure, false, true, 3)
+DIAG(err_lambda_unevaluated_operand, CLASS_ERROR, (unsigned)diag::Severity::Error, "lambda expression in an unevaluated operand", 0, SFINAE_SubstitutionFailure, false, true, 3)
+DIAG(err_language_linkage_spec_not_ascii, CLASS_ERROR, (unsigned)diag::Severity::Error, "string literal in language linkage specifier cannot have an encoding-prefix", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_language_linkage_spec_unknown, CLASS_ERROR, (unsigned)diag::Severity::Error, "unknown linkage language", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_late_asm_label_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot apply asm label to %select{variable|function}0 after its first use", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_lifetimebound_ctor_dtor, CLASS_ERROR, (unsigned)diag::Severity::Error, "'lifetimebound' attribute cannot be applied to a %select{constructor|destructor}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_lifetimebound_no_object_param, CLASS_ERROR, (unsigned)diag::Severity::Error, "'lifetimebound' attribute cannot be applied; %select{static |non-}0member function has no implicit object parameter", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_list_init_in_parens, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot initialize %select{non-class|reference}0 type %1 with a parenthesized initializer list", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_literal_operator_bad_param_count, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-template literal operator must have one or two parameters", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_literal_operator_default_argument, CLASS_ERROR, (unsigned)diag::Severity::Error, "literal operator cannot have a default argument", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_literal_operator_extern_c, CLASS_ERROR, (unsigned)diag::Severity::Error, "literal operator must have C++ linkage", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_literal_operator_id_outside_namespace, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-namespace scope '%0' cannot have a literal operator member", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_literal_operator_invalid_param, CLASS_ERROR, (unsigned)diag::Severity::Error, "parameter of literal operator must have type 'unsigned long long', 'long double', 'char', 'wchar_t', 'char16_t', 'char32_t', or 'const char *'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_literal_operator_outside_namespace, CLASS_ERROR, (unsigned)diag::Severity::Error, "literal operator %0 must be in a namespace or global scope", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_literal_operator_param, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid literal operator parameter type %0, did you mean %1?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_literal_operator_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "template parameter list for literal operator must be either 'char...' or 'typename T, T...'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_literal_operator_template_with_params, CLASS_ERROR, (unsigned)diag::Severity::Error, "literal operator template cannot have any parameters", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_local_cant_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "'__local' variable cannot have an initializer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_lvalue_reference_bind_to_initlist, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{non-const|volatile}0 lvalue reference to type %1 cannot bind to an initializer list temporary", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_lvalue_reference_bind_to_temporary, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{non-const|volatile}0 lvalue reference %diff{to type $ cannot bind to a temporary of type $|cannot bind to incompatible temporary}1,2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_lvalue_reference_bind_to_unrelated, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{non-const|volatile}0 lvalue reference %diff{to type $ cannot bind to a value of unrelated type $|cannot bind to a value of unrelated type}1,2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_lvalue_to_rvalue_ref, CLASS_ERROR, (unsigned)diag::Severity::Error, "rvalue reference %diff{to type $ cannot bind to lvalue of type $|cannot bind to incompatible lvalue}0,1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_machine_mode, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{unknown|unsupported}0 machine mode %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_main_arg_wrong, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{first|second|third|fourth}0 parameter of 'main' (%select{argument count|argument array|environment|platform-specific data}0) must be of type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_main_global_variable, CLASS_ERROR, (unsigned)diag::Severity::Error, "main cannot be declared as global variable", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_main_returns_nonint, CLASS_ERROR, (unsigned)diag::Severity::Error, "'main' must return 'int'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_main_surplus_args, CLASS_ERROR, (unsigned)diag::Severity::Error, "too many parameters (%0) for 'main': must be 0, 2, or 3", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_mainlike_template_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 cannot be a template", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_malformed_std_coroutine_handle, CLASS_ERROR, (unsigned)diag::Severity::Error, "std::experimental::coroutine_handle must be a class template", 0, SFINAE_SubstitutionFailure, false, true, 14)
+DIAG(err_malformed_std_coroutine_traits, CLASS_ERROR, (unsigned)diag::Severity::Error, "'std::experimental::coroutine_traits' must be a class template", 0, SFINAE_SubstitutionFailure, false, true, 14)
+DIAG(err_malformed_std_initializer_list, CLASS_ERROR, (unsigned)diag::Severity::Error, "std::initializer_list must be a class template with a single type parameter", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_malformed_std_nothrow, CLASS_ERROR, (unsigned)diag::Severity::Error, "std::nothrow must be a valid variable declaration", 0, SFINAE_SubstitutionFailure, false, true, 14)
+DIAG(err_maybe_falloff_nonvoid_block, CLASS_ERROR, (unsigned)diag::Severity::Error, "control may reach end of non-void block", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_mem_init_not_member_or_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "member initializer %0 does not name a non-static data member or base class", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_mem_init_not_member_or_class_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "initializer %0 does not name a non-static data member or base class; did you mean the %select{base class|member}1 %2?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_member_call_without_object, CLASS_ERROR, (unsigned)diag::Severity::Error, "call to non-static member function without an object argument", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_member_decl_does_not_match, CLASS_ERROR, (unsigned)diag::Severity::Error, "out-of-line %select{declaration|definition}2 of %0 does not match any declaration in %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_member_decl_does_not_match_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "out-of-line %select{declaration|definition}2 of %0 does not match any declaration in %1; did you mean %3?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_member_def_does_not_match_ret_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "return type of out-of-line definition of %q0 differs from that in the declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_member_def_undefined_record, CLASS_ERROR, (unsigned)diag::Severity::Error, "out-of-line definition of %0 from class %1 without definition", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_member_extra_qualification, CLASS_ERROR, (unsigned)diag::Severity::Error, "extra qualification on member %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_member_function_call_bad_cvr, CLASS_ERROR, (unsigned)diag::Severity::Error, "'this' argument to member function %0 has type %1, but function is not marked %select{const|restrict|const or restrict|volatile|const or volatile|volatile or restrict|const, volatile, or restrict}2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_member_function_call_bad_ref, CLASS_ERROR, (unsigned)diag::Severity::Error, "'this' argument to member function %0 is an %select{lvalue|rvalue}1, but function has %select{non-const lvalue|rvalue}2 ref-qualifier", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_member_function_call_bad_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot initialize object parameter of type %0 with an expression of type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_member_function_initialization, CLASS_ERROR, (unsigned)diag::Severity::Error, "initializer on function does not look like a pure-specifier", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_member_name_of_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "member %0 has the same name as its class", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_member_not_yet_instantiated, CLASS_ERROR, (unsigned)diag::Severity::Error, "no member %0 in %1; it has not yet been instantiated", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_member_qualification, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-friend class member %0 cannot have a qualified name", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_member_redeclared, CLASS_ERROR, (unsigned)diag::Severity::Error, "class member cannot be redeclared", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_member_redeclared_in_instantiation, CLASS_ERROR, (unsigned)diag::Severity::Error, "multiple overloads of %0 instantiate to the same signature %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_member_reference_needs_call, CLASS_ERROR, (unsigned)diag::Severity::Error, "base of member reference is a function; perhaps you meant to call it%select{| with no arguments}0?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_mempointer_in_nonclass_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "member pointer refers into non-class type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_memptr_conv_via_virtual, CLASS_ERROR, (unsigned)diag::Severity::Error, "conversion from pointer to member of class %0 to pointer to member of class %1 via virtual base %2 is not allowed", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_memptr_incomplete, CLASS_ERROR, (unsigned)diag::Severity::Error, "member pointer has incomplete base type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_method_not_found_with_typo, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{instance|class}1 method %0 not found ; did you mean %2?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_mismatched_code_seg_base, CLASS_ERROR, (unsigned)diag::Severity::Error, "derived class must specify the same code segment as its base classes", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_mismatched_code_seg_override, CLASS_ERROR, (unsigned)diag::Severity::Error, "overriding virtual function must specify the same code segment as its overridden function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_mismatched_exception_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "exception specification in declaration does not match previous declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_mismatched_exception_spec_explicit_instantiation, CLASS_ERROR, (unsigned)diag::Severity::Error, "exception specification in explicit instantiation does not match instantiated one", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_mismatched_ms_inheritance, CLASS_ERROR, (unsigned)diag::Severity::Error, "inheritance model does not match %select{definition|previous declaration}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_mismatched_owning_module, CLASS_ERROR, (unsigned)diag::Severity::Error, "declaration of %0 in %select{the global module|module %2}1 follows declaration in %select{the global module|module %4}3", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_mismatched_uuid, CLASS_ERROR, (unsigned)diag::Severity::Error, "uuid does not match previous declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_mismatched_visibility, CLASS_ERROR, (unsigned)diag::Severity::Error, "visibility does not match previous declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_misplaced_ivar, CLASS_ERROR, (unsigned)diag::Severity::Error, "instance variables may not be placed in %select{categories|class extension}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_missing_actual_pipe_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing actual type specifier for pipe", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_missing_atsign_prefix, CLASS_ERROR, (unsigned)diag::Severity::Error, "string literal must be prefixed by '@' ", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_missing_default_ctor, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{constructor for %1 must explicitly initialize the|implicit default constructor for %1 must explicitly initialize the|cannot use constructor inherited from base class %4;}0 %select{base class|member}2 %3 %select{which|which|of %1}0 does not have a default constructor", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_missing_exception_specification, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 is missing exception specification '%1'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_missing_method_context, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing context for method declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_missing_open_square_message_send, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing '[' at start of message send expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_missing_property_context, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing context for property implementation declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_missing_property_interface, CLASS_ERROR, (unsigned)diag::Severity::Error, "property implementation in a category with no category declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_missing_property_ivar_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "synthesized property %0 must either be named the same as a compatible instance variable or must explicitly name an instance variable", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_missing_type_specifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "C++ requires a type specifier for all declarations", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_mixing_cxx_try_seh_try, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot use C++ 'try' in the same function as SEH '__try'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_mode_not_primitive, CLASS_ERROR, (unsigned)diag::Severity::Error, "mode attribute only supported for integer and floating-point types", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_mode_wrong_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "type of machine mode does not match type of base type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_module_decl_in_header_module, CLASS_ERROR, (unsigned)diag::Severity::Error, "'module' declaration found while building header module", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_module_decl_in_module_map_module, CLASS_ERROR, (unsigned)diag::Severity::Error, "'module' declaration found while building module from module map", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_module_declaration_missing, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing 'export module' declaration in module interface unit", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_module_import_in_implementation, CLASS_ERROR, (unsigned)diag::Severity::Error, "@import of module '%0' in implementation of '%1'; use #import", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_module_import_not_at_top_level_fatal, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "import of module '%0' appears within %1", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_module_interface_implementation_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing 'export' specifier in module declaration while building module interface", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_module_not_defined, CLASS_ERROR, (unsigned)diag::Severity::Error, "definition of module '%0' is not available; use -fmodule-file= to specify path to precompiled module interface", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_module_private_local, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{local variable|parameter|typedef}0 %1 cannot be declared __module_private__", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_module_private_local_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "local %select{struct|interface|union|class|enum}0 cannot be declared __module_private__", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_module_private_specialization, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{template|partial|member}0 specialization cannot be declared __module_private__", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_module_redeclaration, CLASS_ERROR, (unsigned)diag::Severity::Error, "translation unit contains multiple module declarations", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_module_redefinition, CLASS_ERROR, (unsigned)diag::Severity::Error, "redefinition of module '%0'", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_module_self_import, CLASS_ERROR, (unsigned)diag::Severity::Error, "import of module '%0' appears within same top-level module '%1'", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_module_unimported_use, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{declaration|definition|default argument|explicit specialization|partial specialization}0 of %1 must be imported from module '%2' before it is required", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_module_unimported_use_header, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing '#include %3'; %select{declaration|definition|default argument|explicit specialization|partial specialization}0 of %1 must be imported from module '%2' before it is required", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_module_unimported_use_multiple, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{declaration|definition|default argument|explicit specialization|partial specialization}0 of %1 must be imported from one of the following modules before it is required:%2", 0, SFINAE_SubstitutionFailure, false, true, 13)
+DIAG(err_ms___leave_not_in___try, CLASS_ERROR, (unsigned)diag::Severity::Error, "'__leave' statement not in __try block", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ms_va_start_used_in_sysv_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "'__builtin_ms_va_start' used in System V ABI function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_msvc_annotation_wide_str, CLASS_ERROR, (unsigned)diag::Severity::Error, "arguments to __annotation must be wide string constants", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_multiple_base_initialization, CLASS_ERROR, (unsigned)diag::Severity::Error, "multiple initializations given for base %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_multiple_default_labels_defined, CLASS_ERROR, (unsigned)diag::Severity::Error, "multiple default labels in one switch", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_multiple_final_overriders, CLASS_ERROR, (unsigned)diag::Severity::Error, "virtual function %q0 has more than one final overrider in %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_multiple_mem_initialization, CLASS_ERROR, (unsigned)diag::Severity::Error, "multiple initializations given for non-static member %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_multiple_mem_union_initialization, CLASS_ERROR, (unsigned)diag::Severity::Error, "initializing multiple members of union", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_multiversion_after_used, CLASS_ERROR, (unsigned)diag::Severity::Error, "function declaration cannot become a multiversioned function after first usage", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_multiversion_diff, CLASS_ERROR, (unsigned)diag::Severity::Error, "multiversioned function declaration has a different %select{calling convention|return type|constexpr specification|inline specification|storage class|linkage}0", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_multiversion_doesnt_support, CLASS_ERROR, (unsigned)diag::Severity::Error, "attribute '%select{target|cpu_specific|cpu_dispatch}0' multiversioned functions do not yet support %select{function templates|virtual functions|deduced return types|constructors|destructors|deleted functions|defaulted functions|constexpr functions}1", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_multiversion_duplicate, CLASS_ERROR, (unsigned)diag::Severity::Error, "multiversioned function redeclarations require identical target attributes", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_multiversion_no_other_attrs, CLASS_ERROR, (unsigned)diag::Severity::Error, "attribute '%select{target|cpu_specific|cpu_dispatch}0' multiversioning cannot be combined with other attributes", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_multiversion_noproto, CLASS_ERROR, (unsigned)diag::Severity::Error, "multiversioned function must have a prototype", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_multiversion_not_allowed_on_main, CLASS_ERROR, (unsigned)diag::Severity::Error, "'main' cannot be a multiversioned function", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_multiversion_not_supported, CLASS_ERROR, (unsigned)diag::Severity::Error, "function multiversioning is not supported on the current target", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_multiversion_required_in_redecl, CLASS_ERROR, (unsigned)diag::Severity::Error, "function declaration is missing %select{'target'|'cpu_specific' or 'cpu_dispatch'}0 attribute in a multiversioned function", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_multiversion_types_mixed, CLASS_ERROR, (unsigned)diag::Severity::Error, "multiversioning attributes cannot be combined", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_mutable_const, CLASS_ERROR, (unsigned)diag::Severity::Error, "'mutable' and 'const' cannot be mixed", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_mutable_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "'mutable' cannot be applied to functions", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_mutable_nonmember, CLASS_ERROR, (unsigned)diag::Severity::Error, "'mutable' can only be applied to member variables", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_mutable_reference, CLASS_ERROR, (unsigned)diag::Severity::Error, "'mutable' cannot be applied to references", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_need_header_before_ms_uuidof, CLASS_ERROR, (unsigned)diag::Severity::Error, "you need to include <guiddef.h> before using the '__uuidof' operator", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_need_header_before_typeid, CLASS_ERROR, (unsigned)diag::Severity::Error, "you need to include <typeinfo> before using the 'typeid' operator", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_nested_name_member_ref_lookup_ambiguous, CLASS_ERROR, (unsigned)diag::Severity::Error, "lookup of %0 in member access expression is ambiguous", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_nested_name_spec_is_not_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 cannot appear before '::' because it is not a class%select{ or namespace|, namespace, or enumeration}1; did you mean ':'?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_nested_name_spec_non_tag, CLASS_ERROR, (unsigned)diag::Severity::Error, "type %0 cannot be used prior to '::' because it has no members", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_nested_non_static_member_use, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{call to non-static member function|use of non-static data member}0 %2 of %1 from nested type %3", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_nested_redefinition, CLASS_ERROR, (unsigned)diag::Severity::Error, "nested redefinition of %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_new_abi_tag_on_redeclaration, CLASS_ERROR, (unsigned)diag::Severity::Error, "'abi_tag' %0 missing in original declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_new_array_init_args, CLASS_ERROR, (unsigned)diag::Severity::Error, "array 'new' cannot have initialization arguments", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_new_array_nonconst, CLASS_ERROR, (unsigned)diag::Severity::Error, "only the first dimension of an allocated array may have dynamic size", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_new_array_of_auto, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot allocate array of 'auto'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_new_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "allocation of incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_no_accessor_for_property, CLASS_ERROR, (unsigned)diag::Severity::Error, "no %select{getter|setter}0 defined for property %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_no_base_classes, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid use of '__super', %0 has no base classes", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_no_dynamic_cast_with_fno_rtti, CLASS_ERROR, (unsigned)diag::Severity::Error, "use of dynamic_cast requires -frtti", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_no_matching_local_friend, CLASS_ERROR, (unsigned)diag::Severity::Error, "no matching function found in local scope", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_no_matching_local_friend_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "no matching function %0 found in local scope; did you mean %3?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_no_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "no member named %0 in %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_no_member_overloaded_arrow, CLASS_ERROR, (unsigned)diag::Severity::Error, "no member named %0 in %1; did you mean to use '->' instead of '.'?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_no_member_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "no member named %0 in %1; did you mean %select{|simply }2%3?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_no_member_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "no template named %0 in %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_no_member_template_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "no template named %0 in %1; did you mean %select{|simply }2%3?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_no_nsconstant_string_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot find interface declaration for %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_no_subobject_property_setting, CLASS_ERROR, (unsigned)diag::Severity::Error, "expression is not assignable", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_no_suitable_delete_member_function_found, CLASS_ERROR, (unsigned)diag::Severity::Error, "no suitable member %0 in %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_no_super_class_message, CLASS_ERROR, (unsigned)diag::Severity::Error, "no @interface declaration found in class messaging of %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_no_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "no template named %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_no_template_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "no template named %0; did you mean %1?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_no_typeid_with_fno_rtti, CLASS_ERROR, (unsigned)diag::Severity::Error, "use of typeid requires -frtti", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_noexcept_needs_constant_expression, CLASS_ERROR, (unsigned)diag::Severity::Error, "argument to noexcept specifier must be a constant expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_nogetter_property_compound_assignment, CLASS_ERROR, (unsigned)diag::Severity::Error, "a getter method is needed to perform a compound assignment on a property", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_nogetter_property_incdec, CLASS_ERROR, (unsigned)diag::Severity::Error, "no getter method %1 for %select{increment|decrement}0 of property", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_non_asm_stmt_in_naked_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-ASM statement in naked function is not supported", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_non_deleted_override, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-deleted function %0 cannot override a deleted function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_non_extern_extern, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-extern declaration of %0 follows extern declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_non_local_variable_decl_in_for, CLASS_ERROR, (unsigned)diag::Severity::Error, "declaration of non-local variable in 'for' loop", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_non_static_static, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-static declaration of %0 follows static declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_non_template_in_member_template_id_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "member %0 of %1 is not a template; did you mean %select{|simply }2%3?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_non_template_in_template_id, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 does not name a template but is followed by template arguments", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_non_template_in_template_id_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 does not name a template but is followed by template arguments; did you mean %1?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_non_thread_thread, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-thread-local declaration of %0 follows thread-local declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_non_type_template_arg_addr_label_diff, CLASS_ERROR, (unsigned)diag::Severity::Error, "template argument / label address difference / what did you expect?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_non_type_template_arg_subobject, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-type template argument refers to subobject '%0'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_non_type_template_in_nested_name_specifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "qualified name refers into a specialization of %select{function|variable}0 template %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_non_type_template_parm_type_deduction_failure, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-type template parameter %0 with type %1 has incompatible initializer of type %2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_non_variable_decl_in_for, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-variable declaration in 'for' loop", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_non_virtual_pure, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 is not virtual and cannot be declared pure", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_nonfunction_block_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "block pointer to non-function type is invalid", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_nonstatic_member_out_of_line, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-static data member defined out-of-line", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_nontemporal_builtin_must_be_pointer, CLASS_ERROR, (unsigned)diag::Severity::Error, "address argument to nontemporal builtin must be a pointer (%0 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_nontemporal_builtin_must_be_pointer_intfltptr_or_vector, CLASS_ERROR, (unsigned)diag::Severity::Error, "address argument to nontemporal builtin must be a pointer to integer, float, pointer, or a vector of such types (%0 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_nontrivial_primitive_type_in_union, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-trivial C types are disallowed in union", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_noreturn_block_has_return_expr, CLASS_ERROR, (unsigned)diag::Severity::Error, "block declared 'noreturn' should not return", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_noreturn_lambda_has_return_expr, CLASS_ERROR, (unsigned)diag::Severity::Error, "lambda declared 'noreturn' should not return", 0, SFINAE_SubstitutionFailure, false, true, 3)
+DIAG(err_noreturn_missing_on_first_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "function declared '[[noreturn]]' after its first declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_noreturn_non_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "'_Noreturn' can only appear on functions", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_nosetter_property_assignment, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{assignment to readonly property|no setter method %1 for assignment to property}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_nosetter_property_incdec, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{%select{increment|decrement}1 of readonly property|no setter method %2 for %select{increment|decrement}1 of property}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_not_class_template_specialization, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot specialize a %select{dependent template|template template parameter}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_not_direct_base_or_virtual, CLASS_ERROR, (unsigned)diag::Severity::Error, "type %0 is not a direct or virtual base of %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_not_found_by_two_phase_lookup, CLASS_ERROR, (unsigned)diag::Severity::Error, "call to function %0 that is neither visible in the template definition nor found by argument-dependent lookup", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_not_integral_type_anon_bitfield, CLASS_ERROR, (unsigned)diag::Severity::Error, "anonymous bit-field has non-integral type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_not_integral_type_bitfield, CLASS_ERROR, (unsigned)diag::Severity::Error, "bit-field %0 has non-integral type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_not_tag_in_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "no %select{struct|interface|union|class|enum}0 named %1 in %2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ns_attribute_wrong_parameter_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute only applies to %select{Objective-C object|pointer|pointer-to-CF-pointer}1 parameters", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_nsconsumed_attribute_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "overriding method has mismatched ns_consumed attribute on its parameter", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_nsobject_attribute, CLASS_ERROR, (unsigned)diag::Severity::Error, "'NSObject' attribute is for pointer types only", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_nsreturns_retained_attribute_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "overriding method has mismatched ns_returns_%select{not_retained|retained}0 attributes", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_nullability_cs_multilevel, CLASS_ERROR, (unsigned)diag::Severity::Error, "nullability keyword %0 cannot be applied to multi-level pointer type %1", 0, SFINAE_SubstitutionFailure, false, true, 19)
+DIAG(err_nullability_nonpointer, CLASS_ERROR, (unsigned)diag::Severity::Error, "nullability specifier %0 cannot be applied to non-pointer type %1", 0, SFINAE_SubstitutionFailure, false, true, 19)
+DIAG(err_objc_array_of_interfaces, CLASS_ERROR, (unsigned)diag::Severity::Error, "array of interface %0 is invalid (probably should be an array of pointers)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_attr_not_id, CLASS_ERROR, (unsigned)diag::Severity::Error, "parameter of %0 attribute must be a single name of an Objective-C %select{class|protocol}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_attr_protocol_requires_definition, CLASS_ERROR, (unsigned)diag::Severity::Error, "attribute %0 can only be applied to @protocol definitions, not forward declarations", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_attr_typedef_not_id, CLASS_ERROR, (unsigned)diag::Severity::Error, "parameter of %0 attribute must be 'id' when used on a typedef", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_attr_typedef_not_void_pointer, CLASS_ERROR, (unsigned)diag::Severity::Error, "'objc_bridge(id)' is only allowed on structs and typedefs of void pointers", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_bridged_related_invalid_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "could not find Objective-C class %0 to convert %1 to %2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_bridged_related_invalid_class_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 must be name of an Objective-C class to be able to convert %1 to %2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_bridged_related_known_method, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 must be explicitly converted to %1; use %select{%objcclass2|%objcinstance2}3 method for this conversion", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_cf_bridged_not_interface, CLASS_ERROR, (unsigned)diag::Severity::Error, "CF object of type %0 is bridged to %1, which is not an Objective-C class", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_decls_may_only_appear_in_global_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "Objective-C declarations may only appear in global scope", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_exceptions_disabled, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot use '%0' with Objective-C exceptions disabled", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_for_range_init_stmt, CLASS_ERROR, (unsigned)diag::Severity::Error, "initialization statement is not supported when iterating over Objective-C collection", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_illegal_boxed_expression_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "illegal type %0 used in a boxed expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_incomplete_boxed_expression_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "incomplete type %0 used in a boxed expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_index_incomplete_class_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "Objective-C index expression has incomplete class type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_indexing_method_result_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "method for accessing %select{dictionary|array}1 element must have Objective-C object return type instead of %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_kindof_nonobject, CLASS_ERROR, (unsigned)diag::Severity::Error, "'__kindof' specifier cannot be applied to non-object type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_kindof_wrong_position, CLASS_ERROR, (unsigned)diag::Severity::Error, "'__kindof' type specifier must precede the declarator", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_literal_method_sig, CLASS_ERROR, (unsigned)diag::Severity::Error, "literal construction method %0 has incompatible signature", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_method_unsupported_param_ret_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 %select{parameter|return}1 type is unsupported; support for vector types for this target is introduced in %2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_multiple_subscript_type_conversion, CLASS_ERROR, (unsigned)diag::Severity::Error, "indexing expression is invalid because subscript type %0 has multiple type conversion functions", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_non_trivially_copyable_boxed_expression_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-trivially copyable type %0 cannot be used in a boxed expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_ns_bridged_invalid_cfobject, CLASS_ERROR, (unsigned)diag::Severity::Error, "ObjectiveC object of type %0 is bridged to %1, which is not valid CF object", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_object_assignment, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot assign to class object (%0 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_object_catch, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot catch an Objective-C object by value", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_parameterized_category_nonclass, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{extension|category}0 of non-parameterized class %1 cannot have type parameters", 0, SFINAE_SubstitutionFailure, false, true, 20)
+DIAG(err_objc_parameterized_forward_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "forward declaration of non-parameterized class %0 cannot have type parameters", 0, SFINAE_SubstitutionFailure, false, true, 20)
+DIAG(err_objc_parameterized_forward_class_first, CLASS_ERROR, (unsigned)diag::Severity::Error, "class %0 previously declared with type parameters", 0, SFINAE_SubstitutionFailure, false, true, 20)
+DIAG(err_objc_precise_lifetime_bad_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "objc_precise_lifetime only applies to retainable types; type here is %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_property_attr_mutually_exclusive, CLASS_ERROR, (unsigned)diag::Severity::Error, "property attributes '%0' and '%1' are mutually exclusive", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_property_requires_object, CLASS_ERROR, (unsigned)diag::Severity::Error, "property with '%0' attribute must be of object type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_root_class_subclass, CLASS_ERROR, (unsigned)diag::Severity::Error, "objc_root_class attribute may only be specified on a root class declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_runtime_visible_category, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot implement a category for class %0 that is only visible via the Objective-C runtime", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_runtime_visible_subclass, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot implement subclass %0 of a superclass %1 that is only visible via the Objective-C runtime", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_subscript_base_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{dictionary|array}1 subscript base type %0 is not an Objective-C object", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_subscript_dic_object_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "method object parameter type %0 is not object type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_subscript_index_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "method index parameter type %0 is not integral type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_subscript_key_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "method key parameter type %0 is not object type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_subscript_method_not_found, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected method to %select{read|write}1 %select{dictionary|array}2 element not found on object of type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_subscript_object_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot assign to this %select{dictionary|array}1 because assigning method's 2nd parameter of type %0 is not an Objective-C pointer type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_subscript_pointer, CLASS_ERROR, (unsigned)diag::Severity::Error, "indexing expression is invalid because subscript type %0 is not an Objective-C pointer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_subscript_type_conversion, CLASS_ERROR, (unsigned)diag::Severity::Error, "indexing expression is invalid because subscript type %0 is not an integral or Objective-C pointer type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_synchronized_expects_object, CLASS_ERROR, (unsigned)diag::Severity::Error, "@synchronized requires an Objective-C object type (%0 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_throw_expects_object, CLASS_ERROR, (unsigned)diag::Severity::Error, "@throw requires an Objective-C object type (%0 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_type_arg_does_not_match_bound, CLASS_ERROR, (unsigned)diag::Severity::Error, "type argument %0 does not satisfy the bound (%1) of type parameter %2", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_objc_type_arg_explicit_nullability, CLASS_ERROR, (unsigned)diag::Severity::Error, "type argument %0 cannot explicitly specify nullability", 0, SFINAE_SubstitutionFailure, false, true, 19)
+DIAG(err_objc_type_arg_missing, CLASS_ERROR, (unsigned)diag::Severity::Error, "no type or protocol named %0", 0, SFINAE_SubstitutionFailure, false, true, 20)
+DIAG(err_objc_type_arg_missing_star, CLASS_ERROR, (unsigned)diag::Severity::Error, "type argument %0 must be a pointer (requires a '*')", 0, SFINAE_SubstitutionFailure, false, true, 20)
+DIAG(err_objc_type_arg_not_id_compatible, CLASS_ERROR, (unsigned)diag::Severity::Error, "type argument %0 is neither an Objective-C object nor a block type", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_objc_type_arg_qualified, CLASS_ERROR, (unsigned)diag::Severity::Error, "type argument %0 cannot be qualified with '%1'", 0, SFINAE_SubstitutionFailure, false, true, 20)
+DIAG(err_objc_type_args_and_protocols, CLASS_ERROR, (unsigned)diag::Severity::Error, "angle brackets contain both a %select{type|protocol}0 (%1) and a %select{protocol|type}0 (%2)", 0, SFINAE_SubstitutionFailure, false, true, 20)
+DIAG(err_objc_type_args_non_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "type arguments cannot be applied to non-class type %0", 0, SFINAE_SubstitutionFailure, false, true, 20)
+DIAG(err_objc_type_args_non_parameterized_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "type arguments cannot be applied to non-parameterized class %0", 0, SFINAE_SubstitutionFailure, false, true, 20)
+DIAG(err_objc_type_args_specialized_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "type arguments cannot be applied to already-specialized class type %0", 0, SFINAE_SubstitutionFailure, false, true, 20)
+DIAG(err_objc_type_args_wrong_arity, CLASS_ERROR, (unsigned)diag::Severity::Error, "too %select{many|few}0 type arguments for class %1 (have %2, expected %3)", 0, SFINAE_SubstitutionFailure, false, true, 20)
+DIAG(err_objc_type_param_arity_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{forward class declaration|class definition|category|extension}0 has too %select{few|many}1 type parameters (expected %2, have %3)", 0, SFINAE_SubstitutionFailure, false, true, 20)
+DIAG(err_objc_type_param_bound_conflict, CLASS_ERROR, (unsigned)diag::Severity::Error, "type bound %0 for type parameter %1 conflicts with %select{implicit|previous}2 bound %3%select{for type parameter %5|}4", 0, SFINAE_SubstitutionFailure, false, true, 20)
+DIAG(err_objc_type_param_bound_explicit_nullability, CLASS_ERROR, (unsigned)diag::Severity::Error, "type parameter %0 bound %1 cannot explicitly specify nullability", 0, SFINAE_SubstitutionFailure, false, true, 19)
+DIAG(err_objc_type_param_bound_missing, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing type bound %0 for type parameter %1 in %select{@interface|@class}2", 0, SFINAE_SubstitutionFailure, false, true, 20)
+DIAG(err_objc_type_param_bound_missing_pointer, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing '*' in type bound %0 for type parameter %1", 0, SFINAE_SubstitutionFailure, false, true, 20)
+DIAG(err_objc_type_param_bound_nonobject, CLASS_ERROR, (unsigned)diag::Severity::Error, "type bound %0 for type parameter %1 is not an Objective-C pointer type", 0, SFINAE_SubstitutionFailure, false, true, 20)
+DIAG(err_objc_type_param_bound_qualified, CLASS_ERROR, (unsigned)diag::Severity::Error, "type bound %1 for type parameter %0 cannot be qualified with '%2'", 0, SFINAE_SubstitutionFailure, false, true, 20)
+DIAG(err_objc_type_param_redecl, CLASS_ERROR, (unsigned)diag::Severity::Error, "redeclaration of type parameter %0", 0, SFINAE_SubstitutionFailure, false, true, 20)
+DIAG(err_objc_type_param_variance_conflict, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{in|co|contra}0variant type parameter %1 conflicts with previous %select{in|co|contra}2variant type parameter %3", 0, SFINAE_SubstitutionFailure, false, true, 20)
+DIAG(err_objc_var_decl_inclass, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot declare variable inside @interface or @protocol", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_objc_variable_sized_type_not_at_end, CLASS_ERROR, (unsigned)diag::Severity::Error, "field %0 with variable sized type %1 is not at the end of class", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_object_cannot_be_passed_returned_by_value, CLASS_ERROR, (unsigned)diag::Severity::Error, "interface type %1 cannot be %select{returned|passed}0 by value; did you forget * in %1?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_offsetof_array_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "offsetof requires array type, %0 invalid", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_offsetof_bitfield, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot compute offset of bit-field %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_offsetof_field_of_virtual_base, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid application of 'offsetof' to a field of a virtual base", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_offsetof_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "offsetof of incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_offsetof_record_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "offsetof requires struct, union, or class type, %0 invalid", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_omp_aligned_expected_array_or_ptr, CLASS_ERROR, (unsigned)diag::Severity::Error, "argument of aligned clause should be array%select{ or pointer|, pointer, reference to array or reference to pointer}1, not %0", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_aligned_twice, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{a variable|a parameter|'this'}0 cannot appear in more than one aligned clause", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_ambiguous_conversion, CLASS_ERROR, (unsigned)diag::Severity::Error, "ambiguous conversion from type %0 to an integral or unscoped enumeration type", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_argument_type_isdeviceptr, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_array_section_use, CLASS_ERROR, (unsigned)diag::Severity::Error, "OpenMP array section is not allowed here", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_at_least_one_motion_clause_required, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected at least one 'to' clause or 'from' clause specified to '#pragma omp target update'", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_atomic_capture_not_compound_statement, CLASS_ERROR, (unsigned)diag::Severity::Error, "the statement for 'atomic capture' must be a compound statement of form '{v = x; x binop= expr;}', '{x binop= expr; v = x;}', '{v = x; x = x binop expr;}', '{v = x; x = expr binop x;}', '{x = x binop expr; v = x;}', '{x = expr binop x; v = x;}' or '{v = x; x = expr;}', '{v = x; x++;}', '{v = x; ++x;}', '{++x; v = x;}', '{x++; v = x;}', '{v = x; x--;}', '{v = x; --x;}', '{--x; v = x;}', '{x--; v = x;}' where x is an l-value expression with scalar type", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_atomic_capture_not_expression_statement, CLASS_ERROR, (unsigned)diag::Severity::Error, "the statement for 'atomic capture' must be an expression statement of form 'v = ++x;', 'v = --x;', 'v = x++;', 'v = x--;', 'v = x binop= expr;', 'v = x = x binop expr' or 'v = x = expr binop x', where x and v are both l-value expressions with scalar type", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_atomic_not_expression_statement, CLASS_ERROR, (unsigned)diag::Severity::Error, "the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_atomic_read_not_expression_statement, CLASS_ERROR, (unsigned)diag::Severity::Error, "the statement for 'atomic read' must be an expression statement of form 'v = x;', where v and x are both lvalue expressions with scalar type", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_atomic_several_clauses, CLASS_ERROR, (unsigned)diag::Severity::Error, "directive '#pragma omp atomic' cannot contain more than one 'read', 'write', 'update' or 'capture' clause", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_atomic_update_not_expression_statement, CLASS_ERROR, (unsigned)diag::Severity::Error, "the statement for 'atomic update' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_atomic_write_not_expression_statement, CLASS_ERROR, (unsigned)diag::Severity::Error, "the statement for 'atomic write' must be an expression statement of form 'x = expr;', where x is a lvalue expression with scalar type", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_bit_fields_forbidden_in_clause, CLASS_ERROR, (unsigned)diag::Severity::Error, "bit fields cannot be used to specify storage in a '%0' clause", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_clause_floating_type_arg, CLASS_ERROR, (unsigned)diag::Severity::Error, "arguments of OpenMP clause '%0' with bitwise operators cannot be of floating type", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_clause_not_arithmetic_type_arg, CLASS_ERROR, (unsigned)diag::Severity::Error, "arguments of OpenMP clause '%0' for 'min' or 'max' must be of %select{scalar|arithmetic}1 type", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_const_list_item, CLASS_ERROR, (unsigned)diag::Severity::Error, "const-qualified list item cannot be %0", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_const_not_mutable_variable, CLASS_ERROR, (unsigned)diag::Severity::Error, "const-qualified variable without mutable fields cannot be %0", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_const_variable, CLASS_ERROR, (unsigned)diag::Severity::Error, "const-qualified variable cannot be %0", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_critical_with_hint, CLASS_ERROR, (unsigned)diag::Severity::Error, "constructs with the same name must have a 'hint' clause with the same value", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_declare_mapper_redefinition, CLASS_ERROR, (unsigned)diag::Severity::Error, "redefinition of user-defined mapper for type %0 with name %1", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_declare_mapper_wrong_var, CLASS_ERROR, (unsigned)diag::Severity::Error, "only variable %0 is allowed in map clauses of this 'omp declare mapper' directive", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_declare_reduction_redefinition, CLASS_ERROR, (unsigned)diag::Severity::Error, "redefinition of user-defined reduction for type %0", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_declare_target_multiple, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 appears multiple times in clauses on the same declare target directive", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_declare_target_to_and_link, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 must not appear in both clauses 'to' and 'link'", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_depend_clause_thread_simd, CLASS_ERROR, (unsigned)diag::Severity::Error, "'depend' clauses cannot be mixed with '%0' clause", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_depend_sink_expected_loop_iteration, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected%select{| %1}0 loop iteration variable", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_depend_sink_expected_plus_minus, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected '+' or '-' operation", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_depend_sink_source_not_allowed, CLASS_ERROR, (unsigned)diag::Severity::Error, "'depend(%select{source|sink:vec}0)' clause%select{|s}0 cannot be mixed with 'depend(%select{sink:vec|source}0)' clause%select{s|}0", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_depend_sink_unexpected_expr, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected expression: number of expressions is larger than the number of associated loops", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_duplicate_map_type_modifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "same map type modifier has been specified more than once", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_expected_access_to_data_field, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected access to data field", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_expected_addressable_lvalue_or_array_item, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected addressable lvalue expression, array element or array section", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_expected_base_var_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected variable name as a base of the array %select{subscript|section}0", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_expected_int_param, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected a reference to an integer-typed parameter", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_expected_named_var_member_or_array_expression, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected expression containing only member accesses and/or array sections based on named variables", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_expected_uniform_param, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected a reference to a parameter specified in a 'uniform' clause", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_expected_var_arg, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 is not a global variable, static local variable or static data member", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_expected_var_arg_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 is not a global variable, static local variable or static data member; did you mean %1", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_expected_var_name_member_expr, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected variable name%select{| or data member of current class}0", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_expected_var_name_member_expr_or_array_item, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected variable name%select{|, data member of current class}0, array element or array section", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_explicit_conversion, CLASS_ERROR, (unsigned)diag::Severity::Error, "expression requires explicit conversion from %0 to %1", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_firstprivate_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "a firstprivate variable with incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_function_expected, CLASS_ERROR, (unsigned)diag::Severity::Error, "'#pragma omp declare simd' can only be applied to functions", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_function_in_link_clause, CLASS_ERROR, (unsigned)diag::Severity::Error, "function name is not allowed in 'link' clause", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_global_var_arg, CLASS_ERROR, (unsigned)diag::Severity::Error, "arguments of '#pragma omp %0' must have %select{global storage|static storage duration}1", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_grainsize_num_tasks_mutually_exclusive, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' and '%1' clause are mutually exclusive and may not appear on the same directive", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_hint_clause_no_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "the name of the construct must be specified in presence of 'hint' clause", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_in_reduction_not_task_reduction, CLASS_ERROR, (unsigned)diag::Severity::Error, "in_reduction variable must appear in a task_reduction clause", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "expression has incomplete class type %0", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_invalid_map_this_expr, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid 'this' expression on 'map' clause", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_invalid_map_type_for_directive, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{map type '%1' is not allowed|map type must be specified}0 for '#pragma omp %2'", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_invalid_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "'#pragma omp %0' directive must appear only in file scope", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_invalid_target_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 used in declare target directive is not a variable or a function name", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_lastprivate_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "a lastprivate variable with incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_linear_distribute_var_non_loop_iteration, CLASS_ERROR, (unsigned)diag::Severity::Error, "only loop iteration variables are allowed in 'linear' clause in distribute directives", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_linear_expected_int_or_ptr, CLASS_ERROR, (unsigned)diag::Severity::Error, "argument of a linear clause should be of integral or pointer type, not %0", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_linear_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "a linear variable with incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_linear_ordered, CLASS_ERROR, (unsigned)diag::Severity::Error, "'linear' clause cannot be specified along with 'ordered' clause with a parameter", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_local_var_in_threadprivate_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable with local storage in initial value of threadprivate variable", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_loop_cannot_use_stmt, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' statement cannot be used in OpenMP for loop", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_loop_diff_cxx, CLASS_ERROR, (unsigned)diag::Severity::Error, "could not calculate number of iterations calling 'operator-' with upper and lower loop bounds", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_loop_incr_not_compatible, CLASS_ERROR, (unsigned)diag::Severity::Error, "increment expression must cause %0 to %select{decrease|increase}1 on each iteration of OpenMP for loop", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_loop_not_canonical_cond, CLASS_ERROR, (unsigned)diag::Severity::Error, "condition of OpenMP for loop must be a relational comparison ('<', '<=', '>', or '>=') of loop variable %0", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_loop_not_canonical_incr, CLASS_ERROR, (unsigned)diag::Severity::Error, "increment clause of OpenMP for loop must perform simple addition or subtraction on loop variable %0", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_loop_not_canonical_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "initialization clause of OpenMP for loop is not in canonical form ('var = init' or 'T var = init')", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_loop_var_dsa, CLASS_ERROR, (unsigned)diag::Severity::Error, "loop iteration variable in the associated loop of 'omp %1' directive may not be %0, predetermined as %2", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_loop_variable_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable must be of integer or %select{pointer|random access iterator}0 type", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_map_shared_storage, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable already marked as mapped in current construct", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_mapper_wrong_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "mapper type must be of struct, union or class type", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_multiple_array_items_in_map_clause, CLASS_ERROR, (unsigned)diag::Severity::Error, "multiple array elements associated with the same variable are not allowed in map clauses of the same construct", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_negative_expression_in_clause, CLASS_ERROR, (unsigned)diag::Severity::Error, "argument to '%0' clause must be a %select{non-negative|strictly positive}1 integer value", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_no_clause_for_directive, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected at least one %0 clause for '#pragma omp %1'", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_no_dsa_for_variable, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable %0 must have explicitly specified data sharing attributes", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_no_more_if_clause, CLASS_ERROR, (unsigned)diag::Severity::Error, "no more 'if' clause is allowed", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_not_for, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{statement after '#pragma omp %1' must be a for loop|expected %2 for loops after '#pragma omp %1'%select{|, but found only %4}3}0", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_not_integral, CLASS_ERROR, (unsigned)diag::Severity::Error, "expression must have integral or unscoped enumeration type, not %0", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_not_resolved_reduction_identifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "unable to resolve declare reduction construct for type %0", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_once_referenced, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable can appear only once in OpenMP '%0' clause", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_once_referenced_in_target_update, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable can appear only once in OpenMP 'target update' construct", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_ordered_directive_with_param, CLASS_ERROR, (unsigned)diag::Severity::Error, "'ordered' directive %select{without any clauses|with 'threads' clause}0 cannot be closely nested inside ordered region with specified parameter", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_ordered_directive_without_param, CLASS_ERROR, (unsigned)diag::Severity::Error, "'ordered' directive with 'depend' clause cannot be closely nested inside ordered region without specified parameter", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_ordered_simd, CLASS_ERROR, (unsigned)diag::Severity::Error, "'ordered' clause with a parameter can not be specified in '#pragma omp %0' directive", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_original_storage_is_shared_and_does_not_contain, CLASS_ERROR, (unsigned)diag::Severity::Error, "original storage of expression in data environment is shared but data environment do not fully contain mapped expression storage", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_orphaned_device_directive, CLASS_ERROR, (unsigned)diag::Severity::Error, "orphaned 'omp %0' directives are prohibited; perhaps you forget to enclose the directive into a %select{|||target |teams }1region?", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_orphaned_section_directive, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{orphaned 'omp section' directives are prohibited, it|'omp section' directive}0 must be closely nested to a sections region%select{|, not a %1 region}0", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_parallel_reduction_in_task_firstprivate, CLASS_ERROR, (unsigned)diag::Severity::Error, "argument of a reduction clause of a %0 construct must not appear in a firstprivate clause on a task construct", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_parallel_sections_not_compound_stmt, CLASS_ERROR, (unsigned)diag::Severity::Error, "the statement for '#pragma omp parallel sections' must be a compound statement", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_parallel_sections_substmt_not_section, CLASS_ERROR, (unsigned)diag::Severity::Error, "statement in 'omp parallel sections' directive must be enclosed into a section region", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_param_or_this_in_clause, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected reference to one of the parameters of function %0%select{| or 'this'}1", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_parent_cancel_region_nowait, CLASS_ERROR, (unsigned)diag::Severity::Error, "parent region for 'omp %select{cancellation point|cancel}0' construct cannot be nowait", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_parent_cancel_region_ordered, CLASS_ERROR, (unsigned)diag::Severity::Error, "parent region for 'omp %select{cancellation point|cancel}0' construct cannot be ordered", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_pointer_mapped_along_with_derived_section, CLASS_ERROR, (unsigned)diag::Severity::Error, "pointer cannot be mapped along with a section derived from itself", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_private_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "a private variable with incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_prohibited_region, CLASS_ERROR, (unsigned)diag::Severity::Error, "region cannot be%select{| closely}0 nested inside '%1' region%select{|; perhaps you forget to enclose 'omp %3' directive into a parallel region?|; perhaps you forget to enclose 'omp %3' directive into a for or a parallel for region with 'ordered' clause?|; perhaps you forget to enclose 'omp %3' directive into a target region?|; perhaps you forget to enclose 'omp %3' directive into a teams region?}2", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_prohibited_region_atomic, CLASS_ERROR, (unsigned)diag::Severity::Error, "OpenMP constructs may not be nested inside an atomic region", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_prohibited_region_critical_same_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot nest 'critical' regions having the same name %0", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_prohibited_region_simd, CLASS_ERROR, (unsigned)diag::Severity::Error, "OpenMP constructs may not be nested inside a simd region", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_reduction_id_not_compatible, CLASS_ERROR, (unsigned)diag::Severity::Error, "list item of type %0 is not valid for specified reduction operation: unable to provide default initialization value", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_reduction_identifier_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "in_reduction variable must have the same reduction operation as in a task_reduction clause", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_reduction_in_task, CLASS_ERROR, (unsigned)diag::Severity::Error, "reduction variables may not be accessed in an explicit task", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_reduction_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "a reduction list item with incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_reduction_non_addressable_expression, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected addressable reduction item for the task-based directives", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_reduction_ref_type_arg, CLASS_ERROR, (unsigned)diag::Severity::Error, "argument of OpenMP clause '%0' must reference the same object in all threads", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_reduction_vla_unsupported, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot generate code for reduction on %select{|array section, which requires a }0variable length array", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_reduction_with_nogroup, CLASS_ERROR, (unsigned)diag::Severity::Error, "'reduction' clause cannot be used with 'nogroup' clause", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_reduction_wrong_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "reduction type cannot be %select{qualified with 'const', 'volatile' or 'restrict'|a function|a reference|an array}0 type", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_ref_type_arg, CLASS_ERROR, (unsigned)diag::Severity::Error, "arguments of '#pragma omp %0' cannot be of reference type %1", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_region_not_file_context, CLASS_ERROR, (unsigned)diag::Severity::Error, "directive must be at file or namespace scope", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_required_access, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 variable must be %1", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_requires_clause_redeclaration, CLASS_ERROR, (unsigned)diag::Severity::Error, "Only one %0 clause can appear on a requires directive in a single translation unit", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_same_pointer_dereferenced, CLASS_ERROR, (unsigned)diag::Severity::Error, "same pointer dereferenced in multiple different ways in map clause expressions", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_schedule_nonmonotonic_ordered, CLASS_ERROR, (unsigned)diag::Severity::Error, "'schedule' clause with 'nonmonotonic' modifier cannot be specified if an 'ordered' clause is specified", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_schedule_nonmonotonic_static, CLASS_ERROR, (unsigned)diag::Severity::Error, "'nonmonotonic' modifier can only be specified with 'dynamic' or 'guided' schedule kind", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_section_function_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "section of pointer to function type %0", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_section_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "section of pointer to incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_section_length_negative, CLASS_ERROR, (unsigned)diag::Severity::Error, "section length is evaluated to a negative value %0", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_section_length_undefined, CLASS_ERROR, (unsigned)diag::Severity::Error, "section length is unspecified and cannot be inferred because subscripted value is %select{not an array|an array of unknown bound}0", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_section_not_subset_of_array, CLASS_ERROR, (unsigned)diag::Severity::Error, "array section must be a subset of the original array", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_sections_not_compound_stmt, CLASS_ERROR, (unsigned)diag::Severity::Error, "the statement for '#pragma omp sections' must be a compound statement", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_sections_substmt_not_section, CLASS_ERROR, (unsigned)diag::Severity::Error, "statement in 'omp sections' directive must be enclosed into a section region", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_simd_region_cannot_use_stmt, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' statement cannot be used in OpenMP simd region", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_single_copyprivate_with_nowait, CLASS_ERROR, (unsigned)diag::Severity::Error, "the 'copyprivate' clause must not be used with the 'nowait' clause", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_single_decl_in_declare_simd, CLASS_ERROR, (unsigned)diag::Severity::Error, "single declaration is expected after 'declare simd' directive", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_target_contains_not_only_teams, CLASS_ERROR, (unsigned)diag::Severity::Error, "target construct with nested teams region contains statements outside of the teams construct", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_threadprivate_in_clause, CLASS_ERROR, (unsigned)diag::Severity::Error, "threadprivate variables are not allowed in '%0' clause", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_threadprivate_in_target, CLASS_ERROR, (unsigned)diag::Severity::Error, "threadprivate variables cannot be used in target constructs", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_threadprivate_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "threadprivate variable with incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_typecheck_section_not_integer, CLASS_ERROR, (unsigned)diag::Severity::Error, "array section %select{lower bound|length}0 is not an integer", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_typecheck_section_value, CLASS_ERROR, (unsigned)diag::Severity::Error, "subscripted value is not an array or pointer", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_unexpected_clause_value, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected %0 in OpenMP clause '%1'", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_unexpected_schedule_modifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "modifier '%0' cannot be used along with modifier '%1'", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_union_type_not_allowed, CLASS_ERROR, (unsigned)diag::Severity::Error, "mapping of union members is not allowed", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_unknown_reduction_identifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "incorrect reduction identifier, expected one of '+', '-', '*', '&', '|', '^', '&&', '||', 'min' or 'max' or declare reduction for type %0", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_unnamed_if_clause, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected %select{|one of}0 %1 directive name modifier%select{|s}0", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_usedeviceptr_not_a_pointer, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected pointer or reference to pointer in 'use_device_ptr' clause", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_var_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "'#pragma omp %0' must appear in the scope of the %q1 variable declaration", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_var_thread_local, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable %0 cannot be threadprivate because it is %select{thread-local|a global named register variable}1", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_var_used, CLASS_ERROR, (unsigned)diag::Severity::Error, "'#pragma omp %0' must precede all references to variable %q1", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_variable_in_given_clause_and_dsa, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 variable cannot be in a %1 clause in '#pragma omp %2' directive", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_variably_modified_type_not_supported, CLASS_ERROR, (unsigned)diag::Severity::Error, "arguments of OpenMP clause '%0' in '#pragma omp %2' directive cannot be of variably-modified type %1", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_wrong_cancel_region, CLASS_ERROR, (unsigned)diag::Severity::Error, "one of 'for', 'parallel', 'sections' or 'taskgroup' is expected", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_wrong_dsa, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 variable cannot be %1", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_wrong_if_directive_name_modifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "directive name modifier '%0' is not allowed for '#pragma omp %1'", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_wrong_linear_modifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected %select{'val' modifier|one of 'ref', val' or 'uval' modifiers}0", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_wrong_linear_modifier_non_reference, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable of non-reference type %0 can be used only with 'val' modifier, but used with '%1'", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_wrong_ordered_loop_count, CLASS_ERROR, (unsigned)diag::Severity::Error, "the parameter of the 'ordered' clause must be greater than or equal to the parameter of the 'collapse' clause", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_wrong_simdlen_safelen_values, CLASS_ERROR, (unsigned)diag::Severity::Error, "the value of 'simdlen' parameter must be less than or equal to the value of the 'safelen' parameter", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_omp_wrong_var_in_declare_reduction, CLASS_ERROR, (unsigned)diag::Severity::Error, "only %select{'omp_priv' or 'omp_orig'|'omp_in' or 'omp_out'}0 variables are allowed in %select{initializer|combiner}0 expression", 0, SFINAE_SubstitutionFailure, false, true, 11)
+DIAG(err_only_annotate_after_access_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "access specifier can only have annotation attributes", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_only_constructors_take_base_inits, CLASS_ERROR, (unsigned)diag::Severity::Error, "only constructors take base initializers", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_only_enums_have_underlying_types, CLASS_ERROR, (unsigned)diag::Severity::Error, "only enumeration types have underlying types", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_addrspace_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "variables in the %0 address space can only be declared in the outermost scope of a kernel function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_atomic_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "atomic variable can be %select{assigned|initialized}0 to a variable only in global address space", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_bitfields, CLASS_ERROR, (unsigned)diag::Severity::Error, "bit-fields are not supported in OpenCL", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_block_ref_block, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot refer to a block inside block", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_block_storage_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "the __block storage type is not permitted", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_builtin_expected_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "illegal call to %0, expected %1 argument type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_builtin_pipe_arg_num, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid number of arguments to function: %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_builtin_pipe_first_arg, CLASS_ERROR, (unsigned)diag::Severity::Error, "first argument to %0 must be a pipe type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_builtin_pipe_invalid_access_modifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid pipe access modifier (expecting %0)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_builtin_pipe_invalid_arg, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid argument type to function %0 (expecting %1 having %2)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_builtin_to_addr_arg_num, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid number of arguments to function: %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_builtin_to_addr_invalid_arg, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid argument %0 to function: %1, expecting a generic pointer argument", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_cast_non_zero_to_event_t, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot cast non-zero value '%0' to 'event_t'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_cast_to_half, CLASS_ERROR, (unsigned)diag::Severity::Error, "casting to type %0 is not allowed", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_constant_no_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable in constant address space must be initialized", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_enqueue_kernel_blocks_no_args, CLASS_ERROR, (unsigned)diag::Severity::Error, "blocks with parameters are not accepted in this prototype of enqueue_kernel call", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_enqueue_kernel_blocks_non_local_void_args, CLASS_ERROR, (unsigned)diag::Severity::Error, "blocks used in enqueue_kernel call are expected to have parameters of type 'local void*'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_enqueue_kernel_incorrect_args, CLASS_ERROR, (unsigned)diag::Severity::Error, "illegal call to enqueue_kernel, incorrect argument types", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_enqueue_kernel_invalid_local_size_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "illegal call to enqueue_kernel, parameter needs to be specified as integer type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_enqueue_kernel_local_size_args, CLASS_ERROR, (unsigned)diag::Severity::Error, "mismatch in number of block parameters and local size arguments passed", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_ext_vector_component_invalid_length, CLASS_ERROR, (unsigned)diag::Severity::Error, "vector component access has invalid length %0. Supported: 1,2,3,4,8,16.", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_extern_block_declaration, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid block variable declaration - using 'extern' storage class is disallowed", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_function_pointer, CLASS_ERROR, (unsigned)diag::Severity::Error, "pointers to functions are not allowed", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_function_variable, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{non-kernel function|function scope}0 variable cannot be declared in %1 address space", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_global_invalid_addr_space, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{program scope|static local|extern}0 variable must reside in %1 address space", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_half_declaration, CLASS_ERROR, (unsigned)diag::Severity::Error, "declaring variable of type %0 is not allowed", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_half_load_store, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{loading directly from|assigning directly to}0 pointer to type %1 requires cl_khr_fp16. Use vector data %select{load|store}0 builtin functions instead", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_half_param, CLASS_ERROR, (unsigned)diag::Severity::Error, "declaring function parameter of type %0 is not allowed; did you forget * ?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_implicit_function_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "implicit declaration of function %0 is invalid in OpenCL", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_implicit_vector_conversion, CLASS_ERROR, (unsigned)diag::Severity::Error, "implicit conversions between vector types (%0 and %1) are not permitted", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_invalid_access_qualifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "access qualifier can only be used for pipe and image type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_invalid_block_declaration, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid block variable declaration - must be %select{const qualified|initialized}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_invalid_read_write, CLASS_ERROR, (unsigned)diag::Severity::Error, "access qualifier %0 can not be used for %1 %select{|prior to OpenCL version 2.0}2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_invalid_return, CLASS_ERROR, (unsigned)diag::Severity::Error, "declaring function return value of type %0 is not allowed %select{; did you forget * ?|}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_invalid_type_array, CLASS_ERROR, (unsigned)diag::Severity::Error, "array of %0 type is invalid in OpenCL", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_kernel_attr, CLASS_ERROR, (unsigned)diag::Severity::Error, "attribute %0 can only be applied to an OpenCL kernel function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_multiple_access_qualifiers, CLASS_ERROR, (unsigned)diag::Severity::Error, "multiple access qualifiers", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_no_main, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{function|kernel}0 cannot be called 'main'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_nonconst_global_sampler, CLASS_ERROR, (unsigned)diag::Severity::Error, "global sampler requires a const or constant address space qualifier", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_pointer_to_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "pointer to type %0 is invalid in OpenCL", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_ptrptr_kernel_param, CLASS_ERROR, (unsigned)diag::Severity::Error, "kernel parameter cannot be declared as a pointer to a pointer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_requires_extension, CLASS_ERROR, (unsigned)diag::Severity::Error, "use of %select{type|declaration}0 %1 requires %2 extension to be enabled", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_return_value_with_address_space, CLASS_ERROR, (unsigned)diag::Severity::Error, "return value cannot be qualified with address space", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_scalar_type_rank_greater_than_vector_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "scalar operand type has greater rank than the type of the vector element. (%0 and %1)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_sizeof_alignof_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid application of '%select{sizeof|alignof|vec_step|__builtin_omp_required_simd_align|__alignof}0' to a void type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_taking_address_capture, CLASS_ERROR, (unsigned)diag::Severity::Error, "taking address of a capture is not allowed", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_ternary_with_block, CLASS_ERROR, (unsigned)diag::Severity::Error, "block type cannot be used as expression in ternary expression in OpenCL", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_type_can_only_be_used_as_function_parameter, CLASS_ERROR, (unsigned)diag::Severity::Error, "type %0 can only be used as a function parameter in OpenCL", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_type_struct_or_union_field, CLASS_ERROR, (unsigned)diag::Severity::Error, "the %0 type cannot be used to declare a structure or union field", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_variadic_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid prototype, variadic arguments are not allowed in OpenCL", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_vla, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable length arrays are not supported in OpenCL", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_openmp_default_simd_align_expr, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid application of '__builtin_omp_required_simd_align' to an expression, only type is allowed", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_operator_arrow_circular, CLASS_ERROR, (unsigned)diag::Severity::Error, "circular pointer delegation detected", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_operator_arrow_depth_exceeded, CLASS_ERROR, (unsigned)diag::Severity::Error, "use of 'operator->' on type %0 would invoke a sequence of more than %1 'operator->' calls", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_operator_delete_dependent_param_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 cannot take a dependent type as first parameter; use %1 instead", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_operator_delete_param_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "first parameter of %0 must have type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_operator_new_default_arg, CLASS_ERROR, (unsigned)diag::Severity::Error, "parameter of %0 cannot have a default argument", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_operator_new_delete_declared_in_namespace, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 cannot be declared inside a namespace", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_operator_new_delete_declared_static, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 cannot be declared static in global scope", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_operator_new_delete_dependent_result_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 cannot have a dependent return type; use %1 instead", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_operator_new_delete_invalid_result_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 must return type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_operator_new_delete_template_too_few_parameters, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 template must have at least two parameters", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_operator_new_delete_too_few_parameters, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 must have at least one parameter", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_operator_new_dependent_param_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 cannot take a dependent type as first parameter; use size_t (%1) instead", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_operator_new_param_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 takes type size_t (%1) as first parameter", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_operator_overload_default_arg, CLASS_ERROR, (unsigned)diag::Severity::Error, "parameter of overloaded %0 cannot have a default argument", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_operator_overload_must_be, CLASS_ERROR, (unsigned)diag::Severity::Error, "overloaded %0 must be a %select{unary|binary|unary or binary}2 operator (has %1 parameter%s1)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_operator_overload_must_be_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "overloaded %0 must be a non-static member function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_operator_overload_needs_class_or_enum, CLASS_ERROR, (unsigned)diag::Severity::Error, "overloaded %0 must have at least one parameter of class or enumeration type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_operator_overload_post_incdec_must_be_int, CLASS_ERROR, (unsigned)diag::Severity::Error, "parameter of overloaded post-%select{increment|decrement}1 operator must have type 'int' (not %0)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_operator_overload_static, CLASS_ERROR, (unsigned)diag::Severity::Error, "overloaded %0 cannot be a static member function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_operator_overload_variadic, CLASS_ERROR, (unsigned)diag::Severity::Error, "overloaded %0 cannot be variadic", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_os_log_argument_too_big, CLASS_ERROR, (unsigned)diag::Severity::Error, "os_log() argument %0 is too big (%1 bytes, max %2)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_os_log_format_not_string_constant, CLASS_ERROR, (unsigned)diag::Severity::Error, "os_log() format argument is not a string constant", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_out_of_line_default_deletes, CLASS_ERROR, (unsigned)diag::Severity::Error, "defaulting this %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 would delete it after its first declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_out_of_line_qualified_id_type_names_constructor, CLASS_ERROR, (unsigned)diag::Severity::Error, "qualified reference to %0 is a constructor name rather than a %select{template name|type}1 in this context", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_overflow_builtin_must_be_int, CLASS_ERROR, (unsigned)diag::Severity::Error, "operand argument to overflow builtin must be an integer (%0 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_overflow_builtin_must_be_ptr_int, CLASS_ERROR, (unsigned)diag::Severity::Error, "result argument to overflow builtin must be a pointer to a non-const integer (%0 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_override_exception_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "exception specification of overriding function is more lax than base version", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_ambiguous_call, CLASS_ERROR, (unsigned)diag::Severity::Error, "call to %0 is ambiguous", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_ambiguous_conversion_in_cast, CLASS_ERROR, (unsigned)diag::Severity::Error, "ambiguous conversion for %select{|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from %1 to %2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_ambiguous_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "call to constructor of %0 is ambiguous", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_ambiguous_member_call, CLASS_ERROR, (unsigned)diag::Severity::Error, "call to member function %0 is ambiguous", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_ambiguous_object_call, CLASS_ERROR, (unsigned)diag::Severity::Error, "call to object of type %0 is ambiguous", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_ambiguous_oper_binary, CLASS_ERROR, (unsigned)diag::Severity::Error, "use of overloaded operator '%0' is ambiguous (with operand types %1 and %2)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_ambiguous_oper_unary, CLASS_ERROR, (unsigned)diag::Severity::Error, "use of overloaded operator '%0' is ambiguous (operand type %1)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_deleted_call, CLASS_ERROR, (unsigned)diag::Severity::Error, "call to %select{unavailable|deleted}0 function %1%2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_deleted_conversion_in_cast, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from %1 to %2 uses deleted function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_deleted_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "call to %select{unavailable|deleted}0 constructor of %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_deleted_member_call, CLASS_ERROR, (unsigned)diag::Severity::Error, "call to %select{unavailable|deleted}0 member function %1%2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_deleted_object_call, CLASS_ERROR, (unsigned)diag::Severity::Error, "call to %select{unavailable|deleted}0 function call operator in type %1%2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_deleted_oper, CLASS_ERROR, (unsigned)diag::Severity::Error, "overload resolution selected %select{unavailable|deleted}0 operator '%1'%2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_deleted_special_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "call to implicitly-deleted %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor|function}0 of %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_deleted_special_oper, CLASS_ERROR, (unsigned)diag::Severity::Error, "object of type %0 cannot be %select{constructed|copied|moved|assigned|assigned|destroyed}1 because its %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}1 is implicitly deleted", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_diff_return_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "functions that differ only in their return type cannot be overloaded", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_no_conversion_in_cast, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot convert %1 to %2 without a conversion operator", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_no_oper, CLASS_ERROR, (unsigned)diag::Severity::Error, "type %0 does not provide a %select{subscript|call}1 operator", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_no_viable_conversion_in_cast, CLASS_ERROR, (unsigned)diag::Severity::Error, "no matching conversion for %select{|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from %1 to %2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_no_viable_function_in_call, CLASS_ERROR, (unsigned)diag::Severity::Error, "no matching function for call to %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_no_viable_function_in_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "no matching constructor for initialization of %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_no_viable_literal_operator, CLASS_ERROR, (unsigned)diag::Severity::Error, "no matching literal operator for call to %0%select{| with argument of type %2| with arguments of types %2 and %3}1%select{| or 'const char *'}4%select{|, and no matching literal operator template}5", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_no_viable_member_function_in_call, CLASS_ERROR, (unsigned)diag::Severity::Error, "no matching member function for call to %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_no_viable_object_call, CLASS_ERROR, (unsigned)diag::Severity::Error, "no matching function for call to object of type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_no_viable_oper, CLASS_ERROR, (unsigned)diag::Severity::Error, "no viable overloaded '%0'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_no_viable_subscript, CLASS_ERROR, (unsigned)diag::Severity::Error, "no viable overloaded operator[] for type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_static_nonstatic_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "static and non-static member functions with the same parameter types cannot be overloaded", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_unresolvable, CLASS_ERROR, (unsigned)diag::Severity::Error, "reference to %select{overloaded|multiversioned}1 function could not be resolved; did you mean to call it%select{| with no arguments}0?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ownership_returns_index_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "'ownership_returns' attribute index does not match; here it is %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ownership_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute only applies to %select{pointer|integer}1 arguments", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_pack_expansion_length_conflict, CLASS_ERROR, (unsigned)diag::Severity::Error, "pack expansion contains parameter packs %0 and %1 that have different lengths (%2 vs. %3)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_pack_expansion_length_conflict_multilevel, CLASS_ERROR, (unsigned)diag::Severity::Error, "pack expansion contains parameter pack %0 that has a different length (%1 vs. %2) from outer parameter packs", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_pack_expansion_length_conflict_partial, CLASS_ERROR, (unsigned)diag::Severity::Error, "pack expansion contains parameter pack %0 that has a different length (at least %1 vs. %2) from outer parameter packs", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_pack_expansion_member_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "pack expansion for initialization of member %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_pack_expansion_without_parameter_packs, CLASS_ERROR, (unsigned)diag::Severity::Error, "pack expansion does not contain any unexpanded parameter packs", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_param_default_argument, CLASS_ERROR, (unsigned)diag::Severity::Error, "C does not support default arguments", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_param_default_argument_member_template_redecl, CLASS_ERROR, (unsigned)diag::Severity::Error, "default arguments cannot be added to an out-of-line definition of a member of a %select{class template|class template partial specialization|nested class in a template}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_param_default_argument_missing, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing default argument on parameter", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_param_default_argument_missing_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing default argument on parameter %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_param_default_argument_nonfunc, CLASS_ERROR, (unsigned)diag::Severity::Error, "default arguments can only be specified for parameters in a function declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_param_default_argument_on_parameter_pack, CLASS_ERROR, (unsigned)diag::Severity::Error, "parameter pack cannot have a default argument", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_param_default_argument_redefinition, CLASS_ERROR, (unsigned)diag::Severity::Error, "redefinition of default argument", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_param_default_argument_references_local, CLASS_ERROR, (unsigned)diag::Severity::Error, "default argument references local variable %0 of enclosing function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_param_default_argument_references_param, CLASS_ERROR, (unsigned)diag::Severity::Error, "default argument references parameter %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_param_default_argument_references_this, CLASS_ERROR, (unsigned)diag::Severity::Error, "default argument references 'this'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_param_default_argument_template_redecl, CLASS_ERROR, (unsigned)diag::Severity::Error, "default arguments cannot be added to a function template that has already been declared", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_param_with_void_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "argument may not have 'void' type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_parameter_name_omitted, CLASS_ERROR, (unsigned)diag::Severity::Error, "parameter name omitted", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_parameter_shadow_capture, CLASS_ERROR, (unsigned)diag::Severity::Error, "a lambda parameter cannot shadow an explicitly captured entity", 0, SFINAE_SubstitutionFailure, false, true, 3)
+DIAG(err_parameters_retval_cannot_have_fp16_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{parameters|function return value}0 cannot have __fp16 type; did you forget * ?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_parens_pointer_member_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot parenthesize the name of a method when forming a member pointer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_partial_spec_args_match_primary_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{class|variable}0 template partial specialization does not specialize any template argument; to %select{declare|define}1 the primary template, remove the template argument list", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_partial_spec_fully_specialized, CLASS_ERROR, (unsigned)diag::Severity::Error, "partial specialization of %0 does not use any of its template parameters", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_partial_spec_ordering_ambiguous, CLASS_ERROR, (unsigned)diag::Severity::Error, "ambiguous partial specializations of %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_partial_spec_redeclared, CLASS_ERROR, (unsigned)diag::Severity::Error, "class template partial specialization %0 cannot be redeclared", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_partial_specialization_friend, CLASS_ERROR, (unsigned)diag::Severity::Error, "partial specialization cannot be declared as a friend", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_placement_new_non_placement_delete, CLASS_ERROR, (unsigned)diag::Severity::Error, "'new' expression with placement arguments refers to non-placement 'operator delete'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_pointer_to_member_call_drops_quals, CLASS_ERROR, (unsigned)diag::Severity::Error, "call to pointer to member function of type %0 drops '%1' qualifier%s2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_pointer_to_member_oper_value_classify, CLASS_ERROR, (unsigned)diag::Severity::Error, "pointer-to-member function type %0 can only be called on an %select{rvalue|lvalue}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_pointer_to_member_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid use of pointer to member type after %select{.*|->*}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ppc_builtin_only_on_pwr7, CLASS_ERROR, (unsigned)diag::Severity::Error, "this builtin is only valid on POWER7 or later CPUs", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_pragma_attr_attr_no_push, CLASS_ERROR, (unsigned)diag::Severity::Error, "'#pragma clang attribute' attribute with no matching '#pragma clang attribute push'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_pragma_attribute_invalid_matchers, CLASS_ERROR, (unsigned)diag::Severity::Error, "attribute %0 can't be applied to %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_pragma_attribute_matcher_negated_subrule_contradicts_subrule, CLASS_ERROR, (unsigned)diag::Severity::Error, "negated attribute subject matcher sub-rule '%0' contradicts sub-rule '%1'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_pragma_attribute_matcher_subrule_contradicts_rule, CLASS_ERROR, (unsigned)diag::Severity::Error, "redundant attribute subject matcher sub-rule '%0'; '%1' already matches those declarations", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_pragma_attribute_no_pop_eof, CLASS_ERROR, (unsigned)diag::Severity::Error, "unterminated '#pragma clang attribute push' at end of file", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_pragma_attribute_stack_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "'#pragma clang attribute %select{%1.|}0pop' with no matching '#pragma clang attribute %select{%1.|}0push'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_pragma_loop_compatibility, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{incompatible|duplicate}0 directives '%1' and '%2'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_pragma_loop_invalid_argument_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid argument of type %0; expected an integer type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_pragma_loop_invalid_argument_value, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{invalid value '%0'; must be positive|value '%0' is too large}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_pragma_loop_precedes_nonloop, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected a for, while, or do-while loop to follow '%0'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_pragma_options_align_mac68k_target_unsupported, CLASS_ERROR, (unsigned)diag::Severity::Error, "mac68k alignment pragma is not supported on this target", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_pragma_pop_visibility_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "#pragma visibility pop with no matching #pragma visibility push", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_pragma_push_visibility_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "#pragma visibility push with no matching #pragma visibility pop", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_private_ivar_access, CLASS_ERROR, (unsigned)diag::Severity::Error, "instance variable %0 is private", 0, SFINAE_AccessControl, false, true, 2)
+DIAG(err_property_accessor_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "type of property %0 (%1) does not match type of accessor %2 (%3)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_property_found_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "property %0 found on object of type %1; did you mean to access it with the \".\" operator?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_property_function_in_objc_container, CLASS_ERROR, (unsigned)diag::Severity::Error, "use of Objective-C property in function nested in Objective-C container not supported, move function outside its container", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_property_implemented, CLASS_ERROR, (unsigned)diag::Severity::Error, "property %0 is already implemented", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_property_is_variably_modified, CLASS_ERROR, (unsigned)diag::Severity::Error, "property %0 has a variably modified type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_property_ivar_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "type of property %0 (%1) does not match type of instance variable %2 (%3)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_property_method_unavailable, CLASS_ERROR, (unsigned)diag::Severity::Error, "property access is using %0 method which is unavailable", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_property_not_as_forward_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "property %0 refers to an incomplete Objective-C class %1 (with no @interface available)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_property_not_found, CLASS_ERROR, (unsigned)diag::Severity::Error, "property %0 not found on object of type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_property_not_found_forward_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "property %0 cannot be found in forward class object %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_property_not_found_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "property %0 not found on object of type %1; did you mean %2?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_property_setter_ambiguous_use, CLASS_ERROR, (unsigned)diag::Severity::Error, "synthesized properties %0 and %1 both claim setter %2 - use of this setter will cause unexpected behavior", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_property_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "property cannot have array or function type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_protected_ivar_access, CLASS_ERROR, (unsigned)diag::Severity::Error, "instance variable %0 is protected", 0, SFINAE_AccessControl, false, true, 2)
+DIAG(err_protocol_has_circular_dependency, CLASS_ERROR, (unsigned)diag::Severity::Error, "protocol has circular dependency", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_protocol_property_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "property %select{of type %1|with attribute '%1'|without attribute '%1'|with getter %1|with setter %1}0 was selected for synthesis", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_pseudo_dtor_base_not_scalar, CLASS_ERROR, (unsigned)diag::Severity::Error, "object expression of non-scalar type %0 cannot be used in a pseudo-destructor expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_pseudo_dtor_call_with_args, CLASS_ERROR, (unsigned)diag::Severity::Error, "call to pseudo-destructor cannot have any arguments", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_pseudo_dtor_destructor_non_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 does not refer to a type name in pseudo-destructor expression; expected the name of type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_pseudo_dtor_type_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "the type of object expression %diff{($) does not match the type being destroyed ($)|does not match the type being destroyed}0,1 in pseudo-destructor expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_pure_friend, CLASS_ERROR, (unsigned)diag::Severity::Error, "friend declaration cannot have a pure-specifier", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_qualified_catch_declarator, CLASS_ERROR, (unsigned)diag::Severity::Error, "exception declarator cannot be qualified", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_qualified_friend_def, CLASS_ERROR, (unsigned)diag::Severity::Error, "friend function definition cannot be qualified with '%0'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_qualified_friend_no_match, CLASS_ERROR, (unsigned)diag::Severity::Error, "friend declaration of %0 does not match any declaration in %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_qualified_member_nonclass, CLASS_ERROR, (unsigned)diag::Severity::Error, "qualified member access refers to a member in %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_qualified_member_of_unrelated, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 is not a member of class %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_qualified_objc_access, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{property|instance variable}0 access cannot be qualified with '%1'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_qualified_objc_catch_parm, CLASS_ERROR, (unsigned)diag::Severity::Error, "@catch parameter declarator cannot be qualified", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_qualified_param_declarator, CLASS_ERROR, (unsigned)diag::Severity::Error, "parameter declarator cannot be qualified", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_qualified_typedef_declarator, CLASS_ERROR, (unsigned)diag::Severity::Error, "typedef declarator cannot be qualified", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_range_on_array_parameter, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot build range expression with array function parameter %0 since parameter with array type %1 is treated as pointer type %2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_readonly_message_assignment, CLASS_ERROR, (unsigned)diag::Severity::Error, "assigning to 'readonly' return result of an Objective-C message not allowed", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_realimag_invalid_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid type %0 to %1 operator", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_record_with_pointers_kernel_param, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{struct|union}0 kernel parameters may not contain pointers", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_recursive_default_argument, CLASS_ERROR, (unsigned)diag::Severity::Error, "recursive evaluation of default argument", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_recursive_superclass, CLASS_ERROR, (unsigned)diag::Severity::Error, "trying to recursively use %0 as superclass of %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_redeclaration_different_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "redeclaration of %0 with a different type%diff{: $ vs $|}1,2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_redefinition, CLASS_ERROR, (unsigned)diag::Severity::Error, "redefinition of %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_redefinition_different_kind, CLASS_ERROR, (unsigned)diag::Severity::Error, "redefinition of %0 as different kind of symbol", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_redefinition_different_namespace_alias, CLASS_ERROR, (unsigned)diag::Severity::Error, "redefinition of %0 as an alias for a different namespace", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_redefinition_different_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "redefinition of %0 with a different type%diff{: $ vs $|}1,2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_redefinition_different_typedef, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{typedef|type alias|type alias template}0 redefinition with different types%diff{ ($ vs $)|}1,2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_redefinition_extern_inline, CLASS_ERROR, (unsigned)diag::Severity::Error, "redefinition of a 'extern inline' function %0 is not supported in %select{C99 mode|C++}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_redefinition_of_enumerator, CLASS_ERROR, (unsigned)diag::Severity::Error, "redefinition of enumerator %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_redefinition_of_label, CLASS_ERROR, (unsigned)diag::Severity::Error, "redefinition of label %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_redefinition_variably_modified_typedef, CLASS_ERROR, (unsigned)diag::Severity::Error, "redefinition of %select{typedef|type alias}0 for variably-modified type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ref_array_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot refer to declaration with an array type inside block", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ref_bad_target, CLASS_ERROR, (unsigned)diag::Severity::Error, "reference to %select{__device__|__global__|__host__|__host__ __device__}0 function %1 in %select{__device__|__global__|__host__|__host__ __device__}2 function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ref_bad_target_global_initializer, CLASS_ERROR, (unsigned)diag::Severity::Error, "reference to %select{__device__|__global__|__host__|__host__ __device__}0 function %1 in global initializer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ref_flexarray_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot refer to declaration of structure variable with flexible array member inside block", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ref_init_ambiguous, CLASS_ERROR, (unsigned)diag::Severity::Error, "reference initialization of type %0 with initializer of type %1 is ambiguous", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ref_non_value, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 does not refer to a value", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ref_qualifier_constructor, CLASS_ERROR, (unsigned)diag::Severity::Error, "ref-qualifier '%select{&&|&}0' is not allowed on a constructor", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ref_qualifier_destructor, CLASS_ERROR, (unsigned)diag::Severity::Error, "ref-qualifier '%select{&&|&}0' is not allowed on a destructor", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ref_qualifier_overload, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot overload a member function %select{without a ref-qualifier|with ref-qualifier '&'|with ref-qualifier '&&'}0 with a member function %select{without a ref-qualifier|with ref-qualifier '&'|with ref-qualifier '&&'}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ref_vm_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot refer to declaration with a variably modified type inside block", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_reference_bind_drops_quals, CLASS_ERROR, (unsigned)diag::Severity::Error, "binding value %diff{of type $ to reference to type $|to reference}0,1 drops %select{<<ERROR>>|'const'|'restrict'|'const' and 'restrict'|'volatile'|'const' and 'volatile'|'restrict' and 'volatile'|'const', 'restrict', and 'volatile'}2 qualifier%plural{1:|2:|4:|:s}2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_reference_bind_failed, CLASS_ERROR, (unsigned)diag::Severity::Error, "reference %diff{to %select{type|incomplete type}1 $ could not bind to an %select{rvalue|lvalue}2 of type $|could not bind to %select{rvalue|lvalue}2 of incompatible type}0,3", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_reference_bind_init_list, CLASS_ERROR, (unsigned)diag::Severity::Error, "reference to type %0 cannot bind to an initializer list", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_reference_bind_to_bitfield, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{non-const|volatile}0 reference cannot bind to bit-field%select{| %1}2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_reference_bind_to_vector_element, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{non-const|volatile}0 reference cannot bind to vector element", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_reference_capture_with_reference_default, CLASS_ERROR, (unsigned)diag::Severity::Error, "'&' cannot precede a capture when the capture default is '&'", 0, SFINAE_SubstitutionFailure, false, true, 3)
+DIAG(err_reference_has_multiple_inits, CLASS_ERROR, (unsigned)diag::Severity::Error, "reference cannot be initialized with multiple values", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_reference_pipe_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "pipes packet types cannot be of reference type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_reference_to_local_in_enclosing_context, CLASS_ERROR, (unsigned)diag::Severity::Error, "reference to local %select{variable|binding}1 %0 declared in enclosing %select{%3|block literal|lambda expression|context}2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_reference_to_void, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot form a reference to 'void'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_reference_var_requires_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "declaration of reference variable %0 requires an initializer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_reference_without_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "reference to type %0 requires an initializer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_regparm_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "function declared with regparm(%0) attribute was previously declared %plural{0:without the regparm|:with the regparm(%1)}1 attribute", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_repeat_attribute, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute cannot be repeated", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_require_constant_init_failed, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable does not have a constant initializer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_restricted_superclass_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot subclass a class that was declared with the 'objc_subclassing_restricted' attribute", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ret_local_block, CLASS_ERROR, (unsigned)diag::Severity::Error, "returning block that lives on the local stack", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_rethrow_used_outside_catch, CLASS_ERROR, (unsigned)diag::Severity::Error, "@throw (rethrow) used outside of a @catch block", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_return_block_has_expr, CLASS_ERROR, (unsigned)diag::Severity::Error, "void block should not return a value", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_return_in_captured_stmt, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot return from %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_return_in_constructor_handler, CLASS_ERROR, (unsigned)diag::Severity::Error, "return in the catch of a function try block of a constructor is illegal", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_return_in_coroutine, CLASS_ERROR, (unsigned)diag::Severity::Error, "return statement not allowed in coroutine; did you mean 'co_return'?", 0, SFINAE_SubstitutionFailure, false, true, 14)
+DIAG(err_return_init_list, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{void function|void method|constructor|destructor}1 %0 must not return a value", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_root_class_cannot_use_super, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 cannot use 'super' because it is a root class", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_rref_in_exception_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "rvalue reference type %0 is not allowed in exception specification", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_sampler_argument_required, CLASS_ERROR, (unsigned)diag::Severity::Error, "sampler_t variable required - got %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_sampler_initializer_not_integer, CLASS_ERROR, (unsigned)diag::Severity::Error, "sampler_t initialization requires 32-bit integer, not %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_second_argument_to_cwsc_not_pointer, CLASS_ERROR, (unsigned)diag::Severity::Error, "second argument to __builtin_call_with_static_chain must be of pointer type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_second_parameter_to_va_arg_abstract, CLASS_ERROR, (unsigned)diag::Severity::Error, "second argument to 'va_arg' is of abstract type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_second_parameter_to_va_arg_incomplete, CLASS_ERROR, (unsigned)diag::Severity::Error, "second argument to 'va_arg' is of incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_section_conflict, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 causes a section type conflict with %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_seh_in_a_coroutine_with_cxx_exceptions, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot use SEH '__try' in a coroutine when C++ exceptions are enabled", 0, SFINAE_SubstitutionFailure, false, true, 14)
+DIAG(err_seh_try_outside_functions, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot use SEH '__try' in blocks, captured regions, or Obj-C method decls", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_seh_try_unsupported, CLASS_ERROR, (unsigned)diag::Severity::Error, "SEH '__try' is not supported on this target", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_selected_explicit_constructor, CLASS_ERROR, (unsigned)diag::Severity::Error, "chosen constructor is explicit in copy-initialization", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_selector_element_const_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "selector element of type %0 cannot be a constant l-value expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_selector_element_not_lvalue, CLASS_ERROR, (unsigned)diag::Severity::Error, "selector element is not a valid lvalue", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_selector_element_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "selector element type %0 is not a valid object", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_setter_type_void, CLASS_ERROR, (unsigned)diag::Severity::Error, "type of setter must be void", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_shared_var_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "initialization is not supported for __shared__ variables.", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_shift_rhs_only_vector, CLASS_ERROR, (unsigned)diag::Severity::Error, "requested shift is a vector of type %0 but the first operand is not a vector (%1)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_shufflevector_argument_too_large, CLASS_ERROR, (unsigned)diag::Severity::Error, "index for __builtin_shufflevector must be less than the total number of vector elements", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_shufflevector_nonconstant_argument, CLASS_ERROR, (unsigned)diag::Severity::Error, "index for __builtin_shufflevector must be a constant integer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_sizeof_alignof_function_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid application of '%select{sizeof|alignof|vec_step|__builtin_omp_required_simd_align|__alignof}0' to a function type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_sizeof_alignof_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid application of '%select{sizeof|alignof|vec_step|__builtin_omp_required_simd_align|__alignof}0' to an incomplete type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_sizeof_alignof_typeof_bitfield, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid application of '%select{sizeof|alignof|typeof}0' to bit-field", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_sizeof_nonfragile_interface, CLASS_ERROR, (unsigned)diag::Severity::Error, "application of '%select{alignof|sizeof}1' to interface %0 is not supported on this architecture and platform", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_sizeof_pack_no_pack_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 does not refer to the name of a parameter pack", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_sizeof_pack_no_pack_name_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 does not refer to the name of a parameter pack; did you mean %1?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_spaceship_argument_narrowing, CLASS_ERROR, (unsigned)diag::Severity::Error, "argument to 'operator<=>' %select{cannot be narrowed from type %1 to %2|evaluates to %1, which cannot be narrowed to type %2}0", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_spec_member_not_instantiated, CLASS_ERROR, (unsigned)diag::Severity::Error, "specialization of member %q0 does not specialize an instantiated member", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_specialization_after_instantiation, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit specialization of %0 after instantiation", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_specialization_not_primary_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot reference member of primary template because deduced class template specialization %0 is %select{instantiated from a partial|an explicit}1 specialization", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_specialize_member_of_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot specialize %select{|(with 'template<>') }0a member of an unspecialized template", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_standalone_class_nested_name_specifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "forward declaration of %select{class|struct|interface|union|enum}0 cannot have a nested name specifier", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_static_assert_expression_is_not_constant, CLASS_ERROR, (unsigned)diag::Severity::Error, "static_assert expression is not an integral constant expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_static_assert_failed, CLASS_ERROR, (unsigned)diag::Severity::Error, "static_assert failed%select{ %1|}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_static_assert_requirement_failed, CLASS_ERROR, (unsigned)diag::Severity::Error, "static_assert failed due to requirement '%0'%select{ %2|}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_static_block_func, CLASS_ERROR, (unsigned)diag::Severity::Error, "function declared in block scope cannot have 'static' storage class", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_static_data_member_not_allowed_in_anon_struct, CLASS_ERROR, (unsigned)diag::Severity::Error, "static data member %0 not allowed in anonymous struct", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_static_data_member_not_allowed_in_local_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "static data member %0 not allowed in local class %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_static_data_member_reinitialization, CLASS_ERROR, (unsigned)diag::Severity::Error, "static data member %0 already has an initializer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_static_downcast_via_virtual, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot cast %0 to %1 via virtual base %2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_static_function_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "variables in function scope cannot be declared static", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_static_illegal_in_new, CLASS_ERROR, (unsigned)diag::Severity::Error, "the 'static' modifier for the array size is not legal in new expressions", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_static_kernel, CLASS_ERROR, (unsigned)diag::Severity::Error, "kernel functions cannot be declared static", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_static_main, CLASS_ERROR, (unsigned)diag::Severity::Error, "'main' is not allowed to be declared static", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_static_non_static, CLASS_ERROR, (unsigned)diag::Severity::Error, "static declaration of %0 follows non-static declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_static_not_bitfield, CLASS_ERROR, (unsigned)diag::Severity::Error, "static member %0 cannot be a bit-field", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_static_out_of_line, CLASS_ERROR, (unsigned)diag::Severity::Error, "'static' can only be specified inside the class definition", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_static_overrides_virtual, CLASS_ERROR, (unsigned)diag::Severity::Error, "'static' member function %0 overrides a virtual function in a base class", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_statically_allocated_object, CLASS_ERROR, (unsigned)diag::Severity::Error, "interface type cannot be statically allocated", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_std_compare_type_not_supported, CLASS_ERROR, (unsigned)diag::Severity::Error, "standard library implementation of %0 is not supported; %select{member '%2' does not have expected form|member '%2' is missing|the type is not trivially copyable|the type does not have the expected form}1", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_std_type_trait_not_class_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "unsupported standard library implementation: 'std::%0' is not a class template", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_stmt_attribute_invalid_on_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute cannot be applied to a declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_storage_class_for_static_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "static data member definition cannot specify a storage class", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_storage_spec_on_catch_parm, CLASS_ERROR, (unsigned)diag::Severity::Error, "@catch parameter cannot have storage specifier '%0'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_storageclass_invalid_for_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "storage class specified for a member declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_strong_property, CLASS_ERROR, (unsigned)diag::Severity::Error, "existing instance variable %1 for strong property %0 may not be __weak", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_subscript_function_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "subscript of pointer to function type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_subscript_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "subscript of pointer to incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_subscript_nonfragile_interface, CLASS_ERROR, (unsigned)diag::Severity::Error, "subscript requires size of interface %0, which is not constant for this architecture and platform", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_super_in_lambda_unsupported, CLASS_ERROR, (unsigned)diag::Severity::Error, "use of '__super' inside a lambda is unsupported", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_swift_abi_parameter_wrong_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' parameter must have pointer%select{| to unqualified pointer}1 type; type here is %2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_swift_error_result_not_after_swift_context, CLASS_ERROR, (unsigned)diag::Severity::Error, "'swift_error_result' parameter must follow 'swift_context' parameter", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_swift_indirect_result_not_first, CLASS_ERROR, (unsigned)diag::Severity::Error, "'swift_indirect_result' parameters must be first parameters of function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_swift_param_attr_not_swiftcall, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' parameter can only be used with swiftcall calling convention", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_switch_explicit_conversion, CLASS_ERROR, (unsigned)diag::Severity::Error, "switch condition type %0 requires explicit conversion to %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_switch_incomplete_class_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "switch condition has incomplete class type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_switch_into_protected_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot jump from switch statement to this case label", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_switch_multiple_conversions, CLASS_ERROR, (unsigned)diag::Severity::Error, "multiple conversions from switch condition type %0 to an integral or enumeration type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_synthesize_category_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "@synthesize not allowed in a category's implementation", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_synthesize_on_class_property, CLASS_ERROR, (unsigned)diag::Severity::Error, "@synthesize not allowed on a class property %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_synthesize_variable_sized_ivar, CLASS_ERROR, (unsigned)diag::Severity::Error, "synthesized property with variable size type %0 requires an existing instance variable", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_synthesizing_arc_weak_property_disabled, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot synthesize weak property in file using manual reference counting", 0, SFINAE_SubstitutionFailure, false, true, 9)
+DIAG(err_synthesizing_arc_weak_property_no_runtime, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot synthesize weak property because the current deployment target does not support weak references", 0, SFINAE_SubstitutionFailure, false, true, 9)
+DIAG(err_systemz_invalid_tabort_code, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid transaction abort code", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_tag_definition_of_typedef, CLASS_ERROR, (unsigned)diag::Severity::Error, "definition of type %0 conflicts with %select{typedef|type alias}1 of the same name", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_tag_index_out_of_range, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{type tag|argument}0 index %1 is greater than the number of arguments specified", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_tag_reference_conflict, CLASS_ERROR, (unsigned)diag::Severity::Error, "implicit declaration introduced by elaborated type conflicts with a %select{non-struct type|non-class type|non-union type|non-enum type|typedef|type alias|template|type alias template|template template argument}0 of the same name", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_tag_reference_non_tag, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{non-struct type|non-class type|non-union type|non-enum type|typedef|type alias|template|type alias template|template template argument}1 %0 cannot be referenced with a %select{struct|interface|union|class|enum}2 specifier", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_tagless_friend_type_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "friend type templates must use an elaborated type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_temp_copy_ambiguous, CLASS_ERROR, (unsigned)diag::Severity::Error, "ambiguous constructor call when %select{copying variable|copying parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_temp_copy_deleted, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{copying variable|copying parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1 invokes deleted constructor", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_temp_copy_incomplete, CLASS_ERROR, (unsigned)diag::Severity::Error, "copying a temporary object of incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_temp_copy_no_viable, CLASS_ERROR, (unsigned)diag::Severity::Error, "no viable constructor %select{copying variable|copying parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_arg_address_of_non_pointer, CLASS_ERROR, (unsigned)diag::Severity::Error, "address taken in non-type template argument for template parameter of reference type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_arg_deduced_incomplete_pack, CLASS_ERROR, (unsigned)diag::Severity::Error, "deduced incomplete pack %0 for template parameter %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_arg_field, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-type template argument refers to non-static data member %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_arg_list_different_arity, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{too few|too many}0 template arguments for %select{class template|function template|variable template|alias template|template template parameter|template}1 %2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_arg_member_ptr_base_derived_not_supported, CLASS_ERROR, (unsigned)diag::Severity::Error, "sorry, non-type template argument of pointer-to-member type %1 that refers to member %q0 of a different class is not supported yet", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_arg_method, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-type template argument refers to non-static member function %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_arg_must_be_expr, CLASS_ERROR, (unsigned)diag::Severity::Error, "template argument for non-type template parameter must be an expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_arg_must_be_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "template argument for template template parameter must be a class template%select{| or type alias template}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_arg_must_be_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "template argument for template type parameter must be a type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_arg_must_be_type_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "template argument for template type parameter must be a type; did you forget 'typename'?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_arg_no_ref_bind, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-type template parameter of reference type %diff{$ cannot bind to template argument of type $|cannot bind to template of incompatible argument type}0,1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_arg_nontype_ambig, CLASS_ERROR, (unsigned)diag::Severity::Error, "template argument for non-type template parameter is treated as function type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_arg_not_address_constant, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-type template argument of type %0 is not a constant expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_arg_not_address_of, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-type template argument for template parameter of pointer type %0 must have its address taken", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_arg_not_convertible, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-type template argument of type %0 cannot be converted to a value of type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_arg_not_decl_ref, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-type template argument does not refer to any declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_arg_not_ice, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-type template argument of type %0 is not an integral constant expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_arg_not_integral_or_enumeral, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-type template argument of type %0 must have an integral or enumeration type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_arg_not_object_or_func, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-type template argument does not refer to an object or function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_arg_not_pointer_to_member_form, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-type template argument is not a pointer to member constant", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_arg_not_valid_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "template argument does not refer to a class or alias template, or template template parameter", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_arg_object_no_linkage, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-type template argument refers to %select{function|object}0 %1 that does not have linkage", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_arg_overload_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "template argument is the type of an unresolved overloaded function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_arg_ref_bind_ignores_quals, CLASS_ERROR, (unsigned)diag::Severity::Error, "reference binding of non-type template parameter %diff{of type $ to template argument of type $|to template argument}0,1 ignores qualifiers", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_arg_reference_var, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-type template argument of reference type %0 is not an object", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_arg_template_params_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "template template argument has different template parameters than its corresponding template template parameter", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_arg_thread_local, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-type template argument refers to thread-local object", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_arg_untyped_null_constant, CLASS_ERROR, (unsigned)diag::Severity::Error, "null non-type template argument must be cast to template parameter type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_arg_wrongtype_null_constant, CLASS_ERROR, (unsigned)diag::Severity::Error, "null non-type template argument of type %0 does not match template parameter of type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_different_associated_constraints, CLASS_ERROR, (unsigned)diag::Severity::Error, "associated constraints differ in template redeclaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_id_not_a_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "template name refers to non-type template %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_inside_local_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "templates cannot be declared inside of a local class", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_instantiate_undefined, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{implicit|explicit}0 instantiation of undefined template %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_instantiate_within_definition, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{implicit|explicit}0 instantiation of template %1 within its own definition", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_kw_missing, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing 'template' keyword prior to dependent template name '%0%1'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_kw_refers_to_class_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0%1' instantiated to a class template, not a function template", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_kw_refers_to_non_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 following the 'template' keyword does not refer to a template", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_linkage, CLASS_ERROR, (unsigned)diag::Severity::Error, "templates must have C++ linkage", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "member %0 declared as a template", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_member_noparams, CLASS_ERROR, (unsigned)diag::Severity::Error, "extraneous 'template<>' in declaration of member %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_missing_args, CLASS_ERROR, (unsigned)diag::Severity::Error, "use of %select{class template|function template|variable template|alias template|template template parameter|template}0 %1 requires template arguments", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_nontype_parm_bad_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "a non-type template parameter cannot have type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_nontype_parm_different_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "template non-type parameter has a different type %0 in template %select{|template parameter }1redeclaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_outside_namespace_or_class_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "templates can only be declared in namespace or class scope", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_param_default_arg_missing, CLASS_ERROR, (unsigned)diag::Severity::Error, "template parameter missing a default argument", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_param_default_arg_redefinition, CLASS_ERROR, (unsigned)diag::Severity::Error, "template parameter redefines default argument", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_param_different_kind, CLASS_ERROR, (unsigned)diag::Severity::Error, "template parameter has a different kind in template %select{|template parameter }0redeclaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_param_list_different_arity, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{too few|too many}0 template parameters in template %select{|template parameter }1redeclaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_param_list_matches_nontemplate, CLASS_ERROR, (unsigned)diag::Severity::Error, "template parameter list matching the non-templated nested type %0 should be empty ('template<>')", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_param_pack_default_arg, CLASS_ERROR, (unsigned)diag::Severity::Error, "template parameter pack cannot have a default argument", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_param_pack_must_be_last_template_parameter, CLASS_ERROR, (unsigned)diag::Severity::Error, "template parameter pack must be the last template parameter", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_param_shadow, CLASS_ERROR, (unsigned)diag::Severity::Error, "declaration of %0 shadows template parameter", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_parameter_default_friend_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "default template argument not permitted on a friend template", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_parameter_default_template_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot add a default template argument to the definition of a member of a class template", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_parameter_pack_non_pack, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{template type|non-type template|template template}0 parameter%select{| pack}1 conflicts with previous %select{template type|non-type template|template template}0 parameter%select{ pack|}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_qualified_declarator_no_match, CLASS_ERROR, (unsigned)diag::Severity::Error, "nested name specifier '%0' for declaration does not refer into a class, class template or class template partial specialization", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_recursion_depth_exceeded, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "recursive template instantiation exceeded maximum depth of %0", 0, SFINAE_Report, false, true, 2)
+DIAG(err_template_spec_decl_friend, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot declare an explicit specialization in a friend", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_spec_decl_function_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit specialization of %0 in function scope", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_spec_default_arg, CLASS_ERROR, (unsigned)diag::Severity::Error, "default argument not permitted on an explicit %select{instantiation|specialization}0 of function %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_spec_extra_headers, CLASS_ERROR, (unsigned)diag::Severity::Error, "extraneous template parameter list in template specialization or out-of-line template definition", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_spec_friend, CLASS_ERROR, (unsigned)diag::Severity::Error, "template specialization declaration cannot be a friend", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_spec_needs_header, CLASS_ERROR, (unsigned)diag::Severity::Error, "template specialization requires 'template<>'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_spec_needs_template_parameters, CLASS_ERROR, (unsigned)diag::Severity::Error, "template specialization or definition requires a template parameter list corresponding to the nested type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_spec_redecl_global_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{class template|class template partial|variable template|variable template partial|function template|member function|static data member|member class|member enumeration}0 specialization of %1 must occur at global scope", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_spec_redecl_out_of_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{class template|class template partial|variable template|variable template partial|function template|member function|static data member|member class|member enumeration}0 specialization of %1 not in %select{a namespace enclosing %2|class %2 or an enclosing namespace}3", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_spec_unknown_kind, CLASS_ERROR, (unsigned)diag::Severity::Error, "can only provide an explicit specialization for a class template, function template, variable template, or a member function, static data member, %select{or member class|member class, or member enumeration}0 of a class template", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_tag_noparams, CLASS_ERROR, (unsigned)diag::Severity::Error, "extraneous 'template<>' in declaration of %0 %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_template_parm_no_parms, CLASS_ERROR, (unsigned)diag::Severity::Error, "template template parameter must have its own template parameters", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_typedef, CLASS_ERROR, (unsigned)diag::Severity::Error, "a typedef cannot be a template", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_unnamed_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot declare a class template with no name", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_template_variable_noparams, CLASS_ERROR, (unsigned)diag::Severity::Error, "extraneous 'template<>' in declaration of variable %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_tentative_def_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "tentative definition has type %0 that is never completed", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_this_capture, CLASS_ERROR, (unsigned)diag::Severity::Error, "'this' cannot be %select{implicitly |}0captured in this context", 0, SFINAE_SubstitutionFailure, false, true, 3)
+DIAG(err_this_static_member_func, CLASS_ERROR, (unsigned)diag::Severity::Error, "'this' cannot be%select{| implicitly}0 used in a static member function declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_thread_dynamic_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "initializer for thread-local variable must be a constant expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_thread_non_global, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' variables must have global storage", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_thread_non_thread, CLASS_ERROR, (unsigned)diag::Severity::Error, "thread-local declaration of %0 follows non-thread-local declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_thread_nontrivial_dtor, CLASS_ERROR, (unsigned)diag::Severity::Error, "type of thread-local variable has non-trivial destruction", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_thread_thread_different_kind, CLASS_ERROR, (unsigned)diag::Severity::Error, "thread-local declaration of %0 with %select{static|dynamic}1 initialization follows declaration with %select{dynamic|static}1 initialization", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_thread_unsupported, CLASS_ERROR, (unsigned)diag::Severity::Error, "thread-local storage is not supported for the current target", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_throw_abstract_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot throw an object of abstract type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_throw_incomplete, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot throw object of incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_throw_incomplete_ptr, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot throw pointer to object of incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_tls_var_aligned_over_maximum, CLASS_ERROR, (unsigned)diag::Severity::Error, "alignment (%0) of thread-local variable %1 is greater than the maximum supported alignment (%2) for a thread-local variable on this target", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_toomany_element_decls, CLASS_ERROR, (unsigned)diag::Severity::Error, "only one element declaration is allowed", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_trailing_return_in_parens, CLASS_ERROR, (unsigned)diag::Severity::Error, "trailing return type may not be nested within parentheses", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_trailing_return_without_auto, CLASS_ERROR, (unsigned)diag::Severity::Error, "function with trailing return type must specify return type 'auto', not %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_type_defined_in_alias_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 cannot be defined in a type alias template", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_type_defined_in_condition, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 cannot be defined in a condition", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_type_defined_in_enum, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 cannot be defined in an enumeration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_type_defined_in_for_range, CLASS_ERROR, (unsigned)diag::Severity::Error, "types may not be defined in a for range declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_type_defined_in_param_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 cannot be defined in a parameter type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_type_defined_in_result_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 cannot be defined in the result type of a function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_type_defined_in_type_specifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 cannot be defined in a type specifier", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_type_mismatch_continuation_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "type of property %0 in class extension does not match property type in primary class", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_type_pack_element_out_of_bounds, CLASS_ERROR, (unsigned)diag::Severity::Error, "a parameter pack may not be accessed at an out of bounds index", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_type_tag_for_datatype_not_ice, CLASS_ERROR, (unsigned)diag::Severity::Error, "'type_tag_for_datatype' attribute requires the initializer to be an %select{integer|integral}0 constant expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_type_tag_for_datatype_too_large, CLASS_ERROR, (unsigned)diag::Severity::Error, "'type_tag_for_datatype' attribute requires the initializer to be an %select{integer|integral}0 constant expression that can be represented by a 64 bit integer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_type_unsupported, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 is not supported on this target", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_address_of, CLASS_ERROR, (unsigned)diag::Severity::Error, "address of %select{bit-field|vector element|property expression|register variable}0 requested", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_addrof_dtor, CLASS_ERROR, (unsigned)diag::Severity::Error, "taking the address of a destructor", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_addrof_temporary, CLASS_ERROR, (unsigned)diag::Severity::Error, "taking the address of a temporary object of type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_ambiguous_condition, CLASS_ERROR, (unsigned)diag::Severity::Error, "conversion %diff{from $ to $|between types}0,1 is ambiguous", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_arc_assign_externally_retained, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable declared with 'objc_externally_retained' cannot be modified in ARC", 0, SFINAE_SubstitutionFailure, false, true, 5)
+DIAG(err_typecheck_arc_assign_self, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot assign to 'self' outside of a method in the init family", 0, SFINAE_SubstitutionFailure, false, true, 5)
+DIAG(err_typecheck_arc_assign_self_class_method, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot assign to 'self' in a class method", 0, SFINAE_SubstitutionFailure, false, true, 5)
+DIAG(err_typecheck_arithmetic_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "arithmetic on a pointer to an incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_arr_assign_enumeration, CLASS_ERROR, (unsigned)diag::Severity::Error, "fast enumeration variables cannot be modified in ARC by default; declare the variable __strong to allow this", 0, SFINAE_SubstitutionFailure, false, true, 5)
+DIAG(err_typecheck_array_not_modifiable_lvalue, CLASS_ERROR, (unsigned)diag::Severity::Error, "array type %0 is not assignable", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_assign_const, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{cannot assign to return value because function %1 returns a const value|cannot assign to variable %1 with const-qualified type %2|cannot assign to %select{non-|}1static data member %2 with const-qualified type %3|cannot assign to non-static data member within const member function %1|cannot assign to %select{variable %2|non-static data member %2|lvalue}1 with %select{|nested }3const-qualified data member %4|read-only variable is not assignable}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_bool_condition, CLASS_ERROR, (unsigned)diag::Severity::Error, "value of type %0 is not contextually convertible to 'bool'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_call_invalid_ordered_compare, CLASS_ERROR, (unsigned)diag::Severity::Error, "ordered compare requires two args of floating point type%diff{ ($ and $)|}0,1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_call_invalid_unary_fp, CLASS_ERROR, (unsigned)diag::Severity::Error, "floating point classification requires argument of floating point type (passed in %0)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_call_not_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "called object type %0 is not a function or function pointer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_call_too_few_args, CLASS_ERROR, (unsigned)diag::Severity::Error, "too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected %1, have %2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_call_too_few_args_at_least, CLASS_ERROR, (unsigned)diag::Severity::Error, "too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected at least %1, have %2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_call_too_few_args_at_least_one, CLASS_ERROR, (unsigned)diag::Severity::Error, "too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, at least argument %1 must be specified", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_call_too_few_args_at_least_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected at least %1, have %2; did you mean %3?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_call_too_few_args_one, CLASS_ERROR, (unsigned)diag::Severity::Error, "too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, single argument %1 was not specified", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_call_too_few_args_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected %1, have %2; did you mean %3?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_call_too_many_args, CLASS_ERROR, (unsigned)diag::Severity::Error, "too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected %1, have %2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_call_too_many_args_at_most, CLASS_ERROR, (unsigned)diag::Severity::Error, "too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected at most %1, have %2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_call_too_many_args_at_most_one, CLASS_ERROR, (unsigned)diag::Severity::Error, "too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected at most single argument %1, have %2 arguments", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_call_too_many_args_at_most_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected at most %1, have %2; did you mean %3?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_call_too_many_args_one, CLASS_ERROR, (unsigned)diag::Severity::Error, "too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected single argument %1, have %2 arguments", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_call_too_many_args_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected %1, have %2; did you mean %3?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_cast_to_incomplete, CLASS_ERROR, (unsigned)diag::Severity::Error, "cast to incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_cast_to_union_no_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "cast to union type from type %0 not present in union", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_choose_expr_requires_constant, CLASS_ERROR, (unsigned)diag::Severity::Error, "'__builtin_choose_expr' requires a constant expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_comparison_of_distinct_blocks, CLASS_ERROR, (unsigned)diag::Severity::Error, "comparison of distinct block types%diff{ ($ and $)|}0,1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_comparison_of_distinct_pointers, CLASS_ERROR, (unsigned)diag::Severity::Error, "comparison of distinct pointer types%diff{ ($ and $)|}0,1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_comparison_of_fptr_to_void, CLASS_ERROR, (unsigned)diag::Severity::Error, "equality comparison between function pointer and void pointer (%0 and %1)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_comparison_of_pointer_integer, CLASS_ERROR, (unsigned)diag::Severity::Error, "comparison between pointer and integer (%0 and %1)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_cond_expect_int_float, CLASS_ERROR, (unsigned)diag::Severity::Error, "used type %0 where integer or floating point type is required", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_cond_expect_nonfloat, CLASS_ERROR, (unsigned)diag::Severity::Error, "used type %0 where floating point type is not allowed", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_cond_expect_scalar, CLASS_ERROR, (unsigned)diag::Severity::Error, "used type %0 where arithmetic or pointer type is required", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_cond_incompatible_operands, CLASS_ERROR, (unsigned)diag::Severity::Error, "incompatible operand types%diff{ ($ and $)|}0,1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_cond_incompatible_operands_null, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-pointer operand type %0 incompatible with %select{NULL|nullptr}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_convert_incompatible, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{%diff{assigning to $ from incompatible type $|assigning to type from incompatible type}0,1|%diff{passing $ to parameter of incompatible type $|passing type to parameter of incompatible type}0,1|%diff{returning $ from a function with incompatible result type $|returning type from a function with incompatible result type}0,1|%diff{converting $ to incompatible type $|converting type to incompatible type}0,1|%diff{initializing $ with an expression of incompatible type $|initializing type with an expression of incompatible type}0,1|%diff{sending $ to parameter of incompatible type $|sending type to parameter of incompatible type}0,1|%diff{casting $ to incompatible type $|casting type to incompatible type}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3%select{|: different classes%diff{ ($ vs $)|}5,6|: different number of parameters (%5 vs %6)|: type mismatch at %ordinal5 parameter%diff{ ($ vs $)|}6,7|: different return type%diff{ ($ vs $)|}5,6|: different qualifiers (%5 vs %6)|: different exception specifications}4", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_convert_incompatible_block_pointer, CLASS_ERROR, (unsigned)diag::Severity::Error, "incompatible block pointer types %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_converted_constant_expression, CLASS_ERROR, (unsigned)diag::Severity::Error, "value of type %0 is not implicitly convertible to %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_converted_constant_expression_disallowed, CLASS_ERROR, (unsigned)diag::Severity::Error, "conversion from %0 to %1 is not allowed in a converted constant expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_converted_constant_expression_indirect, CLASS_ERROR, (unsigned)diag::Severity::Error, "conversion from %0 to %1 in converted constant expression would bind reference to a temporary", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_decl_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable has incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_deleted_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "conversion function %diff{from $ to $|between types}0,1 invokes a deleted function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_duplicate_vector_components_not_mlvalue, CLASS_ERROR, (unsigned)diag::Severity::Error, "vector is not assignable (contains duplicate components)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_expect_int, CLASS_ERROR, (unsigned)diag::Severity::Error, "used type %0 where integer is required", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_expect_scalar_operand, CLASS_ERROR, (unsigned)diag::Severity::Error, "operand of type %0 where arithmetic or pointer type is required", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_expression_not_modifiable_lvalue, CLASS_ERROR, (unsigned)diag::Severity::Error, "expression is not assignable", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_field_variable_size, CLASS_ERROR, (unsigned)diag::Severity::Error, "fields must have a constant size: 'variable length array in structure' extension will never be supported", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_illegal_increment_decrement, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot %select{decrement|increment}1 value of type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_incompatible_address_space, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{%diff{assigning $ to $|assigning to different types}1,0|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 changes address space of pointer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_incompatible_ownership, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{%diff{assigning $ to $|assigning to different types}1,0|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 changes retain/release properties of pointer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_incomplete_array_needs_initializer, CLASS_ERROR, (unsigned)diag::Severity::Error, "definition of variable with array type needs an explicit size or an initializer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_incomplete_tag, CLASS_ERROR, (unsigned)diag::Severity::Error, "incomplete definition of type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_incomplete_type_not_modifiable_lvalue, CLASS_ERROR, (unsigned)diag::Severity::Error, "incomplete type %0 is not assignable", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_indirection_requires_pointer, CLASS_ERROR, (unsigned)diag::Severity::Error, "indirection requires pointer operand (%0 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_invalid_lvalue_addrof, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot take the address of an rvalue of type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_invalid_lvalue_addrof_addrof_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "extra '&' taking address of overloaded function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_invalid_operands, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid operands to binary expression (%0 and %1)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_invalid_restrict_invalid_pointee, CLASS_ERROR, (unsigned)diag::Severity::Error, "pointer to function type %0 may not be 'restrict' qualified", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_invalid_restrict_not_pointer, CLASS_ERROR, (unsigned)diag::Severity::Error, "restrict requires a pointer or reference (%0 is invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_invalid_restrict_not_pointer_noarg, CLASS_ERROR, (unsigned)diag::Severity::Error, "restrict requires a pointer or reference", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_ivar_variable_size, CLASS_ERROR, (unsigned)diag::Severity::Error, "instance variables must have a constant size", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_logical_vector_expr_gnu_cpp_restrict, CLASS_ERROR, (unsigned)diag::Severity::Error, "logical expression with vector %select{type %1 and non-vector type %2|types %1 and %2}0 is only supported in C++", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_lvalue_casts_not_supported, CLASS_ERROR, (unsigned)diag::Severity::Error, "assignment to cast is illegal, lvalue casts are not supported", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_member_reference_arrow, CLASS_ERROR, (unsigned)diag::Severity::Error, "member reference type %0 is not a pointer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_member_reference_ivar, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 does not have a member named %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_member_reference_ivar_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 does not have a member named %1; did you mean %2?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_member_reference_struct_union, CLASS_ERROR, (unsigned)diag::Severity::Error, "member reference base type %0 is not a structure or union", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_member_reference_suggestion, CLASS_ERROR, (unsigned)diag::Severity::Error, "member reference type %0 is %select{a|not a}1 pointer; did you mean to use '%select{->|.}1'?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_member_reference_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot refer to type member %0 in %1 with '%select{.|->}2'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_member_reference_unknown, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot refer to member %0 in %1 with '%select{.|->}2'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_missing_return_type_incompatible, CLASS_ERROR, (unsigned)diag::Severity::Error, "%diff{return type $ must match previous return type $|return type must match previous return type}0,1 when %select{block literal|lambda expression}2 has unspecified explicit return type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_negative_array_size, CLASS_ERROR, (unsigned)diag::Severity::Error, "array size is negative", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_non_object_not_modifiable_lvalue, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-object type %0 is not assignable", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_nonviable_condition, CLASS_ERROR, (unsigned)diag::Severity::Error, "no viable conversion%select{%diff{ from $ to $|}1,2|%diff{ from returned value of type $ to function return type $|}1,2}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_nonviable_condition_incomplete, CLASS_ERROR, (unsigned)diag::Severity::Error, "no viable conversion%diff{ from $ to incomplete type $|}0,1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_op_on_nonoverlapping_address_space_pointers, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{comparison between %diff{ ($ and $)|}0,1|arithmetic operation with operands of type %diff{ ($ and $)|}0,1|conditional operator with the second and third operands of type %diff{ ($ and $)|}0,1}2 which are pointers to non-overlapping address spaces", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_ordered_comparison_of_pointer_and_zero, CLASS_ERROR, (unsigned)diag::Severity::Error, "ordered comparison between pointer and zero (%0 and %1)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_pointer_arith_function_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "arithmetic on%select{ a|}0 pointer%select{|s}0 to%select{ the|}2 function type%select{|s}2 %1%select{| and %3}2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_pointer_arith_void_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "arithmetic on%select{ a|}0 pointer%select{|s}0 to void", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_sclass_fscope, CLASS_ERROR, (unsigned)diag::Severity::Error, "illegal storage class on file-scoped variable", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_sclass_func, CLASS_ERROR, (unsigned)diag::Severity::Error, "illegal storage class on function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_statement_requires_integer, CLASS_ERROR, (unsigned)diag::Severity::Error, "statement requires expression of integer type (%0 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_statement_requires_scalar, CLASS_ERROR, (unsigned)diag::Severity::Error, "statement requires expression of scalar type (%0 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_sub_ptr_compatible, CLASS_ERROR, (unsigned)diag::Severity::Error, "%diff{$ and $ are not pointers to compatible types|pointers to incompatible types}0,1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_subscript_not_integer, CLASS_ERROR, (unsigned)diag::Severity::Error, "array subscript is not an integer", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_subscript_value, CLASS_ERROR, (unsigned)diag::Severity::Error, "subscripted value is not an array, pointer, or vector", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_unary_expr, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid argument type %0 to unary expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_vector_lengths_not_equal, CLASS_ERROR, (unsigned)diag::Severity::Error, "vector operands do not have the same number of elements (%0 and %1)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_vector_not_convertable, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot convert between vector values of different size (%0 and %1)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_vector_not_convertable_implict_truncation, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot convert between %select{scalar|vector}0 type %1 and vector type %2 as implicit conversion would cause truncation", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_vector_not_convertable_non_scalar, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot convert between vector and non-scalar values (%0 and %1)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typecheck_zero_array_size, CLASS_ERROR, (unsigned)diag::Severity::Error, "zero-length arrays are not permitted in C++", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typedef_changes_linkage, CLASS_ERROR, (unsigned)diag::Severity::Error, "unsupported: typedef changes linkage of anonymous type, but linkage was already computed", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typedef_not_bitfield, CLASS_ERROR, (unsigned)diag::Severity::Error, "typedef member %0 cannot be a bit-field", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typedef_not_identifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "typedef name must be an identifier", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typename_missing, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing 'typename' prior to dependent type name '%0%1'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typename_missing_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing 'typename' prior to dependent type template name '%0%1'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typename_nested_not_found, CLASS_ERROR, (unsigned)diag::Severity::Error, "no type named %0 in %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typename_nested_not_found_enable_if, CLASS_ERROR, (unsigned)diag::Severity::Error, "no type named 'type' in %0; 'enable_if' cannot be used to disable this declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typename_nested_not_found_requirement, CLASS_ERROR, (unsigned)diag::Severity::Error, "failed requirement '%0'; 'enable_if' cannot be used to disable this declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typename_nested_not_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "typename specifier refers to non-type member %0 in %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_typename_refers_to_using_value_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "typename specifier refers to a dependent using declaration for a value %0 in %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_unavailable, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 is unavailable", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_unavailable_in_arc, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 is unavailable in ARC", 0, SFINAE_SubstitutionFailure, false, true, 10)
+DIAG(err_unavailable_message, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 is unavailable: %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_uncasted_call_of_unknown_any, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 has unknown return type; cast the call to its declared return type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_uncasted_send_to_unknown_any_method, CLASS_ERROR, (unsigned)diag::Severity::Error, "no known method %select{%objcinstance1|%objcclass1}0; cast the message send to the method's return type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_uncasted_use_of_unknown_any, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 has unknown type; cast it to its declared type to use it", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_undeclared_boxing_method, CLASS_ERROR, (unsigned)diag::Severity::Error, "declaration of %0 is missing in %1 class", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_undeclared_label_use, CLASS_ERROR, (unsigned)diag::Severity::Error, "use of undeclared label %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_undeclared_objc_literal_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "definition of class %0 must be available to use Objective-C %select{array literals|dictionary literals|numeric literals|boxed expressions|string literals}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_undeclared_protocol, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot find protocol declaration for %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_undeclared_protocol_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot find protocol declaration for %0; did you mean %1?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_undeclared_use, CLASS_ERROR, (unsigned)diag::Severity::Error, "use of undeclared %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_undeclared_use_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "use of undeclared %0; did you mean %1?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_undeclared_var_use, CLASS_ERROR, (unsigned)diag::Severity::Error, "use of undeclared identifier %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_undeclared_var_use_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "use of undeclared identifier %0; did you mean %1?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_undef_interface, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot find interface declaration for %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_undef_interface_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot find interface declaration for %0; did you mean %1?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_undef_superclass, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot find interface declaration for %0, superclass of %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_undef_superclass_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot find interface declaration for %0, superclass of %1; did you mean %2?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_undefined_inline_var, CLASS_ERROR, (unsigned)diag::Severity::Error, "inline variable %q0 is not defined", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_undefined_internal_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{function|variable}0 %q1 is used but not defined in this translation unit, and cannot be defined in any other translation unit because its type does not have linkage", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_underlying_type_of_incomplete_enum, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot determine underlying type of incomplete enumeration type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_unexpanded_parameter_pack, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{expression|base type|declaration type|data member type|bit-field size|static assertion|fixed underlying type|enumerator value|using declaration|friend declaration|qualifier|initializer|default argument|non-type template parameter type|exception type|partial specialization|__if_exists name|__if_not_exists name|lambda|block}0 contains%plural{0: an|:}1 unexpanded parameter pack%plural{0:|1: %2|2:s %2 and %3|:s %2, %3, ...}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_unexpected_friend, CLASS_ERROR, (unsigned)diag::Severity::Error, "friends can only be classes or functions", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_unexpected_interface, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected interface name %0: expected expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_unexpected_namespace, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected namespace name %0: expected expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_unexpected_typedef, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected type name %0: expected expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_uninitialized_member_for_assign, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot define the implicit copy assignment operator for %0, because non-static %select{reference|const}1 member %2 cannot use copy assignment operator", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_uninitialized_member_in_ctor, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{constructor for %1|implicit default constructor for %1|cannot use constructor inherited from %1:}0 must explicitly initialize the %select{reference|const}2 member %3", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_union_as_base_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "unions cannot be base classes", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_union_member_of_reference_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "union member %0 has reference type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_unknown_any_addrof, CLASS_ERROR, (unsigned)diag::Severity::Error, "the address of a declaration with unknown type can only be cast to a pointer type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_unknown_any_addrof_call, CLASS_ERROR, (unsigned)diag::Severity::Error, "address-of operator cannot be applied to a call to a function with unknown return type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_unknown_any_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "function %0 with unknown type must be given a function type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_unknown_any_var_function_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable %0 with unknown type cannot be given a function type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_unknown_nested_typename_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "no type named %0 in %1; did you mean %select{|simply }2%3?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_unknown_receiver_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "unknown receiver %0; did you mean %1?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_unknown_type_or_class_name_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "unknown %select{type|class}1 name %0; did you mean %2?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_unknown_typename, CLASS_ERROR, (unsigned)diag::Severity::Error, "unknown type name %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_unknown_typename_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "unknown type name %0; did you mean %1?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_unqualified_pointer_member_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "must explicitly qualify name of member function when taking its address", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_unsupported_unknown_any_call, CLASS_ERROR, (unsigned)diag::Severity::Error, "call to unsupported expression with unknown type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_unsupported_unknown_any_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 has unknown type, which is not supported for this kind of declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_unsupported_unknown_any_expr, CLASS_ERROR, (unsigned)diag::Severity::Error, "unsupported expression with unknown type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_upcast_to_inaccessible_base, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot cast %0 to its %select{private|protected}2 base class %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_use_continuation_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "illegal redeclaration of property in class extension %0 (attribute must be 'readwrite', while its primary must be 'readonly')", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_use_continuation_class_redeclaration_readwrite, CLASS_ERROR, (unsigned)diag::Severity::Error, "illegal redeclaration of 'readwrite' property in class extension %0 (perhaps you intended this to be a 'readwrite' redeclaration of a 'readonly' public property?)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_use_of_default_argument_to_function_declared_later, CLASS_ERROR, (unsigned)diag::Severity::Error, "use of default argument to function %0 that is declared later in class %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_use_with_wrong_tag, CLASS_ERROR, (unsigned)diag::Severity::Error, "use of %0 with tag type that does not match previous declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_using_decl_can_not_refer_to_class_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "using declaration cannot refer to class member", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_using_decl_can_not_refer_to_namespace, CLASS_ERROR, (unsigned)diag::Severity::Error, "using declaration cannot refer to a namespace", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_using_decl_can_not_refer_to_scoped_enum, CLASS_ERROR, (unsigned)diag::Severity::Error, "using declaration cannot refer to a scoped enumerator", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_using_decl_conflict, CLASS_ERROR, (unsigned)diag::Severity::Error, "target of using declaration conflicts with declaration already in scope", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_using_decl_conflict_reverse, CLASS_ERROR, (unsigned)diag::Severity::Error, "declaration conflicts with target of using declaration already in scope", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_using_decl_constructor, CLASS_ERROR, (unsigned)diag::Severity::Error, "using declaration cannot refer to a constructor", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_using_decl_constructor_not_in_direct_base, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 is not a direct base of %1, cannot inherit constructors", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_using_decl_destructor, CLASS_ERROR, (unsigned)diag::Severity::Error, "using declaration cannot refer to a destructor", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_using_decl_friend, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot befriend target of using declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_using_decl_nested_name_specifier_is_current_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "using declaration refers to its own class", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_using_decl_nested_name_specifier_is_not_base_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "using declaration refers into '%0', which is not a base class of %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_using_decl_nested_name_specifier_is_not_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "using declaration in class refers into '%0', which is not a class", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_using_decl_redeclaration, CLASS_ERROR, (unsigned)diag::Severity::Error, "redeclaration of using declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_using_decl_redeclaration_expansion, CLASS_ERROR, (unsigned)diag::Severity::Error, "using declaration pack expansion at block scope produces multiple values", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_using_decl_template_id, CLASS_ERROR, (unsigned)diag::Severity::Error, "using declaration cannot refer to a template specialization", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_using_dependent_value_is_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "dependent using declaration resolved to type without 'typename'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_using_directive_member_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "no namespace named %0 in %1; did you mean %select{|simply }2%3?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_using_directive_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "no namespace named %0; did you mean %1?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_using_pack_expansion_empty, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{|member}0 using declaration %1 instantiates to an empty pack", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_using_requires_qualname, CLASS_ERROR, (unsigned)diag::Severity::Error, "using declaration requires a qualified name", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_using_typename_non_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "'typename' keyword used on a non-type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_uuidof_with_multiple_guids, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot call operator __uuidof on a type with multiple GUIDs", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_uuidof_without_guid, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot call operator __uuidof on a type with no GUID", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_va_arg_in_device, CLASS_ERROR, (unsigned)diag::Severity::Error, "CUDA device code does not support va_arg", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_va_start_captured_stmt, CLASS_ERROR, (unsigned)diag::Severity::Error, "'va_start' cannot be used in a captured statement", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_va_start_fixed_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "'va_start' used in function with fixed args", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_va_start_outside_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "'va_start' cannot be used outside a function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_va_start_used_in_wrong_abi_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "'va_start' used in %select{System V|Win64}0 ABI function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_value_init_for_array_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "array types cannot be value-initialized", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_var_concept_not_initialized, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable concept declaration must be initialized", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_var_partial_spec_redeclared, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable template partial specialization %0 cannot be redefined", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_var_spec_no_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "no variable template matches%select{| partial}0 specialization", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_var_spec_no_template_but_method, CLASS_ERROR, (unsigned)diag::Severity::Error, "no variable template matches specialization; did you mean to use %0 as function template instead?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_variable_concept_bool_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "declared type of variable concept must be 'bool'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_variable_instantiates_to_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{variable|static data member}0 instantiated with function type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_variable_object_no_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable-sized object may not be initialized", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_variably_modified_new_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "'new' cannot allocate object of variably modified type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_variably_modified_nontype_template_param, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-type template parameter of variably modified type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_variably_modified_template_arg, CLASS_ERROR, (unsigned)diag::Severity::Error, "variably modified type %0 cannot be used as a template argument", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_variably_modified_typeid, CLASS_ERROR, (unsigned)diag::Severity::Error, "'typeid' of variably modified type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_variadic_device_fn, CLASS_ERROR, (unsigned)diag::Severity::Error, "CUDA device code does not support variadic functions", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_vec_builtin_incompatible_vector, CLASS_ERROR, (unsigned)diag::Severity::Error, "first two arguments to %0 must have the same type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_vec_builtin_non_vector, CLASS_ERROR, (unsigned)diag::Severity::Error, "first two arguments to %0 must be vectors", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_vecstep_non_scalar_vector_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "'vec_step' requires built-in scalar or vector type, %0 invalid", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_vector_incorrect_num_initializers, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{too many|too few}0 elements in vector initialization (expected %1 elements, have %2)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_virtual_in_union, CLASS_ERROR, (unsigned)diag::Severity::Error, "unions cannot have virtual functions", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_virtual_member_function_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "'virtual' cannot be specified on member function templates", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_virtual_non_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "'virtual' can only appear on non-static member functions", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_virtual_out_of_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "'virtual' can only be specified inside the class definition", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_vla_decl_has_extern_linkage, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable length array declaration cannot have 'extern' linkage", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_vla_decl_has_static_storage, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable length array declaration cannot have 'static' storage duration", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_vla_decl_in_file_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable length array declaration not allowed at file scope", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_vla_in_sfinae, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable length array cannot be formed during template argument deduction", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_vla_unsupported, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable length arrays are not supported for the current target", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_vm_decl_has_extern_linkage, CLASS_ERROR, (unsigned)diag::Severity::Error, "variably modified type declaration cannot have 'extern' linkage", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_vm_decl_in_file_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "variably modified type declaration not allowed at file scope", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_vm_func_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "function declaration cannot have variably modified type", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_void_only_param, CLASS_ERROR, (unsigned)diag::Severity::Error, "'void' must be the first and only parameter if specified", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_void_param_qualified, CLASS_ERROR, (unsigned)diag::Severity::Error, "'void' as parameter must not have type qualifiers", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_vsx_builtin_nonconstant_argument, CLASS_ERROR, (unsigned)diag::Severity::Error, "argument %0 to %1 must be a 2-bit unsigned literal (i.e. 0, 1, 2 or 3)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_weak_property, CLASS_ERROR, (unsigned)diag::Severity::Error, "existing instance variable %1 for __weak property %0 must be __weak", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_wrong_sampler_addressspace, CLASS_ERROR, (unsigned)diag::Severity::Error, "sampler type cannot be used with the __local and __global address space qualifiers", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_x86_builtin_invalid_rounding, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid rounding argument", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_x86_builtin_invalid_scale, CLASS_ERROR, (unsigned)diag::Severity::Error, "scale argument must be 1, 2, 4, or 8", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(error_inoutput_conflict_with_clobber, CLASS_ERROR, (unsigned)diag::Severity::Error, "asm-specifier for input or output variable conflicts with asm clobber list", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(ext_aggregate_init_not_constant, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "initializer for aggregate is not a compile-time constant", 114, SFINAE_Suppress, false, false, 2)
+DIAG(ext_anonymous_record_with_anonymous_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "anonymous types declared in an anonymous %select{struct|union}0 are an extension", 432, SFINAE_Suppress, false, false, 2)
+DIAG(ext_anonymous_record_with_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "types declared in an anonymous %select{struct|union}0 are a Microsoft extension", 372, SFINAE_Suppress, false, false, 2)
+DIAG(ext_anonymous_struct_union_qualified, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "anonymous %select{struct|union}0 cannot be '%1'", 527, SFINAE_Suppress, false, false, 2)
+DIAG(ext_anonymous_union, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "anonymous unions are a C11 extension", 112, SFINAE_Suppress, false, false, 2)
+DIAG(ext_array_init_copy, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "initialization of an array %diff{of type $ from a compound literal of type $|from a compound literal}0,1 is a GNU extension", 260, SFINAE_Suppress, false, false, 2)
+DIAG(ext_array_init_parens, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "parenthesized initialization of a member array is a GNU extension", 255, SFINAE_Suppress, false, false, 2)
+DIAG(ext_array_size_conversion, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "implicit conversion from array size expression of type %0 to %select{integral|enumeration}1 type %2 is a C++11 extension", 79, SFINAE_Suppress, false, false, 2)
+DIAG(ext_auto_new_list_init, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C++ standards before C++17 do not allow new expression for type %0 to use list-initialization", 91, SFINAE_Suppress, false, false, 2)
+DIAG(ext_auto_type_specifier, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'auto' type specifier is a C++11 extension", 79, SFINAE_Suppress, false, false, 2)
+DIAG(ext_bad_cxx_cast_qualifiers_away_incoherent, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++ does not allow %select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from %1 to %2 because it casts away qualifiers, even though the source and destination types are unrelated", 120, SFINAE_SubstitutionFailure, false, false, 2)
+DIAG(ext_c11_anonymous_struct, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "anonymous structs are a C11 extension", 112, SFINAE_Suppress, false, false, 2)
+DIAG(ext_c99_array_usage, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "%select{qualifier in |static |}0array size %select{||'[*] '}0is a C99 feature", 114, SFINAE_Suppress, false, false, 2)
+DIAG(ext_c99_flexible_array_member, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "flexible array members are a C99 feature", 114, SFINAE_Suppress, false, false, 2)
+DIAG(ext_cannot_use_trivial_abi, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'trivial_abi' cannot be applied to %0", 282, SFINAE_Suppress, false, false, 2)
+DIAG(ext_cast_fn_obj, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "cast between pointer-to-function and pointer-to-object is an extension", 527, SFINAE_Suppress, false, false, 2)
+DIAG(ext_cce_narrowing, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "%select{case value|enumerator value|non-type template argument|array size|constexpr if condition}0 %select{cannot be narrowed from type %2 to %3|evaluates to %2, which cannot be narrowed to type %3}1", 83, SFINAE_SubstitutionFailure, false, false, 2)
+DIAG(ext_complex_component_init, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "complex initialization specifying real and imaginary components is an extension", 129, SFINAE_Suppress, false, false, 2)
+DIAG(ext_constexpr_body_invalid_stmt, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of this statement in a constexpr %select{function|constructor}0 is a C++14 extension", 87, SFINAE_Suppress, false, false, 2)
+DIAG(ext_constexpr_body_invalid_stmt_cxx2a, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of this statement in a constexpr %select{function|constructor}0 is a C++2a extension", 98, SFINAE_Suppress, false, false, 2)
+DIAG(ext_constexpr_body_multiple_return, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "multiple return statements in constexpr function is a C++14 extension", 87, SFINAE_Suppress, false, false, 2)
+DIAG(ext_constexpr_function_never_constant_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "constexpr %select{function|constructor}0 never produces a constant expression", 336, SFINAE_Suppress, false, false, 2)
+DIAG(ext_constexpr_function_try_block_cxx2a, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "function try block in constexpr %select{function|constructor}0 is a C++2a extension", 98, SFINAE_Suppress, false, false, 2)
+DIAG(ext_constexpr_local_var, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "variable declaration in a constexpr %select{function|constructor}0 is a C++14 extension", 87, SFINAE_Suppress, false, false, 2)
+DIAG(ext_constexpr_type_definition, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "type definition in a constexpr %select{function|constructor}0 is a C++14 extension", 87, SFINAE_Suppress, false, false, 2)
+DIAG(ext_cxx14_attr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of the %0 attribute is a C++14 extension", 87, SFINAE_Suppress, false, false, 2)
+DIAG(ext_cxx17_attr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of the %0 attribute is a C++17 extension", 91, SFINAE_Suppress, false, false, 2)
+DIAG(ext_decomp_decl, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "decomposition declarations are a C++17 extension", 91, SFINAE_Suppress, false, false, 2)
+DIAG(ext_decomp_decl_cond, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++17 does not permit structured binding declaration in a condition", 58, SFINAE_Suppress, false, false, 2)
+DIAG(ext_default_init_const, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "default initialization of an object of const type %0%select{| without a user-provided default constructor}1 is a Microsoft extension", 376, SFINAE_Suppress, false, false, 2)
+DIAG(ext_delete_void_ptr_operand, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "cannot delete expression with pointer-to-'void' type %0", 161, SFINAE_Suppress, false, false, 2)
+DIAG(ext_deprecated_string_literal_conversion, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++11 does not allow conversion from string literal to %0", 756, SFINAE_SubstitutionFailure, false, false, 2)
+DIAG(ext_designated_init, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "designated initializers are a C99 feature", 114, SFINAE_Suppress, false, false, 2)
+DIAG(ext_empty_struct_union, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "empty %select{struct|union}0 is a GNU extension", 264, SFINAE_Suppress, false, false, 2)
+DIAG(ext_enum_friend, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "befriending enumeration type %0 is a C++11 extension", 79, SFINAE_Suppress, false, false, 2)
+DIAG(ext_enum_too_large, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "enumeration values exceed range of largest integer", 211, SFINAE_Suppress, false, false, 2)
+DIAG(ext_enum_value_not_int, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C restricts enumerator values to range of 'int' (%0 is too %select{small|large}1)", 527, SFINAE_Suppress, false, false, 2)
+DIAG(ext_enumerator_increment_too_large, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "incremented enumerator value %0 is not representable in the largest integer type", 211, SFINAE_Suppress, false, false, 2)
+DIAG(ext_enumerator_too_large, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "enumerator value is not representable in the underlying type %0", 381, SFINAE_Suppress, false, false, 2)
+DIAG(ext_equals_this_lambda_capture_cxx2a, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "explicit capture of 'this' with a capture default of '=' is a C++2a extension", 98, SFINAE_Suppress, false, false, 3)
+DIAG(ext_equivalent_internal_linkage_decl_in_modules, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ambiguous use of internal linkage declaration %0 defined in multiple modules", 423, SFINAE_Suppress, false, false, 13)
+DIAG(ext_excess_initializers, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "excess elements in %select{array|vector|scalar|union|struct}0 initializer", 0, SFINAE_Suppress, false, false, 2)
+DIAG(ext_excess_initializers_in_char_array_initializer, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "excess elements in char array initializer", 0, SFINAE_Suppress, false, false, 2)
+DIAG(ext_explicit_conversion_functions, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "explicit conversion functions are a C++11 extension", 79, SFINAE_Suppress, false, false, 2)
+DIAG(ext_explicit_instantiation_duplicate, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "duplicate explicit instantiation of %0 ignored as a Microsoft extension", 395, SFINAE_Suppress, false, false, 2)
+DIAG(ext_explicit_instantiation_without_qualified_id, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "qualifier in explicit instantiation of %q0 requires a template-id (a typedef is not permitted)", 527, SFINAE_Suppress, false, false, 2)
+DIAG(ext_explicit_specialization_storage_class, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "explicit specialization cannot have a storage class", 0, SFINAE_Suppress, false, false, 2)
+DIAG(ext_expr_not_ice, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "expression is not an %select{integer|integral}0 constant expression; folding it to a constant is a GNU extension", 267, SFINAE_Suppress, false, false, 2)
+DIAG(ext_flexible_array_empty_aggregate_gnu, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "flexible array member %0 in otherwise empty %select{struct|interface|union|class|enum}1 is a GNU extension", 264, SFINAE_Suppress, false, false, 2)
+DIAG(ext_flexible_array_empty_aggregate_ms, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "flexible array member %0 in otherwise empty %select{struct|interface|union|class|enum}1 is a Microsoft extension", 387, SFINAE_Suppress, false, false, 2)
+DIAG(ext_flexible_array_in_array, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "%0 may not be used as an array element due to flexible array member", 228, SFINAE_Suppress, false, false, 2)
+DIAG(ext_flexible_array_in_struct, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "%0 may not be nested in a struct due to flexible array member", 228, SFINAE_Suppress, false, false, 2)
+DIAG(ext_flexible_array_init, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "flexible array initialization is a GNU extension", 265, SFINAE_Suppress, false, false, 2)
+DIAG(ext_flexible_array_union_gnu, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "flexible array member %0 in a union is a GNU extension", 266, SFINAE_Suppress, false, false, 2)
+DIAG(ext_flexible_array_union_ms, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "flexible array member %0 in a union is a Microsoft extension", 387, SFINAE_Suppress, false, false, 2)
+DIAG(ext_for_range_begin_end_types_differ, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'begin' and 'end' returning different types (%0 and %1) is a C++17 extension", 91, SFINAE_Suppress, false, false, 2)
+DIAG(ext_forward_ref_enum, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C forbids forward references to 'enum' types", 527, SFINAE_Suppress, false, false, 2)
+DIAG(ext_forward_ref_enum_def, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "redeclaration of already-defined enum %0 is a GNU extension", 271, SFINAE_Suppress, false, false, 2)
+DIAG(ext_found_via_dependent_bases_lookup, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of identifier %0 found via unqualified lookup into dependent bases of class templates is a Microsoft extension", 395, SFINAE_Suppress, false, false, 2)
+DIAG(ext_freestanding_complex, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "complex numbers are an extension in a freestanding C99 implementation", 527, SFINAE_Suppress, false, false, 2)
+DIAG(ext_friend_tag_redecl_outside_namespace, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "unqualified friend declaration referring to type outside of the nearest enclosing namespace is a Microsoft extension; add a nested name specifier", 397, SFINAE_Suppress, false, false, 2)
+DIAG(ext_gnu_anonymous_struct, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "anonymous structs are a GNU extension", 254, SFINAE_Suppress, false, false, 2)
+DIAG(ext_gnu_ptr_func_arith, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "arithmetic on%select{ a|}0 pointer%select{|s}0 to%select{ the|}2 function type%select{|s}2 %1%select{| and %3}2 is a GNU extension", 530, SFINAE_Suppress, false, false, 2)
+DIAG(ext_gnu_subscript_void_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "subscript of a pointer to void is a GNU extension", 530, SFINAE_Suppress, false, false, 2)
+DIAG(ext_gnu_void_ptr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "arithmetic on%select{ a|}0 pointer%select{|s}0 to void is a GNU extension", 530, SFINAE_Suppress, false, false, 2)
+DIAG(ext_goto_into_protected_scope, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "jump from this goto statement to its label is a Microsoft extension", 388, SFINAE_Suppress, false, false, 2)
+DIAG(ext_imaginary_constant, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "imaginary constants are a GNU extension", 268, SFINAE_Suppress, false, false, 2)
+DIAG(ext_implicit_exception_spec_mismatch, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "function previously declared with an %select{explicit|implicit}0 exception specification redeclared with an %select{implicit|explicit}0 exception specification", 291, SFINAE_Suppress, false, false, 2)
+DIAG(ext_implicit_function_decl, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "implicit declaration of function %0 is invalid in C99", 296, SFINAE_Suppress, false, false, 2)
+DIAG(ext_implicit_lib_function_decl, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "implicitly declaring library function '%0' with type %1", 296, SFINAE_Suppress, false, false, 2)
+DIAG(ext_in_class_initializer_float_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "in-class initializer for static data member of type %0 is a GNU extension", 273, SFINAE_Suppress, false, false, 2)
+DIAG(ext_in_class_initializer_float_type_cxx11, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "in-class initializer for static data member of type %0 requires 'constexpr' specifier", 616, SFINAE_Suppress, false, false, 2)
+DIAG(ext_in_class_initializer_non_constant, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "in-class initializer for static data member is not a constant expression; folding it to a constant is a GNU extension", 267, SFINAE_Suppress, false, false, 2)
+DIAG(ext_incomplete_in_exception_spec, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%select{|pointer to |reference to }0incomplete type %1 is not allowed in exception specification", 382, SFINAE_Suppress, false, false, 2)
+DIAG(ext_increment_bool, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "ISO C++17 does not allow incrementing expression of type bool", 321, SFINAE_Suppress, false, false, 2)
+DIAG(ext_init_capture, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "initialized lambda captures are a C++14 extension", 87, SFINAE_Suppress, false, false, 3)
+DIAG(ext_init_list_constant_narrowing, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "constant expression evaluates to %0 which cannot be narrowed to type %1", 83, SFINAE_SubstitutionFailure, false, false, 2)
+DIAG(ext_init_list_type_narrowing, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "type %0 cannot be narrowed to %1 in initializer list", 83, SFINAE_SubstitutionFailure, false, false, 2)
+DIAG(ext_init_list_variable_narrowing, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "non-constant-expression cannot be narrowed from type %0 to %1 in initializer list", 83, SFINAE_SubstitutionFailure, false, false, 2)
+DIAG(ext_initializer_string_for_char_array_too_long, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "initializer-string for char array is too long", 0, SFINAE_Suppress, false, false, 2)
+DIAG(ext_inline_variable, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "inline variables are a C++17 extension", 91, SFINAE_Suppress, false, false, 2)
+DIAG(ext_integer_complement_complex, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C does not support '~' for complex conjugation of %0", 527, SFINAE_Suppress, false, false, 2)
+DIAG(ext_integer_complex, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "complex integer types are a GNU extension", 259, SFINAE_Suppress, false, false, 2)
+DIAG(ext_integer_increment_complex, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C does not support '++'/'--' on complex integer type %0", 527, SFINAE_Suppress, false, false, 2)
+DIAG(ext_internal_in_extern_inline, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "static %select{function|variable}0 %1 is used in an inline function with external linkage", 617, SFINAE_Suppress, false, false, 2)
+DIAG(ext_internal_in_extern_inline_quiet, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "static %select{function|variable}0 %1 is used in an inline function with external linkage", 617, SFINAE_Suppress, false, false, 2)
+DIAG(ext_invalid_sign_spec, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'%0' cannot be signed or unsigned", 527, SFINAE_Suppress, false, false, 2)
+DIAG(ext_main_returns_nonint, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "return type of 'main' is not 'int'", 364, SFINAE_Suppress, false, false, 2)
+DIAG(ext_main_used, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C++ does not allow 'main' to be used by a program", 363, SFINAE_Suppress, false, false, 2)
+DIAG(ext_many_braces_around_scalar_init, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "too many braces around scalar initializer", 366, SFINAE_SubstitutionFailure, false, false, 2)
+DIAG(ext_member_redeclared, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "class member cannot be redeclared", 560, SFINAE_Suppress, false, false, 2)
+DIAG(ext_mismatched_exception_spec, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "exception specification in declaration does not match previous declaration", 382, SFINAE_Suppress, false, false, 2)
+DIAG(ext_mismatched_exception_spec_explicit_instantiation, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "exception specification in explicit instantiation does not match instantiated one", 382, SFINAE_Suppress, false, false, 2)
+DIAG(ext_missing_declspec, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "declaration specifier missing, defaulting to 'int'", 0, SFINAE_Suppress, false, false, 2)
+DIAG(ext_missing_exception_specification, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%0 is missing exception specification '%1'", 406, SFINAE_Suppress, false, false, 2)
+DIAG(ext_missing_type_specifier, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "type specifier missing, defaults to 'int'", 297, SFINAE_Suppress, false, false, 2)
+DIAG(ext_mixed_decls_code, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C90 forbids mixing declarations and code", 157, SFINAE_Suppress, false, false, 2)
+DIAG(ext_module_import_in_extern_c, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "import of C++ module '%0' appears within extern \"C\" language linkage specification", 422, SFINAE_Suppress, false, false, 13)
+DIAG(ext_module_import_not_at_top_level_noop, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "redundant #include of module '%0' appears within %1", 424, SFINAE_Suppress, false, false, 13)
+DIAG(ext_ms_ambiguous_direct_base, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "accessing inaccessible direct base %0 of %1 is a Microsoft extension", 389, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_anonymous_record, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "anonymous %select{structs|unions}0 are a Microsoft extension", 372, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_cast_fn_obj, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "static_cast between pointer-to-function and pointer-to-object is a Microsoft extension", 373, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_delayed_template_argument, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "using the undeclared type %0 as a default template argument is a Microsoft extension", 395, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_deref_template_argument, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "non-type template argument containing a dereference operation is a Microsoft extension", 395, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_explicit_constructor_call, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "explicit constructor calls are a Microsoft extension", 384, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_forward_ref_enum, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "forward references to 'enum' types are a Microsoft extension", 380, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_impcast_fn_obj, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "implicit conversion between pointer-to-function and pointer-to-object is a Microsoft extension", 373, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_missing_exception_specification, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%0 is missing exception specification '%1'", 382, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_template_spec_redecl_out_of_scope, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%select{class template|class template partial|variable template|variable template partial|function template|member function|static data member|member class|member enumeration}0 specialization of %1 not in %select{a namespace enclosing %2|class %2 or an enclosing namespace}3 is a Microsoft extension", 395, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_template_type_arg_missing_typename, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "template argument for template type parameter must be a type; omitted 'typename' is a Microsoft extension", 395, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_using_declaration_inaccessible, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "using declaration referring to inaccessible member '%0' (which refers to accessible member '%1') is a Microsoft compatibility extension", 398, SFINAE_AccessControl, false, false, 2)
+DIAG(ext_mutable_reference, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'mutable' on a reference type is a Microsoft extension", 391, SFINAE_Suppress, false, false, 2)
+DIAG(ext_nested_name_member_ref_lookup_ambiguous, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "lookup of %0 in member access expression is ambiguous; using member of %1", 20, SFINAE_Suppress, false, false, 2)
+DIAG(ext_nested_name_spec_is_enum, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of enumeration in a nested name specifier is a C++11 extension", 79, SFINAE_Suppress, false, false, 2)
+DIAG(ext_nested_pointer_qualifier_mismatch, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 discards qualifiers in nested pointer types", 311, SFINAE_Suppress, false, false, 2)
+DIAG(ext_new_paren_array_nonconst, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "when type is in parentheses, array cannot have dynamic size", 0, SFINAE_Suppress, false, false, 2)
+DIAG(ext_no_declarators, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "declaration does not declare anything", 405, SFINAE_Suppress, false, false, 2)
+DIAG(ext_no_named_members_in_struct_union, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "%select{struct|union}0 without named members is a GNU extension", 264, SFINAE_Suppress, false, false, 2)
+DIAG(ext_nonclass_type_friend, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "non-class friend type %0 is a C++11 extension", 79, SFINAE_Suppress, false, false, 2)
+DIAG(ext_noreturn_main, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'main' is not allowed to be declared _Noreturn", 363, SFINAE_Suppress, false, false, 2)
+DIAG(ext_offsetof_non_pod_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "offset of on non-POD type %0", 341, SFINAE_Suppress, false, false, 2)
+DIAG(ext_offsetof_non_standardlayout_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "offset of on non-standard-layout type %0", 341, SFINAE_Suppress, false, false, 2)
+DIAG(ext_omp_loop_not_canonical_init, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "initialization clause of OpenMP for loop is not in canonical form ('var = init' or 'T var = init')", 502, SFINAE_Suppress, false, false, 11)
+DIAG(ext_opencl_ext_vector_type_rgba_selector, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "vector component name '%0' is an OpenCL version 2.2 feature", 500, SFINAE_Suppress, false, false, 2)
+DIAG(ext_operator_new_delete_declared_inline, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "replacement function %0 cannot be declared 'inline'", 328, SFINAE_Suppress, false, false, 2)
+DIAG(ext_out_of_line_declaration, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "out-of-line declaration of a member must be a definition", 506, SFINAE_Suppress, false, false, 2)
+DIAG(ext_out_of_line_qualified_id_type_names_constructor, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++ specifies that qualified reference to %0 is a constructor name rather than a %select{template name|type}1 in this context, despite preceding %select{'typename'|'template'}2 keyword", 325, SFINAE_SubstitutionFailure, false, false, 2)
+DIAG(ext_override_exception_spec, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "exception specification of overriding function is more lax than base version", 382, SFINAE_Suppress, false, false, 2)
+DIAG(ext_param_default_argument_redefinition, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "redefinition of default argument", 378, SFINAE_Suppress, false, false, 2)
+DIAG(ext_param_not_declared, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "parameter %0 was not declared, defaulting to type 'int'", 527, SFINAE_Suppress, false, false, 2)
+DIAG(ext_param_promoted_not_compatible_with_prototype, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%diff{promoted type $ of K&R function parameter is not compatible with the parameter type $|promoted type of K&R function parameter is not compatible with parameter type}0,1 declared in a previous prototype", 351, SFINAE_Suppress, false, false, 2)
+DIAG(ext_partial_spec_not_more_specialized_than_primary, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "%select{class|variable}0 template partial specialization is not more specialized than the primary template", 343, SFINAE_Suppress, false, false, 2)
+DIAG(ext_partial_specs_not_deducible, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "%select{class|variable}0 template partial specialization contains %select{a template parameter|template parameters}1 that cannot be deduced; this partial specialization will never be used", 717, SFINAE_Suppress, false, false, 2)
+DIAG(ext_plain_complex, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "plain '_Complex' requires a type specifier; assuming '_Complex double'", 0, SFINAE_Suppress, false, false, 2)
+DIAG(ext_pointer_to_const_ref_member_on_rvalue, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "invoking a pointer to a 'const &' member function on an rvalue is a C++2a extension", 98, SFINAE_SubstitutionFailure, false, false, 2)
+DIAG(ext_predef_outside_function, CLASS_WARNING, (unsigned)diag::Severity::Warning, "predefined identifier is only valid inside function", 543, SFINAE_Suppress, false, false, 2)
+DIAG(ext_pseudo_dtor_on_void, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pseudo-destructors on type void are a Microsoft extension", 399, SFINAE_Suppress, false, false, 2)
+DIAG(ext_pure_function_definition, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "function definition with pure-specifier is a Microsoft extension", 392, SFINAE_Suppress, false, false, 2)
+DIAG(ext_redefinition_of_typedef, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "redefinition of typedef %0 is a C11 feature", 672, SFINAE_Suppress, false, false, 2)
+DIAG(ext_register_storage_class, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "ISO C++17 does not allow 'register' storage class specifier", 564, SFINAE_Suppress, false, false, 2)
+DIAG(ext_retained_language_linkage, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "friend function %0 retaining previous language linkage is an extension", 571, SFINAE_Suppress, false, false, 2)
+DIAG(ext_return_has_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "%select{void function|void method|constructor|destructor}1 %0 should not return a value", 575, SFINAE_Suppress, false, false, 2)
+DIAG(ext_return_has_void_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "void %select{function|method|block}1 %0 should not return void expression", 527, SFINAE_Suppress, false, false, 2)
+DIAG(ext_return_missing_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "non-void %select{function|method}1 %0 should return a value", 575, SFINAE_Suppress, false, false, 2)
+DIAG(ext_rvalue_to_reference_access_ctor, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "C++98 requires an accessible copy constructor for class %2 when binding a reference to a temporary; was %select{private|protected}0", 57, SFINAE_AccessControl, false, false, 2)
+DIAG(ext_rvalue_to_reference_temp_copy_no_viable, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "no viable constructor %select{copying variable|copying parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1; C++98 requires a copy constructor when binding a reference to a temporary", 57, SFINAE_Suppress, false, false, 2)
+DIAG(ext_sizeof_alignof_function_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "invalid application of '%select{sizeof|alignof|vec_step|__builtin_omp_required_simd_align|__alignof}0' to a function type", 530, SFINAE_Suppress, false, false, 2)
+DIAG(ext_sizeof_alignof_void_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "invalid application of '%select{sizeof|alignof|vec_step|__builtin_omp_required_simd_align|__alignof}0' to a void type", 530, SFINAE_Suppress, false, false, 2)
+DIAG(ext_standalone_specifier, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'%0' is not permitted on a declaration of a type", 405, SFINAE_Suppress, false, false, 2)
+DIAG(ext_star_this_lambda_capture_cxx17, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "capture of '*this' by copy is a C++17 extension", 91, SFINAE_Suppress, false, false, 3)
+DIAG(ext_static_data_member_in_union, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "static data member %0 in union is a C++11 extension", 79, SFINAE_Suppress, false, false, 2)
+DIAG(ext_static_non_static, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "redeclaring non-static %0 as static is a Microsoft extension", 393, SFINAE_Suppress, false, false, 2)
+DIAG(ext_static_out_of_line, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'static' can only be specified inside the class definition", 395, SFINAE_Suppress, false, false, 2)
+DIAG(ext_string_literal_operator_template, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "string literal operator templates are a GNU extension", 274, SFINAE_Suppress, false, false, 2)
+DIAG(ext_subscript_non_lvalue, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C90 does not allow subscripting non-lvalue array", 527, SFINAE_Suppress, false, false, 2)
+DIAG(ext_template_arg_extra_parens, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "address non-type template argument cannot be surrounded by parentheses", 0, SFINAE_Suppress, false, false, 2)
+DIAG(ext_template_arg_local_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "template argument uses local type %0", 357, SFINAE_Suppress, false, false, 2)
+DIAG(ext_template_arg_object_internal, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "non-type template argument referring to %select{function|object}0 %1 with internal linkage is a C++11 extension", 79, SFINAE_Suppress, false, false, 2)
+DIAG(ext_template_arg_unnamed_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "template argument uses unnamed type", 699, SFINAE_Suppress, false, false, 2)
+DIAG(ext_template_outside_of_template, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'template' keyword outside of a template", 79, SFINAE_Suppress, false, false, 2)
+DIAG(ext_template_parameter_default_in_function_template, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "default template arguments for a function template are a C++11 extension", 79, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_addrof_temporary, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "taking the address of a temporary object of type %0", 13, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_addrof_void, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C forbids taking the address of an expression of type 'void'", 527, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_base_super, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "method parameter type %diff{$ does not match super class method parameter type $|does not match super class method parameter type}0,1", 641, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_cast_nonscalar, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "C99 forbids casting nonscalar type %0 to the same type", 527, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_cast_to_union, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "cast to union type is a GNU extension", 275, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_comparison_of_distinct_pointers, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "comparison of distinct pointer types%diff{ ($ and $)|}0,1", 128, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_comparison_of_fptr_to_void, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "equality comparison between function pointer and void pointer (%0 and %1)", 527, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_comparison_of_pointer_integer, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "comparison between pointer and integer (%0 and %1)", 532, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_cond_incompatible_operands, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "incompatible operand types (%0 and %1)", 0, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_cond_incompatible_pointers, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pointer type mismatch%diff{ ($ and $)|}0,1", 535, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_cond_one_void, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "C99 forbids conditional expressions with only one void side", 527, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_cond_pointer_integer_mismatch, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pointer/integer type mismatch in conditional expression%diff{ ($ and $)|}0,1", 130, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_convert_discards_qualifiers, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 discards qualifiers", 311, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_convert_incompatible_function_pointer, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "incompatible function pointer types %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3", 307, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_convert_incompatible_pointer, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "incompatible pointer types %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3", 310, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_convert_incompatible_pointer_sign, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 converts between pointers to integer types with different sign", 533, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_convert_int_pointer, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "incompatible integer to pointer conversion %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3", 330, SFINAE_SubstitutionFailure, false, false, 24)
+DIAG(ext_typecheck_convert_pointer_int, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "incompatible pointer to integer conversion %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3", 330, SFINAE_Suppress, false, false, 24)
+DIAG(ext_typecheck_convert_pointer_void_func, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "%select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 converts between void pointer and function pointer", 527, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_decl_incomplete_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "tentative definition of variable with internal linkage has incomplete non-array type %0", 660, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_indirection_through_void_pointer, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++ does not allow indirection on operand of type %0", 752, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_ordered_comparison_of_function_pointers, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ordered comparison of function pointers (%0 and %1)", 505, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_ordered_comparison_of_pointer_and_zero, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ordered comparison between pointer and zero (%0 and %1) is an extension", 527, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_ordered_comparison_of_pointer_integer, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ordered comparison between pointer and integer (%0 and %1)", 0, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_zero_array_size, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "zero size arrays are an extension", 759, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typedef_without_a_name, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "typedef requires a name", 405, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typename_missing, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "missing 'typename' prior to dependent type name '%0%1'", 673, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typename_outside_of_template, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'typename' occurs outside of a template", 79, SFINAE_Suppress, false, false, 2)
+DIAG(ext_undeclared_unqual_id_with_dependent_base, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of undeclared identifier %0; unqualified lookup into dependent bases of class template %1 is a Microsoft extension", 395, SFINAE_Suppress, false, false, 2)
+DIAG(ext_undefined_internal_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C++ requires a definition in this translation unit for %select{function|variable}0 %q1 because its type does not have linkage", 682, SFINAE_Suppress, false, false, 2)
+DIAG(ext_unelaborated_friend_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "unelaborated friend declaration is a C++11 extension; specify '%select{struct|interface|union|class|enum}0' to befriend %1", 79, SFINAE_Suppress, false, false, 2)
+DIAG(ext_union_member_of_reference_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "union member %0 has reference type %1, which is a Microsoft extension", 396, SFINAE_Suppress, false, false, 2)
+DIAG(ext_use_out_of_scope_declaration, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of out-of-scope declaration of %0%select{| whose type is not compatible with that of an implicit declaration}1", 507, SFINAE_Suppress, false, false, 2)
+DIAG(ext_using_undefined_std, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "using directive refers to implicitly-defined namespace 'std'", 0, SFINAE_Suppress, false, false, 2)
+DIAG(ext_variable_sized_type_in_struct, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "field %0 with variable sized type %1 not at the end of a struct or class is a GNU extension", 276, SFINAE_Suppress, false, false, 2)
+DIAG(ext_variable_template, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "variable templates are a C++14 extension", 87, SFINAE_Suppress, false, false, 2)
+DIAG(ext_variadic_main, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'main' is not allowed to be declared variadic", 363, SFINAE_Suppress, false, false, 2)
+DIAG(ext_vla, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "variable length arrays are a C99 feature", 751, SFINAE_Suppress, false, false, 2)
+DIAG(ext_vla_folded_to_constant, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "variable length array folded to constant array as an extension", 267, SFINAE_Suppress, false, false, 2)
+DIAG(note_access_constrained_by_path, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "constrained by %select{|implicitly }1%select{private|protected}0 inheritance here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_access_natural, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{|implicitly }1declared %select{private|protected}0 here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_access_protected_restricted_ctordtor, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "protected %select{constructor|destructor}0 can only be used to %select{construct|destroy}0 a base class subobject", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_access_protected_restricted_noobject, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "must name member using the type of the current context %0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_access_protected_restricted_object, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "can only access this member on an object of type %0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_add_std_move, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "call 'std::move' explicitly to avoid copying", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_add_std_move_in_cxx11, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "call 'std::move' explicitly to avoid copying on older compilers", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_add_synthesize_directive, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "add a '@synthesize' directive", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_additional_parens_for_variable_declaration, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "add a pair of parentheses to declare a variable", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_addrof_ovl_candidate_disabled_by_enable_if_attr, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate function made ineligible by enable_if", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_alignas_on_declaration, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declared with %0 attribute here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_allocated_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "allocated with 'new%select{[]|}0' here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ambig_member_ref_object_type, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "lookup in the object type %0 refers here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ambig_member_ref_scope, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "lookup from the current scope refers here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ambiguous_candidate, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate found by name lookup is %q0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ambiguous_inherited_constructor_using, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "inherited from base class %0 here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ambiguous_member_found, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "member found by ambiguous name lookup", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ambiguous_type_conversion, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "because of ambiguity in conversion %diff{of $ to $|between types}0,1", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_arc_bridge, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use __bridge to convert directly (no change in ownership)", 0, SFINAE_Suppress, false, false, 7)
+DIAG(note_arc_bridge_retained, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use %select{__bridge_retained|CFBridgingRetain call}1 to make an ARC object available as a +1 %0", 0, SFINAE_Suppress, false, false, 7)
+DIAG(note_arc_bridge_transfer, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use %select{__bridge_transfer|CFBridgingRelease call}1 to transfer ownership of a +1 %0 into ARC", 0, SFINAE_Suppress, false, false, 7)
+DIAG(note_arc_cstyle_bridge, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use __bridge with C-style cast to convert directly (no change in ownership)", 0, SFINAE_Suppress, false, false, 7)
+DIAG(note_arc_cstyle_bridge_retained, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use __bridge_retained with C-style cast to make an ARC object available as a +1 %0", 0, SFINAE_Suppress, false, false, 7)
+DIAG(note_arc_cstyle_bridge_transfer, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use __bridge_transfer with C-style cast to transfer ownership of a +1 %0 into ARC", 0, SFINAE_Suppress, false, false, 7)
+DIAG(note_arc_field_with_ownership, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "field has non-trivial ownership qualification", 0, SFINAE_Suppress, false, false, 10)
+DIAG(note_arc_forbidden_type, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declaration uses type that is ill-formed in ARC", 0, SFINAE_Suppress, false, false, 10)
+DIAG(note_arc_gained_method_convention, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declaration in interface is not in the '%select{alloc|copy|init|new}0' family because %select{its result type is not an object pointer|its result type is unrelated to its receiver type}1", 0, SFINAE_Suppress, false, false, 5)
+DIAG(note_arc_init_returns_unrelated, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "init method must return a type related to its receiver type", 0, SFINAE_Suppress, false, false, 10)
+DIAG(note_arc_lost_method_convention, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declaration in interface", 0, SFINAE_Suppress, false, false, 5)
+DIAG(note_arc_retain_cycle_owner, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "block will be retained by %select{the captured object|an object strongly retained by the captured object}0", 0, SFINAE_Suppress, false, false, 26)
+DIAG(note_arc_weak_also_accessed_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "also accessed here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_arc_weak_disabled, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declaration uses __weak, but ARC is disabled", 0, SFINAE_Suppress, false, false, 10)
+DIAG(note_arc_weak_no_runtime, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declaration uses __weak, which the current deployment target does not support", 0, SFINAE_Suppress, false, false, 10)
+DIAG(note_array_index_out_of_bounds, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "array %0 declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_array_init_plain_string_into_char8_t, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "add 'u8' prefix to form a 'char8_t' string literal", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_array_size_conversion, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "conversion to %select{integral|enumeration}0 type %1 declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_asm_input_duplicate_first, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "constraint '%0' is already present here", 0, SFINAE_Suppress, false, false, 12)
+DIAG(note_asm_missing_constraint_modifier, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use constraint modifier \"%0\"", 0, SFINAE_Suppress, false, false, 12)
+DIAG(note_assign_lhs_incomplete, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "type %0 is incomplete", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_atomic_property_fixup_suggest, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "setter and getter must both be synthesized, or both be user defined,or the property must be nonatomic", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_attribute, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "attribute is here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_attribute_overloadable_prev_overload, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous %select{unmarked |}0overload of function is here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_auto_readonly_iboutlet_fixup_suggest, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "property should be changed to be readwrite", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_availability_specified_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 has been explicitly marked %select{unavailable|deleted|deprecated}1 here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_await_ready_no_bool_conversion, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "return type of 'await_ready' is required to be contextually convertible to 'bool'", 0, SFINAE_Suppress, false, false, 14)
+DIAG(note_bad_memaccess_silence, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "explicitly cast the pointer to silence this warning", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_base_class_specified_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "base class %0 specified here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_bitfield_decl, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "bit-field is declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_block_var_fixit_add_initialization, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "did you mean to use __block %0?", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_called_by, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "called by %0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_callee_decl, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_callee_static_array, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "callee declares array parameter as static here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_carries_dependency_missing_first_decl, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declaration missing '[[carries_dependency]]' attribute is here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_cast_to_void, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "cast expression to void to silence warning", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_cat_conform_to_noescape_prot, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{category|class extension}0 conforms to protocol %1 which defines method %2", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_change_bitfield_sign, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "consider making the bitfield type %select{unsigned|signed}0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_change_calling_conv_fixit, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "consider defining %0 with the '%1' calling convention", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_class_declared, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "class is declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_cocoa_naming_declare_family, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "explicitly declare getter %objcinstance0 with '%1' to return an 'unowned' object", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_collapse_loop_count, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "parameter of the 'collapse' clause", 0, SFINAE_Suppress, false, false, 11)
+DIAG(note_compat_assoc, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "compatible type %0 specified here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_condition_assign_silence, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "place parentheses around the assignment to silence this warning", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_condition_assign_to_comparison, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use '==' to turn this assignment into an equality comparison", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_condition_or_assign_to_comparison, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use '!=' to turn this compound assignment into an inequality comparison", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_conflicting_attribute, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "conflicting attribute is here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_conflicting_try_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "conflicting %0 here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_constexpr_body_previous_return, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous return statement is here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_constexpr_ctor_missing_init, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "member not initialized by constructor", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_constexpr_virtual_base_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "virtual base class declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_conv_function_declared_at, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "type conversion function declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_convert_inline_to_static, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use 'static' to give inline function %0 internal linkage", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_coroutine_promise_call_implicitly_required, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "call to %0 implicitly required by coroutine function here", 0, SFINAE_Suppress, false, false, 14)
+DIAG(note_coroutine_promise_implicit_await_transform_required_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "call to 'await_transform' implicitly required by 'co_await' here", 0, SFINAE_Suppress, false, false, 14)
+DIAG(note_coroutine_promise_suspend_implicitly_required, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "call to '%select{initial_suspend|final_suspend}0' implicitly required by the %select{initial suspend point|final suspend point}0", 0, SFINAE_Suppress, false, false, 14)
+DIAG(note_cuda_conflicting_device_function_declared_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "conflicting __device__ function declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_cuda_ovl_candidate_target_mismatch, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate template ignored: target attributes do not match", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_cxx2a_compat_utf8_string_remove_u8, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "remove 'u8' prefix to avoid a change of behavior; Clang encodes unprefixed narrow string literals as UTF-8", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_decl_unguarded_availability_silence, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "annotate %select{%1|anonymous %1}0 with an availability attribute to silence this warning", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_declaration_not_a_prototype, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "this declaration is not a prototype; add 'void' to make it a prototype for a zero-parameter function", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_declare_parameter_strong, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declare the parameter __strong or capture a __block __strong variable to keep values alive across autorelease pools", 0, SFINAE_Suppress, false, false, 5)
+DIAG(note_declared_coroutine_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "function is a coroutine due to use of '%0' here", 0, SFINAE_Suppress, false, false, 14)
+DIAG(note_declared_nonnull, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declared %select{'returns_nonnull'|'nonnull'}0 here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_declared_required_constant_init_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "required by 'require_constant_initialization' attribute here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_deduced_template_arg_substitution_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "during template argument deduction for %select{class|variable}0 template %select{partial specialization |}1%2 %3", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_deduction_guide_access, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "deduction guide declared %0 by intervening access specifier", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_deduction_guide_template_access, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "member template declared %0 here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_default_arg_instantiation_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in instantiation of default argument for '%0' required here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_default_argument_declared_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "default argument declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_default_function_arg_instantiation_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in instantiation of default function argument expression for '%0' required here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_defined_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 defined here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_delete_conversion, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "conversion to pointer type %0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_delete_non_virtual, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "qualify call to silence this warning", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_deleted_assign_field, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{copy|move}0 assignment operator of %1 is implicitly deleted because field %2 is of %select{reference|const-qualified}4 type %3", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_deleted_copy_ctor_rvalue_reference, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "copy constructor of %0 is implicitly deleted because field %1 is of rvalue reference type %2", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_deleted_copy_user_declared_move, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "copy %select{constructor|assignment operator}0 is implicitly deleted because %1 has a user-declared move %select{constructor|assignment operator}2", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_deleted_default_ctor_all_const, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{default constructor of|constructor inherited by}0 %1 is implicitly deleted because all %select{data members|data members of an anonymous union member}2 are const-qualified", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_deleted_default_ctor_uninit_field, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{default constructor of|constructor inherited by}0 %1 is implicitly deleted because field %2 of %select{reference|const-qualified}4 type %3 would not be initialized", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_deleted_dtor_no_operator_delete, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "virtual destructor requires an unambiguous, accessible 'operator delete'", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_deleted_special_member_class_subobject, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{default constructor of|copy constructor of|move constructor of|copy assignment operator of|move assignment operator of|destructor of|constructor inherited by}0 %1 is implicitly deleted because %select{base class %3|%select{||||variant }4field %3}2 %select{has %select{no|a deleted|multiple|an inaccessible|a non-trivial}4 %select{%select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor|%select{default|corresponding|default|default|default}4 constructor}0|destructor}5%select{||s||}4|is an ObjC pointer}6", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_deleted_type_mismatch, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "function is implicitly deleted because its declared type does not match the type of an implicit %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_dependent_function_template_spec_discard_reason, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate ignored: %select{not a function template|not a member of the enclosing namespace; did you mean to explicitly qualify the specialization?}0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_dependent_non_type_default_arg_in_partial_spec, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "template parameter is used in default argument declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_dependent_var_use, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "must qualify identifier to find this declaration in dependent base class", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_deprecated_this_capture, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "add an explicit capture of 'this' to capture '*this' by reference", 0, SFINAE_Suppress, false, false, 3)
+DIAG(note_destructor_type_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "type %0 is declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_due_to_dllexported_class, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "due to %0 being dllexported%select{|; try compiling in C++11 mode}1", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_duplicate_element, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "element %0 also has value %1", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_empty_body_on_separate_line, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "put the semicolon on a separate line to silence this warning", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_empty_parens_default_ctor, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "remove parentheses to declare a variable", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_empty_parens_function_call, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "change this ',' to a ';' to call %0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_empty_parens_zero_initialize, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "replace parentheses with an initializer to declare a variable", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_enters_block_captures_cxx_obj, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump enters lifetime of block which captures a destructible C++ object", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_enters_block_captures_non_trivial_c_struct, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump enters lifetime of block which captures a C struct that is non-trivial to destroy", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_enters_block_captures_strong, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump enters lifetime of block which strongly captures a variable", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_enters_block_captures_weak, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump enters lifetime of block which weakly captures a variable", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_entity_declared_at, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_enum_specialized_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "enum %0 was explicitly specialized here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_equality_comparison_silence, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "remove extraneous parentheses around the comparison to silence this warning", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_equality_comparison_to_assign, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use '=' to turn this equality comparison into an assignment", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_equivalent_internal_linkage_decl, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declared here%select{ in module '%1'|}0", 0, SFINAE_Suppress, false, false, 13)
+DIAG(note_evaluate_comparison_first, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "place parentheses around comparison expression to evaluate it first", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_evaluating_exception_spec_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in evaluation of exception specification for %q0 needed here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_exits___block, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump exits scope of __block variable", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_exits_block_captures_cxx_obj, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump exits lifetime of block which captures a destructible C++ object", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_exits_block_captures_non_trivial_c_struct, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump exits lifetime of block which captures a C struct that is non-trivial to destroy", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_exits_block_captures_strong, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump exits lifetime of block which strongly captures a variable", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_exits_block_captures_weak, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump exits lifetime of block which weakly captures a variable", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_exits_cleanup, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump exits scope of variable with __attribute__((cleanup))", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_exits_cxx_catch, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump exits catch block", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_exits_cxx_try, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump exits try block", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_exits_dtor, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump exits scope of variable with non-trivial destructor", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_exits_objc_autoreleasepool, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump exits autoreleasepool block", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_exits_objc_catch, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump exits @catch block", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_exits_objc_finally, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump exits @finally block", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_exits_objc_strong, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump exits scope of __strong variable", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_exits_objc_synchronized, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump exits @synchronized block", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_exits_objc_try, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump exits @try block", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_exits_objc_weak, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump exits scope of __weak variable", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_exits_seh_except, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump exits __except block", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_exits_seh_finally, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump exits __finally block", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_exits_seh_try, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump exits __try block", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_exits_temporary_dtor, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump exits scope of lifetime-extended temporary with non-trivial destructor", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_explicit_ctor_deduction_guide_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "explicit %select{constructor|deduction guide}0 declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_explicit_instantiation_candidate, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "explicit instantiation candidate function %q0 template here %1", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_explicit_instantiation_definition_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "explicit instantiation definition is here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_explicit_instantiation_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "explicit instantiation refers here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_explicit_specialization_declared_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "explicit specialization declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_explicit_template_arg_substitution_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "while substituting explicitly-specified template arguments into function template %0 %1", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_explicit_template_spec_does_not_need_header, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "'template<>' header not required for explicitly-specialized class %0 declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_extern_c_begins_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "extern \"C\" language linkage specification begins here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_extern_c_global_conflict, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declared %select{in global scope|with C language linkage}0 here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_fallthrough_insert_semi_fixit, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "did you forget ';'?", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_field_designator_found, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "field designator refers here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_final_overrider, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "final overrider of %q0 in %1", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_flexible_array_member, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "initialized flexible array member %0 is here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_for_range_begin_end, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "selected '%select{begin|end}0' %select{function|template }1%2 with iterator type %3", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_for_range_invalid_iterator, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in implicit call to 'operator%select{!=|*|++}0' for iterator of type %1", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_for_range_member_begin_end_ignored, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "member is not a candidate because range type %0 has no '%select{end|begin}1' member", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_format_fix_specifier, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "did you mean to use '%0'?", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_format_security_fixit, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "treat the string as an argument to avoid this", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_format_string_defined, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "format string is defined here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_forward_class, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "forward declaration of class here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_forward_template_decl, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "forward declaration of template entity is here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_found_mutex_near_match, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "found near match '%0'", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_from_diagnose_if, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "from 'diagnose_if' attribute on %0:", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_function_style_cast_add_parentheses, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "add enclosing parentheses to perform a function-style cast", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_function_suggestion, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "did you mean %0?", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_function_template_deduction_instantiation_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "while substituting deduced template arguments into function template %0 %1", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_function_template_spec_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in instantiation of function template specialization %q0 requested here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_function_template_spec_matched, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "function template %q0 matches specialization %1", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_function_to_function_call, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "suffix with parentheses to turn this into a function call", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_function_warning_silence, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "prefix with the address-of operator to silence this warning", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_getter_unavailable, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "or because setter is declared here, but no getter method %0 is found", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_goto_ms_asm_label, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "inline assembly label %0 declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_guarded_by_declared_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "Guarded_by declared here.", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_hidden_overloaded_virtual_declared_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "hidden overloaded virtual function %q0 declared here%select{|: different classes%diff{ ($ vs $)|}2,3|: different number of parameters (%2 vs %3)|: type mismatch at %ordinal2 parameter%diff{ ($ vs $)|}3,4|: different return type%diff{ ($ vs $)|}2,3|: different qualifiers (%2 vs %3)|: different exception specifications}1", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_hidden_tag, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "type declaration hidden", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_hiding_object, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declaration hides type", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ice_conversion_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "conversion to %select{integral|enumeration}0 type %1 declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_illegal_field_declared_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "field of illegal %select{type|pointer type}0 %1 declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_implementation_declared, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "class implementation is declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_implemented_by_class, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "when implemented by class %0", 0, SFINAE_Suppress, false, false, 9)
+DIAG(note_implicit_delete_this_in_destructor_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "while checking implicit 'delete this' for virtual destructor", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_implicit_member_target_infer_collision, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "implicit %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 inferred target collision: call to both %select{__device__|__global__|__host__|__host__ __device__}1 and %select{__device__|__global__|__host__|__host__ __device__}2 members", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_implicit_param_decl, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 is an implicit parameter", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_implicitly_deleted, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "explicitly defaulted function was implicitly deleted here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_in_binding_decl_init, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in implicit initialization of binding declaration %0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_in_class_initializer_float_type_cxx11, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "add 'constexpr'", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_in_class_initializer_not_yet_parsed, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "default member initializer declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_in_declaration_of_implicit_special_member, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "while declaring the implicit %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}1 for %0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_in_for_range, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "when looking up '%select{begin|end}0' function for range expression of type %1", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_in_omitted_aggregate_initializer, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in implicit initialization of %select{array element %1 with omitted initializer|field %1 with omitted initializer|trailing array elements in runtime-sized array new}0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_in_reference_temporary_list_initializer, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in initialization of temporary of type %0 created to list-initialize this reference", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_include_header_or_declare, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "include the header <%0> or explicitly provide a declaration for '%1'", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_incomplete_class_and_qualified_id, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "conformance of forward class %0 to protocol %1 can not be confirmed", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_indirect_goto_target, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "possible target of indirect goto statement", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_indirection_through_null, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "consider using __builtin_trap() or qualifying pointer with 'volatile'", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_inequality_comparison_to_or_assign, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use '|=' to turn this inequality comparison into an or-assignment", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_init_list_narrowing_silence, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "insert an explicit cast to silence this issue", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_init_with_default_member_initalizer, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "initializing field %0 with default member initializer", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_insert_break_fixit, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "insert 'break;' to avoid fall-through", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_insert_fallthrough_fixit, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "insert '%0;' to silence this warning", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_inst_declaration_hint, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "add an explicit instantiation declaration to suppress this warning if %q0 is explicitly instantiated in another translation unit", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_instantiation_contexts_suppressed, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "(skipping %0 context%s0 in backtrace; use -ftemplate-backtrace-limit=0 to see all)", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_instantiation_required_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{implicit|explicit}0 instantiation first required here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_it_delegates_to, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "it delegates to", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ivar_decl, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "instance variable is declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_lambda_decl, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "lambda expression begins here", 0, SFINAE_Suppress, false, false, 3)
+DIAG(note_lambda_to_block_conv, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "implicit capture of lambda object due to conversion to block pointer here", 0, SFINAE_Suppress, false, false, 3)
+DIAG(note_lifetime_extending_member_declared_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{%select{reference|'std::initializer_list'}0 member|member with %select{reference|'std::initializer_list'}0 subobject}1 declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_local_decl_close_match, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "local declaration nearly matches", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_local_decl_close_param_match, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "type of %ordinal0 parameter of local declaration does not match definition%diff{ ($ vs $)|}1,2", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_local_var_initializer, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{via initialization of|binding reference}0 variable %select{%2 |}1here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_lock_exclusive_and_shared, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "the other acquisition of %0 '%1' is here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_locked_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 acquired here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_logical_instead_of_bitwise_change_operator, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use '%0' for a bitwise operation", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_logical_instead_of_bitwise_remove_constant, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "remove constant to silence this warning", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_logical_not_fix, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "add parentheses after the '!' to evaluate the %select{comparison|bitwise operator}0 first", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_logical_not_silence_with_parens, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "add parentheses around left hand side expression to silence this warning", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_loop_iteration_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{decremented|incremented}0 here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_main_change_return_type, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "change return type to 'int'", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_main_remove_noreturn, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "remove '_Noreturn'", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_member_declared_at, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "member is declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_member_declared_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "member %0 declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_member_def_close_const_match, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "member declaration does not match because it %select{is|is not}0 const qualified", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_member_def_close_match, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "member declaration nearly matches", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_member_def_close_param_match, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "type of %ordinal0 parameter of member declaration does not match definition%diff{ ($ vs $)|}1,2", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_member_first_declared_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "member %0 first declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_member_reference_arrow_from_operator_arrow, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "'->' applied to return value of the operator->() declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_member_synthesized_at, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in implicit %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 for %1 first required here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_memsize_comparison_cast_silence, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "explicitly cast the argument to size_t to silence this warning", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_memsize_comparison_paren, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "did you mean to compare the result of %0 instead?", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_method_declared_at, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "method %0 declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_method_return_type_change, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "compiler has implicitly changed method %0 return type", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_method_sent_forward_class, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "method %0 is used for the forward class", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_module_import_not_at_top_level, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 begins here", 0, SFINAE_Suppress, false, false, 13)
+DIAG(note_multiversioning_caused_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "function multiversioning caused by this declaration", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_namespace_defined_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "namespace %0 defined here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_neon_vector_initializer_non_portable, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "consider using vld1_%0%1() to initialize a vector from memory, or vcreate_%0%1() to initialize from an integer constant", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_neon_vector_initializer_non_portable_q, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "consider using vld1q_%0%1() to initialize a vector from memory, or vcombine_%0%1(vcreate_%0%1(), vcreate_%0%1()) to initialize from integer constants", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_next_field_declaration, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "next field declaration is here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_next_ivar_declaration, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "next %select{instance variable declaration|synthesized instance variable}0 is here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_non_deducible_parameter, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "non-deducible template parameter %0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_non_instantiated_member_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "not-yet-instantiated member is declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_non_literal_base_class, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 is not literal because it has base class %1 of non-literal type", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_non_literal_field, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 is not literal because it has data member %1 of %select{non-literal|volatile}3 type %2", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_non_literal_incomplete, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "incomplete type %0 is not a literal type", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_non_literal_lambda, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "lambda closure types are non-literal types before C++17", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_non_literal_no_constexpr_ctors, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 is not literal because it is not an aggregate and has no constexpr constructors other than copy or move constructors", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_non_literal_nontrivial_dtor, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 is not literal because it has a non-trivial destructor", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_non_literal_user_provided_dtor, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 is not literal because it has a user-provided destructor", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_non_literal_virtual_base, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{struct|interface|class}0 with virtual base %plural{1:class|:classes}1 is not a literal type", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_non_template_in_template_id_found, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "non-template declaration found by name lookup", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_non_usual_function_declared_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "non-usual %0 declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_nontemplate_decl_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "non-templated declaration is here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_nontrivial_default_arg, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "because it has a default argument", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_nontrivial_field, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "field is non-trivial to %select{copy|default-initialize}0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_nontrivial_has_virtual, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "because type %0 has a virtual %select{member function|base class}1", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_nontrivial_in_class_init, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "because field %0 has an initializer", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_nontrivial_no_copy, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "because no %select{<<ERROR>>|constructor|constructor|assignment operator|assignment operator|<<ERROR>>}2 can be used to %select{<<ERROR>>|copy|move|copy|move|<<ERROR>>}2 %select{base class|field|an object}0 of type %3", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_nontrivial_no_def_ctor, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "because %select{base class of |field of |}0type %1 has no default constructor", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_nontrivial_objc_ownership, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "because type %0 has a member with %select{no|no|__strong|__weak|__autoreleasing}1 ownership", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_nontrivial_param_type, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "because its parameter is %diff{of type $, not $|of the wrong type}2,3", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_nontrivial_subobject, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "because the function selected to %select{construct|copy|move|copy|move|destroy}2 %select{base class|field}0 of type %1 is not trivial", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_nontrivial_user_provided, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "because %select{base class of |field of |}0type %1 has a user-provided %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}2", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_nontrivial_variadic, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "because it is a variadic function", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_nontrivial_virtual_dtor, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "destructor for %0 is not trivial because it is virtual", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_noreturn_missing_first_decl, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declaration missing '[[noreturn]]' attribute is here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_not_found_by_two_phase_lookup, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 should be declared prior to the call site%select{| or in %2| or in an associated namespace of one of its arguments}1", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_nullability_fix_it, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "insert '%select{_Nonnull|_Nullable|_Null_unspecified}0' if the %select{pointer|block pointer|member pointer|array parameter}1 %select{should never be null|may be null|should not declare nullability}0", 0, SFINAE_Suppress, false, false, 19)
+DIAG(note_nullability_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 specified here", 0, SFINAE_Suppress, false, false, 19)
+DIAG(note_nullability_type_specifier, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use nullability type specifier %0 to affect the innermost pointer type of %1", 0, SFINAE_Suppress, false, false, 19)
+DIAG(note_objc_circular_container_declared_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_objc_designated_init_marked_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "method marked as designated initializer of the class here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_objc_literal_comparison_isequal, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use 'isEqual:' instead", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_objc_literal_method_param, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{first|second|third}0 parameter has unexpected type %1 (should be %2)", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_objc_literal_method_return, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "method returns unexpected type %0 (should be an object type)", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_objc_needs_superclass, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "add a super class to fix this problem", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_objc_type_param_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "type parameter %0 declared here", 0, SFINAE_Suppress, false, false, 20)
+DIAG(note_objc_unsafe_perform_selector_method_declared_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "method %0 that returns %1 declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_omp_atomic_capture, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{expected assignment expression|expected compound statement|expected exactly two expression statements|expected in right hand side of the first expression}0", 0, SFINAE_Suppress, false, false, 11)
+DIAG(note_omp_atomic_previous_clause, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "'%0' clause used here", 0, SFINAE_Suppress, false, false, 11)
+DIAG(note_omp_atomic_read_write, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{expected an expression statement|expected built-in assignment operator|expected expression of scalar type|expected lvalue expression}0", 0, SFINAE_Suppress, false, false, 11)
+DIAG(note_omp_atomic_update, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{expected an expression statement|expected built-in binary or unary operator|expected unary decrement/increment operation|expected expression of scalar type|expected assignment expression|expected built-in binary operator|expected one of '+', '*', '-', '/', '&', '^', '%|', '<<', or '>>' built-in operations|expected in right hand side of expression}0", 0, SFINAE_Suppress, false, false, 11)
+DIAG(note_omp_collapse_ordered_expr, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "as specified in %select{'collapse'|'ordered'|'collapse' and 'ordered'}0 clause%select{||s}0", 0, SFINAE_Suppress, false, false, 11)
+DIAG(note_omp_conversion_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "conversion to %select{integral|enumeration}0 type %1 declared here", 0, SFINAE_Suppress, false, false, 11)
+DIAG(note_omp_critical_hint_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{|previous }0'hint' clause with value '%1'", 0, SFINAE_Suppress, false, false, 11)
+DIAG(note_omp_critical_no_hint, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{|previous }0directive with no 'hint' clause specified", 0, SFINAE_Suppress, false, false, 11)
+DIAG(note_omp_explicit_dsa, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "defined as %0", 0, SFINAE_Suppress, false, false, 11)
+DIAG(note_omp_implicit_dsa, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "implicitly determined as %0", 0, SFINAE_Suppress, false, false, 11)
+DIAG(note_omp_invalid_length_on_this_ptr_mapping, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "expected length on mapping of 'this' array section expression to be '1'", 0, SFINAE_Suppress, false, false, 11)
+DIAG(note_omp_invalid_lower_bound_on_this_ptr_mapping, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "expected lower bound on mapping of 'this' array section expression to be '0' or not specified", 0, SFINAE_Suppress, false, false, 11)
+DIAG(note_omp_invalid_subscript_on_this_ptr_map, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "expected 'this' subscript expression on map clause to be 'this[0]'", 0, SFINAE_Suppress, false, false, 11)
+DIAG(note_omp_loop_cond_requres_compatible_incr, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "loop step is expected to be %select{negative|positive}0 due to this condition", 0, SFINAE_Suppress, false, false, 11)
+DIAG(note_omp_nested_statement_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{statement|directive}0 outside teams construct here", 0, SFINAE_Suppress, false, false, 11)
+DIAG(note_omp_nested_teams_construct_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "nested teams construct here", 0, SFINAE_Suppress, false, false, 11)
+DIAG(note_omp_nowait_clause_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "'nowait' clause is here", 0, SFINAE_Suppress, false, false, 11)
+DIAG(note_omp_ordered_param, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "'ordered' clause with specified parameter", 0, SFINAE_Suppress, false, false, 11)
+DIAG(note_omp_predetermined_dsa, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{static data member is predetermined as shared|variable with static storage duration is predetermined as shared|loop iteration variable is predetermined as private|loop iteration variable is predetermined as linear|loop iteration variable is predetermined as lastprivate|constant variable is predetermined as shared|global variable is predetermined as shared|non-shared variable in a task construct is predetermined as firstprivate|variable with automatic storage duration is predetermined as private}0%select{|; perhaps you forget to enclose 'omp %2' directive into a parallel or another task region?}1", 0, SFINAE_Suppress, false, false, 11)
+DIAG(note_omp_previous_critical_region, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous 'critical' region starts here", 0, SFINAE_Suppress, false, false, 11)
+DIAG(note_omp_previous_grainsize_num_tasks, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "'%0' clause is specified here", 0, SFINAE_Suppress, false, false, 11)
+DIAG(note_omp_previous_named_if_clause, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous clause with directive name modifier specified here", 0, SFINAE_Suppress, false, false, 11)
+DIAG(note_omp_previous_reduction_identifier, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previously marked as task_reduction with different reduction operation", 0, SFINAE_Suppress, false, false, 11)
+DIAG(note_omp_referenced, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previously referenced here", 0, SFINAE_Suppress, false, false, 11)
+DIAG(note_omp_requires_previous_clause, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 clause previously used here", 0, SFINAE_Suppress, false, false, 11)
+DIAG(note_omp_task_predetermined_firstprivate_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "predetermined as a firstprivate in a task construct here", 0, SFINAE_Suppress, false, false, 11)
+DIAG(note_opencl_typedef_access_qualifier, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previously declared '%0' here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_operator_arrow_depth, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use -foperator-arrow-depth=N to increase 'operator->' limit", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_operator_arrow_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "'operator->' declared here produces an object of type %0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_operator_arrows_suppressed, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "(skipping %0 'operator->'%s0 in backtrace)", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_overridden_marked_noescape, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "parameter of overridden method is annotated with __attribute__((noescape))", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_overridden_method, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "overridden method is here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_overridden_virtual_function, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "overridden virtual function is here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_builtin_binary_candidate, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "built-in candidate %0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_builtin_unary_candidate, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "built-in candidate %0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %3}1%select{| has different class%diff{ (expected $ but has $)|}5,6| has different number of parameters (expected %5 but has %6)| has type mismatch at %ordinal5 parameter%diff{ (expected $ but has $)|}6,7| has different return type%diff{ ($ expected but has $)|}5,6| has different qualifiers (expected %5 but found %6)| has different exception specification}4", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_arity, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 not viable: requires%select{ at least| at most|}3 %4 argument%s4, but %5 %plural{1:was|:were}5 provided", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_arity_one, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 not viable: %select{requires at least|allows at most single|requires single}3 argument %4, but %plural{0:no|:%5}5 arguments were provided", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_bad_addrspace, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 not viable: address space mismatch in %select{%ordinal6|'this'}5 argument (%3), parameter type must be %4", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_bad_arc_conv, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 not viable: cannot implicitly convert argument %diff{of type $ to $|type to parameter type}3,4 for %select{%ordinal6 argument|object argument}5 under ARC", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_bad_base_to_derived_conv, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 not viable: cannot %select{convert from|convert from|bind}3 %select{base class pointer|superclass|base class object of type}3 %4 to %select{derived class pointer|subclass|derived class reference}3 %5 for %ordinal6 argument", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_bad_conv, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 not viable: no known conversion %diff{from $ to $|from argument type to parameter type}3,4 for %select{%ordinal6 argument|object argument}5%select{|; dereference the argument with *|; take the address of the argument with &|; remove *|; remove &}7", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_bad_conv_incomplete, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 not viable: cannot convert argument of incomplete type %diff{$ to $|to parameter type}3,4 for %select{%ordinal6 argument|object argument}5%select{|; dereference the argument with *|; take the address of the argument with &|; remove *|; remove &}7", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_bad_cvr, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 not viable: %ordinal5 argument (%3) would lose %select{const|restrict|const and restrict|volatile|const and volatile|volatile and restrict|const, volatile, and restrict}4 qualifier%select{||s||s|s|s}4", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_bad_cvr_this, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 not viable: 'this' argument has type %3, but method is not marked %select{const|restrict|const or restrict|volatile|const or volatile|volatile or restrict|const, volatile, or restrict}4", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_bad_deduction, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate template ignored: failed template argument deduction", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_bad_gc, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 not viable: %select{%ordinal7|'this'}6 argument (%3) has %select{no|__weak|__strong}4 ownership, but parameter has %select{no|__weak|__strong}5 ownership", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_bad_list_argument, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 not viable: cannot convert initializer list argument to %4", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_bad_lvalue, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 not viable: expects an l-value for %select{%ordinal4 argument|object argument}3", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_bad_overload, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 not viable: no overload of %4 matching %3 for %ordinal5 argument", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_bad_ownership, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 not viable: %select{%ordinal7|'this'}6 argument (%3) has %select{no|__unsafe_unretained|__strong|__weak|__autoreleasing}4 ownership, but parameter has %select{no|__unsafe_unretained|__strong|__weak|__autoreleasing}5 ownership", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_bad_target, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 not viable: call to %select{__device__|__global__|__host__|__host__ __device__|invalid}3 function from %select{__device__|__global__|__host__|__host__ __device__|invalid}4 function", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_bad_unaligned, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 not viable: %ordinal5 argument (%3) would lose __unaligned qualifier", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_deduced_mismatch, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate template ignored: deduced type %diff{$ of %select{|element of }4%ordinal0 parameter does not match adjusted type $ of %select{|element of }4argument|of %select{|element of }4%ordinal0 parameter does not match adjusted type of %select{|element of }4argument}1,2%3", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_deleted, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 has been %select{explicitly made unavailable|explicitly deleted|implicitly deleted}3", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_disabled_by_enable_if, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate template ignored: disabled by %0%1", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_disabled_by_extension, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate unavailable as it requires OpenCL extension '%0' to be enabled", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_disabled_by_function_cond_attr, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate disabled: %0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_disabled_by_requirement, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate template ignored: requirement '%0' was not satisfied%1", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_explicit_arg_mismatch_named, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate template ignored: invalid explicitly-specified argument for template parameter %0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_explicit_arg_mismatch_unnamed, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate template ignored: invalid explicitly-specified argument for %ordinal0 template parameter", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_has_pass_object_size_params, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate address cannot be taken because parameter %0 has pass_object_size attribute", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_illegal_constructor, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{constructor|template}0 ignored: instantiation %select{takes|would take}0 its own class type by value", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_incomplete_deduction, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate template ignored: couldn't infer template argument %0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_incomplete_deduction_pack, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate template ignored: deduced too few arguments for expanded pack %0; no argument for %ordinal1 expanded parameter in deduced argument pack %2", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_inconsistent_deduction, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate template ignored: deduced conflicting %select{types|values|templates}0 for parameter %1%diff{ ($ vs. $)|}2,3", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_inconsistent_deduction_types, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate template ignored: deduced values %diff{of conflicting types for parameter %0 (%1 of type $ vs. %3 of type $)|%1 and %3 of conflicting types for parameter %0}2,4", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_inherited_constructor, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "constructor from base class %0 inherited here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_inherited_constructor_slice, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{constructor|template}0 ignored: inherited constructor cannot be used to %select{copy|move}1 object", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_instantiation_depth, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate template ignored: substitution exceeded maximum template instantiation depth", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_non_deduced_mismatch, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate template ignored: could not match %diff{$ against $|types}0,1", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_non_deduced_mismatch_qualified, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate template ignored: could not match %q0 against %q1", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_substitution_failure, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate template ignored: substitution failure%0%1", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_underqualified, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate template ignored: cannot deduce a type for %0 that would make %2 equal %1", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_surrogate_cand, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "conversion candidate of type %0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_too_many_candidates, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "remaining %0 candidate%s0 omitted; pass -fshow-overloads=all to show them", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ownership_returns_index_mismatch, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declared with index %0 here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_parameter_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "passing argument to parameter here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_parameter_named_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "passing argument to parameter %0 here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_parameter_pack_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "parameter pack %0 declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_parameter_type, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "parameter of type %0 is declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_partial_availability_specified_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 has been marked as being introduced in %1 %2 here, but the deployment target is %1 %3", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_partial_spec_match, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "partial specialization matches %0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_partial_spec_not_more_specialized_than_primary, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_partial_specialization_declared_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "explicit specialization declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_performs_forbidden_arc_conversion, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "inline function performs a conversion which is forbidden in ARC", 0, SFINAE_Suppress, false, false, 10)
+DIAG(note_possible_target_of_call, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "possible target for call", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_pragma_attribute_applied_decl_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "when applied to this declaration", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_pragma_attribute_region_ends_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "'#pragma clang attribute push' regions ends here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_pragma_pack_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous '#pragma pack' directive that modifies alignment is here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_pragma_pack_pop_instead_reset, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "did you intend to use '#pragma pack (pop)' instead of '#pragma pack()'?", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_precedence_bitwise_first, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "place parentheses around the %0 expression to evaluate it first", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_precedence_conditional_first, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "place parentheses around the '?:' expression to evaluate it first", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_precedence_silence, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "place parentheses around the '%0' expression to silence this warning", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_prev_module_declaration, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous module declaration is here", 0, SFINAE_Suppress, false, false, 13)
+DIAG(note_prev_module_definition, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previously defined here", 0, SFINAE_Suppress, false, false, 13)
+DIAG(note_prev_module_definition_from_ast_file, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "module loaded from '%0'", 0, SFINAE_Suppress, false, false, 13)
+DIAG(note_prev_partial_spec_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous declaration of class template partial specialization %0 is here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_previous_access_declaration, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previously declared '%1' here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_previous_attribute, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous attribute is here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_previous_builtin_declaration, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 is a builtin with type %1", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_previous_decl, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_previous_exception_handler, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "for type %0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_previous_explicit_instantiation, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous explicit instantiation is here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_previous_initializer, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous initialization %select{|with side effects }0is here%select{| (side effects may not occur at run time)}0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_previous_ms_inheritance, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous inheritance model specified here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_previous_namespace_alias, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previously defined as an alias for %0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_previous_template_specialization, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous template specialization is here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_previous_uuid, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous uuid specified here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_printf_c_str, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "did you mean to call the %0 method?", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_prior_template_arg_substitution, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "while substituting prior template arguments into %select{non-type|template}0 template parameter%1 %2", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_private_extern, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use __attribute__((visibility(\"hidden\"))) attribute instead", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_property_attribute, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "property %0 is declared %select{deprecated|unavailable|partial}1 here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_property_declare, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "property declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_property_synthesize, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "property synthesized here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_protected_by___block, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump bypasses setup of __block variable", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_protected_by_cleanup, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump bypasses initialization of variable with __attribute__((cleanup))", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_protected_by_constexpr_if, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump enters controlled statement of constexpr if", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_protected_by_cxx_catch, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump bypasses initialization of catch block", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_protected_by_cxx_try, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump bypasses initialization of try block", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_protected_by_if_available, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump enters controlled statement of if available", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_protected_by_non_trivial_c_struct_init, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump bypasses initialization of variable of non-trivial C struct type", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_protected_by_objc_autoreleasepool, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump bypasses auto release push of @autoreleasepool block", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_protected_by_objc_catch, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump bypasses initialization of @catch block", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_protected_by_objc_fast_enumeration, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump enters Objective-C fast enumeration loop", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_protected_by_objc_finally, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump bypasses initialization of @finally block", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_protected_by_objc_strong_init, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump bypasses initialization of __strong variable", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_protected_by_objc_synchronized, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump bypasses initialization of @synchronized block", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_protected_by_objc_try, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump bypasses initialization of @try block", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_protected_by_objc_weak_init, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump bypasses initialization of __weak variable", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_protected_by_seh_except, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump bypasses initialization of __except block", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_protected_by_seh_finally, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump bypasses initialization of __finally block", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_protected_by_seh_try, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump bypasses initialization of __try block", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_protected_by_variable_init, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump bypasses variable initialization", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_protected_by_variable_non_pod, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump bypasses initialization of non-POD variable", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_protected_by_variable_nontriv_destructor, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump bypasses variable with a non-trivial destructor", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_protected_by_vla, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump bypasses initialization of variable length array", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_protected_by_vla_type_alias, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump bypasses initialization of VLA type alias", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_protected_by_vla_typedef, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "jump bypasses initialization of VLA typedef", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_protocol_decl, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "protocol is declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_protocol_decl_undefined, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "protocol %0 has no definition", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_protocol_method, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "protocol method is here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_protocol_property_declare, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "it could also be property %select{of type %1|without attribute '%1'|with attribute '%1'|with getter %1|with setter %1}0 declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_pure_qualified_call_kext, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "qualified call to %0::%1 is treated as a virtual call to %1 due to -fapple-kext", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_pure_virtual_function, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "unimplemented pure virtual method %0 in %1", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_raii_guard_add_name, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "add a variable name to declare a %0 initialized with %1", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_receiver_class_declared, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "receiver is instance of class declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_receiver_expr_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "receiver expression is here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_receiver_is_id, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "receiver is treated with 'id' type for purpose of method lookup", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_redefinition_include_same_file, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "'%0' included multiple times, additional include site here", 0, SFINAE_Suppress, false, false, 13)
+DIAG(note_redefinition_modules_same_file, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "'%0' included multiple times, additional include site in header from module '%1'", 0, SFINAE_Suppress, false, false, 13)
+DIAG(note_ref_or_ptr_member_declared_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{reference|pointer}0 member declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_refconst_member_not_initialized, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{const|reference}0 member %1 will never be initialized", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_reference_is_return_value, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 returns a reference", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_referenced_class_template, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "class template declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_reinterpret_updowncast_use_static, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use 'static_cast' to adjust the pointer correctly while %select{upcasting|downcasting}0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_related_result_type_explicit, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{overridden|current}0 method is explicitly declared 'instancetype'%select{| and is expected to return an instance of its class type}0", 0, SFINAE_Suppress, false, false, 17)
+DIAG(note_related_result_type_family, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{overridden|current}0 method is part of the '%select{|alloc|copy|init|mutableCopy|new|autorelease|dealloc|finalize|release|retain|retainCount|self}1' method family%select{| and is expected to return an instance of its class type}0", 0, SFINAE_Suppress, false, false, 17)
+DIAG(note_related_result_type_inferred, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{class|instance}0 method %1 is assumed to return an instance of its receiver type (%2)", 0, SFINAE_Suppress, false, false, 17)
+DIAG(note_related_result_type_overridden, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "overridden method returns an instance of its class type", 0, SFINAE_Suppress, false, false, 17)
+DIAG(note_remove_abs, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "remove the call to '%0' since unsigned values cannot be negative", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_remove_max_call, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "remove call to max function and unsigned zero argument", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_remove_move, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "remove std::move call here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_remove_parens_for_variable_declaration, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "remove parentheses to silence this warning", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_replace_abs_function, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use function '%0' instead", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_riscv_repeated_interrupt_attribute, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "repeated RISC-V 'interrupt' attribute is here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_sentinel_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{function|method|block}0 has been explicitly marked sentinel here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_shadow_field, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declared here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_silence_aligned_allocation_unavailable, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_specialized_decl, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "attempt to specialize declaration here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_specialized_entity, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "explicitly specialized declaration is here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_string_plus_scalar_silence, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use array indexing to silence this warning", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_strlcpycat_wrong_size, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "change size argument to be the size of the destination", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_strncat_wrong_size, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "change the argument to be the free space in the destination buffer minus the terminating null byte", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_struct_class_suggestion, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "did you mean %select{struct|interface|class}0 here?", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_suppress_ctad_maybe_unsupported, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "add a deduction guide to suppress this warning", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_suppressed_class_declare, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "class with specified objc_requires_property_definitions attribute is declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_surrounding_namespace_ends_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "surrounding namespace with visibility attribute ends here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_surrounding_namespace_starts_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "surrounding namespace with visibility attribute starts here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_suspicious_bzero_size_silence, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "parenthesize the second argument to silence", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_suspicious_sizeof_memset_silence, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{parenthesize the third argument|cast the second argument to 'int'}0 to silence", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_switch_conversion, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "conversion to %select{integral|enumeration}0 type %1", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_template_arg_internal_object, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "non-type template argument refers to %select{function|object}0 here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_template_arg_refers_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "non-type template argument refers here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_template_arg_refers_here_func, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "template argument refers to function template %0, here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_template_class_explicit_specialization_was_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "class template %0 was explicitly specialized here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_template_class_instantiation_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in instantiation of template class %q0 requested here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_template_class_instantiation_was_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "class template %0 was instantiated here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_template_decl_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "template is declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_template_declared_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{function template|class template|variable template|type alias template|template template parameter}0 %1 declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_template_default_arg_checking, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "while checking a default template argument used here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_template_enum_def_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in instantiation of enumeration %q0 requested here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_template_exception_spec_instantiation_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in instantiation of exception specification for %0 requested here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_template_kw_refers_to_non_template, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declared as a non-template here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_template_member_class_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in instantiation of member class %q0 requested here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_template_member_function_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in instantiation of member function %q0 requested here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_template_nontype_parm_different_type, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "template non-type parameter has a different type %0 in template argument", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_template_nontype_parm_prev_declaration, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous non-type template parameter with type %0 is here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_template_nsdmi_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in instantiation of default member initializer %q0 requested here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_template_param_different_kind, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "template parameter has a different kind in template argument", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_template_param_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "template parameter is declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_template_param_list_different_arity, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{too few|too many}0 template parameters in template template argument", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_template_param_prev_default_arg, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous default template argument defined here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_template_parameter_pack_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous %select{template type|non-type template|template template}0 parameter%select{| pack}1 declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_template_parameter_pack_non_pack, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{template type|non-type template|template template}0 parameter%select{| pack}1 does not match %select{template type|non-type template|template template}0 parameter%select{ pack|}1 in template argument", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_template_prev_declaration, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous template %select{declaration|template parameter}0 is here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_template_recursion_depth, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use -ftemplate-depth=N to increase recursive template instantiation depth", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_template_static_data_member_def_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in instantiation of static data member %q0 requested here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_template_type_alias_instantiation_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in instantiation of template type alias %0 requested here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_template_unnamed_type_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "unnamed type used in template argument was declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_template_variable_def_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in instantiation of variable template specialization %q0 requested here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_thread_warning_in_fun, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "Thread warning in function %0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_throw_in_dtor, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{destructor|deallocator}0 has a %select{non-throwing|implicit non-throwing}1 exception specification", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_throw_in_function, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "function declared non-throwing here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_transparent_union_first_field_size_align, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{alignment|size}0 of first field is %1 bits", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_type_incomplete, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 is incomplete", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_typecheck_assign_const, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{function %1 which returns const-qualified type %2 declared here|variable %1 declared const here|%select{non-|}1static data member %2 declared const here|member function %q1 is declared const here|%select{|nested }1data member %2 declared const here}0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_typecheck_invalid_operands_converted, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{first|second}0 operand was implicitly converted to type %1", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_typecheck_member_reference_suggestion, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "did you mean to use '.' instead?", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_typedef_changes_linkage, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use a tag name here to establish linkage prior to definition", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_typename_refers_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "referenced member %0 is declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_unguarded_available_silence, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "enclose %0 in %select{an @available|a __builtin_available}1 check to silence this warning", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_uninit_fixit_remove_cond, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "remove the %select{'%1' if its condition|condition if it}0 is always %select{false|true}2", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_uninit_in_this_constructor, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "during field initialization in %select{this|the implicit default}0 constructor", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_uninit_reference_member, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "uninitialized reference member is here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_uninit_var_use, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{uninitialized use occurs|variable is captured by block}0 here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_unreachable_silence, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "silence by adding parentheses to mark code as explicitly dead", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_use_ifdef_guards, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "unguarded header; consider using #ifdef guards or #pragma once", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_use_non_reference_type, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use non-reference type %0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_use_reference_type, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use reference type %0 to prevent copying", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_use_thread_local, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use 'thread_local' to allow this", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_use_type_or_non_reference, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use non-reference type %0 to keep the copy or type %1 to prevent copying", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_used_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "used here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_used_in_initialization_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "used in initialization here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_user_declared_ctor, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "implicit default constructor suppressed by user-declared constructor", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_using_decl, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{|previous }0using declaration", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_using_decl_class_member_workaround, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use %select{an alias declaration|a typedef declaration|a reference|a const variable|a constexpr variable}0 instead", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_using_decl_conflict, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "conflicting declaration", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_using_decl_target, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "target of using declaration", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_using_value_decl_missing_typename, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "add 'typename' to treat this using declaration as a type", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_value_initialization_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in value-initialization of type %0 here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_var_declared_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "variable %0 is declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_var_explicitly_captured_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "variable %0 is%select{| explicitly}1 captured here", 0, SFINAE_Suppress, false, false, 3)
+DIAG(note_var_fixit_add_initialization, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "initialize the variable %0 to silence this warning", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_var_prev_partial_spec_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous declaration of variable template partial specialization is here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_vbase_moved_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{%1 is a virtual base class of base class %2 declared here|virtual base class %1 declared here}0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_vla_unsupported, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "variable length arrays are not supported for the current target", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_which_delegates_to, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "which delegates to", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_while_in_implementation, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "detected while default synthesizing properties in class implementation", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_widen_bitfield, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "widen this field to %0 bits to store all values of %1", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_within_field_of_type, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "within field of type %0 declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(override_keyword_hides_virtual_member_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-virtual member function marked '%0' hides virtual member %select{function|functions}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(override_keyword_only_allowed_on_virtual_member_functions, CLASS_ERROR, (unsigned)diag::Severity::Error, "only virtual member functions can be marked '%0'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(warn_abs_too_small, CLASS_WARNING, (unsigned)diag::Severity::Warning, "absolute value function %0 given an argument of type %1 but has parameter of type %2 which may cause truncation of value", 8, SFINAE_Suppress, false, false, 2)
+DIAG(warn_abstract_final_class, CLASS_WARNING, (unsigned)diag::Severity::Warning, "abstract class is marked '%select{final|sealed}0'", 9, SFINAE_Suppress, false, false, 2)
+DIAG(warn_abstract_vbase_init_ignored, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "initializer for virtual base class %0 of abstract class %1 will never be used", 10, SFINAE_Suppress, false, false, 2)
+DIAG(warn_access_decl_deprecated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "access declarations are deprecated; use using declarations instead", 164, SFINAE_Suppress, false, false, 27)
+DIAG(warn_accessor_property_type_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "type of property %0 does not match type of accessor %1", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_acquire_requires_negative_cap, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "acquiring %0 '%1' requires negative capability '%2'", 665, SFINAE_Suppress, false, false, 2)
+DIAG(warn_acquired_before, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 '%1' must be acquired before '%2'", 662, SFINAE_Suppress, false, false, 2)
+DIAG(warn_acquired_before_after_cycle, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "Cycle in acquired_before/after dependencies, starting with '%0'", 662, SFINAE_Suppress, false, false, 2)
+DIAG(warn_addition_in_bitshift, CLASS_WARNING, (unsigned)diag::Severity::Warning, "operator '%0' has lower precedence than '%1'; '%1' will be evaluated first", 599, SFINAE_Suppress, false, false, 2)
+DIAG(warn_address_of_reference_bool_conversion, CLASS_WARNING, (unsigned)diag::Severity::Warning, "reference cannot be bound to dereferenced null pointer in well-defined C++ code; pointer may be assumed to always convert to true", 678, SFINAE_Suppress, false, false, 24)
+DIAG(warn_address_of_reference_null_compare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "reference cannot be bound to dereferenced null pointer in well-defined C++ code; comparison may be assumed to always evaluate to %select{true|false}0", 657, SFINAE_Suppress, false, false, 2)
+DIAG(warn_alloca_align_alignof, CLASS_WARNING, (unsigned)diag::Severity::Warning, "second argument to __builtin_alloca_with_align is supposed to be in bits", 16, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ambiguous_suitable_delete_function_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "multiple suitable %0 functions for %1; no 'operator delete' function will be invoked if initialization throws an exception", 17, SFINAE_Suppress, false, false, 2)
+DIAG(warn_anon_bitfield_width_exceeds_type_width, CLASS_WARNING, (unsigned)diag::Severity::Warning, "width of anonymous bit-field (%0 bits) exceeds width of its type; value will be truncated to %1 bit%s1", 61, SFINAE_Suppress, false, false, 2)
+DIAG(warn_arc_lifetime_result_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ARC %select{unused|__unsafe_unretained|__strong|__weak|__autoreleasing}0 lifetime qualifier on return type is ignored", 287, SFINAE_Suppress, false, false, 5)
+DIAG(warn_arc_literal_assign, CLASS_WARNING, (unsigned)diag::Severity::Warning, "assigning %select{array literal|dictionary literal|numeric literal|boxed expression|<should not happen>|block literal}0 to a weak %select{property|variable}1; object will be released after assignment", 30, SFINAE_Suppress, false, false, 5)
+DIAG(warn_arc_object_memaccess, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{destination for|source of}0 this %1 call is a pointer to ownership-qualified type %2", 26, SFINAE_Suppress, false, false, 5)
+DIAG(warn_arc_perform_selector_leaks, CLASS_WARNING, (unsigned)diag::Severity::Warning, "performSelector may cause a leak because its selector is unknown", 27, SFINAE_Suppress, false, false, 2)
+DIAG(warn_arc_possible_repeated_use_of_weak, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "weak %select{variable|property|implicit property|instance variable}0 %1 may be accessed multiple times in this %select{function|method|block|lambda}2 and may be unpredictably set to nil; assign to a strong variable to keep the object alive", 25, SFINAE_Suppress, false, false, 2)
+DIAG(warn_arc_repeated_use_of_weak, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "weak %select{variable|property|implicit property|instance variable}0 %1 is accessed multiple times in this %select{function|method|block|lambda}2 but may be unpredictably set to nil; assign to a strong variable to keep the object alive", 28, SFINAE_Suppress, false, false, 2)
+DIAG(warn_arc_retain_cycle, CLASS_WARNING, (unsigned)diag::Severity::Warning, "capturing %0 strongly in this block is likely to lead to a retain cycle", 29, SFINAE_Suppress, false, false, 26)
+DIAG(warn_arc_retained_assign, CLASS_WARNING, (unsigned)diag::Severity::Warning, "assigning retained object to %select{weak|unsafe_unretained}0 %select{property|variable}1; object will be released after assignment", 30, SFINAE_Suppress, false, false, 5)
+DIAG(warn_arc_retained_property_assign, CLASS_WARNING, (unsigned)diag::Severity::Warning, "assigning retained object to unsafe property; object will be released after assignment", 30, SFINAE_Suppress, false, false, 5)
+DIAG(warn_arc_strong_pointer_objc_pointer, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "method parameter of type %0 with no explicit ownership", 217, SFINAE_Suppress, false, false, 10)
+DIAG(warn_argument_invalid_range, CLASS_WARNING, (unsigned)diag::Severity::Error, "argument value %0 is outside the valid range [%1, %2]", 31, SFINAE_Suppress, false, false, 2)
+DIAG(warn_arm_interrupt_calling_convention, CLASS_WARNING, (unsigned)diag::Severity::Warning, "call to function without interrupt attribute could clobber interruptee's VFP registers", 220, SFINAE_Suppress, false, false, 2)
+DIAG(warn_array_index_exceeds_bounds, CLASS_WARNING, (unsigned)diag::Severity::Warning, "array index %0 is past the end of the array (which contains %1 element%s2)", 32, SFINAE_Suppress, false, false, 2)
+DIAG(warn_array_index_precedes_bounds, CLASS_WARNING, (unsigned)diag::Severity::Warning, "array index %0 is before the beginning of the array", 32, SFINAE_Suppress, false, false, 2)
+DIAG(warn_asm_label_on_auto_decl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignored asm label '%0' on automatic variable", 0, SFINAE_Suppress, false, false, 12)
+DIAG(warn_asm_mismatched_size_modifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "value size does not match register size specified by the constraint and modifier", 36, SFINAE_Suppress, false, false, 12)
+DIAG(warn_assume_side_effects, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the argument to %0 has side effects that will be discarded", 38, SFINAE_Suppress, false, false, 2)
+DIAG(warn_at_available_unchecked_use, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{@available|__builtin_available}0 does not guard availability here; use if (%select{@available|__builtin_available}0) instead", 709, SFINAE_Suppress, false, false, 2)
+DIAG(warn_atl_uuid_deprecated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "specifying 'uuid' as an ATL attribute is deprecated; use __declspec instead", 166, SFINAE_Suppress, false, false, 27)
+DIAG(warn_atomic_implicit_seq_cst, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit use of sequentially-consistent atomic may incur stronger memory barriers than necessary", 42, SFINAE_Suppress, false, false, 2)
+DIAG(warn_atomic_op_has_invalid_memory_order, CLASS_WARNING, (unsigned)diag::Severity::Warning, "memory order argument to atomic operation is invalid", 43, SFINAE_Suppress, false, false, 2)
+DIAG(warn_atomic_property_rule, CLASS_WARNING, (unsigned)diag::Severity::Warning, "writable atomic property %0 cannot pair a synthesized %select{getter|setter}1 with a user defined %select{getter|setter}2", 45, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attr_abi_tag_namespace, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'abi_tag' attribute on %select{non-inline|anonymous}0 namespace ignored", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attr_on_unconsumable_class, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "consumed analysis attribute is attached to member of class '%0' which isn't marked as consumable", 136, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_address_multiple_identical_qualifiers, CLASS_WARNING, (unsigned)diag::Severity::Warning, "multiple identical address spaces specified for type", 193, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_after_definition_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 after definition is ignored", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_argument_n_negative, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute parameter %1 is negative and will be ignored", 147, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_dll_instantiated_base_class, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "propagating dll attribute to %select{already instantiated|explicitly specialized}0 base class template without dll attribute is not supported", 711, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_dll_redeclaration, CLASS_WARNING, (unsigned)diag::Severity::Warning, "redeclaration of %q0 should not add %q1 attribute", 183, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_dllexport_explicit_instantiation_decl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "explicit instantiation declaration should not be 'dllexport'", 184, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_dllimport_static_field_definition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "definition of dllimport static field", 185, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_iboutlet, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute can only be applied to instance variables or properties", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute ignored", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_ignored_for_field_of_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute ignored for field of type %1", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_ignored_on_inline, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute ignored on inline function", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_invalid_on_definition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' attribute cannot be specified on a definition", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_nonnull_no_pointers, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'nonnull' attribute applied to function with no pointer arguments", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_nonnull_parm_no_args, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'nonnull' attribute when used on parameters takes no arguments", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_not_on_decl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute ignored when parsing type", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_packed_for_bitfield, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'packed' attribute was ignored on bit-fields with single-byte alignment in older versions of GCC and Clang", 46, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_pointer_or_reference_only, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to a pointer or reference (%1 is invalid)", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_pointers_only, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to%select{| constant}1 pointer arguments", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_precede_definition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute declaration must precede definition", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_protected_visibility, CLASS_WARNING, (unsigned)diag::Severity::Warning, "target does not support 'protected' visibility; using 'default'", 716, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_return_pointers_only, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to return values that are pointers", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_return_pointers_refs_only, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to return values that are pointers or references", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_section_on_redeclaration, CLASS_WARNING, (unsigned)diag::Severity::Warning, "section attribute is specified on redeclared variable", 578, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_sentinel_named_arguments, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'sentinel' attribute requires named arguments", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_sentinel_not_variadic, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'sentinel' attribute only supported for variadic %select{functions|blocks}0", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_type_not_supported, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute argument not supported: %1", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_unknown_visibility, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown visibility %0", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_void_function_method, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 cannot be applied to %select{functions|Objective-C method}1 without return value", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_weak_on_field, CLASS_WARNING, (unsigned)diag::Severity::Warning, "__weak attribute cannot be specified on a field declaration", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_weak_on_local, CLASS_WARNING, (unsigned)diag::Severity::Warning, "__weak attribute cannot be specified on an automatic variable when ARC is not enabled", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_wrong_decl_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to %select{functions|unions|variables and functions|functions and methods|functions, methods and blocks|functions, methods, and parameters|variables|variables and fields|variables, data members and tag types|types and namespaces|variables, functions and classes|kernel functions|non-K&R-style functions}1", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_wrong_decl_type_str, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to %1", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_auto_implicit_atomic_property, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "property is assumed atomic when auto-synthesizing the property", 289, SFINAE_Suppress, false, false, 2)
+DIAG(warn_auto_readonly_iboutlet_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "readonly IBOutlet property %0 when auto-synthesized may not work correctly with 'nib' loader", 557, SFINAE_Suppress, false, false, 2)
+DIAG(warn_auto_storage_class, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'auto' storage class specifier is redundant and incompatible with C++11", 75, SFINAE_Suppress, false, false, 2)
+DIAG(warn_auto_synthesizing_protocol_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "auto property synthesis will not synthesize property %0 declared in protocol %1", 488, SFINAE_Suppress, false, false, 2)
+DIAG(warn_auto_var_is_id, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'auto' deduced as 'id' in declaration of %0", 51, SFINAE_Suppress, false, false, 2)
+DIAG(warn_autosynthesis_property_in_superclass, CLASS_WARNING, (unsigned)diag::Severity::Warning, "auto property synthesis will not synthesize property %0; it will be implemented by its superclass, use @dynamic to acknowledge intention", 486, SFINAE_Suppress, false, false, 2)
+DIAG(warn_autosynthesis_property_ivar_match, CLASS_WARNING, (unsigned)diag::Severity::Warning, "autosynthesized property %0 will use %select{|synthesized}1 instance variable %2, not existing instance variable %3", 464, SFINAE_Suppress, false, false, 2)
+DIAG(warn_availability_on_static_initializer, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring availability attribute %select{on '+load' method|with constructor attribute|with destructor attribute}0", 52, SFINAE_Suppress, false, false, 2)
+DIAG(warn_availability_swift_unavailable_deprecated_only, CLASS_WARNING, (unsigned)diag::Severity::Warning, "only 'unavailable' and 'deprecated' are supported for Swift availability", 52, SFINAE_Suppress, false, false, 2)
+DIAG(warn_availability_unknown_platform, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown platform %0 in availability macro", 52, SFINAE_Suppress, false, false, 2)
+DIAG(warn_availability_version_ordering, CLASS_WARNING, (unsigned)diag::Severity::Warning, "feature cannot be %select{introduced|deprecated|obsoleted}0 in %1 version %2 before it was %select{introduced|deprecated|obsoleted}3 in version %4; attribute ignored", 52, SFINAE_Suppress, false, false, 2)
+DIAG(warn_bad_function_cast, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cast from function call of type %0 to non-matching type %1", 55, SFINAE_Suppress, false, false, 2)
+DIAG(warn_bad_receiver_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "receiver type %0 is not 'id' or interface pointer, consider casting it to 'id'", 558, SFINAE_Suppress, false, false, 2)
+DIAG(warn_base_class_is_uninit, CLASS_WARNING, (unsigned)diag::Severity::Warning, "base class %0 is uninitialized when used here to access %q1", 692, SFINAE_Suppress, false, false, 2)
+DIAG(warn_bind_ref_member_to_parameter, CLASS_WARNING, (unsigned)diag::Severity::Warning, "binding reference member %0 to stack allocated %select{variable|parameter}2 %1", 151, SFINAE_Suppress, false, false, 2)
+DIAG(warn_binding_null_to_reference, CLASS_WARNING, (unsigned)diag::Severity::Warning, "binding dereferenced null pointer to reference has undefined behavior", 455, SFINAE_Suppress, false, false, 2)
+DIAG(warn_bitfield_too_small_for_enum, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "bit-field %0 is not wide enough to store all enumerators of %1", 60, SFINAE_Suppress, false, false, 24)
+DIAG(warn_bitfield_width_exceeds_type_width, CLASS_WARNING, (unsigned)diag::Severity::Warning, "width of bit-field %0 (%1 bits) exceeds the width of its type; value will be truncated to %2 bit%s2", 61, SFINAE_Suppress, false, false, 2)
+DIAG(warn_bitwise_op_in_bitwise_op, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' within '%1'", 62, SFINAE_Suppress, false, false, 2)
+DIAG(warn_block_capture_autoreleasing, CLASS_WARNING, (unsigned)diag::Severity::Warning, "block captures an autoreleasing out-parameter, which may result in use-after-free bugs", 63, SFINAE_Suppress, false, false, 5)
+DIAG(warn_block_literal_attributes_on_omitted_return_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 ignored, because it cannot be applied to omitted return type", 282, SFINAE_Suppress, false, false, 0)
+DIAG(warn_block_literal_qualifiers_on_omitted_return_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' qualifier on omitted return type %1 has no effect", 287, SFINAE_Suppress, false, false, 0)
+DIAG(warn_bool_switch_condition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "switch condition has boolean value", 645, SFINAE_Suppress, false, false, 2)
+DIAG(warn_braces_around_scalar_init, CLASS_WARNING, (unsigned)diag::Severity::Warning, "braces around scalar initializer", 66, SFINAE_Suppress, false, false, 2)
+DIAG(warn_break_binds_to_switch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'break' is bound to loop, GCC binds it to switch", 250, SFINAE_Suppress, false, false, 2)
+DIAG(warn_builtin_unknown, CLASS_WARNING, (unsigned)diag::Severity::Error, "use of unknown builtin %0", 296, SFINAE_Suppress, false, false, 2)
+DIAG(warn_call_to_pure_virtual_member_function_from_ctor_dtor, CLASS_WARNING, (unsigned)diag::Severity::Warning, "call to pure virtual member function %0 has undefined behavior; overrides of %0 in subclasses are not available in the %select{constructor|destructor}1 of %2", 115, SFINAE_Suppress, false, false, 2)
+DIAG(warn_call_wrong_number_of_arguments, CLASS_WARNING, (unsigned)diag::Severity::Warning, "too %select{few|many}0 arguments in call to %1", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cannot_pass_non_pod_arg_to_vararg, CLASS_WARNING, (unsigned)diag::Severity::Error, "cannot pass object of %select{non-POD|non-trivial}0 type %1 through variadic %select{function|block|method|constructor}2; call will abort at runtime", 442, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cannot_resolve_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cannot resolve lock expression", 662, SFINAE_Suppress, false, false, 2)
+DIAG(warn_case_empty_range, CLASS_WARNING, (unsigned)diag::Severity::Warning, "empty case range specified", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_case_value_overflow, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overflow converting case value to switch condition type (%0 to %1)", 644, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cast_align, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cast from %0 to %1 increases required alignment from %2 to %3", 116, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cast_calling_conv, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cast between incompatible calling conventions '%0' and '%1'; calls through this pointer may abort at runtime", 117, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cast_nonnull_to_bool, CLASS_WARNING, (unsigned)diag::Severity::Warning, "nonnull %select{function call|parameter}0 '%1' will evaluate to 'true' on first encounter", 531, SFINAE_Suppress, false, false, 24)
+DIAG(warn_cast_pointer_from_sel, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cast of type %0 to %1 is deprecated; use sel_getName instead", 118, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cast_qual, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cast from %0 to %1 drops %select{const and volatile qualifiers|const qualifier|volatile qualifier}2", 119, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cast_qual2, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cast from %0 to %1 must have all intermediate pointers const qualified to be safe", 119, SFINAE_Suppress, false, false, 2)
+DIAG(warn_category_method_impl_match, CLASS_WARNING, (unsigned)diag::Severity::Warning, "category is implementing a method which will also be implemented by its primary class", 487, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cconv_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "calling convention %0 ignored for this target", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cconv_knr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "function with no prototype cannot use the %0 calling convention", 413, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cconv_structors, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 calling convention ignored on constructor/destructor", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cconv_varargs, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 calling convention ignored on variadic function", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cdtor_function_try_handler_mem_expr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cannot refer to a non-static member from the handler of a %select{constructor|destructor}0 function try block", 212, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cfstring_truncated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "input conversion stopped due to an input byte that does not belong to the input codeset UTF-8", 3, SFINAE_Suppress, false, false, 2)
+DIAG(warn_class_method_not_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "class method %objcclass0 not found (return type defaults to 'id')", 475, SFINAE_Suppress, false, false, 2)
+DIAG(warn_class_method_not_found_with_typo, CLASS_WARNING, (unsigned)diag::Severity::Warning, "class method %objcclass0 not found (return type defaults to 'id'); did you mean %objcclass2?", 475, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cleanup_ext, CLASS_WARNING, (unsigned)diag::Severity::Warning, "GCC does not allow the 'cleanup' attribute argument to be anything other than a simple identifier", 250, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cocoa_naming_owned_rule, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property follows Cocoa naming convention for returning 'owned' objects", 484, SFINAE_Suppress, false, false, 2)
+DIAG(warn_collection_expr_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "collection expression type %0 may not respond to %1", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_comma_operator, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "possible misuse of comma operator here", 125, SFINAE_Suppress, false, false, 2)
+DIAG(warn_comparison_always, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{self-|array }0comparison always evaluates to %select{a constant|%2}1", 650, SFINAE_Suppress, false, false, 2)
+DIAG(warn_comparison_bitwise_always, CLASS_WARNING, (unsigned)diag::Severity::Warning, "bitwise comparison always evaluates to %select{false|true}0", 650, SFINAE_Suppress, false, false, 2)
+DIAG(warn_comparison_of_mixed_enum_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "comparison of two values with different enumeration types%diff{ ($ and $)|}0,1", 208, SFINAE_Suppress, false, false, 2)
+DIAG(warn_comparison_of_mixed_enum_types_switch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "comparison of two values with different enumeration types in switch statement%diff{ ($ and $)|}0,1", 209, SFINAE_Suppress, false, false, 2)
+DIAG(warn_concatenated_nsarray_literal, CLASS_WARNING, (unsigned)diag::Severity::Warning, "concatenated NSString literal for an NSArray expression - possibly missing a comma", 495, SFINAE_Suppress, false, false, 2)
+DIAG(warn_condition_is_assignment, CLASS_WARNING, (unsigned)diag::Severity::Warning, "using the result of an assignment as a condition without parentheses", 519, SFINAE_Suppress, false, false, 2)
+DIAG(warn_condition_is_idiomatic_assignment, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "using the result of an assignment as a condition without parentheses", 281, SFINAE_Suppress, false, false, 2)
+DIAG(warn_conflicting_overriding_param_modifiers, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting distributed object modifiers on parameter type in declaration of %0", 515, SFINAE_Suppress, false, false, 2)
+DIAG(warn_conflicting_overriding_param_types, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting parameter types in declaration of %0%diff{: $ vs $|}1,2", 515, SFINAE_Suppress, false, false, 2)
+DIAG(warn_conflicting_overriding_ret_type_modifiers, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting distributed object modifiers on return type in declaration of %0", 515, SFINAE_Suppress, false, false, 2)
+DIAG(warn_conflicting_overriding_ret_types, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting return type in declaration of %0%diff{: $ vs $|}1,2", 515, SFINAE_Suppress, false, false, 2)
+DIAG(warn_conflicting_overriding_variadic, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting variadic declaration of method and its implementation", 515, SFINAE_Suppress, false, false, 2)
+DIAG(warn_conflicting_param_modifiers, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting distributed object modifiers on parameter type in implementation of %0", 180, SFINAE_Suppress, false, false, 2)
+DIAG(warn_conflicting_param_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting parameter types in implementation of %0%diff{: $ vs $|}1,2", 401, SFINAE_Suppress, false, false, 2)
+DIAG(warn_conflicting_ret_type_modifiers, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting distributed object modifiers on return type in implementation of %0", 180, SFINAE_Suppress, false, false, 2)
+DIAG(warn_conflicting_ret_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting return type in implementation of %0%diff{: $ vs $|}1,2", 402, SFINAE_Suppress, false, false, 2)
+DIAG(warn_conflicting_variadic, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting variadic declaration of method and its implementation", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_conv_to_base_not_used, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conversion function converting %0 to its base class %1 will never be used", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_conv_to_self_not_used, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conversion function converting %0 to itself will never be used", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_conv_to_void_not_used, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conversion function converting %0 to %1 will never be used", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_coroutine_promise_unhandled_exception_required_with_exceptions, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is required to declare the member 'unhandled_exception()' when exceptions are enabled", 140, SFINAE_Suppress, false, false, 14)
+DIAG(warn_cstruct_memaccess, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{destination for|source of|first operand of|second operand of}0 this %1 call is a pointer to record %2 that is not trivial to %select{primitive-default-initialize|primitive-copy}3", 449, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ctad_maybe_unsupported, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 may not intend to support class template argument deduction", 144, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ctor_parm_shadows_field, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "constructor parameter %0 shadows the field %1 of %2", 592, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx11_compat_constexpr_body_invalid_stmt, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of this statement in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++14", 103, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx11_compat_constexpr_body_multiple_return, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "multiple return statements in constexpr function is incompatible with C++ standards before C++14", 103, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx11_compat_constexpr_body_no_return, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "constexpr function with no return statements is incompatible with C++ standards before C++14", 103, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx11_compat_constexpr_local_var, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable declaration in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++14", 103, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx11_compat_constexpr_type_definition, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "type definition in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++14", 103, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx11_compat_deduced_return_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "return type deduction is incompatible with C++ standards before C++14", 103, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx11_compat_generic_lambda, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "generic lambdas are incompatible with C++11", 103, SFINAE_Suppress, false, false, 3)
+DIAG(warn_cxx11_compat_init_capture, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "initialized lambda captures are incompatible with C++ standards before C++14", 103, SFINAE_Suppress, false, false, 3)
+DIAG(warn_cxx11_compat_variable_template, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable templates are incompatible with C++ standards before C++14", 103, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx11_gnu_attribute_on_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 ignored, because it cannot be applied to a type", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx14_compat_class_template_argument_deduction, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "class template argument deduction is incompatible with C++ standards before C++17%select{|; for compatibility, use explicit type name %1}0", 101, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx14_compat_constexpr_not_const, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'constexpr' non-static member function will not be implicitly 'const' in C++14; add 'const' to avoid a change in behavior", 135, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx14_compat_decomp_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "decomposition declarations are incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx14_compat_inline_variable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "inline variables are incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx14_compat_star_this_lambda_capture, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "by value capture of '*this' is incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 3)
+DIAG(warn_cxx14_compat_template_nontype_parm_auto_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-type template parameters declared with %0 are incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx17_compat_constexpr_body_invalid_stmt, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of this statement in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++2a", 99, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx17_compat_constexpr_function_try_block, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "function try block in constexpr %select{function|constructor}0 is incompatible with C++ standards before C++2a", 99, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx17_compat_defaulted_method_type_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicitly defaulting this %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 with a type different from the implicit type is incompatible with C++ standards before C++2a", 99, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx17_compat_equals_this_lambda_capture, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit capture of 'this' with a capture default of '=' is incompatible with C++ standards before C++2a", 99, SFINAE_Suppress, false, false, 3)
+DIAG(warn_cxx17_compat_exception_spec_in_signature, CLASS_WARNING, (unsigned)diag::Severity::Warning, "mangled name of %0 will change in C++17 due to non-throwing exception specification in function signature", 89, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx17_compat_lambda_def_ctor_assign, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{default construction|assignment}0 of lambda is incompatible with C++ standards before C++2a", 99, SFINAE_Suppress, false, false, 3)
+DIAG(warn_cxx17_compat_pointer_to_const_ref_member_on_rvalue, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "invoking a pointer to a 'const &' member function on an rvalue is incompatible with C++ standards before C++2a", 100, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx17_compat_unicode_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'char8_t' type specifier is incompatible with C++ standards before C++20", 99, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx2a_compat_aggregate_init_with_ctors, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "aggregate initialization of type %0 with user-declared constructors is incompatible with C++2a", 96, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx2a_compat_utf8_string, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "type of UTF-8 string literal will change from array of const char to array of const char8_t in C++2a", 96, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_array_size_conversion, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion from array size expression of type %0 to %select{integral|enumeration}1 type %2 is incompatible with C++98", 110, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_auto_type_specifier, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'auto' type specifier is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_cast_fn_obj, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cast between pointer-to-function and pointer-to-object is incompatible with C++98", 110, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_constexpr, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'constexpr' specifier is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_ctor_list_init, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "constructor call from initializer list is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_delegating_ctor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "delegating constructors are incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_empty_scalar_initializer, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "scalar initialized from empty initializer list is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_enum_friend, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "befriending enumeration type %0 is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_enum_nested_name_spec, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "enumeration type in nested name specifier is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_explicit_conversion_functions, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit conversion functions are incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_friend_is_member, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "friend declaration naming a member of the declaring class is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_goto_into_protected_scope, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "jump from this goto statement to its label is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_indirect_goto_in_protected_scope, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "jump from this indirect goto statement to one of its possible targets is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_initializer_list_init, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "initialization of initializer_list object is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_non_static_member_use, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of non-static data member %0 in an unevaluated context is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_nonclass_type_friend, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-class friend type %0 is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_nontrivial_union_or_anon_struct_member, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{anonymous struct|union}0 member %1 with a non-trivial %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}2 is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_pass_non_pod_arg_to_vararg, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "passing object of trivial but non-POD type %0 through variadic %select{function|block|method|constructor}1 is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_reference_list_init, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "reference initialized from initializer list is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_sfinae_access_control, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "substitution failure due to access control is incompatible with C++98", 106, SFINAE_Report, false, false, 2)
+DIAG(warn_cxx98_compat_static_data_member_in_union, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "static data member %0 in union is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_switch_into_protected_scope, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "jump from switch statement to this case label is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_temp_copy, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{copying variable|copying parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}1 of type %2 when binding a reference to a temporary would %select{invoke an inaccessible constructor|find no viable constructor|find ambiguous constructors|invoke a deleted constructor}0 in C++98", 107, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_template_arg_extra_parens, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "redundant parentheses surrounding address non-type template argument are incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_template_arg_local_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "local type %0 as template argument is incompatible with C++98", 109, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_template_arg_null, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of null pointer as non-type template argument is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_template_arg_object_internal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-type template argument referring to %select{function|object}0 %1 with internal linkage is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_template_arg_unnamed_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unnamed type as template argument is incompatible with C++98", 111, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_template_outside_of_template, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of 'template' keyword outside of a template is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_template_parameter_default_in_function_template, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "default template arguments for a function template are incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_typename_outside_of_template, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of 'typename' outside of a template is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_unelaborated_friend_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "befriending %1 without '%select{struct|interface|union|class|enum}0' keyword is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_unicode_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%0' type specifier is incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_using_decl_constructor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "inheriting constructors are incompatible with C++98", 106, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx_ms_struct, CLASS_WARNING, (unsigned)diag::Severity::Error, "ms_struct may not produce Microsoft-compatible layouts for classes with base classes or virtual functions", 309, SFINAE_Suppress, false, false, 2)
+DIAG(warn_dangling_member, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{reference|backing array for 'std::initializer_list'}2 %select{|subobject of }1member %0 %select{binds to|is}2 a temporary object whose lifetime is shorter than the lifetime of the constructed object", 151, SFINAE_Suppress, false, false, 2)
+DIAG(warn_dangling_variable, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{temporary %select{whose address is used as value of|%select{|implicitly }2bound to}4 %select{%select{|reference }4member of local variable|local %select{variable|reference}4}1|array backing %select{initializer list subobject of local variable|local initializer list}1}0 %select{%3 |}2will be destroyed at the end of the full-expression", 149, SFINAE_Suppress, false, false, 2)
+DIAG(warn_dealloc_in_category, CLASS_WARNING, (unsigned)diag::Severity::Warning, "-dealloc is being overridden in a category", 155, SFINAE_Suppress, false, false, 2)
+DIAG(warn_decl_in_param_list, CLASS_WARNING, (unsigned)diag::Severity::Warning, "declaration of %0 will not be visible outside of this function", 749, SFINAE_Suppress, false, false, 2)
+DIAG(warn_decl_shadow, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration shadows a %select{local variable|variable in %2|static data member of %2|field of %2|typedef in %2|type alias in %2}1", 589, SFINAE_Suppress, false, false, 2)
+DIAG(warn_decl_shadow_uncaptured_local, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration shadows a %select{local variable|variable in %2|static data member of %2|field of %2|typedef in %2|type alias in %2}1", 595, SFINAE_Suppress, false, false, 2)
+DIAG(warn_declspec_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 is ignored, place it after \"%select{class|struct|interface|union|enum}1\" to apply attribute to type declaration", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_deep_exception_specs_differ, CLASS_WARNING, (unsigned)diag::Severity::Warning, "exception specifications of %select{return|argument}0 types differ", 306, SFINAE_Suppress, false, false, 2)
+DIAG(warn_def_missing_case, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%plural{1:enumeration value %1 not explicitly handled in switch|2:enumeration values %1 and %2 not explicitly handled in switch|3:enumeration values %1, %2, and %3 not explicitly handled in switch|:%0 enumeration values not explicitly handled in switch: %1, %2, %3...}0", 647, SFINAE_Suppress, false, false, 2)
+DIAG(warn_default_atomic_custom_getter_setter, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "atomic by default property %0 has a user defined %select{getter|setter}1 (property should be marked 'atomic' if this is intended)", 148, SFINAE_Suppress, false, false, 2)
+DIAG(warn_defaulted_method_deleted, CLASS_WARNING, (unsigned)diag::Severity::Warning, "explicitly defaulted %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 is implicitly deleted", 158, SFINAE_Suppress, false, false, 2)
+DIAG(warn_delegating_ctor_cycle, CLASS_WARNING, (unsigned)diag::Severity::Error, "constructor for %0 creates a delegation cycle", 159, SFINAE_Suppress, false, false, 2)
+DIAG(warn_delete_abstract_non_virtual_dtor, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{delete|destructor}0 called on %1 that is abstract but has non-virtual destructor", 160, SFINAE_Suppress, false, true, 2)
+DIAG(warn_delete_array_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'delete' applied to a pointer-to-array type %0 treated as 'delete[]'", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_delete_incomplete, CLASS_WARNING, (unsigned)diag::Severity::Warning, "deleting pointer to incomplete type %0 may cause undefined behavior", 161, SFINAE_Suppress, false, false, 2)
+DIAG(warn_delete_non_virtual_dtor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{delete|destructor}0 called on non-final %1 that has virtual functions but non-virtual destructor", 162, SFINAE_Suppress, false, true, 2)
+DIAG(warn_deprecated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is deprecated", 166, SFINAE_Suppress, false, false, 27)
+DIAG(warn_deprecated_anonymous_namespace, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'deprecated' attribute on anonymous namespace ignored", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_deprecated_copy_operation, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "definition of implicit copy %select{constructor|assignment operator}1 for %0 is deprecated because it has a user-declared %select{copy %select{assignment operator|constructor}1|destructor}2", 164, SFINAE_Suppress, false, false, 27)
+DIAG(warn_deprecated_def, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implementing deprecated %select{method|class|category}0", 168, SFINAE_Suppress, false, false, 2)
+DIAG(warn_deprecated_fwdclass_message, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 may be deprecated because the receiver type is unknown", 166, SFINAE_Suppress, false, false, 27)
+DIAG(warn_deprecated_message, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is deprecated: %1", 166, SFINAE_Suppress, false, false, 27)
+DIAG(warn_deprecated_redundant_constexpr_static_def, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "out-of-line definition of constexpr static data member is redundant in C++17 and is deprecated", 164, SFINAE_Suppress, false, false, 27)
+DIAG(warn_deprecated_register, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'register' storage class specifier is deprecated and incompatible with C++17", 173, SFINAE_Suppress, false, false, 27)
+DIAG(warn_deprecated_string_literal_conversion, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conversion from string literal to %0 is deprecated", 76, SFINAE_Suppress, false, false, 27)
+DIAG(warn_deprecated_this_capture, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit capture of 'this' with a capture default of '=' is deprecated", 174, SFINAE_Suppress, false, false, 27)
+DIAG(warn_dereference_of_noderef_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "dereferencing %0; was declared with a 'noderef' type", 436, SFINAE_Suppress, false, false, 0)
+DIAG(warn_dereference_of_noderef_type_no_decl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "dereferencing expression marked as 'noderef'", 436, SFINAE_Suppress, false, false, 0)
+DIAG(warn_destructor_marked_not_override_overriding, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 overrides a destructor but is not marked 'override'", 319, SFINAE_Suppress, false, false, 2)
+DIAG(warn_diagnose_if_succeeded, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 742, SFINAE_Suppress, false, true, 2)
+DIAG(warn_direct_initialize_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "explicit call to +initialize results in duplicate call to +initialize", 216, SFINAE_Suppress, false, false, 2)
+DIAG(warn_direct_ivar_access, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "instance variable %0 is being directly accessed", 176, SFINAE_Suppress, false, false, 2)
+DIAG(warn_direct_super_initialize_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "explicit call to [super initialize] should only be in implementation of +initialize", 216, SFINAE_Suppress, false, false, 2)
+DIAG(warn_dispatch_body_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "body of cpu_dispatch function will be ignored", 248, SFINAE_Suppress, false, false, 0)
+DIAG(warn_division_sizeof_ptr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' will return the size of the pointer, not the array itself", 609, SFINAE_Suppress, false, false, 2)
+DIAG(warn_dllimport_dropped_from_inline_function, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%q0 redeclared inline; %1 attribute ignored", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_double_const_requires_fp64, CLASS_WARNING, (unsigned)diag::Severity::Warning, "double precision constant requires cl_khr_fp64, casting to single precision", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_double_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "acquiring %0 '%1' that is already held", 662, SFINAE_Suppress, false, false, 2)
+DIAG(warn_duplicate_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 is already applied with different parameters", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_duplicate_attribute_exact, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 is already applied", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_duplicate_codeseg_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "duplicate code segment specifiers", 578, SFINAE_Suppress, false, false, 2)
+DIAG(warn_duplicate_enum_values, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "element %0 has been implicitly assigned %1 which another element has been assigned", 194, SFINAE_Suppress, false, false, 2)
+DIAG(warn_duplicate_method_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "multiple declarations of method %0 found and ignored", 196, SFINAE_Suppress, false, false, 2)
+DIAG(warn_duplicate_protocol_def, CLASS_WARNING, (unsigned)diag::Severity::Warning, "duplicate protocol definition of %0 is ignored", 197, SFINAE_Suppress, false, false, 2)
+DIAG(warn_dyn_class_memaccess, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{destination for|source of|first operand of|second operand of}0 this %1 call is a pointer to %select{|class containing a }2dynamic class %3; vtable pointer will be %select{overwritten|copied|moved|compared}4", 198, SFINAE_Suppress, false, false, 2)
+DIAG(warn_empty_for_body, CLASS_WARNING, (unsigned)diag::Severity::Warning, "for loop has empty body", 202, SFINAE_Suppress, false, false, 2)
+DIAG(warn_empty_format_string, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format string is empty", 242, SFINAE_Suppress, false, false, 28)
+DIAG(warn_empty_if_body, CLASS_WARNING, (unsigned)diag::Severity::Warning, "if statement has empty body", 202, SFINAE_Suppress, false, false, 2)
+DIAG(warn_empty_parens_are_function_decl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "empty parentheses interpreted as a function declaration", 748, SFINAE_Suppress, false, false, 2)
+DIAG(warn_empty_range_based_for_body, CLASS_WARNING, (unsigned)diag::Severity::Warning, "range-based for loop has empty body", 202, SFINAE_Suppress, false, false, 2)
+DIAG(warn_empty_switch_body, CLASS_WARNING, (unsigned)diag::Severity::Warning, "switch statement has empty body", 202, SFINAE_Suppress, false, false, 2)
+DIAG(warn_empty_while_body, CLASS_WARNING, (unsigned)diag::Severity::Warning, "while loop has empty body", 202, SFINAE_Suppress, false, false, 2)
+DIAG(warn_enum_value_overflow, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overflow in enumeration value", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_equality_with_extra_parens, CLASS_WARNING, (unsigned)diag::Severity::Warning, "equality comparison with extraneous parentheses", 520, SFINAE_Suppress, false, false, 2)
+DIAG(warn_exception_caught_by_earlier_handler, CLASS_WARNING, (unsigned)diag::Severity::Warning, "exception of type %0 will be caught by earlier handler", 212, SFINAE_Suppress, false, false, 2)
+DIAG(warn_exit_time_destructor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration requires an exit-time destructor", 213, SFINAE_Suppress, false, false, 2)
+DIAG(warn_expecting_lock_held_on_loop, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "expecting %0 '%1' to be held at start of each loop", 662, SFINAE_Suppress, false, false, 2)
+DIAG(warn_expecting_locked, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "expecting %0 '%1' to be held at the end of function", 662, SFINAE_Suppress, false, false, 2)
+DIAG(warn_explicit_instantiation_after_specialization, CLASS_WARNING, (unsigned)diag::Severity::Warning, "explicit instantiation of %0 that occurs after an explicit specialization has no effect", 329, SFINAE_Suppress, false, false, 2)
+DIAG(warn_explicit_instantiation_inline_0x, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit instantiation cannot be 'inline'", 75, SFINAE_Suppress, false, false, 2)
+DIAG(warn_explicit_instantiation_must_be_global_0x, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit instantiation of %0 must occur at global scope", 75, SFINAE_Suppress, false, false, 2)
+DIAG(warn_explicit_instantiation_out_of_scope_0x, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit instantiation of %0 not in a namespace enclosing %1", 75, SFINAE_Suppress, false, false, 2)
+DIAG(warn_explicit_instantiation_unqualified_wrong_namespace_0x, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit instantiation of %q0 must occur in namespace %1", 75, SFINAE_Suppress, false, false, 2)
+DIAG(warn_extern_init, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'extern' variable has an initializer", 219, SFINAE_Suppress, false, false, 2)
+DIAG(warn_falloff_nonvoid_coroutine, CLASS_WARNING, (unsigned)diag::Severity::Warning, "control reaches end of coroutine; which is undefined behavior because the promise type %0 does not declare 'return_void()'", 575, SFINAE_Suppress, false, false, 2)
+DIAG(warn_falloff_nonvoid_function, CLASS_WARNING, (unsigned)diag::Severity::Warning, "control reaches end of non-void function", 575, SFINAE_Suppress, false, false, 2)
+DIAG(warn_falloff_nonvoid_lambda, CLASS_WARNING, (unsigned)diag::Severity::Warning, "control reaches end of non-void lambda", 575, SFINAE_Suppress, false, false, 3)
+DIAG(warn_falloff_noreturn_function, CLASS_WARNING, (unsigned)diag::Severity::Warning, "function declared 'noreturn' should not return", 340, SFINAE_Suppress, false, false, 2)
+DIAG(warn_fallthrough_attr_unreachable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "fallthrough annotation in unreachable code", 292, SFINAE_Suppress, false, false, 2)
+DIAG(warn_field_is_uninit, CLASS_WARNING, (unsigned)diag::Severity::Warning, "field %0 is uninitialized when used here", 692, SFINAE_Suppress, false, false, 2)
+DIAG(warn_flag_enum_constant_out_of_range, CLASS_WARNING, (unsigned)diag::Severity::Warning, "enumeration value %0 is out of range of flags in enumeration type %1", 227, SFINAE_Suppress, false, false, 2)
+DIAG(warn_float_overflow, CLASS_WARNING, (unsigned)diag::Severity::Warning, "magnitude of floating-point constant too large for type %0; maximum is %1", 356, SFINAE_Suppress, false, false, 2)
+DIAG(warn_float_underflow, CLASS_WARNING, (unsigned)diag::Severity::Warning, "magnitude of floating-point constant too small for type %0; minimum is %1", 356, SFINAE_Suppress, false, false, 2)
+DIAG(warn_floatingpoint_eq, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "comparing floating point with == or != is unsafe", 230, SFINAE_Suppress, false, false, 2)
+DIAG(warn_for_range_begin_end_types_differ, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'begin' and 'end' returning different types (%0 and %1) is incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 2)
+DIAG(warn_for_range_const_reference_copy, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "loop variable %0 %diff{has type $ but is initialized with type $| is initialized with a value of a different type}1,2 resulting in a copy", 556, SFINAE_Suppress, false, false, 2)
+DIAG(warn_for_range_copy, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "loop variable %0 of type %1 creates a copy from type %2", 556, SFINAE_Suppress, false, false, 2)
+DIAG(warn_for_range_variable_always_copy, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "loop variable %0 is always a copy because the range of type %1 does not return a reference", 556, SFINAE_Suppress, false, false, 2)
+DIAG(warn_format_P_no_precision, CLASS_WARNING, (unsigned)diag::Severity::Warning, "using '%%P' format specifier without precision", 234, SFINAE_Suppress, false, false, 28)
+DIAG(warn_format_argument_needs_cast, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{values of type|enum values with underlying type}2 '%0' should not be used as format arguments; add an explicit cast to %1 instead", 234, SFINAE_Suppress, false, false, 28)
+DIAG(warn_format_argument_needs_cast_pedantic, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{values of type|enum values with underlying type}2 '%0' should not be used as format arguments; add an explicit cast to %1 instead", 239, SFINAE_Suppress, false, false, 2)
+DIAG(warn_format_conversion_argument_type_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format specifies type %0 but the argument has %select{type|underlying type}2 %1", 234, SFINAE_Suppress, false, false, 28)
+DIAG(warn_format_conversion_argument_type_mismatch_pedantic, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "format specifies type %0 but the argument has %select{type|underlying type}2 %1", 239, SFINAE_Suppress, false, false, 2)
+DIAG(warn_format_invalid_annotation, CLASS_WARNING, (unsigned)diag::Severity::Warning, "using '%0' format specifier annotation outside of os_log()/os_trace()", 234, SFINAE_Suppress, false, false, 28)
+DIAG(warn_format_invalid_conversion, CLASS_WARNING, (unsigned)diag::Severity::Warning, "invalid conversion specifier '%0'", 236, SFINAE_Suppress, false, false, 28)
+DIAG(warn_format_invalid_positional_specifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "invalid position specified for %select{field width|field precision}0", 234, SFINAE_Suppress, false, false, 28)
+DIAG(warn_format_mix_positional_nonpositional_args, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cannot mix positional and non-positional arguments in format string", 234, SFINAE_Suppress, false, false, 28)
+DIAG(warn_format_non_standard, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%0' %select{length modifier|conversion specifier}1 is not supported by ISO C", 237, SFINAE_Suppress, false, false, 2)
+DIAG(warn_format_non_standard_conversion_spec, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "using length modifier '%0' with conversion specifier '%1' is not supported by ISO C", 237, SFINAE_Suppress, false, false, 2)
+DIAG(warn_format_non_standard_positional_arg, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "positional arguments are not supported by ISO C", 237, SFINAE_Suppress, false, false, 2)
+DIAG(warn_format_nonliteral, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "format string is not a string literal", 238, SFINAE_Suppress, false, false, 2)
+DIAG(warn_format_nonliteral_noargs, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format string is not a string literal (potentially insecure)", 240, SFINAE_Suppress, false, false, 28)
+DIAG(warn_format_nonsensical_length, CLASS_WARNING, (unsigned)diag::Severity::Warning, "length modifier '%0' results in undefined behavior or no effect with '%1' conversion specifier", 234, SFINAE_Suppress, false, false, 28)
+DIAG(warn_format_string_is_wide_literal, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format string should not be a wide string", 234, SFINAE_Suppress, false, false, 28)
+DIAG(warn_format_zero_positional_specifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "position arguments in format strings start counting at 1 (not 0)", 234, SFINAE_Suppress, false, false, 28)
+DIAG(warn_forward_class_redefinition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "redefinition of forward class %0 of a typedef name of an object type is ignored", 469, SFINAE_Suppress, false, false, 2)
+DIAG(warn_fun_excludes_mutex, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cannot call function '%1' while %0 '%2' is held", 662, SFINAE_Suppress, false, false, 2)
+DIAG(warn_fun_requires_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "calling function %1 requires holding %0 %select{'%2'|'%2' exclusively}3", 662, SFINAE_Suppress, false, false, 2)
+DIAG(warn_fun_requires_lock_precise, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "calling function %1 requires holding %0 %select{'%2'|'%2' exclusively}3", 666, SFINAE_Suppress, false, false, 2)
+DIAG(warn_func_template_missing, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "instantiation of function %q0 required here, but no definition is available", 679, SFINAE_Suppress, false, false, 2)
+DIAG(warn_function_def_in_objc_container, CLASS_WARNING, (unsigned)diag::Severity::Warning, "function definition inside an Objective-C container is deprecated", 247, SFINAE_Suppress, false, false, 2)
+DIAG(warn_function_marked_not_override_overriding, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 overrides a member function but is not marked 'override'", 320, SFINAE_Suppress, false, false, 2)
+DIAG(warn_gc_attribute_weak_on_local, CLASS_WARNING, (unsigned)diag::Severity::Warning, "Objective-C GC does not allow weak variables on the stack", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_gcc_ignores_type_attr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "GCC does not allow the %0 attribute to be written on a type", 250, SFINAE_Suppress, false, false, 2)
+DIAG(warn_global_constructor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration requires a global constructor", 251, SFINAE_Suppress, false, false, 2)
+DIAG(warn_global_destructor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration requires a global destructor", 251, SFINAE_Suppress, false, false, 2)
+DIAG(warn_gnu_inline_attribute_requires_inline, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'gnu_inline' attribute requires function to be marked 'inline', attribute ignored", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_gnu_null_ptr_arith, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "arithmetic on a null pointer treated as a cast from integer to pointer is a GNU extension", 456, SFINAE_Suppress, false, false, 2)
+DIAG(warn_guarded_pass_by_reference, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "passing variable %1 by reference requires holding %0 %select{'%2'|'%2' exclusively}3", 667, SFINAE_Suppress, false, false, 2)
+DIAG(warn_iboutlet_object_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{instance variable|property}2 with %0 attribute must be an object type (invalid %1)", 337, SFINAE_Suppress, false, false, 2)
+DIAG(warn_iboutletcollection_property_assign, CLASS_WARNING, (unsigned)diag::Severity::Warning, "IBOutletCollection properties should be copy/strong and not assign", 337, SFINAE_Suppress, false, false, 2)
+DIAG(warn_identity_field_assign, CLASS_WARNING, (unsigned)diag::Severity::Warning, "assigning %select{field|instance variable}0 to itself", 582, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ignored_ms_inheritance, CLASS_WARNING, (unsigned)diag::Severity::Warning, "inheritance model ignored on %select{primary template|partial specialization}0", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ignored_objc_externally_retained, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'objc_externally_retained' can only be applied to local variables %select{of retainable type|with strong ownership}0", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_illegal_constant_array_size, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "size of static array must be an integer constant expression", 527, SFINAE_Suppress, false, false, 2)
+DIAG(warn_impcast_bitfield_precision_constant, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit truncation from %2 to bit-field changes value from %0 to %1", 59, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_bool_to_null_pointer, CLASS_WARNING, (unsigned)diag::Severity::Warning, "initialization of pointer of type %0 to null from a constant boolean expression", 64, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_complex_scalar, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion discards imaginary component: %0 to %1", 137, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_different_enum_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion from enumeration type %0 to different enumeration type %1", 210, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_double_promotion, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion increases floating-point precision: %0 to %1", 192, SFINAE_Suppress, false, false, 2)
+DIAG(warn_impcast_fixed_point_range, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion from %0 cannot fit within the range of values for %1", 294, SFINAE_Suppress, false, false, 2)
+DIAG(warn_impcast_float_integer, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion turns floating-point number into integer: %0 to %1", 229, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_float_precision, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion loses floating-point precision: %0 to %1", 295, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_float_result_precision, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion when assigning computation result loses floating-point precision: %0 to %1", 295, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_float_to_integer, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion from %0 to %1 changes value from %2 to %3", 231, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_float_to_integer_out_of_range, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion of out of range value from %0 to %1 is undefined", 231, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_float_to_integer_zero, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion from %0 to %1 changes non-zero value from %2 to %3", 232, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_floating_point_to_bool, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion turns floating-point number into bool: %0 to %1", 290, SFINAE_Suppress, false, false, 2)
+DIAG(warn_impcast_high_order_zero_bits, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "higher order bits are zeroes after implicit conversion", 298, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_integer_64_32, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion loses integer precision: %0 to %1", 602, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_integer_precision, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion loses integer precision: %0 to %1", 298, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_integer_precision_constant, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion from %2 to %3 changes value from %0 to %1", 133, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_integer_sign, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion changes signedness: %0 to %1", 604, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_integer_sign_conditional, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "operand of ? changes signedness: %0 to %1", 604, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_literal_float_to_integer, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion from %0 to %1 changes value from %2 to %3", 355, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_literal_float_to_integer_out_of_range, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion of out of range value from %0 to %1 is undefined", 355, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_nonnegative_result, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "the resulting value is always non-negative after implicit conversion", 604, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_null_pointer_to_integer, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion of %select{NULL|nullptr}0 constant to %1", 454, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_objective_c_literal_to_bool, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit boolean conversion of Objective-C object literal always evaluates to true", 472, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_pointer_to_bool, CLASS_WARNING, (unsigned)diag::Severity::Warning, "address of%select{| function| array}0 '%1' will always evaluate to 'true'", 531, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_string_literal_to_bool, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion turns string literal into bool: %0 to %1", 636, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_vector_scalar, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion turns vector to scalar: %0 to %1", 137, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impl_required_for_class_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "class property %0 requires method %1 to be defined - use @dynamic or provide a method implementation in this class implementation", 482, SFINAE_Suppress, false, false, 2)
+DIAG(warn_impl_required_in_category_for_class_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "class property %0 requires method %1 to be defined - use @dynamic or provide a method implementation in this category", 482, SFINAE_Suppress, false, false, 2)
+DIAG(warn_implements_nscopying, CLASS_WARNING, (unsigned)diag::Severity::Warning, "default assign attribute on property %0 which implements NSCopying protocol is not appropriate with -fobjc-gc[-only]", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_implicit_atomic_property, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "property is assumed atomic by default", 289, SFINAE_Suppress, false, false, 2)
+DIAG(warn_implicit_decl_requires_sysheader, CLASS_WARNING, (unsigned)diag::Severity::Warning, "declaration of built-in function '%1' requires inclusion of the header <%0>", 70, SFINAE_Suppress, false, false, 2)
+DIAG(warn_implicit_function_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit declaration of function %0", 296, SFINAE_Suppress, false, false, 2)
+DIAG(warn_implicitly_retains_self, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "block implicitly retains 'self'; explicitly mention 'self' to indicate this is intended behavior", 299, SFINAE_Suppress, false, false, 2)
+DIAG(warn_inaccessible_base_class, CLASS_WARNING, (unsigned)diag::Severity::Warning, "direct base %0 is inaccessible due to ambiguity:%1", 303, SFINAE_Suppress, false, false, 2)
+DIAG(warn_incompatible_exception_specs, CLASS_WARNING, (unsigned)diag::Severity::Warning, "target exception specification is not superset of source", 306, SFINAE_Suppress, false, false, 2)
+DIAG(warn_incompatible_qualified_id, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{%diff{assigning to $ from incompatible type $|assigning to type from incompatible type}0,1|%diff{passing $ to parameter of incompatible type $|passing type to parameter of incompatible type}0,1|%diff{returning $ from a function with incompatible result type $|returning type from a function with incompatible result type}0,1|%diff{converting $ to incompatible type $|converting type to incompatible type}0,1|%diff{initializing $ with an expression of incompatible type $|initializing type with an expression of incompatible type}0,1|%diff{sending $ to parameter of incompatible type $|sending type to parameter of incompatible type}0,1|%diff{casting $ to incompatible type $|casting type to incompatible type}0,1}2", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_incompatible_vectors, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "incompatible vector types %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2", 746, SFINAE_Suppress, false, false, 2)
+DIAG(warn_incomplete_encoded_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "encoding of %0 type is incomplete because %1 component has unknown encoding", 206, SFINAE_Suppress, false, false, 2)
+DIAG(warn_increment_bool, CLASS_WARNING, (unsigned)diag::Severity::Warning, "incrementing expression of type bool is deprecated and incompatible with C++17", 169, SFINAE_Suppress, false, false, 27)
+DIAG(warn_independentclass_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'objc_independent_class' attribute may be put on a typedef only; attribute is ignored", 5, SFINAE_Suppress, false, false, 2)
+DIAG(warn_indirection_through_null, CLASS_WARNING, (unsigned)diag::Severity::Warning, "indirection of non-volatile null pointer will be deleted, not trap", 455, SFINAE_Suppress, false, false, 2)
+DIAG(warn_infinite_recursive_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "all paths through this function will call itself", 322, SFINAE_Suppress, false, false, 2)
+DIAG(warn_init_list_constant_narrowing, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "constant expression evaluates to %0 which cannot be narrowed to type %1 in C++11", 83, SFINAE_Suppress, false, false, 2)
+DIAG(warn_init_list_type_narrowing, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "type %0 cannot be narrowed to %1 in initializer list in C++11", 83, SFINAE_Suppress, false, false, 2)
+DIAG(warn_init_list_variable_narrowing, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-constant-expression cannot be narrowed from type %0 to %1 in initializer list in C++11", 83, SFINAE_Suppress, false, false, 2)
+DIAG(warn_init_ptr_member_to_parameter_addr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "initializing pointer member %0 with the stack address of %select{variable|parameter}2 %1", 151, SFINAE_Suppress, false, false, 2)
+DIAG(warn_initializer_out_of_order, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{field|base class}0 %1 will be initialized after %select{field|base}2 %3", 567, SFINAE_Suppress, false, false, 2)
+DIAG(warn_initializer_overrides, CLASS_WARNING, (unsigned)diag::Severity::Warning, "initializer overrides prior initialization of this subobject", 324, SFINAE_Suppress, false, false, 2)
+DIAG(warn_inline_namespace_reopened_noninline, CLASS_WARNING, (unsigned)diag::Severity::Warning, "inline namespace reopened as a non-inline namespace", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_inst_method_not_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "instance method %objcinstance0 not found (return type defaults to 'id')", 475, SFINAE_Suppress, false, false, 2)
+DIAG(warn_instance_method_not_found_with_typo, CLASS_WARNING, (unsigned)diag::Severity::Warning, "instance method %objcinstance0 not found (return type defaults to 'id'); did you mean %objcinstance2?", 475, SFINAE_Suppress, false, false, 2)
+DIAG(warn_instance_method_on_class_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "instance method %0 found instead of class method %1", 475, SFINAE_Suppress, false, false, 2)
+DIAG(warn_int_to_pointer_cast, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cast to %1 from smaller integer type %0", 332, SFINAE_Suppress, false, false, 2)
+DIAG(warn_int_to_void_pointer_cast, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cast to %1 from smaller integer type %0", 333, SFINAE_Suppress, false, false, 2)
+DIAG(warn_internal_linkage_local_storage, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'internal_linkage' attribute on a non-static local variable is ignored", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_interrupt_attribute_invalid, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{MIPS|MSP430|RISC-V}0 'interrupt' attribute only applies to functions that have %select{no parameters|a 'void' return type}1", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_invalid_asm_cast_lvalue, CLASS_WARNING, (unsigned)diag::Severity::Warning, "invalid use of a cast in an inline asm context requiring an l-value: accepted due to -fheinous-gnu-extensions, but clang may remove support for this in the future", 0, SFINAE_Suppress, false, false, 12)
+DIAG(warn_invalid_capability_name, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "invalid capability name '%0'; capability name must be 'mutex' or 'role'", 663, SFINAE_Suppress, false, false, 2)
+DIAG(warn_invalid_initializer_from_system_header, CLASS_WARNING, (unsigned)diag::Severity::Warning, "invalid constructor form class in system header, should not be explicit", 338, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ivar_use_hidden, CLASS_WARNING, (unsigned)diag::Severity::Warning, "local declaration of %0 hides instance variable", 594, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ivars_in_interface, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration of instance variables in the interface is deprecated", 470, SFINAE_Suppress, false, false, 2)
+DIAG(warn_jump_out_of_seh_finally, CLASS_WARNING, (unsigned)diag::Severity::Warning, "jump out of __finally block has undefined behavior", 348, SFINAE_Suppress, false, false, 2)
+DIAG(warn_kern_is_inline, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignored 'inline' attribute on kernel function %0", 147, SFINAE_Suppress, false, false, 2)
+DIAG(warn_kern_is_method, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "kernel function %0 is a member function; this may not be accepted by nvcc", 147, SFINAE_Suppress, false, false, 2)
+DIAG(warn_lock_exclusive_and_shared, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 '%1' is acquired exclusively and shared in the same scope", 662, SFINAE_Suppress, false, false, 2)
+DIAG(warn_lock_some_predecessors, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 '%1' is not held on every path through here", 662, SFINAE_Suppress, false, false, 2)
+DIAG(warn_logical_and_in_logical_or, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'&&' within '||'", 359, SFINAE_Suppress, false, false, 2)
+DIAG(warn_logical_instead_of_bitwise, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use of logical '%0' with constant operand", 134, SFINAE_Suppress, false, false, 2)
+DIAG(warn_logical_not_on_lhs_of_check, CLASS_WARNING, (unsigned)diag::Severity::Warning, "logical not is only applied to the left hand side of this %select{comparison|bitwise operator}0", 358, SFINAE_Suppress, false, false, 2)
+DIAG(warn_loop_ctrl_binds_to_inner, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' is bound to current loop, GCC binds it to the enclosing loop", 250, SFINAE_Suppress, false, false, 2)
+DIAG(warn_loop_state_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "state of variable '%0' must match at the entry and exit of loop", 136, SFINAE_Suppress, false, false, 2)
+DIAG(warn_main_one_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "only one parameter on 'main' declaration", 363, SFINAE_Suppress, false, false, 2)
+DIAG(warn_main_redefined, CLASS_WARNING, (unsigned)diag::Severity::Warning, "variable named 'main' with external linkage has undefined behavior", 363, SFINAE_Suppress, false, false, 2)
+DIAG(warn_main_returns_bool_literal, CLASS_WARNING, (unsigned)diag::Severity::Warning, "bool literal returned from 'main'", 363, SFINAE_Suppress, false, false, 2)
+DIAG(warn_max_unsigned_zero, CLASS_WARNING, (unsigned)diag::Severity::Warning, "taking the max of %select{a value and unsigned zero|unsigned zero and a value}0 is always equal to the other value", 367, SFINAE_Suppress, false, false, 2)
+DIAG(warn_maybe_falloff_nonvoid_coroutine, CLASS_WARNING, (unsigned)diag::Severity::Warning, "control may reach end of coroutine; which is undefined behavior because the promise type %0 does not declare 'return_void()'", 575, SFINAE_Suppress, false, false, 2)
+DIAG(warn_maybe_falloff_nonvoid_function, CLASS_WARNING, (unsigned)diag::Severity::Warning, "control may reach end of non-void function", 575, SFINAE_Suppress, false, false, 2)
+DIAG(warn_maybe_falloff_nonvoid_lambda, CLASS_WARNING, (unsigned)diag::Severity::Warning, "control may reach end of non-void lambda", 575, SFINAE_Suppress, false, false, 3)
+DIAG(warn_maybe_uninit_var, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable %0 may be uninitialized when %select{used here|captured by block}1", 131, SFINAE_Suppress, false, false, 2)
+DIAG(warn_maynot_respond, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 may not respond to %1", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_member_extra_qualification, CLASS_WARNING, (unsigned)diag::Severity::Warning, "extra qualification on member %0", 385, SFINAE_Suppress, false, false, 2)
+DIAG(warn_memcpy_chk_overflow, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' will always overflow; destination buffer has size %1, but size argument is %2", 69, SFINAE_Suppress, false, false, 2)
+DIAG(warn_memsize_comparison, CLASS_WARNING, (unsigned)diag::Severity::Warning, "size argument in %0 call is a comparison", 369, SFINAE_Suppress, false, false, 2)
+DIAG(warn_messaging_unqualified_id, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "messaging unqualified id", 474, SFINAE_Suppress, false, false, 2)
+DIAG(warn_mismatched_availability, CLASS_WARNING, (unsigned)diag::Severity::Warning, "availability does not match previous declaration", 52, SFINAE_Suppress, false, false, 2)
+DIAG(warn_mismatched_availability_override, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{|overriding }4method %select{introduced after|deprecated before|obsoleted before}0 %select{the protocol method it implements|overridden method}4 on %1 (%2 vs. %3)", 52, SFINAE_Suppress, false, false, 2)
+DIAG(warn_mismatched_availability_override_unavail, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{|overriding }1method cannot be unavailable on %0 when %select{the protocol method it implements|its overridden method}1 is available", 52, SFINAE_Suppress, false, false, 2)
+DIAG(warn_mismatched_delete_new, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'delete%select{|[]}0' applied to a pointer that was allocated with 'new%select{[]|}0'; did you mean 'delete%select{[]|}0'?", 400, SFINAE_Suppress, false, false, 2)
+DIAG(warn_mismatched_nullability_attr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "nullability specifier %0 conflicts with existing specifier %1", 457, SFINAE_Suppress, false, false, 19)
+DIAG(warn_mismatched_section, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{codeseg|section}0 does not match previous declaration", 578, SFINAE_Suppress, false, false, 2)
+DIAG(warn_missing_braces, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "suggest braces around initialization of subobject", 404, SFINAE_Suppress, false, false, 2)
+DIAG(warn_missing_case, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%plural{1:enumeration value %1 not handled in switch|2:enumeration values %1 and %2 not handled in switch|3:enumeration values %1, %2, and %3 not handled in switch|:%0 enumeration values not handled in switch: %1, %2, %3...}0", 644, SFINAE_Suppress, false, false, 2)
+DIAG(warn_missing_case_for_condition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no case matching constant switch condition '%0'", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_missing_explicit_synthesis, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "auto property synthesis is synthesizing property not explicitly synthesized", 476, SFINAE_Suppress, false, false, 2)
+DIAG(warn_missing_field_initializers, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "missing field %0 initializer", 407, SFINAE_Suppress, false, false, 2)
+DIAG(warn_missing_format_string, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format string missing", 234, SFINAE_Suppress, false, false, 28)
+DIAG(warn_missing_method_return_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "method has no return type specified; defaults to 'id'", 410, SFINAE_Suppress, false, false, 2)
+DIAG(warn_missing_prototype, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "no previous prototype for function %0", 414, SFINAE_Suppress, false, false, 2)
+DIAG(warn_missing_sentinel, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing sentinel in %select{function call|method dispatch|block call}0", 586, SFINAE_Suppress, false, false, 2)
+DIAG(warn_missing_variable_declarations, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "no previous extern declaration for non-static variable %0", 417, SFINAE_Suppress, false, false, 2)
+DIAG(warn_mixed_sign_comparison, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "comparison of integers of different signs: %0 and %1", 603, SFINAE_Suppress, false, false, 2)
+DIAG(warn_modifying_shadowing_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "modifying constructor parameter %0 that shadows a field of %1", 593, SFINAE_Suppress, false, false, 2)
+DIAG(warn_multiple_method_decl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "multiple methods named %0 found", 478, SFINAE_Suppress, false, false, 2)
+DIAG(warn_multiple_selectors, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "several methods with selector %0 of mismatched types are found for the @selector expression", 580, SFINAE_Suppress, false, false, 2)
+DIAG(warn_multiversion_duplicate_entries, CLASS_WARNING, (unsigned)diag::Severity::Warning, "CPU list contains duplicate entries; attribute ignored", 248, SFINAE_Suppress, false, false, 0)
+DIAG(warn_namespace_member_extra_qualification, CLASS_WARNING, (unsigned)diag::Severity::Warning, "extra qualification on member %0", 221, SFINAE_Suppress, false, false, 2)
+DIAG(warn_neon_vector_initializer_non_portable, CLASS_WARNING, (unsigned)diag::Severity::Warning, "vector initializers are not compatible with NEON intrinsics in big endian mode", 448, SFINAE_Suppress, false, false, 2)
+DIAG(warn_new_dangling_initializer_list, CLASS_WARNING, (unsigned)diag::Severity::Warning, "array backing %select{initializer list subobject of the allocated object|the allocated initializer list}0 will be destroyed at the end of the full-expression", 152, SFINAE_Suppress, false, false, 2)
+DIAG(warn_new_dangling_reference, CLASS_WARNING, (unsigned)diag::Severity::Warning, "temporary bound to reference member of allocated object will be destroyed at the end of the full-expression", 151, SFINAE_Suppress, false, false, 2)
+DIAG(warn_no_autosynthesis_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "auto property synthesis will not synthesize property %0 because it is 'readwrite' but it will be synthesized 'readonly' via another property", 486, SFINAE_Suppress, false, false, 2)
+DIAG(warn_no_autosynthesis_shared_ivar_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "auto property synthesis will not synthesize property %0 because it cannot share an ivar with another synthesized property", 486, SFINAE_Suppress, false, false, 2)
+DIAG(warn_no_constructor_for_refconst, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{struct|interface|union|class|enum}0 %1 does not declare any constructor to initialize its non-modifiable members", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_no_underlying_type_specified_for_enum_bitfield, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "enums in the Microsoft ABI are signed integers by default; consider giving the enum %0 an unsigned underlying type to make this code portable", 606, SFINAE_Suppress, false, false, 2)
+DIAG(warn_no_unlock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 '%1' is still held at the end of function", 662, SFINAE_Suppress, false, false, 2)
+DIAG(warn_nocf_check_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'nocf_check' attribute ignored; use -fcf-protection to enable the attribute", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_noderef_on_non_pointer_or_array, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'noderef' can only be used on an array or pointer type", 282, SFINAE_Suppress, false, false, 0)
+DIAG(warn_noderef_to_dereferenceable_pointer, CLASS_WARNING, (unsigned)diag::Severity::Warning, "casting to dereferenceable pointer removes 'noderef' attribute", 436, SFINAE_Suppress, false, false, 0)
+DIAG(warn_non_contravariant_overriding_param_types, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting parameter types in declaration of %0: %1 vs %2", 515, SFINAE_Suppress, false, false, 2)
+DIAG(warn_non_contravariant_param_types, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting parameter types in implementation of %0: %1 vs %2", 370, SFINAE_Suppress, false, false, 2)
+DIAG(warn_non_covariant_overriding_ret_types, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting return type in declaration of %0: %1 vs %2", 515, SFINAE_Suppress, false, false, 2)
+DIAG(warn_non_covariant_ret_types, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting return type in implementation of %0: %1 vs %2", 370, SFINAE_Suppress, false, false, 2)
+DIAG(warn_non_literal_null_pointer, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expression which evaluates to zero treated as a null pointer constant of type %0", 439, SFINAE_Suppress, false, false, 24)
+DIAG(warn_non_pod_vararg_with_format_string, CLASS_WARNING, (unsigned)diag::Severity::Error, "cannot pass %select{non-POD|non-trivial}0 object of type %1 to variadic %select{function|block|method|constructor}2; expected type from format string was %3", 442, SFINAE_Suppress, false, false, 2)
+DIAG(warn_non_virtual_dtor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 has virtual functions but non-virtual destructor", 443, SFINAE_Suppress, false, false, 2)
+DIAG(warn_nonnull_expr_compare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "comparison of nonnull %select{function call|parameter}0 '%1' %select{not |}2equal to a null pointer is '%select{true|false}2' on first encounter", 655, SFINAE_Suppress, false, false, 2)
+DIAG(warn_noreturn_function_has_return_expr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "function %0 declared 'noreturn' should not return", 340, SFINAE_Suppress, false, false, 2)
+DIAG(warn_not_a_doxygen_trailing_member_comment, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "not a Doxygen trailing comment", 186, SFINAE_Suppress, false, false, 25)
+DIAG(warn_not_compound_assign, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use of unary operator that may be intended as compound assignment (%0=)", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_not_enough_argument, CLASS_WARNING, (unsigned)diag::Severity::Warning, "not enough variable arguments in %0 declaration to fit a sentinel", 586, SFINAE_Suppress, false, false, 2)
+DIAG(warn_not_in_enum, CLASS_WARNING, (unsigned)diag::Severity::Warning, "case value not in enumerated type %0", 644, SFINAE_Suppress, false, false, 2)
+DIAG(warn_not_in_enum_assignment, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "integer constant not in range of enumerated type %0", 37, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ns_attribute_wrong_parameter_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to %select{Objective-C object|pointer|pointer-to-CF-pointer|pointer/reference-to-OSObject-pointer}1 parameters", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ns_attribute_wrong_return_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to %select{functions|methods|properties}1 that return %select{an Objective-C object|a pointer|a non-retainable pointer}2", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_nsconsumed_attribute_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overriding method has mismatched ns_consumed attribute on its parameter", 450, SFINAE_Suppress, false, false, 2)
+DIAG(warn_nsobject_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'NSObject' attribute may be put on a typedef only; attribute is ignored", 6, SFINAE_Suppress, false, false, 2)
+DIAG(warn_nsreturns_retained_attribute_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overriding method has mismatched ns_returns_%select{not_retained|retained}0 attributes", 451, SFINAE_Suppress, false, false, 2)
+DIAG(warn_null_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "null passed to a callee that requires a non-null argument", 444, SFINAE_Suppress, false, false, 28)
+DIAG(warn_null_in_arithmetic_operation, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use of NULL in arithmetic operation", 452, SFINAE_Suppress, false, false, 2)
+DIAG(warn_null_in_comparison_operation, CLASS_WARNING, (unsigned)diag::Severity::Warning, "comparison between NULL and non-pointer %select{(%1 and NULL)|(NULL and %1)}0", 452, SFINAE_Suppress, false, false, 2)
+DIAG(warn_null_pointer_compare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "comparison of %select{address of|function|array}0 '%1' %select{not |}2equal to a null pointer is always %select{true|false}2", 655, SFINAE_Suppress, false, false, 2)
+DIAG(warn_null_resettable_setter, CLASS_WARNING, (unsigned)diag::Severity::Warning, "synthesized setter %0 for null_resettable property %1 does not handle nil", 457, SFINAE_Suppress, false, false, 19)
+DIAG(warn_null_ret, CLASS_WARNING, (unsigned)diag::Severity::Warning, "null returned from %select{function|method}0 that requires a non-null return value", 444, SFINAE_Suppress, false, false, 28)
+DIAG(warn_nullability_declspec, CLASS_WARNING, (unsigned)diag::Severity::Error, "nullability specifier %0 cannot be applied to non-pointer type %1; did you mean to apply the specifier to the %select{pointer|block pointer|member pointer|function pointer|member function pointer}2?", 460, SFINAE_Suppress, false, false, 19)
+DIAG(warn_nullability_inferred_on_nested_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "inferring '_Nonnull' for pointer type within %select{array|reference}0 is deprecated", 462, SFINAE_Suppress, false, false, 19)
+DIAG(warn_nullability_lost, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion from nullable pointer %0 to non-nullable pointer type %1", 463, SFINAE_Suppress, false, false, 19)
+DIAG(warn_nullability_missing, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{pointer|block pointer|member pointer}0 is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)", 458, SFINAE_Suppress, false, false, 19)
+DIAG(warn_nullability_missing_array, CLASS_WARNING, (unsigned)diag::Severity::Warning, "array parameter is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)", 459, SFINAE_Suppress, false, false, 19)
+DIAG(warn_objc_cdirective_format_string, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "using %0 directive in %select{NSString|CFString}1 which is being passed as a formatting argument to the formatting %select{method|CFfunction}2", 143, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_circular_container, CLASS_WARNING, (unsigned)diag::Severity::Warning, "adding %0 to %1 might cause circular dependency in container", 465, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_collection_literal_element, CLASS_WARNING, (unsigned)diag::Severity::Warning, "object of type %0 is not compatible with %select{array element type|dictionary key type|dictionary value type}1 %2", 472, SFINAE_Suppress, false, false, 24)
+DIAG(warn_objc_designated_init_missing_super_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "designated initializer missing a 'super' call to a designated initializer of the super class", 467, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_designated_init_non_designated_init_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "designated initializer invoked a non-designated initializer", 467, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_designated_init_non_super_designated_init_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "designated initializer should only invoke a designated initializer on 'super'", 467, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_implementation_missing_designated_init_override, CLASS_WARNING, (unsigned)diag::Severity::Warning, "method override for the designated initializer of the superclass %objcinstance0 not found", 467, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_invalid_bridge, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 bridges to %1, not %2", 67, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_invalid_bridge_to_cf, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 cannot bridge to %1", 67, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_isa_assign, CLASS_WARNING, (unsigned)diag::Severity::Warning, "assignment to Objective-C's isa is deprecated in favor of object_setClass()", 170, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_isa_use, CLASS_WARNING, (unsigned)diag::Severity::Warning, "direct access to Objective-C's isa is deprecated in favor of object_getClass()", 170, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_literal_comparison, CLASS_WARNING, (unsigned)diag::Severity::Warning, "direct comparison of %select{an array literal|a dictionary literal|a numeric literal|a boxed expression|}0 has undefined behavior", 471, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_missing_super_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "method possibly missing a [super %0] call", 477, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_pointer_cxx_catch_fragile, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cannot catch an exception thrown with @throw in C++ in the non-unified exception model", 480, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_pointer_masking, CLASS_WARNING, (unsigned)diag::Severity::Warning, "bitmasking for introspection of Objective-C object pointers is strongly discouraged", 171, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_pointer_masking_performSelector, CLASS_WARNING, (unsigned)diag::Severity::Warning, "bitmasking for introspection of Objective-C object pointers is strongly discouraged", 172, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_precise_lifetime_meaningless, CLASS_ERROR, (unsigned)diag::Severity::Error, "objc_precise_lifetime is not meaningful for %select{__unsafe_unretained|__autoreleasing}0 objects", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(warn_objc_property_assign_on_object, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'assign' property of object type may become a dangling reference; consider using 'unsafe_unretained'", 481, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_property_copy_missing_on_block, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'copy' attribute must be specified for the block property when -fobjc-gc-only is specified", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_property_default_assign_on_object, CLASS_WARNING, (unsigned)diag::Severity::Warning, "default property attribute 'assign' not appropriate for object", 485, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_property_no_assignment_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no 'assign', 'retain', or 'copy' attribute is specified - 'assign' is assumed", 485, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_property_retain_of_block, CLASS_WARNING, (unsigned)diag::Severity::Warning, "retain'ed block property does not copy the block - use copy attribute instead", 479, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_readonly_property_has_setter, CLASS_WARNING, (unsigned)diag::Severity::Warning, "setter cannot be specified for a readonly property", 490, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_redundant_literal_use, CLASS_WARNING, (unsigned)diag::Severity::Warning, "using %0 with a literal is redundant", 492, SFINAE_Suppress, false, false, 29)
+DIAG(warn_objc_redundant_qualified_class_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "parameterized class %0 already conforms to the protocols listed; did you forget a '*'?", 489, SFINAE_Suppress, false, false, 0)
+DIAG(warn_objc_requires_super_protocol, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute cannot be applied to %select{methods in protocols|dealloc}1", 568, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_root_class_missing, CLASS_WARNING, (unsigned)diag::Severity::Warning, "class %0 defined without specifying a base class", 493, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_secondary_init_missing_init_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "convenience initializer missing a 'self' call to another initializer", 467, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_secondary_init_super_init_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "convenience initializer should not invoke an initializer on 'super'", 467, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_string_literal_comparison, CLASS_WARNING, (unsigned)diag::Severity::Warning, "direct comparison of a string literal has undefined behavior", 494, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_unsafe_perform_selector, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is incompatible with selectors that return a %select{struct|union|vector}1 type", 496, SFINAE_Suppress, false, false, 2)
+DIAG(warn_old_style_cast, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of old-style cast", 498, SFINAE_Suppress, false, false, 2)
+DIAG(warn_omp_alignment_not_power_of_two, CLASS_WARNING, (unsigned)diag::Severity::Warning, "aligned clause will be ignored because the requested alignment is not a power of 2", 501, SFINAE_Suppress, false, false, 11)
+DIAG(warn_omp_linear_step_zero, CLASS_WARNING, (unsigned)diag::Severity::Warning, "zero linear step (%0 %select{|and other variables in clause }1should probably be const)", 501, SFINAE_Suppress, false, false, 11)
+DIAG(warn_omp_loop_64_bit_var, CLASS_WARNING, (unsigned)diag::Severity::Warning, "OpenMP loop iteration variable cannot have more than 64 bits size and will be narrowed", 502, SFINAE_Suppress, false, false, 11)
+DIAG(warn_omp_nesting_simd, CLASS_WARNING, (unsigned)diag::Severity::Warning, "OpenMP only allows an ordered construct with the simd clause nested in a simd construct", 613, SFINAE_Suppress, false, false, 11)
+DIAG(warn_omp_non_trivial_type_mapped, CLASS_WARNING, (unsigned)diag::Severity::Warning, "Non-trivial type %0 is mapped, only trivial types are guaranteed to be mapped correctly", 503, SFINAE_Suppress, false, false, 11)
+DIAG(warn_omp_not_in_target_context, CLASS_WARNING, (unsigned)diag::Severity::Warning, "declaration is not declared in any declare target region", 503, SFINAE_Suppress, false, false, 11)
+DIAG(warn_omp_section_is_char, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "array section %select{lower bound|length}0 is of type 'char'", 122, SFINAE_Suppress, false, false, 11)
+DIAG(warn_on_superclass_use, CLASS_WARNING, (unsigned)diag::Severity::Warning, "class implementation may not have super class", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_opencl_attr_deprecated_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute is deprecated and ignored in OpenCL version %1", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_opencl_generic_address_space_arg, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "passing non-generic address space pointer to %0 may cause dynamic conversion affecting performance", 137, SFINAE_Suppress, false, false, 24)
+DIAG(warn_operator_new_returns_null, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 should not return a null pointer unless it is declared 'throw()'%select{| or 'noexcept'}1", 434, SFINAE_Suppress, false, false, 2)
+DIAG(warn_os_log_format_narg, CLASS_ERROR, (unsigned)diag::Severity::Error, "os_log() '%%n' format specifier is not allowed", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(warn_out_of_range_compare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "result of comparison of %select{constant %0|true|false}1 with %select{expression of type %2|boolean expression}3 is always %4", 653, SFINAE_Suppress, false, false, 2)
+DIAG(warn_overaligned_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "type %0 requires %1 bytes of alignment and the default allocator only guarantees %2 bytes", 508, SFINAE_Suppress, false, false, 2)
+DIAG(warn_overloaded_shift_in_comparison, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overloaded operator %select{>>|<<}0 has higher precedence than comparison operator", 511, SFINAE_Suppress, false, false, 2)
+DIAG(warn_overloaded_virtual, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%q0 hides overloaded virtual %select{function|functions}1", 512, SFINAE_Suppress, false, false, 2)
+DIAG(warn_overriding_method_missing_noescape, CLASS_WARNING, (unsigned)diag::Severity::Warning, "parameter of overriding method should be annotated with __attribute__((noescape))", 411, SFINAE_Suppress, false, false, 2)
+DIAG(warn_param_return_typestate_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "parameter '%0' not in expected state when the function returns: expected '%1', observed '%2'", 136, SFINAE_Suppress, false, false, 2)
+DIAG(warn_param_typestate_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "argument not in expected state; expected '%0', observed '%1'", 136, SFINAE_Suppress, false, false, 2)
+DIAG(warn_parameter_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is a large (%1 bytes) pass-by-value argument; pass it by reference instead ?", 353, SFINAE_Suppress, false, false, 2)
+DIAG(warn_parens_disambiguated_as_function_declaration, CLASS_WARNING, (unsigned)diag::Severity::Warning, "parentheses were disambiguated as a function declaration", 748, SFINAE_Suppress, false, false, 2)
+DIAG(warn_parens_disambiguated_as_variable_declaration, CLASS_WARNING, (unsigned)diag::Severity::Warning, "parentheses were disambiguated as redundant parentheses around declaration of variable named %0", 748, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pass_class_arg_to_vararg, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "passing object of class type %0 through variadic %select{function|block|method|constructor}1%select{|; did you mean to call '%3'?}2", 124, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pessimizing_move_on_initialization, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "moving a temporary object prevents copy elision", 529, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pessimizing_move_on_return, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "moving a local object in a return statement prevents copy elision", 529, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pointer_abs, CLASS_WARNING, (unsigned)diag::Severity::Warning, "taking the absolute value of %select{pointer|function|array}0 type %1 is suspicious", 8, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pointer_arith_null_ptr, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "performing pointer arithmetic on a null pointer has undefined behavior%select{| if the offset is nonzero}0", 456, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pointer_indirection_from_incompatible_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "dereference of type %1 that was reinterpret_cast from type %0 has undefined behavior", 683, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pragma_attribute_unused, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unused attribute %0 in '#pragma clang attribute push' region", 537, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pragma_options_align_reset_failed, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#pragma options align=reset failed: %0", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pragma_pack_invalid_alignment, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected #pragma pack parameter to be '1', '2', '4', '8', or '16'", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pragma_pack_modified_after_include, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the current #pragma pack alignment value is modified in the included file", 539, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pragma_pack_no_pop_eof, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unterminated '#pragma pack (push, ...)' at end of file", 539, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pragma_pack_non_default_at_include, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-default #pragma pack value changes the alignment of struct or union members in the included file", 540, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pragma_pack_pop_identifier_and_alignment, CLASS_WARNING, (unsigned)diag::Severity::Warning, "specifying both a name and alignment to 'pop' is undefined", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pragma_pack_show, CLASS_WARNING, (unsigned)diag::Severity::Warning, "value of #pragma pack(show) == %0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pragma_pop_failed, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#pragma %0(pop, ...) failed: %1", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pragma_unused_expected_var_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "only variables can be arguments to '#pragma unused'", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pragma_unused_undeclared_var, CLASS_WARNING, (unsigned)diag::Severity::Warning, "undeclared variable %0 used as an argument for '#pragma unused'", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_precedence_bitwise_rel, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 has lower precedence than %1; %1 will be evaluated first", 519, SFINAE_Suppress, false, false, 2)
+DIAG(warn_precedence_conditional, CLASS_WARNING, (unsigned)diag::Severity::Warning, "operator '?:' has lower precedence than '%0'; '%0' will be evaluated first", 519, SFINAE_Suppress, false, false, 2)
+DIAG(warn_printf_ObjCflags_without_ObjCConversion, CLASS_WARNING, (unsigned)diag::Severity::Warning, "object format flags cannot be used with '%0' conversion specifier", 234, SFINAE_Suppress, false, false, 28)
+DIAG(warn_printf_asterisk_missing_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%select{*|.*}0' specified field %select{width|precision}0 is missing a matching 'int' argument", 234, SFINAE_Suppress, false, false, 28)
+DIAG(warn_printf_asterisk_wrong_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "field %select{width|precision}0 should have type %1, but argument has type %2", 234, SFINAE_Suppress, false, false, 28)
+DIAG(warn_printf_data_arg_not_used, CLASS_WARNING, (unsigned)diag::Severity::Warning, "data argument not used by format string", 235, SFINAE_Suppress, false, false, 28)
+DIAG(warn_printf_empty_objc_flag, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing object format flag", 234, SFINAE_Suppress, false, false, 28)
+DIAG(warn_printf_format_string_contains_null_char, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format string contains '\\0' within the string body", 234, SFINAE_Suppress, false, false, 28)
+DIAG(warn_printf_format_string_not_null_terminated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format string is not null-terminated", 234, SFINAE_Suppress, false, false, 28)
+DIAG(warn_printf_ignored_flag, CLASS_WARNING, (unsigned)diag::Severity::Warning, "flag '%0' is ignored when flag '%1' is present", 234, SFINAE_Suppress, false, false, 28)
+DIAG(warn_printf_incomplete_specifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "incomplete format specifier", 234, SFINAE_Suppress, false, false, 28)
+DIAG(warn_printf_insufficient_data_args, CLASS_WARNING, (unsigned)diag::Severity::Warning, "more '%%' conversions than data arguments", 234, SFINAE_Suppress, false, false, 28)
+DIAG(warn_printf_invalid_objc_flag, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' is not a valid object format flag", 234, SFINAE_Suppress, false, false, 28)
+DIAG(warn_printf_nonsensical_flag, CLASS_WARNING, (unsigned)diag::Severity::Warning, "flag '%0' results in undefined behavior with '%1' conversion specifier", 234, SFINAE_Suppress, false, false, 28)
+DIAG(warn_printf_nonsensical_optional_amount, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{field width|precision}0 used with '%1' conversion specifier, resulting in undefined behavior", 234, SFINAE_Suppress, false, false, 28)
+DIAG(warn_printf_positional_arg_exceeds_data_args, CLASS_WARNING, (unsigned)diag::Severity::Warning, "data argument position '%0' exceeds the number of data arguments (%1)", 234, SFINAE_Suppress, false, false, 28)
+DIAG(warn_private_extern, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use of __private_extern__ on a declaration may not produce external symbol private to the linkage unit and is deprecated", 544, SFINAE_Suppress, false, false, 2)
+DIAG(warn_property_access_suggest, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property %0 not found on object of type %1; did you mean to access property %2?", 550, SFINAE_Suppress, false, false, 2)
+DIAG(warn_property_attr_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property attribute in class extension does not match the primary class", 551, SFINAE_Suppress, false, false, 2)
+DIAG(warn_property_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%1' attribute on property %0 does not match the property inherited from %2", 551, SFINAE_Suppress, false, false, 2)
+DIAG(warn_property_getter_owning_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property declared as returning non-retained objects; getter returning retained objects", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_property_implicitly_mismatched, CLASS_WARNING, (unsigned)diag::Severity::Warning, "primary property declaration is implicitly strong while redeclaration in class extension is weak", 483, SFINAE_Suppress, false, false, 2)
+DIAG(warn_property_method_deprecated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property access is using %0 method which is deprecated", 166, SFINAE_Suppress, false, false, 27)
+DIAG(warn_property_redecl_getter_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "getter name mismatch between property redeclaration (%1) and its original declaration (%0)", 551, SFINAE_Suppress, false, false, 2)
+DIAG(warn_property_types_are_incompatible, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property type %0 is incompatible with type %1 inherited from %2", 312, SFINAE_Suppress, false, false, 2)
+DIAG(warn_protocol_property_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property %select{of type %1|with attribute '%1'|without attribute '%1'|with getter %1|with setter %1}0 was selected for synthesis", 553, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pt_guarded_pass_by_reference, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "passing the value that %1 points to by reference requires holding %0 %select{'%2'|'%2' exclusively}3", 667, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ptr_arith_exceeds_bounds, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "the pointer incremented by %0 refers past the end of the array (that contains %1 element%s2)", 33, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ptr_arith_precedes_bounds, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "the pointer decremented by %0 refers before the beginning of the array", 33, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ptr_independentclass_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'objc_independent_class' attribute may be put on Objective-C object pointer type only; attribute is ignored", 5, SFINAE_Suppress, false, false, 2)
+DIAG(warn_qual_return_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%0' type qualifier%s1 on return type %plural{1:has|:have}1 no effect", 287, SFINAE_Suppress, false, false, 2)
+DIAG(warn_readonly_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute 'readonly' of property %0 restricts attribute 'readwrite' of property inherited from %1", 551, SFINAE_Suppress, false, false, 2)
+DIAG(warn_receiver_forward_class, CLASS_WARNING, (unsigned)diag::Severity::Warning, "receiver %0 is a forward class and corresponding @interface may not exist", 559, SFINAE_Suppress, false, false, 2)
+DIAG(warn_receiver_forward_instance, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "receiver type %0 for instance message is a forward declaration", 559, SFINAE_Suppress, false, false, 5)
+DIAG(warn_redecl_library_builtin, CLASS_WARNING, (unsigned)diag::Severity::Warning, "incompatible redeclaration of library function %0", 308, SFINAE_Suppress, false, false, 2)
+DIAG(warn_redeclaration_without_attribute_prev_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%q0 redeclared without %1 attribute: previous %1 ignored", 318, SFINAE_Suppress, false, false, 2)
+DIAG(warn_redeclaration_without_import_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%q0 redeclared without 'dllimport' attribute: 'dllexport' attribute added", 318, SFINAE_Suppress, false, false, 2)
+DIAG(warn_redefine_extname_not_applied, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#pragma redefine_extname is applicable to external C declarations only; not applied to %select{function|variable}0 %1", 542, SFINAE_Suppress, false, false, 2)
+DIAG(warn_redefinition_in_param_list, CLASS_WARNING, (unsigned)diag::Severity::Warning, "redefinition of %0 will not be visible outside of this function", 749, SFINAE_Suppress, false, false, 2)
+DIAG(warn_redundant_loop_iteration, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable %0 is %select{decremented|incremented}1 both in the loop header and in the loop body", 233, SFINAE_Suppress, false, false, 2)
+DIAG(warn_redundant_move_on_return, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "redundant move in return statement", 562, SFINAE_Suppress, false, false, 2)
+DIAG(warn_redundant_parens_around_declarator, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "redundant parentheses surrounding declarator", 563, SFINAE_Suppress, false, false, 2)
+DIAG(warn_reference_field_is_uninit, CLASS_WARNING, (unsigned)diag::Severity::Warning, "reference %0 is not yet bound to a value when used here", 692, SFINAE_Suppress, false, false, 2)
+DIAG(warn_register_objc_catch_parm, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'register' storage specifier on @catch parameter will be ignored", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_reinterpret_different_from_static, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'reinterpret_cast' %select{from|to}3 class %0 %select{to|from}3 its %select{virtual base|base at non-zero offset}2 %1 behaves differently from 'static_cast'", 565, SFINAE_Suppress, false, false, 2)
+DIAG(warn_related_result_type_compatibility_class, CLASS_WARNING, (unsigned)diag::Severity::Warning, "method is expected to return an instance of its class type %diff{$, but is declared to return $|, but is declared to return different type}0,1", 0, SFINAE_Suppress, false, false, 17)
+DIAG(warn_related_result_type_compatibility_protocol, CLASS_WARNING, (unsigned)diag::Severity::Warning, "protocol method is expected to return an instance of the implementing class, but is declared to return %0", 0, SFINAE_Suppress, false, false, 17)
+DIAG(warn_remainder_division_by_zero, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{remainder|division}0 by zero is undefined", 182, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ret_addr_label, CLASS_WARNING, (unsigned)diag::Severity::Warning, "returning address of label, which is local", 572, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ret_local_temp_addr_ref, CLASS_WARNING, (unsigned)diag::Severity::Warning, "returning %select{address of|reference to}0 local temporary object", 572, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ret_stack_addr_ref, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{address of|reference to}0 stack memory associated with %select{local variable|parameter}2 %1 returned", 572, SFINAE_Suppress, false, false, 2)
+DIAG(warn_return_missing_expr, CLASS_WARNING, (unsigned)diag::Severity::Error, "non-void %select{function|method}1 %0 should return a value", 575, SFINAE_Suppress, false, false, 2)
+DIAG(warn_return_std_move, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "local variable %0 will be copied despite being %select{returned|thrown}1 by name", 573, SFINAE_Suppress, false, false, 2)
+DIAG(warn_return_std_move_in_cxx11, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "prior to the resolution of a defect report against ISO C++11, local variable %0 would have been copied despite being returned by name, due to its not matching the function return type%diff{ ($ vs $)|}1,2", 574, SFINAE_Suppress, false, false, 2)
+DIAG(warn_return_typestate_for_unconsumable_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "return state set for an unconsumable type '%0'", 136, SFINAE_Suppress, false, false, 2)
+DIAG(warn_return_typestate_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "return value not in expected state; expected '%0', observed '%1'", 136, SFINAE_Suppress, false, false, 2)
+DIAG(warn_return_value_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "return value of %0 is a large (%1 bytes) pass-by-value object; pass it by reference instead ?", 353, SFINAE_Suppress, false, false, 2)
+DIAG(warn_return_value_udt, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 has C-linkage specified, but returns user-defined type %1 which is incompatible with C", 576, SFINAE_Suppress, false, false, 2)
+DIAG(warn_return_value_udt_incomplete, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 has C-linkage specified, but returns incomplete type %1 which could be incompatible with C", 576, SFINAE_Suppress, false, false, 2)
+DIAG(warn_riscv_repeated_interrupt_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "repeated RISC-V 'interrupt' attribute", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_root_inst_method_not_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "instance method %0 is being used on 'Class' which is not in the root class", 475, SFINAE_Suppress, false, false, 2)
+DIAG(warn_sampler_initializer_invalid_bits, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "sampler initializer has invalid %0 bits", 614, SFINAE_Suppress, false, false, 2)
+DIAG(warn_scanf_nonzero_width, CLASS_WARNING, (unsigned)diag::Severity::Warning, "zero field width in scanf format string is unused", 234, SFINAE_Suppress, false, false, 28)
+DIAG(warn_scanf_scanlist_incomplete, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no closing ']' for '%%[' in scanf format string", 234, SFINAE_Suppress, false, false, 28)
+DIAG(warn_second_arg_of_va_start_not_last_named_param, CLASS_WARNING, (unsigned)diag::Severity::Warning, "second argument to 'va_start' is not the last named parameter", 743, SFINAE_Suppress, false, false, 2)
+DIAG(warn_second_parameter_to_va_arg_never_compatible, CLASS_WARNING, (unsigned)diag::Severity::Warning, "second argument to 'va_arg' is of promotable type %0; this va_arg has undefined behavior because arguments will be promoted to %1", 743, SFINAE_Suppress, false, false, 2)
+DIAG(warn_second_parameter_to_va_arg_not_pod, CLASS_WARNING, (unsigned)diag::Severity::Error, "second argument to 'va_arg' is of non-POD type %0", 442, SFINAE_Suppress, false, false, 2)
+DIAG(warn_second_parameter_to_va_arg_ownership_qualified, CLASS_WARNING, (unsigned)diag::Severity::Error, "second argument to 'va_arg' is of ARC ownership-qualified type %0", 442, SFINAE_Suppress, false, false, 2)
+DIAG(warn_self_assignment_builtin, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicitly assigning value of variable of type %0 to itself", 581, SFINAE_Suppress, false, false, 2)
+DIAG(warn_self_assignment_overloaded, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicitly assigning value of variable of type %0 to itself", 583, SFINAE_Suppress, false, false, 2)
+DIAG(warn_self_move, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicitly moving variable of type %0 to itself", 584, SFINAE_Suppress, false, false, 2)
+DIAG(warn_setter_getter_impl_required, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property %0 requires method %1 to be defined - use @synthesize, @dynamic or provide a method implementation in this class implementation", 482, SFINAE_Suppress, false, false, 2)
+DIAG(warn_setter_getter_impl_required_in_category, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property %0 requires method %1 to be defined - use @dynamic or provide a method implementation in this category", 482, SFINAE_Suppress, false, false, 2)
+DIAG(warn_shadow_field, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{parameter|non-static data member}3 %0 %select{|of %1 }3shadows member inherited from type %2", 591, SFINAE_Suppress, false, false, 0)
+DIAG(warn_shift_gt_typewidth, CLASS_WARNING, (unsigned)diag::Severity::Warning, "shift count >= width of type", 597, SFINAE_Suppress, false, false, 2)
+DIAG(warn_shift_lhs_negative, CLASS_WARNING, (unsigned)diag::Severity::Warning, "shifting a negative signed value is undefined", 598, SFINAE_Suppress, false, false, 2)
+DIAG(warn_shift_negative, CLASS_WARNING, (unsigned)diag::Severity::Warning, "shift count is negative", 596, SFINAE_Suppress, false, false, 2)
+DIAG(warn_shift_result_gt_typewidth, CLASS_WARNING, (unsigned)diag::Severity::Warning, "signed shift result (%0) requires %1 bits to represent, but %2 only has %3 bits", 600, SFINAE_Suppress, false, false, 2)
+DIAG(warn_shift_result_sets_sign_bit, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "signed shift result (%0) sets the sign bit of the shift expression's type (%1) and becomes negative", 601, SFINAE_Suppress, false, false, 2)
+DIAG(warn_side_effects_typeid, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expression with side effects will be evaluated despite being used as an operand to 'typeid'", 536, SFINAE_Suppress, false, false, 32)
+DIAG(warn_side_effects_unevaluated_context, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expression with side effects has no effect in an unevaluated context", 685, SFINAE_Suppress, false, false, 32)
+DIAG(warn_signed_bitfield_enum_conversion, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "signed bit-field %0 needs an extra bit to represent the largest positive enumerators of %1", 60, SFINAE_Suppress, false, false, 24)
+DIAG(warn_sizeof_array_decay, CLASS_WARNING, (unsigned)diag::Severity::Warning, "sizeof on pointer operation will return size of %0 instead of %1", 608, SFINAE_Suppress, false, false, 2)
+DIAG(warn_sizeof_array_param, CLASS_WARNING, (unsigned)diag::Severity::Warning, "sizeof on array function parameter will return size of %0 instead of %1", 607, SFINAE_Suppress, false, false, 2)
+DIAG(warn_sizeof_pointer_expr_memaccess, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' call operates on objects of type %1 while the size is based on a different type %2", 610, SFINAE_Suppress, false, false, 2)
+DIAG(warn_sizeof_pointer_expr_memaccess_note, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "did you mean to %select{dereference the argument to 'sizeof' (and multiply it by the number of elements)|remove the addressof in the argument to 'sizeof' (and multiply it by the number of elements)|provide an explicit length}0?", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_sizeof_pointer_type_memaccess, CLASS_WARNING, (unsigned)diag::Severity::Warning, "argument to 'sizeof' in %0 call is the same pointer type %1 as the %select{destination|source}2; expected %3 or an explicit length", 610, SFINAE_Suppress, false, false, 2)
+DIAG(warn_sometimes_uninit_var, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable %0 is %select{used|captured}1 uninitialized whenever %select{'%3' condition is %select{true|false}4|'%3' loop %select{is entered|exits because its condition is false}4|'%3' loop %select{condition is true|exits because its condition is false}4|switch %3 is taken|its declaration is reached|%3 is called}2", 612, SFINAE_Suppress, false, false, 2)
+DIAG(warn_standalone_specifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' ignored on this declaration", 405, SFINAE_Suppress, false, false, 2)
+DIAG(warn_static_array_too_small, CLASS_WARNING, (unsigned)diag::Severity::Warning, "array argument is too small; %select{contains %0 elements|is of size %0}2, callee requires at least %1", 32, SFINAE_Suppress, false, false, 2)
+DIAG(warn_static_local_in_extern_inline, CLASS_WARNING, (unsigned)diag::Severity::Warning, "non-constant static local variable in inline function may be different in different files", 619, SFINAE_Suppress, false, false, 2)
+DIAG(warn_static_main, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'main' should not be declared static", 363, SFINAE_Suppress, false, false, 2)
+DIAG(warn_static_self_reference_in_init, CLASS_WARNING, (unsigned)diag::Severity::Warning, "static variable %0 is suspiciously used within its own initialization", 620, SFINAE_Suppress, false, false, 2)
+DIAG(warn_strict_multiple_method_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "multiple methods named %0 found", 634, SFINAE_Suppress, false, false, 2)
+DIAG(warn_strict_prototypes, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "this %select{function declaration is not|block declaration is not|old-style function definition is not preceded by}0 a prototype", 633, SFINAE_Suppress, false, false, 2)
+DIAG(warn_string_plus_char, CLASS_WARNING, (unsigned)diag::Severity::Warning, "adding %0 to a string pointer does not append to the string", 637, SFINAE_Suppress, false, false, 2)
+DIAG(warn_string_plus_int, CLASS_WARNING, (unsigned)diag::Severity::Warning, "adding %0 to a string does not append to the string", 638, SFINAE_Suppress, false, false, 2)
+DIAG(warn_stringcompare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "result of comparison against %select{a string literal|@encode}0 is unspecified (use strncmp instead)", 635, SFINAE_Suppress, false, false, 2)
+DIAG(warn_strlcpycat_wrong_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "size argument in %0 call appears to be size of the source; expected the size of the destination", 639, SFINAE_Suppress, false, false, 2)
+DIAG(warn_strncat_large_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the value of the size argument in 'strncat' is too large, might lead to a buffer overflow", 640, SFINAE_Suppress, false, false, 2)
+DIAG(warn_strncat_src_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "size argument in 'strncat' call appears to be size of the source", 640, SFINAE_Suppress, false, false, 2)
+DIAG(warn_strncat_wrong_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the value of the size argument to 'strncat' is wrong", 640, SFINAE_Suppress, false, false, 2)
+DIAG(warn_struct_class_previous_tag_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%2 defined as %select{a struct|an interface|a class}0%select{| template}1 here but previously declared as %select{a struct|an interface|a class}3%select{| template}1; this is valid, but may result in linker errors under the Microsoft C++ ABI", 403, SFINAE_Suppress, false, false, 2)
+DIAG(warn_struct_class_tag_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{struct|interface|class}0%select{| template}1 %2 was previously declared as a %select{struct|interface|class}3%select{| template}1; this is valid, but may result in linker errors under the Microsoft C++ ABI", 403, SFINAE_Suppress, false, false, 2)
+DIAG(warn_sub_ptr_zero_size_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "subtraction of pointers to type %0 of zero size has undefined behavior", 530, SFINAE_Suppress, false, false, 2)
+DIAG(warn_subobject_initializer_overrides, CLASS_WARNING, (unsigned)diag::Severity::Warning, "subobject initialization overrides initialization of other fields within its enclosing subobject", 324, SFINAE_Suppress, false, false, 2)
+DIAG(warn_subscript_is_char, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "array subscript is of type 'char'", 122, SFINAE_Suppress, false, false, 2)
+DIAG(warn_suggest_noreturn_block, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "block could be declared with attribute 'noreturn'", 412, SFINAE_Suppress, false, false, 2)
+DIAG(warn_suggest_noreturn_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{function|method}0 %1 could be declared with attribute 'noreturn'", 412, SFINAE_Suppress, false, false, 2)
+DIAG(warn_superclass_variable_sized_type_not_at_end, CLASS_WARNING, (unsigned)diag::Severity::Warning, "field %0 can overwrite instance variable %1 with variable sized type %2 in superclass %3", 468, SFINAE_Suppress, false, false, 2)
+DIAG(warn_suspicious_bzero_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'size' argument to bzero is '0'", 642, SFINAE_Suppress, false, false, 2)
+DIAG(warn_suspicious_sizeof_memset, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{'size' argument to memset is '0'|setting buffer to a 'sizeof' expression}0; did you mean to transpose the last two arguments?", 368, SFINAE_Suppress, false, false, 2)
+DIAG(warn_sync_fetch_and_nand_semantics_change, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the semantics of this intrinsic changed with GCC version 4.4 - the newer semantics are provided here", 648, SFINAE_Suppress, false, false, 2)
+DIAG(warn_taking_address_of_packed_member, CLASS_WARNING, (unsigned)diag::Severity::Warning, "taking address of packed member %0 of class or structure %q1 may result in an unaligned pointer value", 12, SFINAE_Suppress, false, false, 2)
+DIAG(warn_tautological_bool_compare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "result of comparison of %select{constant %0|true|false}1 with %select{expression of type %2|boolean expression}3 is always %4", 651, SFINAE_Suppress, false, false, 2)
+DIAG(warn_tautological_constant_compare, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "result of comparison %select{%3|%1}0 %2 %select{%1|%3}0 is always %4", 656, SFINAE_Suppress, false, false, 2)
+DIAG(warn_tautological_overlap_comparison, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "overlapping comparisons always evaluate to %select{false|true}0", 654, SFINAE_Suppress, false, false, 2)
+DIAG(warn_template_arg_negative, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-type template argument with value '%0' converted to '%1' for unsigned template parameter of type %2", 137, SFINAE_Suppress, false, false, 24)
+DIAG(warn_template_arg_too_large, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-type template argument value '%0' truncated to '%1' for template parameter of type %2", 137, SFINAE_Suppress, false, false, 24)
+DIAG(warn_template_export_unsupported, CLASS_WARNING, (unsigned)diag::Severity::Warning, "exported templates are unsupported", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_template_qualified_friend_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "dependent nested name specifier '%0' for friend template declaration is not supported; ignoring this friend declaration", 712, SFINAE_Suppress, false, false, 2)
+DIAG(warn_template_qualified_friend_unsupported, CLASS_WARNING, (unsigned)diag::Severity::Warning, "dependent nested name specifier '%0' for friend class declaration is not supported; turning off access control for %1", 712, SFINAE_Suppress, false, false, 2)
+DIAG(warn_template_spec_extra_headers, CLASS_WARNING, (unsigned)diag::Severity::Warning, "extraneous template parameter list in template specialization", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_tentative_incomplete_array, CLASS_WARNING, (unsigned)diag::Severity::Warning, "tentative array definition assumed to have one element", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_this_bool_conversion, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'this' pointer cannot be null in well-defined C++ code; pointer may be assumed to always convert to true", 678, SFINAE_Suppress, false, false, 24)
+DIAG(warn_this_null_compare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'this' pointer cannot be null in well-defined C++ code; comparison may be assumed to always evaluate to %select{true|false}0", 657, SFINAE_Suppress, false, false, 2)
+DIAG(warn_thread_attribute_argument_not_lockable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 attribute requires arguments whose type is annotated with 'capability' attribute; type here is %1", 663, SFINAE_Suppress, false, false, 2)
+DIAG(warn_thread_attribute_decl_not_lockable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 attribute can only be applied in a context annotated with 'capability(\"mutex\")' attribute", 663, SFINAE_Suppress, false, false, 2)
+DIAG(warn_thread_attribute_decl_not_pointer, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 only applies to pointer types; type here is %1", 663, SFINAE_Suppress, false, false, 2)
+DIAG(warn_thread_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "ignoring %0 attribute because its argument is invalid", 663, SFINAE_Suppress, false, false, 2)
+DIAG(warn_thread_attribute_not_on_capability_member, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 attribute without capability arguments refers to 'this', but %1 isn't annotated with 'capability' or 'scoped_lockable' attribute", 663, SFINAE_Suppress, false, false, 2)
+DIAG(warn_thread_attribute_not_on_non_static_member, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 attribute without capability arguments can only be applied to non-static methods of a class", 663, SFINAE_Suppress, false, false, 2)
+DIAG(warn_thread_safety_beta, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "Thread safety beta warning.", 664, SFINAE_Suppress, false, false, 2)
+DIAG(warn_thread_safety_verbose, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "Thread safety verbose warning.", 668, SFINAE_Suppress, false, false, 2)
+DIAG(warn_throw_in_noexcept_func, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 has a non-throwing exception specification but can still throw", 212, SFINAE_Suppress, false, false, 2)
+DIAG(warn_transparent_union_attribute_field_size_align, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{alignment|size}0 of field %1 (%2 bits) does not match the %select{alignment|size}0 of the first field in transparent union; transparent_union attribute ignored", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_transparent_union_attribute_floating, CLASS_WARNING, (unsigned)diag::Severity::Warning, "first field of a transparent union cannot have %select{floating point|vector}0 type %1; transparent_union attribute ignored", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_transparent_union_attribute_not_definition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "transparent_union attribute can only be applied to a union definition; attribute ignored", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_transparent_union_attribute_zero_fields, CLASS_WARNING, (unsigned)diag::Severity::Warning, "transparent union definition must contain at least one field; transparent_union attribute ignored", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_type_attribute_wrong_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' only applies to %select{function|pointer|Objective-C object or block pointer}1 types; type here is %2", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_type_safety_null_pointer_required, CLASS_WARNING, (unsigned)diag::Severity::Warning, "specified %0 type tag requires a null pointer", 671, SFINAE_Suppress, false, false, 2)
+DIAG(warn_type_safety_type_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "argument type %0 doesn't match specified %1 type tag %select{that requires %3|}2", 671, SFINAE_Suppress, false, false, 2)
+DIAG(warn_type_tag_for_datatype_wrong_kind, CLASS_WARNING, (unsigned)diag::Severity::Warning, "this type tag was not designed to be used with this function", 671, SFINAE_Suppress, false, false, 2)
+DIAG(warn_typecheck_function_qualifiers_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' qualifier on function type %1 has no effect", 287, SFINAE_Suppress, false, false, 2)
+DIAG(warn_typecheck_function_qualifiers_unspecified, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' qualifier on function type %1 has unspecified behavior", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_typecheck_reference_qualifiers, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' qualifier on reference type %1 has no effect", 287, SFINAE_Suppress, false, false, 2)
+DIAG(warn_typecheck_vector_element_sizes_not_equal, CLASS_WARNING, (unsigned)diag::Severity::Error, "vector operands do not have the same elements sizes (%0 and %1)", 745, SFINAE_Suppress, false, false, 2)
+DIAG(warn_typecheck_zero_static_array_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'static' has no effect on zero-length arrays", 32, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unannotated_fallthrough, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unannotated fall-through between switch labels", 292, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unannotated_fallthrough_per_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unannotated fall-through between switch labels in partly-annotated function", 293, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unavailable_def, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implementing unavailable method", 168, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unavailable_fwdclass_message, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 may be unavailable because the receiver type is unknown", 675, SFINAE_Suppress, false, false, 2)
+DIAG(warn_undeclared_selector, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "undeclared selector %0", 676, SFINAE_Suppress, false, false, 2)
+DIAG(warn_undeclared_selector_with_typo, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "undeclared selector %0; did you mean %1?", 676, SFINAE_Suppress, false, false, 2)
+DIAG(warn_undef_interface, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cannot find interface declaration for %0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_undef_interface_suggest, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cannot find interface declaration for %0; did you mean %1?", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_undef_method_impl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "method definition for %0 not found", 315, SFINAE_Suppress, false, false, 2)
+DIAG(warn_undef_protocolref, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cannot find protocol definition for %0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_undefined_inline, CLASS_WARNING, (unsigned)diag::Severity::Warning, "inline function %q0 is not defined", 680, SFINAE_Suppress, false, false, 2)
+DIAG(warn_undefined_internal, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{function|variable}0 %q1 has internal linkage but is not defined", 681, SFINAE_Suppress, false, false, 2)
+DIAG(warn_undefined_reinterpret_cast, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "reinterpret_cast from %0 to %1 has undefined behavior", 683, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unguarded_availability, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 is only available on %1 %2 or newer", 686, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unguarded_availability_new, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is only available on %1 %2 or newer", 687, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unhandled_ms_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "__declspec attribute %0 is not supported", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unimplemented_protocol_method, CLASS_WARNING, (unsigned)diag::Severity::Warning, "method %0 in protocol %1 not implemented", 552, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unimplemented_selector, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "no method with selector %0 is implemented in this translation unit", 579, SFINAE_Suppress, false, false, 2)
+DIAG(warn_uninit_byref_blockvar_captured_by_block, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "block pointer variable %0 is uninitialized when captured by block", 692, SFINAE_Suppress, false, false, 2)
+DIAG(warn_uninit_self_reference_in_init, CLASS_WARNING, (unsigned)diag::Severity::Warning, "variable %0 is uninitialized when used within its own initialization", 692, SFINAE_Suppress, false, false, 2)
+DIAG(warn_uninit_self_reference_in_reference_init, CLASS_WARNING, (unsigned)diag::Severity::Warning, "reference %0 is not yet bound to a value when used within its own initialization", 692, SFINAE_Suppress, false, false, 2)
+DIAG(warn_uninit_var, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable %0 is uninitialized when %select{used here|captured by block}1", 692, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unknown_sanitizer_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown sanitizer '%0' ignored", 697, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unlock_but_no_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "releasing %0 '%1' that was not held", 662, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unlock_kind_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "releasing %0 '%1' using %select{shared|exclusive}2 access, expected %select{shared|exclusive}3 access", 662, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unneeded_internal_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{function|variable}0 %1 is not needed and will not be emitted", 700, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unneeded_member_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "member function %0 is not needed and will not be emitted", 701, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unneeded_static_internal_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'static' function %0 declared in header file should be declared 'static inline'", 700, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unreachable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "code will never be executed", 702, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unreachable_break, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'break' will never be executed", 704, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unreachable_default, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "default label in switch which covers all enumeration values", 141, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unreachable_loop_increment, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "loop will run at most once (loop increment never executed)", 705, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unreachable_return, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'return' will never be executed", 706, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unsequenced_mod_mod, CLASS_WARNING, (unsigned)diag::Severity::Warning, "multiple unsequenced modifications to %0", 707, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unsequenced_mod_use, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unsequenced modification and access to %0", 707, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unsigned_abs, CLASS_WARNING, (unsigned)diag::Severity::Warning, "taking the absolute value of unsigned type %0 has no effect", 8, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unsigned_always_true_comparison, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "result of comparison of %select{%3|unsigned expression}0 %2 %select{unsigned expression|%3}0 is always %4", 659, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unsigned_bitfield_assigned_signed_enum, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "assigning value of signed enum type %1 to unsigned bit-field %0; negative enumerators of enum %1 will be converted to positive values", 60, SFINAE_Suppress, false, false, 24)
+DIAG(warn_unsigned_enum_always_true_comparison, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "result of comparison of %select{%3|unsigned enum expression}0 %2 %select{unsigned enum expression|%3}0 is always %4", 658, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unsupported_lifetime_extension, CLASS_WARNING, (unsigned)diag::Severity::Warning, "sorry, lifetime extension of %select{temporary|backing array of initializer list}0 created by aggregate initialization using default member initializer is not supported; lifetime of %select{temporary|backing array}0 will end at the end of the full-expression", 149, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unsupported_target_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{unsupported|duplicate}0%select{| architecture}1 '%2' in the 'target' attribute string; 'target' attribute ignored", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unused_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring return value of function declared with %0 attribute", 737, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unused_comparison, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{equality|inequality|relational|three-way}0 comparison result unused", 721, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unused_const_variable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused variable %0", 722, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unused_container_subscript_expr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "container access result unused - container access should not be used for side effects", 737, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unused_exception_param, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused exception parameter %0", 723, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unused_expr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expression result unused", 737, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unused_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused function %0", 724, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unused_label, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused label %0", 726, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unused_lambda_capture, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "lambda capture %0 is not %select{used|required to be captured for this use}1", 727, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unused_local_typedef, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused %select{typedef|type alias}0 %1", 728, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unused_member_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused member function %0", 731, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unused_parameter, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused parameter %0", 732, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unused_private_field, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "private field %0 is not used", 733, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unused_property_backing_ivar, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "ivar %0 which backs the property is not referenced in this property's accessor", 734, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unused_property_expr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property access result unused - getters should not be used for side effects", 725, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unused_result, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring return value of function declared with %0 attribute", 735, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unused_template, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused %select{function|variable}0 template %1", 736, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unused_variable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused variable %0", 738, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unused_voidptr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expression result unused; should this cast be to 'void'?", 737, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unused_volatile, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expression result unused; assign into a variable to force a volatile load", 739, SFINAE_Suppress, false, false, 2)
+DIAG(warn_use_in_invalid_state, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "invalid invocation of method '%0' on object '%1' while it is in the '%2' state", 136, SFINAE_Suppress, false, false, 2)
+DIAG(warn_use_of_temp_in_invalid_state, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "invalid invocation of method '%0' on a temporary object while it is in the '%1' state", 136, SFINAE_Suppress, false, false, 2)
+DIAG(warn_used_but_marked_unused, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 was marked unused but was used", 740, SFINAE_Suppress, false, false, 2)
+DIAG(warn_user_literal_reserved, CLASS_WARNING, (unsigned)diag::Severity::Warning, "user-defined literal suffixes not starting with '_' are reserved%select{; no literal will invoke this operator|}0", 741, SFINAE_Suppress, false, false, 2)
+DIAG(warn_using_directive_in_header, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "using namespace directive in global context in header", 280, SFINAE_Suppress, false, false, 2)
+DIAG(warn_va_start_type_is_undefined, CLASS_WARNING, (unsigned)diag::Severity::Warning, "passing %select{an object that undergoes default argument promotion|an object of reference type|a parameter declared with the 'register' keyword}0 to 'va_start' has undefined behavior", 743, SFINAE_Suppress, false, false, 2)
+DIAG(warn_var_deref_requires_any_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{reading|writing}1 the value pointed to by %0 requires holding %select{any mutex|any mutex exclusively}1", 662, SFINAE_Suppress, false, false, 2)
+DIAG(warn_var_deref_requires_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{reading|writing}3 the value pointed to by %1 requires holding %0 %select{'%2'|'%2' exclusively}3", 662, SFINAE_Suppress, false, false, 2)
+DIAG(warn_var_deref_requires_lock_precise, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{reading|writing}3 the value pointed to by %1 requires holding %0 %select{'%2'|'%2' exclusively}3", 666, SFINAE_Suppress, false, false, 2)
+DIAG(warn_var_template_missing, CLASS_WARNING, (unsigned)diag::Severity::Warning, "instantiation of variable %q0 required here, but no definition is available", 684, SFINAE_Suppress, false, false, 2)
+DIAG(warn_variable_requires_any_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{reading|writing}1 variable %0 requires holding %select{any mutex|any mutex exclusively}1", 662, SFINAE_Suppress, false, false, 2)
+DIAG(warn_variable_requires_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{reading|writing}3 variable %1 requires holding %0 %select{'%2'|'%2' exclusively}3", 662, SFINAE_Suppress, false, false, 2)
+DIAG(warn_variable_requires_lock_precise, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{reading|writing}3 variable %1 requires holding %0 %select{'%2'|'%2' exclusively}3", 666, SFINAE_Suppress, false, false, 2)
+DIAG(warn_variable_sized_ivar_visibility, CLASS_WARNING, (unsigned)diag::Severity::Warning, "field %0 with variable sized type %1 is not visible to subclasses and can conflict with their instance variables", 468, SFINAE_Suppress, false, false, 2)
+DIAG(warn_variables_not_in_loop_body, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable%select{s| %1|s %1 and %2|s %1, %2, and %3|s %1, %2, %3, and %4}0 used in loop condition not modified in loop body", 233, SFINAE_Suppress, false, false, 2)
+DIAG(warn_vbase_moved_multiple_times, CLASS_WARNING, (unsigned)diag::Severity::Warning, "defaulted move assignment operator of %0 will move assign virtual base class %1 multiple times", 430, SFINAE_Suppress, false, false, 2)
+DIAG(warn_vector_long_decl_spec_combination, CLASS_WARNING, (unsigned)diag::Severity::Warning, "Use of 'long' with '__vector' is deprecated", 164, SFINAE_Suppress, false, false, 27)
+DIAG(warn_vector_mode_deprecated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "specifying vector types with the 'mode' attribute is deprecated; use the 'vector_size' attribute instead", 165, SFINAE_Suppress, false, false, 27)
+DIAG(warn_vla_used, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable length array used", 750, SFINAE_Suppress, false, false, 2)
+DIAG(warn_weak_identifier_undeclared, CLASS_WARNING, (unsigned)diag::Severity::Warning, "weak identifier %0 never declared", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_weak_import, CLASS_WARNING, (unsigned)diag::Severity::Warning, "an already-declared variable is made a weak_import declaration %0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_weak_template_vtable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit template instantiation %0 will emit a vtable in every translation unit", 754, SFINAE_Suppress, false, false, 2)
+DIAG(warn_weak_vtable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 has no out-of-line virtual method definitions; its vtable will be emitted in every translation unit", 755, SFINAE_Suppress, false, false, 2)
+DIAG(warn_wrong_absolute_value_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "using %select{integer|floating point|complex}1 absolute value function %0 when argument is of %select{integer|floating point|complex}2 type", 8, SFINAE_Suppress, false, false, 2)
+DIAG(warn_zero_as_null_pointer_constant, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "zero as null pointer constant", 758, SFINAE_Suppress, false, false, 19)
+DIAG(warn_zero_size_struct_union_compat, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{|empty }0%select{struct|union}1 has size 0 in C, %select{size 1|non-zero size}2 in C++", 71, SFINAE_Suppress, false, false, 2)
+DIAG(warn_zero_size_struct_union_in_extern_c, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{|empty }0%select{struct|union}1 has size 0 in C, %select{size 1|non-zero size}2 in C++", 218, SFINAE_Suppress, false, false, 2)
diff --git a/clang-r353983/include/clang/Basic/DiagnosticSerialization.h b/clang-r353983/include/clang/Basic/DiagnosticSerialization.h
new file mode 100644
index 00000000..7e46a36a
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/DiagnosticSerialization.h
@@ -0,0 +1,28 @@
+//===--- DiagnosticSerialization.h - Serialization Diagnostics -*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_DIAGNOSTICSERIALIZATION_H
+#define LLVM_CLANG_BASIC_DIAGNOSTICSERIALIZATION_H
+
+#include "clang/Basic/Diagnostic.h"
+
+namespace clang {
+namespace diag {
+enum {
+#define DIAG(ENUM, FLAGS, DEFAULT_MAPPING, DESC, GROUP, SFINAE, NOWERROR, \
+ SHOWINSYSHEADER, CATEGORY) \
+ ENUM,
+#define SERIALIZATIONSTART
+#include "clang/Basic/DiagnosticSerializationKinds.inc"
+#undef DIAG
+ NUM_BUILTIN_SERIALIZATION_DIAGNOSTICS
+};
+} // end namespace diag
+} // end namespace clang
+
+#endif // LLVM_CLANG_BASIC_DIAGNOSTICSERIALIZATION_H
diff --git a/clang-r353983/include/clang/Basic/DiagnosticSerializationKinds.inc b/clang-r353983/include/clang/Basic/DiagnosticSerializationKinds.inc
new file mode 100644
index 00000000..cba4bccb
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/DiagnosticSerializationKinds.inc
@@ -0,0 +1,67 @@
+#ifdef SERIALIZATIONSTART
+__SERIALIZATIONSTART = DIAG_START_SERIALIZATION,
+#undef SERIALIZATIONSTART
+#endif
+
+DIAG(err_fe_ast_file_modified, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "file '%0' has been modified since the AST file '%1' was built", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_fe_module_file_modified, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "file '%0' has been modified since the module file '%1' was built", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_fe_not_a_pch_file, CLASS_ERROR, (unsigned)diag::Severity::Error, "input is not a PCH file: '%0'", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_fe_pch_file_modified, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "file '%0' has been modified since the precompiled header '%1' was built", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_fe_pch_file_overridden, CLASS_ERROR, (unsigned)diag::Severity::Error, "file '%0' from the precompiled header has been overridden", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_fe_pch_malformed, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "malformed or corrupted AST file: '%0'", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_fe_pch_malformed_block, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "malformed block record in PCH file: '%0'", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_fe_unable_to_read_pch_file, CLASS_ERROR, (unsigned)diag::Severity::Error, "unable to read PCH file %0: '%1'", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_imported_module_modmap_changed, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "module '%0' imported by AST file '%1' found in a different module map file (%2) than when the importing AST file was built (%3)", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_imported_module_not_found, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "module '%0' in AST file '%1' (imported by AST file '%2') is not defined in any loaded module map file; maybe you need to load '%3'?", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_imported_module_relocated, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "module '%0' was built in directory '%1' but now resides in directory '%2'", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_module_different_modmap, CLASS_ERROR, (unsigned)diag::Severity::Error, "module '%0' %select{uses|does not use}1 additional module map '%2'%select{| not}1 used when the module was built", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_module_file_conflict, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "module '%0' is defined in both '%1' and '%2'", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_module_file_invalid, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "file '%1' is not a valid precompiled %select{PCH|module|AST}0 file", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_module_file_not_found, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "%select{PCH|module|AST}0 file '%1' not found%select{|: %3}2", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_module_file_not_module, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "AST file '%0' was not built as a module", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_module_file_out_of_date, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "%select{PCH|module|AST}0 file '%1' is out of date and needs to be rebuilt%select{|: %3}2", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_module_no_size_mtime_for_header, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot emit module %0: %select{size|mtime}1 must be explicitly specified for missing header file \"%2\"", 0, SFINAE_SubstitutionFailure, false, true, 18)
+DIAG(err_module_odr_violation_definition_data, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 has different definitions in different modules; first difference is %select{definition in module '%2'|defined here}1 found %select{%4 base %plural{1:class|:classes}4|%4 virtual base %plural{1:class|:classes}4|%ordinal4 base class with type %5|%ordinal4 %select{non-virtual|virtual}5 base class %6|%ordinal4 base class %5 with %select{public|protected|private|no}6 access specifier}3", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_module_odr_violation_different_definitions, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 has different definitions in different modules; %select{definition in module '%2' is here|defined here}1", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_module_odr_violation_different_instantiations, CLASS_ERROR, (unsigned)diag::Severity::Error, "instantiation of %q0 is different in different modules", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_module_odr_violation_enum, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 has different definitions in different modules; %select{definition in module '%2'|defined here}1 first difference is %select{enum that is %select{not scoped|scoped}4|enum scoped with keyword %select{struct|class}4|enum %select{without|with}4 specified type|enum with specified type %4|enum with %4 element%s4|%ordinal4 element has name %5|%ordinal4 element %5 %select{has|does not have}6 an initilizer|%ordinal4 element %5 has an initializer|}3", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_module_odr_violation_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 has different definitions in different modules; %select{definition in module '%2'|defined here}1 first difference is %select{return type is %4|%ordinal4 parameter with name %5|%ordinal4 parameter with type %5%select{| decayed from %7}6|%ordinal4 parameter with%select{out|}5 a default argument|%ordinal4 parameter with a default argument|function body}3", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_module_odr_violation_mismatch_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 has different definitions in different modules; first difference is %select{definition in module '%2'|defined here}1 found %select{end of class|public access specifier|private access specifier|protected access specifier|static assert|field|method|type alias|typedef|data member|friend declaration|function template}3", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_module_odr_violation_mismatch_decl_diff, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 has different definitions in different modules; first difference is %select{definition in module '%2'|defined here}1 found %select{static assert with condition|static assert with message|static assert with %select{|no }4message|field %4|field %4 with type %5|%select{non-|}5bitfield %4|bitfield %4 with one width expression|%select{non-|}5mutable field %4|field %4 with %select{no|an}5 initalizer|field %4 with an initializer|%select{method %5|constructor|destructor}4|%select{method %5|constructor|destructor}4 is %select{not deleted|deleted}6|%select{method %5|constructor|destructor}4 is %select{not defaulted|defaulted}6|%select{method %5|constructor|destructor}4 is %select{|pure }6%select{not virtual|virtual}7|%select{method %5|constructor|destructor}4 is %select{not static|static}6|%select{method %5|constructor|destructor}4 is %select{not volatile|volatile}6|%select{method %5|constructor|destructor}4 is %select{not const|const}6|%select{method %5|constructor|destructor}4 is %select{not inline|inline}6|%select{method %5|constructor|destructor}4 that has %6 parameter%s6|%select{method %5|constructor|destructor}4 with %ordinal6 parameter of type %7%select{| decayed from %9}8|%select{method %5|constructor|destructor}4 with %ordinal6 parameter named %7|%select{method %5|constructor|destructor}4 with %ordinal6 parameter with%select{out|}7 a default argument|%select{method %5|constructor|destructor}4 with %ordinal6 parameter with a default argument|%select{method %5|constructor|destructor}4 with %select{no |}6template arguments|%select{method %5|constructor|destructor}4 with %6 template argument%s6|%select{method %5|constructor|destructor}4 with %6 for %ordinal7 template argument|%select{method %5|constructor|destructor}4 with %select{no body|body}6|%select{method %5|constructor|destructor}4 with body|%select{typedef|type alias}4 name %5|%select{typedef|type alias}4 %5 with underlying type %6|data member with name %4|data member %4 with type %5|data member %4 with%select{out|}5 an initializer|data member %4 with an initializer|data member %4 %select{is constexpr|is not constexpr}5|friend %select{class|function}4|friend %4|friend function %4|function template %4 with %5 template parameter%s5|function template %4 with %ordinal5 template parameter being a %select{type|non-type|template}6 template parameter|function template %4 with %ordinal5 template parameter %select{with no name|named %7}6|function template %4 with %ordinal5 template parameter with %select{no |}6default argument|function template %4 with %ordinal5 template parameter with default argument %6|function template %4 with %ordinal5 template parameter with one type|function template %4 with %ordinal5 template parameter %select{not |}6being a template parameter pack|}3", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_module_odr_violation_mismatch_decl_unknown, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 %select{with definition in module '%2'|defined here}1 has different definitions in different modules; first difference is this %select{||||static assert|field|method|type alias|typedef|data member|friend declaration|unexpected decl}3", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_module_odr_violation_missing_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 from module '%1' is not present in definition of %q2%select{ in module '%4'| provided earlier}3", 0, SFINAE_Report, false, true, 15)
+DIAG(err_module_odr_violation_template_parameter, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 has different definitions in different modules; first difference is %select{definition in module '%2'|defined here}1 found %select{unnamed template parameter|template parameter %4|template parameter with %select{no |}4default argument|template parameter with default argument}3", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_pch_diagopt_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 is currently enabled, but was not in the PCH file", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_pch_different_branch, CLASS_ERROR, (unsigned)diag::Severity::Error, "PCH file built from a different branch (%0) than the compiler (%1)", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_pch_langopt_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 was %select{disabled|enabled}1 in PCH file but is currently %select{disabled|enabled}2", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_pch_langopt_value_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 differs in PCH file vs. current file", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_pch_macro_def_conflict, CLASS_ERROR, (unsigned)diag::Severity::Error, "definition of macro '%0' differs between the precompiled header ('%1') and the command line ('%2')", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_pch_macro_def_undef, CLASS_ERROR, (unsigned)diag::Severity::Error, "macro '%0' was %select{defined|undef'd}1 in the precompiled header but %select{undef'd|defined}1 on the command line", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_pch_modulecache_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "PCH was compiled with module cache path '%0', but the path is currently '%1'", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_pch_pp_detailed_record, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{command line contains|precompiled header was built with}0 '-detailed-preprocessing-record' but %select{precompiled header was not built with it|it is not present on the command line}0", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_pch_targetopt_feature_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{AST file was|current translation unit is}0 compiled with the target feature '%1' but the %select{current translation unit is|AST file was}0 not", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_pch_targetopt_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "PCH file was compiled for the %0 '%1' but the current translation unit is being compiled for target '%2'", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_pch_undef, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{command line contains|precompiled header was built with}0 '-undef' but %select{precompiled header was not built with it|it is not present on the command line}0", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_pch_version_too_new, CLASS_ERROR, (unsigned)diag::Severity::Error, "PCH file uses a newer PCH format that cannot be read", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_pch_version_too_old, CLASS_ERROR, (unsigned)diag::Severity::Error, "PCH file uses an older PCH format that is no longer supported", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_pch_with_compiler_errors, CLASS_ERROR, (unsigned)diag::Severity::Error, "PCH file contains compiler errors", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(note_first_module_difference, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in first definition, possible difference is here", 0, SFINAE_Suppress, false, false, 15)
+DIAG(note_imported_by_pch_module_not_found, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "consider adding '%0' to the header search path", 0, SFINAE_Suppress, false, false, 15)
+DIAG(note_module_cache_path, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "after modifying system headers, please delete the module cache at '%0'", 0, SFINAE_Suppress, false, false, 15)
+DIAG(note_module_file_imported_by, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "imported by %select{|module '%2' in }1'%0'", 0, SFINAE_Suppress, false, false, 15)
+DIAG(note_module_odr_violation_definition_data, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "but in '%0' found %select{%2 base %plural{1:class|:classes}2|%2 virtual base %plural{1:class|:classes}2|%ordinal2 base class with different type %3|%ordinal2 %select{non-virtual|virtual}3 base class %4|%ordinal2 base class %3 with %select{public|protected|private|no}4 access specifier}1", 0, SFINAE_Suppress, false, false, 15)
+DIAG(note_module_odr_violation_different_definitions, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "definition in module '%0' is here", 0, SFINAE_Suppress, false, false, 15)
+DIAG(note_module_odr_violation_enum, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "but in '%0' found %select{enum that is %select{not scoped|scoped}2|enum scoped with keyword %select{struct|class}2|enum %select{without|with}2 specified type|enum with specified type %2|enum with %2 element%s2|%ordinal2 element has name %3|%ordinal2 element %3 %select{has|does not have}4 an initializer|%ordinal2 element %3 has different initializer|}1", 0, SFINAE_Suppress, false, false, 15)
+DIAG(note_module_odr_violation_function, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "but in '%0' found %select{different return type %2|%ordinal2 parameter with name %3|%ordinal2 parameter with type %3%select{| decayed from %5}4|%ordinal2 parameter with%select{out|}3 a default argument|%ordinal2 parameter with a different default argument|a different body}1", 0, SFINAE_Suppress, false, false, 15)
+DIAG(note_module_odr_violation_mismatch_decl, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "but in '%0' found %select{end of class|public access specifier|private access specifier|protected access specifier|static assert|field|method|type alias|typedef|data member|friend declaration|function template}1", 0, SFINAE_Suppress, false, false, 15)
+DIAG(note_module_odr_violation_mismatch_decl_diff, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "but in '%0' found %select{static assert with different condition|static assert with different message|static assert with %select{|no }2message|field %2|field %2 with type %3|%select{non-|}3bitfield %2|bitfield %2 with different width expression|%select{non-|}3mutable field %2|field %2 with %select{no|an}3 initializer|field %2 with a different initializer|%select{method %3|constructor|destructor}2|%select{method %3|constructor|destructor}2 is %select{not deleted|deleted}4|%select{method %3|constructor|destructor}2 is %select{not defaulted|defaulted}4|%select{method %3|constructor|destructor}2 is %select{|pure }4%select{not virtual|virtual}5|%select{method %3|constructor|destructor}2 is %select{not static|static}4|%select{method %3|constructor|destructor}2 is %select{not volatile|volatile}4|%select{method %3|constructor|destructor}2 is %select{not const|const}4|%select{method %3|constructor|destructor}2 is %select{not inline|inline}4|%select{method %3|constructor|destructor}2 that has %4 parameter%s4|%select{method %3|constructor|destructor}2 with %ordinal4 parameter of type %5%select{| decayed from %7}6|%select{method %3|constructor|destructor}2 with %ordinal4 parameter named %5|%select{method %3|constructor|destructor}2 with %ordinal4 parameter with%select{out|}5 a default argument|%select{method %3|constructor|destructor}2 with %ordinal4 parameter with a different default argument|%select{method %3|constructor|destructor}2 with %select{no |}4template arguments|%select{method %3|constructor|destructor}2 with %4 template argument%s4|%select{method %3|constructor|destructor}2 with %4 for %ordinal5 template argument|%select{method %3|constructor|destructor}2 with %select{no body|body}4|%select{method %3|constructor|destructor}2 with different body|%select{typedef|type alias}2 name %3|%select{typedef|type alias}2 %3 with different underlying type %4|data member with name %2|data member %2 with different type %3|data member %2 with%select{out|}3 an initializer|data member %2 with a different initializer|data member %2 %select{is constexpr|is not constexpr}3|friend %select{class|function}2|friend %2|friend function %2|function template %2 with %3 template parameter%s3|function template %2 with %ordinal3 template paramter being a %select{type|non-type|template}4 template parameter|function template %2 with %ordinal3 template parameter %select{with no name|named %5}4|function template %2 with %ordinal3 template parameter with %select{no |}4default argument|function template %2 with %ordinal3 template parameter with default argument %4|function template %2 with %ordinal3 template parameter with different type|function template %2 with %ordinal3 template parameter %select{not |}4being a template parameter pack|}1", 0, SFINAE_Suppress, false, false, 15)
+DIAG(note_module_odr_violation_mismatch_decl_unknown, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "but in '%0' found %select{||||different static assert|different field|different method|different type alias|different typedef|different data member|different friend declaration|another unexpected decl}1", 0, SFINAE_Suppress, false, false, 15)
+DIAG(note_module_odr_violation_no_possible_decls, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "definition has no member %0", 0, SFINAE_Suppress, false, false, 15)
+DIAG(note_module_odr_violation_possible_decl, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declaration of %0 does not match", 0, SFINAE_Suppress, false, false, 15)
+DIAG(note_module_odr_violation_template_parameter, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "but in '%0' found %select{unnamed template parameter %2|template parameter %2|template parameter with %select{no |}2default argument|template parameter with different default argument}1", 0, SFINAE_Suppress, false, false, 15)
+DIAG(note_pch_rebuild_required, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "please rebuild precompiled header '%0'", 0, SFINAE_Suppress, false, false, 15)
+DIAG(note_pch_required_by, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "'%0' required by '%1'", 0, SFINAE_Suppress, false, false, 15)
+DIAG(note_second_module_difference, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in second definition, possible difference is here", 0, SFINAE_Suppress, false, false, 15)
+DIAG(warn_duplicate_module_file_extension, CLASS_WARNING, (unsigned)diag::Severity::Warning, "duplicate module file extension block name '%0'", 421, SFINAE_Suppress, false, false, 15)
+DIAG(warn_module_system_bit_conflict, CLASS_WARNING, (unsigned)diag::Severity::Warning, "module file '%0' was validated as a system module and is now being imported as a non-system module; any difference in diagnostic options will be ignored", 419, SFINAE_Suppress, false, false, 15)
+DIAG(warn_module_uses_date_time, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{precompiled header|module}0 uses __DATE__ or __TIME__", 526, SFINAE_Suppress, false, false, 18)
diff --git a/clang-r353983/include/clang/Basic/ExceptionSpecificationType.h b/clang-r353983/include/clang/Basic/ExceptionSpecificationType.h
new file mode 100644
index 00000000..2f65efe7
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/ExceptionSpecificationType.h
@@ -0,0 +1,66 @@
+//===--- ExceptionSpecificationType.h ---------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Defines the ExceptionSpecificationType enumeration and various
+/// utility functions.
+///
+//===----------------------------------------------------------------------===//
+#ifndef LLVM_CLANG_BASIC_EXCEPTIONSPECIFICATIONTYPE_H
+#define LLVM_CLANG_BASIC_EXCEPTIONSPECIFICATIONTYPE_H
+
+namespace clang {
+
+/// The various types of exception specifications that exist in C++11.
+enum ExceptionSpecificationType {
+ EST_None, ///< no exception specification
+ EST_DynamicNone, ///< throw()
+ EST_Dynamic, ///< throw(T1, T2)
+ EST_MSAny, ///< Microsoft throw(...) extension
+ EST_BasicNoexcept, ///< noexcept
+ EST_DependentNoexcept,///< noexcept(expression), value-dependent
+ EST_NoexceptFalse, ///< noexcept(expression), evals to 'false'
+ EST_NoexceptTrue, ///< noexcept(expression), evals to 'true'
+ EST_Unevaluated, ///< not evaluated yet, for special member function
+ EST_Uninstantiated, ///< not instantiated yet
+ EST_Unparsed ///< not parsed yet
+};
+
+inline bool isDynamicExceptionSpec(ExceptionSpecificationType ESpecType) {
+ return ESpecType >= EST_DynamicNone && ESpecType <= EST_MSAny;
+}
+
+inline bool isComputedNoexcept(ExceptionSpecificationType ESpecType) {
+ return ESpecType >= EST_DependentNoexcept &&
+ ESpecType <= EST_NoexceptTrue;
+}
+
+inline bool isNoexceptExceptionSpec(ExceptionSpecificationType ESpecType) {
+ return ESpecType == EST_BasicNoexcept || isComputedNoexcept(ESpecType);
+}
+
+inline bool isUnresolvedExceptionSpec(ExceptionSpecificationType ESpecType) {
+ return ESpecType == EST_Unevaluated || ESpecType == EST_Uninstantiated;
+}
+
+/// Possible results from evaluation of a noexcept expression.
+enum CanThrowResult {
+ CT_Cannot,
+ CT_Dependent,
+ CT_Can
+};
+
+inline CanThrowResult mergeCanThrow(CanThrowResult CT1, CanThrowResult CT2) {
+ // CanThrowResult constants are ordered so that the maximum is the correct
+ // merge result.
+ return CT1 > CT2 ? CT1 : CT2;
+}
+
+} // end namespace clang
+
+#endif // LLVM_CLANG_BASIC_EXCEPTIONSPECIFICATIONTYPE_H
diff --git a/clang-r353983/include/clang/Basic/ExpressionTraits.h b/clang-r353983/include/clang/Basic/ExpressionTraits.h
new file mode 100644
index 00000000..85005330
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/ExpressionTraits.h
@@ -0,0 +1,25 @@
+//===- ExpressionTraits.h - C++ Expression Traits Support Enums -*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Defines enumerations for expression traits intrinsics.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_EXPRESSIONTRAITS_H
+#define LLVM_CLANG_BASIC_EXPRESSIONTRAITS_H
+
+namespace clang {
+
+ enum ExpressionTrait {
+ ET_IsLValueExpr,
+ ET_IsRValueExpr
+ };
+}
+
+#endif
diff --git a/clang-r353983/include/clang/Basic/Features.def b/clang-r353983/include/clang/Basic/Features.def
new file mode 100644
index 00000000..8fc4e5a6
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/Features.def
@@ -0,0 +1,251 @@
+//===--- Features.def - Features and Extensions database --------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines features exposed via __has_feature and extensions exposed
+// via __has_extension. Users of this file must either define the FEATURE or
+// EXTENSION macros (or both) to make use of this information. Note that these
+// macros expect the following declarations to be available for the Predicate:
+//
+// const LangOptions &LangOpts;
+// const Preprocessor &PP;
+//
+// The Predicate field dictates the conditions under which the feature or
+// extension will be made available.
+//
+// FEATURE(...) should be used to advertise support for standard language
+// features, whereas EXTENSION(...) should be used for clang extensions. Note
+// that many of the identifiers in this file don't follow this rule for backward
+// compatibility reasons.
+//
+//===----------------------------------------------------------------------===//
+
+#if !defined(FEATURE) && !defined(EXTENSION)
+# error Define either the FEATURE or EXTENSION macro to handle features
+#endif
+
+#ifndef FEATURE
+#define FEATURE(Name, Predicate)
+#endif
+
+#ifndef EXTENSION
+#define EXTENSION(Name, Predicate)
+#endif
+
+FEATURE(address_sanitizer,
+ LangOpts.Sanitize.hasOneOf(SanitizerKind::Address |
+ SanitizerKind::KernelAddress))
+FEATURE(hwaddress_sanitizer,
+ LangOpts.Sanitize.hasOneOf(SanitizerKind::HWAddress |
+ SanitizerKind::KernelHWAddress))
+FEATURE(xray_instrument, LangOpts.XRayInstrument)
+FEATURE(undefined_behavior_sanitizer,
+ LangOpts.Sanitize.hasOneOf(SanitizerKind::Undefined))
+FEATURE(assume_nonnull, true)
+FEATURE(attribute_analyzer_noreturn, true)
+FEATURE(attribute_availability, true)
+FEATURE(attribute_availability_with_message, true)
+FEATURE(attribute_availability_app_extension, true)
+FEATURE(attribute_availability_with_version_underscores, true)
+FEATURE(attribute_availability_tvos, true)
+FEATURE(attribute_availability_watchos, true)
+FEATURE(attribute_availability_with_strict, true)
+FEATURE(attribute_availability_with_replacement, true)
+FEATURE(attribute_availability_in_templates, true)
+FEATURE(attribute_availability_swift, true)
+FEATURE(attribute_cf_returns_not_retained, true)
+FEATURE(attribute_cf_returns_retained, true)
+FEATURE(attribute_cf_returns_on_parameters, true)
+FEATURE(attribute_deprecated_with_message, true)
+FEATURE(attribute_deprecated_with_replacement, true)
+FEATURE(attribute_ext_vector_type, true)
+FEATURE(attribute_ns_returns_not_retained, true)
+FEATURE(attribute_ns_returns_retained, true)
+FEATURE(attribute_ns_consumes_self, true)
+FEATURE(attribute_ns_consumed, true)
+FEATURE(attribute_cf_consumed, true)
+FEATURE(attribute_objc_ivar_unused, true)
+FEATURE(attribute_objc_method_family, true)
+FEATURE(attribute_overloadable, true)
+FEATURE(attribute_unavailable_with_message, true)
+FEATURE(attribute_unused_on_fields, true)
+FEATURE(attribute_diagnose_if_objc, true)
+FEATURE(blocks, LangOpts.Blocks)
+FEATURE(c_thread_safety_attributes, true)
+FEATURE(cxx_exceptions, LangOpts.CXXExceptions)
+FEATURE(cxx_rtti, LangOpts.RTTI &&LangOpts.RTTIData)
+FEATURE(enumerator_attributes, true)
+FEATURE(nullability, true)
+FEATURE(nullability_on_arrays, true)
+FEATURE(memory_sanitizer,
+ LangOpts.Sanitize.hasOneOf(SanitizerKind::Memory |
+ SanitizerKind::KernelMemory))
+FEATURE(thread_sanitizer, LangOpts.Sanitize.has(SanitizerKind::Thread))
+FEATURE(dataflow_sanitizer, LangOpts.Sanitize.has(SanitizerKind::DataFlow))
+FEATURE(efficiency_sanitizer,
+ LangOpts.Sanitize.hasOneOf(SanitizerKind::Efficiency))
+FEATURE(scudo, LangOpts.Sanitize.hasOneOf(SanitizerKind::Scudo))
+// Objective-C features
+FEATURE(objc_arr, LangOpts.ObjCAutoRefCount) // FIXME: REMOVE?
+FEATURE(objc_arc, LangOpts.ObjCAutoRefCount)
+FEATURE(objc_arc_fields, true)
+FEATURE(objc_arc_weak, LangOpts.ObjCWeak)
+FEATURE(objc_default_synthesize_properties, LangOpts.ObjC)
+FEATURE(objc_fixed_enum, LangOpts.ObjC)
+FEATURE(objc_instancetype, LangOpts.ObjC)
+FEATURE(objc_kindof, LangOpts.ObjC)
+FEATURE(objc_modules, LangOpts.ObjC && LangOpts.Modules)
+FEATURE(objc_nonfragile_abi, LangOpts.ObjCRuntime.isNonFragile())
+FEATURE(objc_property_explicit_atomic, true)
+FEATURE(objc_protocol_qualifier_mangling, true)
+FEATURE(objc_weak_class, LangOpts.ObjCRuntime.hasWeakClassImport())
+FEATURE(ownership_holds, true)
+FEATURE(ownership_returns, true)
+FEATURE(ownership_takes, true)
+FEATURE(objc_bool, true)
+FEATURE(objc_subscripting, LangOpts.ObjCRuntime.isNonFragile())
+FEATURE(objc_array_literals, LangOpts.ObjC)
+FEATURE(objc_dictionary_literals, LangOpts.ObjC)
+FEATURE(objc_boxed_expressions, LangOpts.ObjC)
+FEATURE(objc_boxed_nsvalue_expressions, LangOpts.ObjC)
+FEATURE(arc_cf_code_audited, true)
+FEATURE(objc_bridge_id, true)
+FEATURE(objc_bridge_id_on_typedefs, true)
+FEATURE(objc_generics, LangOpts.ObjC)
+FEATURE(objc_generics_variance, LangOpts.ObjC)
+FEATURE(objc_class_property, LangOpts.ObjC)
+// C11 features
+FEATURE(c_alignas, LangOpts.C11)
+FEATURE(c_alignof, LangOpts.C11)
+FEATURE(c_atomic, LangOpts.C11)
+FEATURE(c_generic_selections, LangOpts.C11)
+FEATURE(c_static_assert, LangOpts.C11)
+FEATURE(c_thread_local, LangOpts.C11 &&PP.getTargetInfo().isTLSSupported())
+// C++11 features
+FEATURE(cxx_access_control_sfinae, LangOpts.CPlusPlus11)
+FEATURE(cxx_alias_templates, LangOpts.CPlusPlus11)
+FEATURE(cxx_alignas, LangOpts.CPlusPlus11)
+FEATURE(cxx_alignof, LangOpts.CPlusPlus11)
+FEATURE(cxx_atomic, LangOpts.CPlusPlus11)
+FEATURE(cxx_attributes, LangOpts.CPlusPlus11)
+FEATURE(cxx_auto_type, LangOpts.CPlusPlus11)
+FEATURE(cxx_constexpr, LangOpts.CPlusPlus11)
+FEATURE(cxx_constexpr_string_builtins, LangOpts.CPlusPlus11)
+FEATURE(cxx_decltype, LangOpts.CPlusPlus11)
+FEATURE(cxx_decltype_incomplete_return_types, LangOpts.CPlusPlus11)
+FEATURE(cxx_default_function_template_args, LangOpts.CPlusPlus11)
+FEATURE(cxx_defaulted_functions, LangOpts.CPlusPlus11)
+FEATURE(cxx_delegating_constructors, LangOpts.CPlusPlus11)
+FEATURE(cxx_deleted_functions, LangOpts.CPlusPlus11)
+FEATURE(cxx_explicit_conversions, LangOpts.CPlusPlus11)
+FEATURE(cxx_generalized_initializers, LangOpts.CPlusPlus11)
+FEATURE(cxx_implicit_moves, LangOpts.CPlusPlus11)
+FEATURE(cxx_inheriting_constructors, LangOpts.CPlusPlus11)
+FEATURE(cxx_inline_namespaces, LangOpts.CPlusPlus11)
+FEATURE(cxx_lambdas, LangOpts.CPlusPlus11)
+FEATURE(cxx_local_type_template_args, LangOpts.CPlusPlus11)
+FEATURE(cxx_nonstatic_member_init, LangOpts.CPlusPlus11)
+FEATURE(cxx_noexcept, LangOpts.CPlusPlus11)
+FEATURE(cxx_nullptr, LangOpts.CPlusPlus11)
+FEATURE(cxx_override_control, LangOpts.CPlusPlus11)
+FEATURE(cxx_range_for, LangOpts.CPlusPlus11)
+FEATURE(cxx_raw_string_literals, LangOpts.CPlusPlus11)
+FEATURE(cxx_reference_qualified_functions, LangOpts.CPlusPlus11)
+FEATURE(cxx_rvalue_references, LangOpts.CPlusPlus11)
+FEATURE(cxx_strong_enums, LangOpts.CPlusPlus11)
+FEATURE(cxx_static_assert, LangOpts.CPlusPlus11)
+FEATURE(cxx_thread_local,
+ LangOpts.CPlusPlus11 &&PP.getTargetInfo().isTLSSupported())
+FEATURE(cxx_trailing_return, LangOpts.CPlusPlus11)
+FEATURE(cxx_unicode_literals, LangOpts.CPlusPlus11)
+FEATURE(cxx_unrestricted_unions, LangOpts.CPlusPlus11)
+FEATURE(cxx_user_literals, LangOpts.CPlusPlus11)
+FEATURE(cxx_variadic_templates, LangOpts.CPlusPlus11)
+// C++14 features
+FEATURE(cxx_aggregate_nsdmi, LangOpts.CPlusPlus14)
+FEATURE(cxx_binary_literals, LangOpts.CPlusPlus14)
+FEATURE(cxx_contextual_conversions, LangOpts.CPlusPlus14)
+FEATURE(cxx_decltype_auto, LangOpts.CPlusPlus14)
+FEATURE(cxx_generic_lambdas, LangOpts.CPlusPlus14)
+FEATURE(cxx_init_captures, LangOpts.CPlusPlus14)
+FEATURE(cxx_relaxed_constexpr, LangOpts.CPlusPlus14)
+FEATURE(cxx_return_type_deduction, LangOpts.CPlusPlus14)
+FEATURE(cxx_variable_templates, LangOpts.CPlusPlus14)
+// NOTE: For features covered by SD-6, it is preferable to provide *only*
+// the SD-6 macro and not a __has_feature check.
+
+// C++ TSes
+// FEATURE(cxx_runtime_arrays, LangOpts.CPlusPlusTSArrays)
+// FEATURE(cxx_concepts, LangOpts.CPlusPlusTSConcepts)
+// FIXME: Should this be __has_feature or __has_extension?
+// FEATURE(raw_invocation_type, LangOpts.CPlusPlus)
+// Type traits
+// N.B. Additional type traits should not be added to the following list.
+// Instead, they should be detected by has_extension.
+FEATURE(has_nothrow_assign, LangOpts.CPlusPlus)
+FEATURE(has_nothrow_copy, LangOpts.CPlusPlus)
+FEATURE(has_nothrow_constructor, LangOpts.CPlusPlus)
+FEATURE(has_trivial_assign, LangOpts.CPlusPlus)
+FEATURE(has_trivial_copy, LangOpts.CPlusPlus)
+FEATURE(has_trivial_constructor, LangOpts.CPlusPlus)
+FEATURE(has_trivial_destructor, LangOpts.CPlusPlus)
+FEATURE(has_virtual_destructor, LangOpts.CPlusPlus)
+FEATURE(is_abstract, LangOpts.CPlusPlus)
+FEATURE(is_base_of, LangOpts.CPlusPlus)
+FEATURE(is_class, LangOpts.CPlusPlus)
+FEATURE(is_constructible, LangOpts.CPlusPlus)
+FEATURE(is_convertible_to, LangOpts.CPlusPlus)
+FEATURE(is_empty, LangOpts.CPlusPlus)
+FEATURE(is_enum, LangOpts.CPlusPlus)
+FEATURE(is_final, LangOpts.CPlusPlus)
+FEATURE(is_literal, LangOpts.CPlusPlus)
+FEATURE(is_standard_layout, LangOpts.CPlusPlus)
+FEATURE(is_pod, LangOpts.CPlusPlus)
+FEATURE(is_polymorphic, LangOpts.CPlusPlus)
+FEATURE(is_sealed, LangOpts.CPlusPlus &&LangOpts.MicrosoftExt)
+FEATURE(is_trivial, LangOpts.CPlusPlus)
+FEATURE(is_trivially_assignable, LangOpts.CPlusPlus)
+FEATURE(is_trivially_constructible, LangOpts.CPlusPlus)
+FEATURE(is_trivially_copyable, LangOpts.CPlusPlus)
+FEATURE(is_union, LangOpts.CPlusPlus)
+FEATURE(modules, LangOpts.Modules)
+FEATURE(safe_stack, LangOpts.Sanitize.has(SanitizerKind::SafeStack))
+FEATURE(shadow_call_stack,
+ LangOpts.Sanitize.has(SanitizerKind::ShadowCallStack))
+FEATURE(tls, PP.getTargetInfo().isTLSSupported())
+FEATURE(underlying_type, LangOpts.CPlusPlus)
+
+// C11 features supported by other languages as extensions.
+EXTENSION(c_alignas, true)
+EXTENSION(c_alignof, true)
+EXTENSION(c_atomic, true)
+EXTENSION(c_generic_selections, true)
+EXTENSION(c_static_assert, true)
+EXTENSION(c_thread_local, PP.getTargetInfo().isTLSSupported())
+// C++11 features supported by other languages as extensions.
+EXTENSION(cxx_atomic, LangOpts.CPlusPlus)
+EXTENSION(cxx_deleted_functions, LangOpts.CPlusPlus)
+EXTENSION(cxx_explicit_conversions, LangOpts.CPlusPlus)
+EXTENSION(cxx_inline_namespaces, LangOpts.CPlusPlus)
+EXTENSION(cxx_local_type_template_args, LangOpts.CPlusPlus)
+EXTENSION(cxx_nonstatic_member_init, LangOpts.CPlusPlus)
+EXTENSION(cxx_override_control, LangOpts.CPlusPlus)
+EXTENSION(cxx_range_for, LangOpts.CPlusPlus)
+EXTENSION(cxx_reference_qualified_functions, LangOpts.CPlusPlus)
+EXTENSION(cxx_rvalue_references, LangOpts.CPlusPlus)
+EXTENSION(cxx_variadic_templates, LangOpts.CPlusPlus)
+EXTENSION(cxx_fixed_enum, true)
+// C++14 features supported by other languages as extensions.
+EXTENSION(cxx_binary_literals, true)
+EXTENSION(cxx_init_captures, LangOpts.CPlusPlus11)
+EXTENSION(cxx_variable_templates, LangOpts.CPlusPlus)
+// Miscellaneous language extensions
+EXTENSION(overloadable_unmarked, true)
+EXTENSION(pragma_clang_attribute_namespaces, true)
+
+#undef EXTENSION
+#undef FEATURE
diff --git a/clang-r353983/include/clang/Basic/FileManager.h b/clang-r353983/include/clang/Basic/FileManager.h
new file mode 100644
index 00000000..88c1467b
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/FileManager.h
@@ -0,0 +1,287 @@
+//===--- FileManager.h - File System Probing and Caching --------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Defines the clang::FileManager interface and associated types.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_FILEMANAGER_H
+#define LLVM_CLANG_BASIC_FILEMANAGER_H
+
+#include "clang/Basic/FileSystemOptions.h"
+#include "clang/Basic/LLVM.h"
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/IntrusiveRefCntPtr.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/StringMap.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Allocator.h"
+#include "llvm/Support/ErrorOr.h"
+#include "llvm/Support/FileSystem.h"
+#include "llvm/Support/VirtualFileSystem.h"
+#include <ctime>
+#include <map>
+#include <memory>
+#include <string>
+
+namespace llvm {
+
+class MemoryBuffer;
+
+} // end namespace llvm
+
+namespace clang {
+
+class FileSystemStatCache;
+
+/// Cached information about one directory (either on disk or in
+/// the virtual file system).
+class DirectoryEntry {
+ friend class FileManager;
+
+ StringRef Name; // Name of the directory.
+
+public:
+ StringRef getName() const { return Name; }
+};
+
+/// Cached information about one file (either on disk
+/// or in the virtual file system).
+///
+/// If the 'File' member is valid, then this FileEntry has an open file
+/// descriptor for the file.
+class FileEntry {
+ friend class FileManager;
+
+ StringRef Name; // Name of the file.
+ std::string RealPathName; // Real path to the file; could be empty.
+ off_t Size; // File size in bytes.
+ time_t ModTime; // Modification time of file.
+ const DirectoryEntry *Dir; // Directory file lives in.
+ unsigned UID; // A unique (small) ID for the file.
+ llvm::sys::fs::UniqueID UniqueID;
+ bool IsNamedPipe;
+ bool InPCH;
+ bool IsValid; // Is this \c FileEntry initialized and valid?
+
+ /// The open file, if it is owned by the \p FileEntry.
+ mutable std::unique_ptr<llvm::vfs::File> File;
+
+public:
+ FileEntry()
+ : UniqueID(0, 0), IsNamedPipe(false), InPCH(false), IsValid(false)
+ {}
+
+ FileEntry(const FileEntry &) = delete;
+ FileEntry &operator=(const FileEntry &) = delete;
+
+ StringRef getName() const { return Name; }
+ StringRef tryGetRealPathName() const { return RealPathName; }
+ bool isValid() const { return IsValid; }
+ off_t getSize() const { return Size; }
+ unsigned getUID() const { return UID; }
+ const llvm::sys::fs::UniqueID &getUniqueID() const { return UniqueID; }
+ bool isInPCH() const { return InPCH; }
+ time_t getModificationTime() const { return ModTime; }
+
+ /// Return the directory the file lives in.
+ const DirectoryEntry *getDir() const { return Dir; }
+
+ bool operator<(const FileEntry &RHS) const { return UniqueID < RHS.UniqueID; }
+
+ /// Check whether the file is a named pipe (and thus can't be opened by
+ /// the native FileManager methods).
+ bool isNamedPipe() const { return IsNamedPipe; }
+
+ void closeFile() const {
+ File.reset(); // rely on destructor to close File
+ }
+
+ // Only for use in tests to see if deferred opens are happening, rather than
+ // relying on RealPathName being empty.
+ bool isOpenForTests() const { return File != nullptr; }
+};
+
+struct FileData;
+
+/// Implements support for file system lookup, file system caching,
+/// and directory search management.
+///
+/// This also handles more advanced properties, such as uniquing files based
+/// on "inode", so that a file with two names (e.g. symlinked) will be treated
+/// as a single file.
+///
+class FileManager : public RefCountedBase<FileManager> {
+ IntrusiveRefCntPtr<llvm::vfs::FileSystem> FS;
+ FileSystemOptions FileSystemOpts;
+
+ /// Cache for existing real directories.
+ std::map<llvm::sys::fs::UniqueID, DirectoryEntry> UniqueRealDirs;
+
+ /// Cache for existing real files.
+ std::map<llvm::sys::fs::UniqueID, FileEntry> UniqueRealFiles;
+
+ /// The virtual directories that we have allocated.
+ ///
+ /// For each virtual file (e.g. foo/bar/baz.cpp), we add all of its parent
+ /// directories (foo/ and foo/bar/) here.
+ SmallVector<std::unique_ptr<DirectoryEntry>, 4> VirtualDirectoryEntries;
+ /// The virtual files that we have allocated.
+ SmallVector<std::unique_ptr<FileEntry>, 4> VirtualFileEntries;
+
+ /// A cache that maps paths to directory entries (either real or
+ /// virtual) we have looked up
+ ///
+ /// The actual Entries for real directories/files are
+ /// owned by UniqueRealDirs/UniqueRealFiles above, while the Entries
+ /// for virtual directories/files are owned by
+ /// VirtualDirectoryEntries/VirtualFileEntries above.
+ ///
+ llvm::StringMap<DirectoryEntry*, llvm::BumpPtrAllocator> SeenDirEntries;
+
+ /// A cache that maps paths to file entries (either real or
+ /// virtual) we have looked up.
+ ///
+ /// \see SeenDirEntries
+ llvm::StringMap<FileEntry*, llvm::BumpPtrAllocator> SeenFileEntries;
+
+ /// The canonical names of directories.
+ llvm::DenseMap<const DirectoryEntry *, llvm::StringRef> CanonicalDirNames;
+
+ /// Storage for canonical names that we have computed.
+ llvm::BumpPtrAllocator CanonicalNameStorage;
+
+ /// Each FileEntry we create is assigned a unique ID #.
+ ///
+ unsigned NextFileUID;
+
+ // Statistics.
+ unsigned NumDirLookups, NumFileLookups;
+ unsigned NumDirCacheMisses, NumFileCacheMisses;
+
+ // Caching.
+ std::unique_ptr<FileSystemStatCache> StatCache;
+
+ bool getStatValue(StringRef Path, FileData &Data, bool isFile,
+ std::unique_ptr<llvm::vfs::File> *F);
+
+ /// Add all ancestors of the given path (pointing to either a file
+ /// or a directory) as virtual directories.
+ void addAncestorsAsVirtualDirs(StringRef Path);
+
+ /// Fills the RealPathName in file entry.
+ void fillRealPathName(FileEntry *UFE, llvm::StringRef FileName);
+
+public:
+ FileManager(const FileSystemOptions &FileSystemOpts,
+ IntrusiveRefCntPtr<llvm::vfs::FileSystem> FS = nullptr);
+ ~FileManager();
+
+ /// Installs the provided FileSystemStatCache object within
+ /// the FileManager.
+ ///
+ /// Ownership of this object is transferred to the FileManager.
+ ///
+ /// \param statCache the new stat cache to install. Ownership of this
+ /// object is transferred to the FileManager.
+ void setStatCache(std::unique_ptr<FileSystemStatCache> statCache);
+
+ /// Removes the FileSystemStatCache object from the manager.
+ void clearStatCache();
+
+ /// Lookup, cache, and verify the specified directory (real or
+ /// virtual).
+ ///
+ /// This returns NULL if the directory doesn't exist.
+ ///
+ /// \param CacheFailure If true and the file does not exist, we'll cache
+ /// the failure to find this file.
+ const DirectoryEntry *getDirectory(StringRef DirName,
+ bool CacheFailure = true);
+
+ /// Lookup, cache, and verify the specified file (real or
+ /// virtual).
+ ///
+ /// This returns NULL if the file doesn't exist.
+ ///
+ /// \param OpenFile if true and the file exists, it will be opened.
+ ///
+ /// \param CacheFailure If true and the file does not exist, we'll cache
+ /// the failure to find this file.
+ const FileEntry *getFile(StringRef Filename, bool OpenFile = false,
+ bool CacheFailure = true);
+
+ /// Returns the current file system options
+ FileSystemOptions &getFileSystemOpts() { return FileSystemOpts; }
+ const FileSystemOptions &getFileSystemOpts() const { return FileSystemOpts; }
+
+ IntrusiveRefCntPtr<llvm::vfs::FileSystem> getVirtualFileSystem() const {
+ return FS;
+ }
+
+ /// Retrieve a file entry for a "virtual" file that acts as
+ /// if there were a file with the given name on disk.
+ ///
+ /// The file itself is not accessed.
+ const FileEntry *getVirtualFile(StringRef Filename, off_t Size,
+ time_t ModificationTime);
+
+ /// Open the specified file as a MemoryBuffer, returning a new
+ /// MemoryBuffer if successful, otherwise returning null.
+ llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>>
+ getBufferForFile(const FileEntry *Entry, bool isVolatile = false,
+ bool ShouldCloseOpenFile = true);
+ llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>>
+ getBufferForFile(StringRef Filename, bool isVolatile = false);
+
+ /// Get the 'stat' information for the given \p Path.
+ ///
+ /// If the path is relative, it will be resolved against the WorkingDir of the
+ /// FileManager's FileSystemOptions.
+ ///
+ /// \returns false on success, true on error.
+ bool getNoncachedStatValue(StringRef Path, llvm::vfs::Status &Result);
+
+ /// Remove the real file \p Entry from the cache.
+ void invalidateCache(const FileEntry *Entry);
+
+ /// If path is not absolute and FileSystemOptions set the working
+ /// directory, the path is modified to be relative to the given
+ /// working directory.
+ /// \returns true if \c path changed.
+ bool FixupRelativePath(SmallVectorImpl<char> &path) const;
+
+ /// Makes \c Path absolute taking into account FileSystemOptions and the
+ /// working directory option.
+ /// \returns true if \c Path changed to absolute.
+ bool makeAbsolutePath(SmallVectorImpl<char> &Path) const;
+
+ /// Produce an array mapping from the unique IDs assigned to each
+ /// file to the corresponding FileEntry pointer.
+ void GetUniqueIDMapping(
+ SmallVectorImpl<const FileEntry *> &UIDToFiles) const;
+
+ /// Modifies the size and modification time of a previously created
+ /// FileEntry. Use with caution.
+ static void modifyFileEntry(FileEntry *File, off_t Size,
+ time_t ModificationTime);
+
+ /// Retrieve the canonical name for a given directory.
+ ///
+ /// This is a very expensive operation, despite its results being cached,
+ /// and should only be used when the physical layout of the file system is
+ /// required, which is (almost) never.
+ StringRef getCanonicalName(const DirectoryEntry *Dir);
+
+ void PrintStats() const;
+};
+
+} // end namespace clang
+
+#endif // LLVM_CLANG_BASIC_FILEMANAGER_H
diff --git a/clang-r353983/include/clang/Basic/FileSystemOptions.h b/clang-r353983/include/clang/Basic/FileSystemOptions.h
new file mode 100644
index 00000000..458af0c7
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/FileSystemOptions.h
@@ -0,0 +1,31 @@
+//===--- FileSystemOptions.h - File System Options --------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Defines the clang::FileSystemOptions interface.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_FILESYSTEMOPTIONS_H
+#define LLVM_CLANG_BASIC_FILESYSTEMOPTIONS_H
+
+#include <string>
+
+namespace clang {
+
+/// Keeps track of options that affect how file operations are performed.
+class FileSystemOptions {
+public:
+ /// If set, paths are resolved as if the working directory was
+ /// set to the value of WorkingDir.
+ std::string WorkingDir;
+};
+
+} // end namespace clang
+
+#endif
diff --git a/clang-r353983/include/clang/Basic/FileSystemStatCache.h b/clang-r353983/include/clang/Basic/FileSystemStatCache.h
new file mode 100644
index 00000000..0ae6a9eb
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/FileSystemStatCache.h
@@ -0,0 +1,117 @@
+//===- FileSystemStatCache.h - Caching for 'stat' calls ---------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+/// \file
+/// Defines the FileSystemStatCache interface.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_FILESYSTEMSTATCACHE_H
+#define LLVM_CLANG_BASIC_FILESYSTEMSTATCACHE_H
+
+#include "clang/Basic/LLVM.h"
+#include "llvm/ADT/StringMap.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Allocator.h"
+#include "llvm/Support/FileSystem.h"
+#include <cstdint>
+#include <ctime>
+#include <memory>
+#include <string>
+#include <utility>
+
+namespace llvm {
+
+namespace vfs {
+
+class File;
+class FileSystem;
+
+} // namespace vfs
+} // namespace llvm
+
+namespace clang {
+
+// FIXME: should probably replace this with vfs::Status
+struct FileData {
+ std::string Name;
+ uint64_t Size = 0;
+ time_t ModTime = 0;
+ llvm::sys::fs::UniqueID UniqueID;
+ bool IsDirectory = false;
+ bool IsNamedPipe = false;
+ bool InPCH = false;
+
+ // FIXME: remove this when files support multiple names
+ bool IsVFSMapped = false;
+
+ FileData() = default;
+};
+
+/// Abstract interface for introducing a FileManager cache for 'stat'
+/// system calls, which is used by precompiled and pretokenized headers to
+/// improve performance.
+class FileSystemStatCache {
+ virtual void anchor();
+
+public:
+ virtual ~FileSystemStatCache() = default;
+
+ enum LookupResult {
+ /// We know the file exists and its cached stat data.
+ CacheExists,
+
+ /// We know that the file doesn't exist.
+ CacheMissing
+ };
+
+ /// Get the 'stat' information for the specified path, using the cache
+ /// to accelerate it if possible.
+ ///
+ /// \returns \c true if the path does not exist or \c false if it exists.
+ ///
+ /// If isFile is true, then this lookup should only return success for files
+ /// (not directories). If it is false this lookup should only return
+ /// success for directories (not files). On a successful file lookup, the
+ /// implementation can optionally fill in \p F with a valid \p File object and
+ /// the client guarantees that it will close it.
+ static bool get(StringRef Path, FileData &Data, bool isFile,
+ std::unique_ptr<llvm::vfs::File> *F,
+ FileSystemStatCache *Cache, llvm::vfs::FileSystem &FS);
+
+protected:
+ // FIXME: The pointer here is a non-owning/optional reference to the
+ // unique_ptr. Optional<unique_ptr<vfs::File>&> might be nicer, but
+ // Optional needs some work to support references so this isn't possible yet.
+ virtual LookupResult getStat(StringRef Path, FileData &Data, bool isFile,
+ std::unique_ptr<llvm::vfs::File> *F,
+ llvm::vfs::FileSystem &FS) = 0;
+};
+
+/// A stat "cache" that can be used by FileManager to keep
+/// track of the results of stat() calls that occur throughout the
+/// execution of the front end.
+class MemorizeStatCalls : public FileSystemStatCache {
+public:
+ /// The set of stat() calls that have been seen.
+ llvm::StringMap<FileData, llvm::BumpPtrAllocator> StatCalls;
+
+ using iterator =
+ llvm::StringMap<FileData, llvm::BumpPtrAllocator>::const_iterator;
+
+ iterator begin() const { return StatCalls.begin(); }
+ iterator end() const { return StatCalls.end(); }
+
+ LookupResult getStat(StringRef Path, FileData &Data, bool isFile,
+ std::unique_ptr<llvm::vfs::File> *F,
+ llvm::vfs::FileSystem &FS) override;
+};
+
+} // namespace clang
+
+#endif // LLVM_CLANG_BASIC_FILESYSTEMSTATCACHE_H
diff --git a/clang-r353983/include/clang/Basic/FixedPoint.h b/clang-r353983/include/clang/Basic/FixedPoint.h
new file mode 100644
index 00000000..f68ed568
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/FixedPoint.h
@@ -0,0 +1,191 @@
+//===- FixedPoint.h - Fixed point constant handling -------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+/// \file
+/// Defines the fixed point number interface.
+/// This is a class for abstracting various operations performed on fixed point
+/// types described in ISO/IEC JTC1 SC22 WG14 N1169 starting at clause 4.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_FIXEDPOINT_H
+#define LLVM_CLANG_BASIC_FIXEDPOINT_H
+
+#include "llvm/ADT/APSInt.h"
+#include "llvm/ADT/SmallString.h"
+#include "llvm/Support/raw_ostream.h"
+
+namespace clang {
+
+class ASTContext;
+class QualType;
+
+/// The fixed point semantics work similarly to llvm::fltSemantics. The width
+/// specifies the whole bit width of the underlying scaled integer (with padding
+/// if any). The scale represents the number of fractional bits in this type.
+/// When HasUnsignedPadding is true and this type is signed, the first bit
+/// in the value this represents is treaded as padding.
+class FixedPointSemantics {
+public:
+ FixedPointSemantics(unsigned Width, unsigned Scale, bool IsSigned,
+ bool IsSaturated, bool HasUnsignedPadding)
+ : Width(Width), Scale(Scale), IsSigned(IsSigned),
+ IsSaturated(IsSaturated), HasUnsignedPadding(HasUnsignedPadding) {
+ assert(Width >= Scale && "Not enough room for the scale");
+ assert(!(IsSigned && HasUnsignedPadding) &&
+ "Cannot have unsigned padding on a signed type.");
+ }
+
+ unsigned getWidth() const { return Width; }
+ unsigned getScale() const { return Scale; }
+ bool isSigned() const { return IsSigned; }
+ bool isSaturated() const { return IsSaturated; }
+ bool hasUnsignedPadding() const { return HasUnsignedPadding; }
+
+ void setSaturated(bool Saturated) { IsSaturated = Saturated; }
+
+ /// Return the number of integral bits represented by these semantics. These
+ /// are separate from the fractional bits and do not include the sign or
+ /// padding bit.
+ unsigned getIntegralBits() const {
+ if (IsSigned || (!IsSigned && HasUnsignedPadding))
+ return Width - Scale - 1;
+ else
+ return Width - Scale;
+ }
+
+ /// Return the FixedPointSemantics that allows for calculating the full
+ /// precision semantic that can precisely represent the precision and ranges
+ /// of both input values. This does not compute the resulting semantics for a
+ /// given binary operation.
+ FixedPointSemantics
+ getCommonSemantics(const FixedPointSemantics &Other) const;
+
+ /// Return the FixedPointSemantics for an integer type.
+ static FixedPointSemantics GetIntegerSemantics(unsigned Width,
+ bool IsSigned) {
+ return FixedPointSemantics(Width, /*Scale=*/0, IsSigned,
+ /*IsSaturated=*/false,
+ /*HasUnsignedPadding=*/false);
+ }
+
+private:
+ unsigned Width;
+ unsigned Scale;
+ bool IsSigned;
+ bool IsSaturated;
+ bool HasUnsignedPadding;
+};
+
+/// The APFixedPoint class works similarly to APInt/APSInt in that it is a
+/// functional replacement for a scaled integer. It is meant to replicate the
+/// fixed point types proposed in ISO/IEC JTC1 SC22 WG14 N1169. The class carries
+/// info about the fixed point type's width, sign, scale, and saturation, and
+/// provides different operations that would normally be performed on fixed point
+/// types.
+///
+/// Semantically this does not represent any existing C type other than fixed
+/// point types and should eventually be moved to LLVM if fixed point types gain
+/// native IR support.
+class APFixedPoint {
+ public:
+ APFixedPoint(const llvm::APInt &Val, const FixedPointSemantics &Sema)
+ : Val(Val, !Sema.isSigned()), Sema(Sema) {
+ assert(Val.getBitWidth() == Sema.getWidth() &&
+ "The value should have a bit width that matches the Sema width");
+ }
+
+ APFixedPoint(uint64_t Val, const FixedPointSemantics &Sema)
+ : APFixedPoint(llvm::APInt(Sema.getWidth(), Val, Sema.isSigned()),
+ Sema) {}
+
+ // Zero initialization.
+ APFixedPoint(const FixedPointSemantics &Sema) : APFixedPoint(0, Sema) {}
+
+ llvm::APSInt getValue() const { return llvm::APSInt(Val, !Sema.isSigned()); }
+ inline unsigned getWidth() const { return Sema.getWidth(); }
+ inline unsigned getScale() const { return Sema.getScale(); }
+ inline bool isSaturated() const { return Sema.isSaturated(); }
+ inline bool isSigned() const { return Sema.isSigned(); }
+ inline bool hasPadding() const { return Sema.hasUnsignedPadding(); }
+ FixedPointSemantics getSemantics() const { return Sema; }
+
+ bool getBoolValue() const { return Val.getBoolValue(); }
+
+ // Convert this number to match the semantics provided. If the overflow
+ // parameter is provided, set this value to true or false to indicate if this
+ // operation results in an overflow.
+ APFixedPoint convert(const FixedPointSemantics &DstSema,
+ bool *Overflow = nullptr) const;
+
+ // Perform binary operations on a fixed point type. The resulting fixed point
+ // value will be in the common, full precision semantics that can represent
+ // the precision and ranges os both input values. See convert() for an
+ // explanation of the Overflow parameter.
+ APFixedPoint add(const APFixedPoint &Other, bool *Overflow = nullptr) const;
+
+ /// Perform a unary negation (-X) on this fixed point type, taking into
+ /// account saturation if applicable.
+ APFixedPoint negate(bool *Overflow = nullptr) const;
+
+ APFixedPoint shr(unsigned Amt) const {
+ return APFixedPoint(Val >> Amt, Sema);
+ }
+
+ APFixedPoint shl(unsigned Amt) const {
+ return APFixedPoint(Val << Amt, Sema);
+ }
+
+ llvm::APSInt getIntPart() const {
+ if (Val < 0 && Val != -Val) // Cover the case when we have the min val
+ return -(-Val >> getScale());
+ else
+ return Val >> getScale();
+ }
+
+ void toString(llvm::SmallVectorImpl<char> &Str) const;
+ std::string toString() const {
+ llvm::SmallString<40> S;
+ toString(S);
+ return S.str();
+ }
+
+ // If LHS > RHS, return 1. If LHS == RHS, return 0. If LHS < RHS, return -1.
+ int compare(const APFixedPoint &Other) const;
+ bool operator==(const APFixedPoint &Other) const {
+ return compare(Other) == 0;
+ }
+ bool operator!=(const APFixedPoint &Other) const {
+ return compare(Other) != 0;
+ }
+ bool operator>(const APFixedPoint &Other) const { return compare(Other) > 0; }
+ bool operator<(const APFixedPoint &Other) const { return compare(Other) < 0; }
+ bool operator>=(const APFixedPoint &Other) const {
+ return compare(Other) >= 0;
+ }
+ bool operator<=(const APFixedPoint &Other) const {
+ return compare(Other) <= 0;
+ }
+
+ static APFixedPoint getMax(const FixedPointSemantics &Sema);
+ static APFixedPoint getMin(const FixedPointSemantics &Sema);
+
+private:
+ llvm::APSInt Val;
+ FixedPointSemantics Sema;
+};
+
+inline llvm::raw_ostream &operator<<(llvm::raw_ostream &OS,
+ const APFixedPoint &FX) {
+ OS << FX.toString();
+ return OS;
+}
+
+} // namespace clang
+
+#endif
diff --git a/clang-r353983/include/clang/Basic/IdentifierTable.h b/clang-r353983/include/clang/Basic/IdentifierTable.h
new file mode 100644
index 00000000..465486ed
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/IdentifierTable.h
@@ -0,0 +1,984 @@
+//===- IdentifierTable.h - Hash table for identifier lookup -----*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+/// \file
+/// Defines the clang::IdentifierInfo, clang::IdentifierTable, and
+/// clang::Selector interfaces.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_IDENTIFIERTABLE_H
+#define LLVM_CLANG_BASIC_IDENTIFIERTABLE_H
+
+#include "clang/Basic/LLVM.h"
+#include "clang/Basic/TokenKinds.h"
+#include "llvm/ADT/DenseMapInfo.h"
+#include "llvm/ADT/SmallString.h"
+#include "llvm/ADT/StringMap.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Allocator.h"
+#include "llvm/Support/PointerLikeTypeTraits.h"
+#include "llvm/Support/type_traits.h"
+#include <cassert>
+#include <cstddef>
+#include <cstdint>
+#include <cstring>
+#include <string>
+#include <utility>
+
+namespace clang {
+
+class DeclarationName;
+class DeclarationNameTable;
+class IdentifierInfo;
+class LangOptions;
+class MultiKeywordSelector;
+class SourceLocation;
+
+/// A simple pair of identifier info and location.
+using IdentifierLocPair = std::pair<IdentifierInfo *, SourceLocation>;
+
+/// IdentifierInfo and other related classes are aligned to
+/// 8 bytes so that DeclarationName can use the lower 3 bits
+/// of a pointer to one of these classes.
+enum { IdentifierInfoAlignment = 8 };
+
+/// One of these records is kept for each identifier that
+/// is lexed. This contains information about whether the token was \#define'd,
+/// is a language keyword, or if it is a front-end token of some sort (e.g. a
+/// variable or function name). The preprocessor keeps this information in a
+/// set, and all tok::identifier tokens have a pointer to one of these.
+/// It is aligned to 8 bytes because DeclarationName needs the lower 3 bits.
+class alignas(IdentifierInfoAlignment) IdentifierInfo {
+ friend class IdentifierTable;
+
+ // Front-end token ID or tok::identifier.
+ unsigned TokenID : 9;
+
+ // ObjC keyword ('protocol' in '@protocol') or builtin (__builtin_inf).
+ // First NUM_OBJC_KEYWORDS values are for Objective-C,
+ // the remaining values are for builtins.
+ unsigned ObjCOrBuiltinID : 13;
+
+ // True if there is a #define for this.
+ unsigned HasMacro : 1;
+
+ // True if there was a #define for this.
+ unsigned HadMacro : 1;
+
+ // True if the identifier is a language extension.
+ unsigned IsExtension : 1;
+
+ // True if the identifier is a keyword in a newer or proposed Standard.
+ unsigned IsFutureCompatKeyword : 1;
+
+ // True if the identifier is poisoned.
+ unsigned IsPoisoned : 1;
+
+ // True if the identifier is a C++ operator keyword.
+ unsigned IsCPPOperatorKeyword : 1;
+
+ // Internal bit set by the member function RecomputeNeedsHandleIdentifier.
+ // See comment about RecomputeNeedsHandleIdentifier for more info.
+ unsigned NeedsHandleIdentifier : 1;
+
+ // True if the identifier was loaded (at least partially) from an AST file.
+ unsigned IsFromAST : 1;
+
+ // True if the identifier has changed from the definition
+ // loaded from an AST file.
+ unsigned ChangedAfterLoad : 1;
+
+ // True if the identifier's frontend information has changed from the
+ // definition loaded from an AST file.
+ unsigned FEChangedAfterLoad : 1;
+
+ // True if revertTokenIDToIdentifier was called.
+ unsigned RevertedTokenID : 1;
+
+ // True if there may be additional information about
+ // this identifier stored externally.
+ unsigned OutOfDate : 1;
+
+ // True if this is the 'import' contextual keyword.
+ unsigned IsModulesImport : 1;
+
+ // 29 bits left in a 64-bit word.
+
+ // Managed by the language front-end.
+ void *FETokenInfo = nullptr;
+
+ llvm::StringMapEntry<IdentifierInfo *> *Entry = nullptr;
+
+ IdentifierInfo()
+ : TokenID(tok::identifier), ObjCOrBuiltinID(0), HasMacro(false),
+ HadMacro(false), IsExtension(false), IsFutureCompatKeyword(false),
+ IsPoisoned(false), IsCPPOperatorKeyword(false),
+ NeedsHandleIdentifier(false), IsFromAST(false), ChangedAfterLoad(false),
+ FEChangedAfterLoad(false), RevertedTokenID(false), OutOfDate(false),
+ IsModulesImport(false) {}
+
+public:
+ IdentifierInfo(const IdentifierInfo &) = delete;
+ IdentifierInfo &operator=(const IdentifierInfo &) = delete;
+ IdentifierInfo(IdentifierInfo &&) = delete;
+ IdentifierInfo &operator=(IdentifierInfo &&) = delete;
+
+ /// Return true if this is the identifier for the specified string.
+ ///
+ /// This is intended to be used for string literals only: II->isStr("foo").
+ template <std::size_t StrLen>
+ bool isStr(const char (&Str)[StrLen]) const {
+ return getLength() == StrLen-1 &&
+ memcmp(getNameStart(), Str, StrLen-1) == 0;
+ }
+
+ /// Return true if this is the identifier for the specified StringRef.
+ bool isStr(llvm::StringRef Str) const {
+ llvm::StringRef ThisStr(getNameStart(), getLength());
+ return ThisStr == Str;
+ }
+
+ /// Return the beginning of the actual null-terminated string for this
+ /// identifier.
+ const char *getNameStart() const { return Entry->getKeyData(); }
+
+ /// Efficiently return the length of this identifier info.
+ unsigned getLength() const { return Entry->getKeyLength(); }
+
+ /// Return the actual identifier string.
+ StringRef getName() const {
+ return StringRef(getNameStart(), getLength());
+ }
+
+ /// Return true if this identifier is \#defined to some other value.
+ /// \note The current definition may be in a module and not currently visible.
+ bool hasMacroDefinition() const {
+ return HasMacro;
+ }
+ void setHasMacroDefinition(bool Val) {
+ if (HasMacro == Val) return;
+
+ HasMacro = Val;
+ if (Val) {
+ NeedsHandleIdentifier = true;
+ HadMacro = true;
+ } else {
+ RecomputeNeedsHandleIdentifier();
+ }
+ }
+ /// Returns true if this identifier was \#defined to some value at any
+ /// moment. In this case there should be an entry for the identifier in the
+ /// macro history table in Preprocessor.
+ bool hadMacroDefinition() const {
+ return HadMacro;
+ }
+
+ /// If this is a source-language token (e.g. 'for'), this API
+ /// can be used to cause the lexer to map identifiers to source-language
+ /// tokens.
+ tok::TokenKind getTokenID() const { return (tok::TokenKind)TokenID; }
+
+ /// True if revertTokenIDToIdentifier() was called.
+ bool hasRevertedTokenIDToIdentifier() const { return RevertedTokenID; }
+
+ /// Revert TokenID to tok::identifier; used for GNU libstdc++ 4.2
+ /// compatibility.
+ ///
+ /// TokenID is normally read-only but there are 2 instances where we revert it
+ /// to tok::identifier for libstdc++ 4.2. Keep track of when this happens
+ /// using this method so we can inform serialization about it.
+ void revertTokenIDToIdentifier() {
+ assert(TokenID != tok::identifier && "Already at tok::identifier");
+ TokenID = tok::identifier;
+ RevertedTokenID = true;
+ }
+ void revertIdentifierToTokenID(tok::TokenKind TK) {
+ assert(TokenID == tok::identifier && "Should be at tok::identifier");
+ TokenID = TK;
+ RevertedTokenID = false;
+ }
+
+ /// Return the preprocessor keyword ID for this identifier.
+ ///
+ /// For example, "define" will return tok::pp_define.
+ tok::PPKeywordKind getPPKeywordID() const;
+
+ /// Return the Objective-C keyword ID for the this identifier.
+ ///
+ /// For example, 'class' will return tok::objc_class if ObjC is enabled.
+ tok::ObjCKeywordKind getObjCKeywordID() const {
+ if (ObjCOrBuiltinID < tok::NUM_OBJC_KEYWORDS)
+ return tok::ObjCKeywordKind(ObjCOrBuiltinID);
+ else
+ return tok::objc_not_keyword;
+ }
+ void setObjCKeywordID(tok::ObjCKeywordKind ID) { ObjCOrBuiltinID = ID; }
+
+ /// True if setNotBuiltin() was called.
+ bool hasRevertedBuiltin() const {
+ return ObjCOrBuiltinID == tok::NUM_OBJC_KEYWORDS;
+ }
+
+ /// Revert the identifier to a non-builtin identifier. We do this if
+ /// the name of a known builtin library function is used to declare that
+ /// function, but an unexpected type is specified.
+ void revertBuiltin() {
+ setBuiltinID(0);
+ }
+
+ /// Return a value indicating whether this is a builtin function.
+ ///
+ /// 0 is not-built-in. 1+ are specific builtin functions.
+ unsigned getBuiltinID() const {
+ if (ObjCOrBuiltinID >= tok::NUM_OBJC_KEYWORDS)
+ return ObjCOrBuiltinID - tok::NUM_OBJC_KEYWORDS;
+ else
+ return 0;
+ }
+ void setBuiltinID(unsigned ID) {
+ ObjCOrBuiltinID = ID + tok::NUM_OBJC_KEYWORDS;
+ assert(ObjCOrBuiltinID - unsigned(tok::NUM_OBJC_KEYWORDS) == ID
+ && "ID too large for field!");
+ }
+
+ unsigned getObjCOrBuiltinID() const { return ObjCOrBuiltinID; }
+ void setObjCOrBuiltinID(unsigned ID) { ObjCOrBuiltinID = ID; }
+
+ /// get/setExtension - Initialize information about whether or not this
+ /// language token is an extension. This controls extension warnings, and is
+ /// only valid if a custom token ID is set.
+ bool isExtensionToken() const { return IsExtension; }
+ void setIsExtensionToken(bool Val) {
+ IsExtension = Val;
+ if (Val)
+ NeedsHandleIdentifier = true;
+ else
+ RecomputeNeedsHandleIdentifier();
+ }
+
+ /// is/setIsFutureCompatKeyword - Initialize information about whether or not
+ /// this language token is a keyword in a newer or proposed Standard. This
+ /// controls compatibility warnings, and is only true when not parsing the
+ /// corresponding Standard. Once a compatibility problem has been diagnosed
+ /// with this keyword, the flag will be cleared.
+ bool isFutureCompatKeyword() const { return IsFutureCompatKeyword; }
+ void setIsFutureCompatKeyword(bool Val) {
+ IsFutureCompatKeyword = Val;
+ if (Val)
+ NeedsHandleIdentifier = true;
+ else
+ RecomputeNeedsHandleIdentifier();
+ }
+
+ /// setIsPoisoned - Mark this identifier as poisoned. After poisoning, the
+ /// Preprocessor will emit an error every time this token is used.
+ void setIsPoisoned(bool Value = true) {
+ IsPoisoned = Value;
+ if (Value)
+ NeedsHandleIdentifier = true;
+ else
+ RecomputeNeedsHandleIdentifier();
+ }
+
+ /// Return true if this token has been poisoned.
+ bool isPoisoned() const { return IsPoisoned; }
+
+ /// isCPlusPlusOperatorKeyword/setIsCPlusPlusOperatorKeyword controls whether
+ /// this identifier is a C++ alternate representation of an operator.
+ void setIsCPlusPlusOperatorKeyword(bool Val = true) {
+ IsCPPOperatorKeyword = Val;
+ }
+ bool isCPlusPlusOperatorKeyword() const { return IsCPPOperatorKeyword; }
+
+ /// Return true if this token is a keyword in the specified language.
+ bool isKeyword(const LangOptions &LangOpts) const;
+
+ /// Return true if this token is a C++ keyword in the specified
+ /// language.
+ bool isCPlusPlusKeyword(const LangOptions &LangOpts) const;
+
+ /// Get and set FETokenInfo. The language front-end is allowed to associate
+ /// arbitrary metadata with this token.
+ void *getFETokenInfo() const { return FETokenInfo; }
+ void setFETokenInfo(void *T) { FETokenInfo = T; }
+
+ /// Return true if the Preprocessor::HandleIdentifier must be called
+ /// on a token of this identifier.
+ ///
+ /// If this returns false, we know that HandleIdentifier will not affect
+ /// the token.
+ bool isHandleIdentifierCase() const { return NeedsHandleIdentifier; }
+
+ /// Return true if the identifier in its current state was loaded
+ /// from an AST file.
+ bool isFromAST() const { return IsFromAST; }
+
+ void setIsFromAST() { IsFromAST = true; }
+
+ /// Determine whether this identifier has changed since it was loaded
+ /// from an AST file.
+ bool hasChangedSinceDeserialization() const {
+ return ChangedAfterLoad;
+ }
+
+ /// Note that this identifier has changed since it was loaded from
+ /// an AST file.
+ void setChangedSinceDeserialization() {
+ ChangedAfterLoad = true;
+ }
+
+ /// Determine whether the frontend token information for this
+ /// identifier has changed since it was loaded from an AST file.
+ bool hasFETokenInfoChangedSinceDeserialization() const {
+ return FEChangedAfterLoad;
+ }
+
+ /// Note that the frontend token information for this identifier has
+ /// changed since it was loaded from an AST file.
+ void setFETokenInfoChangedSinceDeserialization() {
+ FEChangedAfterLoad = true;
+ }
+
+ /// Determine whether the information for this identifier is out of
+ /// date with respect to the external source.
+ bool isOutOfDate() const { return OutOfDate; }
+
+ /// Set whether the information for this identifier is out of
+ /// date with respect to the external source.
+ void setOutOfDate(bool OOD) {
+ OutOfDate = OOD;
+ if (OOD)
+ NeedsHandleIdentifier = true;
+ else
+ RecomputeNeedsHandleIdentifier();
+ }
+
+ /// Determine whether this is the contextual keyword \c import.
+ bool isModulesImport() const { return IsModulesImport; }
+
+ /// Set whether this identifier is the contextual keyword \c import.
+ void setModulesImport(bool I) {
+ IsModulesImport = I;
+ if (I)
+ NeedsHandleIdentifier = true;
+ else
+ RecomputeNeedsHandleIdentifier();
+ }
+
+ /// Return true if this identifier is an editor placeholder.
+ ///
+ /// Editor placeholders are produced by the code-completion engine and are
+ /// represented as characters between '<#' and '#>' in the source code. An
+ /// example of auto-completed call with a placeholder parameter is shown
+ /// below:
+ /// \code
+ /// function(<#int x#>);
+ /// \endcode
+ bool isEditorPlaceholder() const {
+ return getName().startswith("<#") && getName().endswith("#>");
+ }
+
+ /// Provide less than operator for lexicographical sorting.
+ bool operator<(const IdentifierInfo &RHS) const {
+ return getName() < RHS.getName();
+ }
+
+private:
+ /// The Preprocessor::HandleIdentifier does several special (but rare)
+ /// things to identifiers of various sorts. For example, it changes the
+ /// \c for keyword token from tok::identifier to tok::for.
+ ///
+ /// This method is very tied to the definition of HandleIdentifier. Any
+ /// change to it should be reflected here.
+ void RecomputeNeedsHandleIdentifier() {
+ NeedsHandleIdentifier = isPoisoned() || hasMacroDefinition() ||
+ isExtensionToken() || isFutureCompatKeyword() ||
+ isOutOfDate() || isModulesImport();
+ }
+};
+
+/// An RAII object for [un]poisoning an identifier within a scope.
+///
+/// \p II is allowed to be null, in which case objects of this type have
+/// no effect.
+class PoisonIdentifierRAIIObject {
+ IdentifierInfo *const II;
+ const bool OldValue;
+
+public:
+ PoisonIdentifierRAIIObject(IdentifierInfo *II, bool NewValue)
+ : II(II), OldValue(II ? II->isPoisoned() : false) {
+ if(II)
+ II->setIsPoisoned(NewValue);
+ }
+
+ ~PoisonIdentifierRAIIObject() {
+ if(II)
+ II->setIsPoisoned(OldValue);
+ }
+};
+
+/// An iterator that walks over all of the known identifiers
+/// in the lookup table.
+///
+/// Since this iterator uses an abstract interface via virtual
+/// functions, it uses an object-oriented interface rather than the
+/// more standard C++ STL iterator interface. In this OO-style
+/// iteration, the single function \c Next() provides dereference,
+/// advance, and end-of-sequence checking in a single
+/// operation. Subclasses of this iterator type will provide the
+/// actual functionality.
+class IdentifierIterator {
+protected:
+ IdentifierIterator() = default;
+
+public:
+ IdentifierIterator(const IdentifierIterator &) = delete;
+ IdentifierIterator &operator=(const IdentifierIterator &) = delete;
+
+ virtual ~IdentifierIterator();
+
+ /// Retrieve the next string in the identifier table and
+ /// advances the iterator for the following string.
+ ///
+ /// \returns The next string in the identifier table. If there is
+ /// no such string, returns an empty \c StringRef.
+ virtual StringRef Next() = 0;
+};
+
+/// Provides lookups to, and iteration over, IdentiferInfo objects.
+class IdentifierInfoLookup {
+public:
+ virtual ~IdentifierInfoLookup();
+
+ /// Return the IdentifierInfo for the specified named identifier.
+ ///
+ /// Unlike the version in IdentifierTable, this returns a pointer instead
+ /// of a reference. If the pointer is null then the IdentifierInfo cannot
+ /// be found.
+ virtual IdentifierInfo* get(StringRef Name) = 0;
+
+ /// Retrieve an iterator into the set of all identifiers
+ /// known to this identifier lookup source.
+ ///
+ /// This routine provides access to all of the identifiers known to
+ /// the identifier lookup, allowing access to the contents of the
+ /// identifiers without introducing the overhead of constructing
+ /// IdentifierInfo objects for each.
+ ///
+ /// \returns A new iterator into the set of known identifiers. The
+ /// caller is responsible for deleting this iterator.
+ virtual IdentifierIterator *getIdentifiers();
+};
+
+/// Implements an efficient mapping from strings to IdentifierInfo nodes.
+///
+/// This has no other purpose, but this is an extremely performance-critical
+/// piece of the code, as each occurrence of every identifier goes through
+/// here when lexed.
+class IdentifierTable {
+ // Shark shows that using MallocAllocator is *much* slower than using this
+ // BumpPtrAllocator!
+ using HashTableTy = llvm::StringMap<IdentifierInfo *, llvm::BumpPtrAllocator>;
+ HashTableTy HashTable;
+
+ IdentifierInfoLookup* ExternalLookup;
+
+public:
+ /// Create the identifier table.
+ explicit IdentifierTable(IdentifierInfoLookup *ExternalLookup = nullptr);
+
+ /// Create the identifier table, populating it with info about the
+ /// language keywords for the language specified by \p LangOpts.
+ explicit IdentifierTable(const LangOptions &LangOpts,
+ IdentifierInfoLookup *ExternalLookup = nullptr);
+
+ /// Set the external identifier lookup mechanism.
+ void setExternalIdentifierLookup(IdentifierInfoLookup *IILookup) {
+ ExternalLookup = IILookup;
+ }
+
+ /// Retrieve the external identifier lookup object, if any.
+ IdentifierInfoLookup *getExternalIdentifierLookup() const {
+ return ExternalLookup;
+ }
+
+ llvm::BumpPtrAllocator& getAllocator() {
+ return HashTable.getAllocator();
+ }
+
+ /// Return the identifier token info for the specified named
+ /// identifier.
+ IdentifierInfo &get(StringRef Name) {
+ auto &Entry = *HashTable.insert(std::make_pair(Name, nullptr)).first;
+
+ IdentifierInfo *&II = Entry.second;
+ if (II) return *II;
+
+ // No entry; if we have an external lookup, look there first.
+ if (ExternalLookup) {
+ II = ExternalLookup->get(Name);
+ if (II)
+ return *II;
+ }
+
+ // Lookups failed, make a new IdentifierInfo.
+ void *Mem = getAllocator().Allocate<IdentifierInfo>();
+ II = new (Mem) IdentifierInfo();
+
+ // Make sure getName() knows how to find the IdentifierInfo
+ // contents.
+ II->Entry = &Entry;
+
+ return *II;
+ }
+
+ IdentifierInfo &get(StringRef Name, tok::TokenKind TokenCode) {
+ IdentifierInfo &II = get(Name);
+ II.TokenID = TokenCode;
+ assert(II.TokenID == (unsigned) TokenCode && "TokenCode too large");
+ return II;
+ }
+
+ /// Gets an IdentifierInfo for the given name without consulting
+ /// external sources.
+ ///
+ /// This is a version of get() meant for external sources that want to
+ /// introduce or modify an identifier. If they called get(), they would
+ /// likely end up in a recursion.
+ IdentifierInfo &getOwn(StringRef Name) {
+ auto &Entry = *HashTable.insert(std::make_pair(Name, nullptr)).first;
+
+ IdentifierInfo *&II = Entry.second;
+ if (II)
+ return *II;
+
+ // Lookups failed, make a new IdentifierInfo.
+ void *Mem = getAllocator().Allocate<IdentifierInfo>();
+ II = new (Mem) IdentifierInfo();
+
+ // Make sure getName() knows how to find the IdentifierInfo
+ // contents.
+ II->Entry = &Entry;
+
+ // If this is the 'import' contextual keyword, mark it as such.
+ if (Name.equals("import"))
+ II->setModulesImport(true);
+
+ return *II;
+ }
+
+ using iterator = HashTableTy::const_iterator;
+ using const_iterator = HashTableTy::const_iterator;
+
+ iterator begin() const { return HashTable.begin(); }
+ iterator end() const { return HashTable.end(); }
+ unsigned size() const { return HashTable.size(); }
+
+ /// Print some statistics to stderr that indicate how well the
+ /// hashing is doing.
+ void PrintStats() const;
+
+ /// Populate the identifier table with info about the language keywords
+ /// for the language specified by \p LangOpts.
+ void AddKeywords(const LangOptions &LangOpts);
+};
+
+/// A family of Objective-C methods.
+///
+/// These families have no inherent meaning in the language, but are
+/// nonetheless central enough in the existing implementations to
+/// merit direct AST support. While, in theory, arbitrary methods can
+/// be considered to form families, we focus here on the methods
+/// involving allocation and retain-count management, as these are the
+/// most "core" and the most likely to be useful to diverse clients
+/// without extra information.
+///
+/// Both selectors and actual method declarations may be classified
+/// into families. Method families may impose additional restrictions
+/// beyond their selector name; for example, a method called '_init'
+/// that returns void is not considered to be in the 'init' family
+/// (but would be if it returned 'id'). It is also possible to
+/// explicitly change or remove a method's family. Therefore the
+/// method's family should be considered the single source of truth.
+enum ObjCMethodFamily {
+ /// No particular method family.
+ OMF_None,
+
+ // Selectors in these families may have arbitrary arity, may be
+ // written with arbitrary leading underscores, and may have
+ // additional CamelCase "words" in their first selector chunk
+ // following the family name.
+ OMF_alloc,
+ OMF_copy,
+ OMF_init,
+ OMF_mutableCopy,
+ OMF_new,
+
+ // These families are singletons consisting only of the nullary
+ // selector with the given name.
+ OMF_autorelease,
+ OMF_dealloc,
+ OMF_finalize,
+ OMF_release,
+ OMF_retain,
+ OMF_retainCount,
+ OMF_self,
+ OMF_initialize,
+
+ // performSelector families
+ OMF_performSelector
+};
+
+/// Enough bits to store any enumerator in ObjCMethodFamily or
+/// InvalidObjCMethodFamily.
+enum { ObjCMethodFamilyBitWidth = 4 };
+
+/// An invalid value of ObjCMethodFamily.
+enum { InvalidObjCMethodFamily = (1 << ObjCMethodFamilyBitWidth) - 1 };
+
+/// A family of Objective-C methods.
+///
+/// These are family of methods whose result type is initially 'id', but
+/// but are candidate for the result type to be changed to 'instancetype'.
+enum ObjCInstanceTypeFamily {
+ OIT_None,
+ OIT_Array,
+ OIT_Dictionary,
+ OIT_Singleton,
+ OIT_Init,
+ OIT_ReturnsSelf
+};
+
+enum ObjCStringFormatFamily {
+ SFF_None,
+ SFF_NSString,
+ SFF_CFString
+};
+
+/// Smart pointer class that efficiently represents Objective-C method
+/// names.
+///
+/// This class will either point to an IdentifierInfo or a
+/// MultiKeywordSelector (which is private). This enables us to optimize
+/// selectors that take no arguments and selectors that take 1 argument, which
+/// accounts for 78% of all selectors in Cocoa.h.
+class Selector {
+ friend class Diagnostic;
+ friend class SelectorTable; // only the SelectorTable can create these
+ friend class DeclarationName; // and the AST's DeclarationName.
+
+ enum IdentifierInfoFlag {
+ // Empty selector = 0. Note that these enumeration values must
+ // correspond to the enumeration values of DeclarationName::StoredNameKind
+ ZeroArg = 0x01,
+ OneArg = 0x02,
+ MultiArg = 0x07,
+ ArgFlags = 0x07
+ };
+
+ /// A pointer to the MultiKeywordSelector or IdentifierInfo. We use the low
+ /// three bits of InfoPtr to store an IdentifierInfoFlag. Note that in any
+ /// case IdentifierInfo and MultiKeywordSelector are already aligned to
+ /// 8 bytes even on 32 bits archs because of DeclarationName.
+ uintptr_t InfoPtr = 0;
+
+ Selector(IdentifierInfo *II, unsigned nArgs) {
+ InfoPtr = reinterpret_cast<uintptr_t>(II);
+ assert((InfoPtr & ArgFlags) == 0 &&"Insufficiently aligned IdentifierInfo");
+ assert(nArgs < 2 && "nArgs not equal to 0/1");
+ InfoPtr |= nArgs+1;
+ }
+
+ Selector(MultiKeywordSelector *SI) {
+ InfoPtr = reinterpret_cast<uintptr_t>(SI);
+ assert((InfoPtr & ArgFlags) == 0 &&"Insufficiently aligned IdentifierInfo");
+ InfoPtr |= MultiArg;
+ }
+
+ IdentifierInfo *getAsIdentifierInfo() const {
+ if (getIdentifierInfoFlag() < MultiArg)
+ return reinterpret_cast<IdentifierInfo *>(InfoPtr & ~ArgFlags);
+ return nullptr;
+ }
+
+ MultiKeywordSelector *getMultiKeywordSelector() const {
+ return reinterpret_cast<MultiKeywordSelector *>(InfoPtr & ~ArgFlags);
+ }
+
+ unsigned getIdentifierInfoFlag() const {
+ return InfoPtr & ArgFlags;
+ }
+
+ static ObjCMethodFamily getMethodFamilyImpl(Selector sel);
+
+ static ObjCStringFormatFamily getStringFormatFamilyImpl(Selector sel);
+
+public:
+ /// The default ctor should only be used when creating data structures that
+ /// will contain selectors.
+ Selector() = default;
+ explicit Selector(uintptr_t V) : InfoPtr(V) {}
+
+ /// operator==/!= - Indicate whether the specified selectors are identical.
+ bool operator==(Selector RHS) const {
+ return InfoPtr == RHS.InfoPtr;
+ }
+ bool operator!=(Selector RHS) const {
+ return InfoPtr != RHS.InfoPtr;
+ }
+
+ void *getAsOpaquePtr() const {
+ return reinterpret_cast<void*>(InfoPtr);
+ }
+
+ /// Determine whether this is the empty selector.
+ bool isNull() const { return InfoPtr == 0; }
+
+ // Predicates to identify the selector type.
+ bool isKeywordSelector() const {
+ return getIdentifierInfoFlag() != ZeroArg;
+ }
+
+ bool isUnarySelector() const {
+ return getIdentifierInfoFlag() == ZeroArg;
+ }
+
+ unsigned getNumArgs() const;
+
+ /// Retrieve the identifier at a given position in the selector.
+ ///
+ /// Note that the identifier pointer returned may be NULL. Clients that only
+ /// care about the text of the identifier string, and not the specific,
+ /// uniqued identifier pointer, should use \c getNameForSlot(), which returns
+ /// an empty string when the identifier pointer would be NULL.
+ ///
+ /// \param argIndex The index for which we want to retrieve the identifier.
+ /// This index shall be less than \c getNumArgs() unless this is a keyword
+ /// selector, in which case 0 is the only permissible value.
+ ///
+ /// \returns the uniqued identifier for this slot, or NULL if this slot has
+ /// no corresponding identifier.
+ IdentifierInfo *getIdentifierInfoForSlot(unsigned argIndex) const;
+
+ /// Retrieve the name at a given position in the selector.
+ ///
+ /// \param argIndex The index for which we want to retrieve the name.
+ /// This index shall be less than \c getNumArgs() unless this is a keyword
+ /// selector, in which case 0 is the only permissible value.
+ ///
+ /// \returns the name for this slot, which may be the empty string if no
+ /// name was supplied.
+ StringRef getNameForSlot(unsigned argIndex) const;
+
+ /// Derive the full selector name (e.g. "foo:bar:") and return
+ /// it as an std::string.
+ std::string getAsString() const;
+
+ /// Prints the full selector name (e.g. "foo:bar:").
+ void print(llvm::raw_ostream &OS) const;
+
+ void dump() const;
+
+ /// Derive the conventional family of this method.
+ ObjCMethodFamily getMethodFamily() const {
+ return getMethodFamilyImpl(*this);
+ }
+
+ ObjCStringFormatFamily getStringFormatFamily() const {
+ return getStringFormatFamilyImpl(*this);
+ }
+
+ static Selector getEmptyMarker() {
+ return Selector(uintptr_t(-1));
+ }
+
+ static Selector getTombstoneMarker() {
+ return Selector(uintptr_t(-2));
+ }
+
+ static ObjCInstanceTypeFamily getInstTypeMethodFamily(Selector sel);
+};
+
+/// This table allows us to fully hide how we implement
+/// multi-keyword caching.
+class SelectorTable {
+ // Actually a SelectorTableImpl
+ void *Impl;
+
+public:
+ SelectorTable();
+ SelectorTable(const SelectorTable &) = delete;
+ SelectorTable &operator=(const SelectorTable &) = delete;
+ ~SelectorTable();
+
+ /// Can create any sort of selector.
+ ///
+ /// \p NumArgs indicates whether this is a no argument selector "foo", a
+ /// single argument selector "foo:" or multi-argument "foo:bar:".
+ Selector getSelector(unsigned NumArgs, IdentifierInfo **IIV);
+
+ Selector getUnarySelector(IdentifierInfo *ID) {
+ return Selector(ID, 1);
+ }
+
+ Selector getNullarySelector(IdentifierInfo *ID) {
+ return Selector(ID, 0);
+ }
+
+ /// Return the total amount of memory allocated for managing selectors.
+ size_t getTotalMemory() const;
+
+ /// Return the default setter name for the given identifier.
+ ///
+ /// This is "set" + \p Name where the initial character of \p Name
+ /// has been capitalized.
+ static SmallString<64> constructSetterName(StringRef Name);
+
+ /// Return the default setter selector for the given identifier.
+ ///
+ /// This is "set" + \p Name where the initial character of \p Name
+ /// has been capitalized.
+ static Selector constructSetterSelector(IdentifierTable &Idents,
+ SelectorTable &SelTable,
+ const IdentifierInfo *Name);
+
+ /// Return the property name for the given setter selector.
+ static std::string getPropertyNameFromSetterSelector(Selector Sel);
+};
+
+namespace detail {
+
+/// DeclarationNameExtra is used as a base of various uncommon special names.
+/// This class is needed since DeclarationName has not enough space to store
+/// the kind of every possible names. Therefore the kind of common names is
+/// stored directly in DeclarationName, and the kind of uncommon names is
+/// stored in DeclarationNameExtra. It is aligned to 8 bytes because
+/// DeclarationName needs the lower 3 bits to store the kind of common names.
+/// DeclarationNameExtra is tightly coupled to DeclarationName and any change
+/// here is very likely to require changes in DeclarationName(Table).
+class alignas(IdentifierInfoAlignment) DeclarationNameExtra {
+ friend class clang::DeclarationName;
+ friend class clang::DeclarationNameTable;
+
+protected:
+ /// The kind of "extra" information stored in the DeclarationName. See
+ /// @c ExtraKindOrNumArgs for an explanation of how these enumerator values
+ /// are used. Note that DeclarationName depends on the numerical values
+ /// of the enumerators in this enum. See DeclarationName::StoredNameKind
+ /// for more info.
+ enum ExtraKind {
+ CXXDeductionGuideName,
+ CXXLiteralOperatorName,
+ CXXUsingDirective,
+ ObjCMultiArgSelector
+ };
+
+ /// ExtraKindOrNumArgs has one of the following meaning:
+ /// * The kind of an uncommon C++ special name. This DeclarationNameExtra
+ /// is in this case in fact either a CXXDeductionGuideNameExtra or
+ /// a CXXLiteralOperatorIdName.
+ ///
+ /// * It may be also name common to C++ using-directives (CXXUsingDirective),
+ ///
+ /// * Otherwise it is ObjCMultiArgSelector+NumArgs, where NumArgs is
+ /// the number of arguments in the Objective-C selector, in which
+ /// case the DeclarationNameExtra is also a MultiKeywordSelector.
+ unsigned ExtraKindOrNumArgs;
+
+ DeclarationNameExtra(ExtraKind Kind) : ExtraKindOrNumArgs(Kind) {}
+ DeclarationNameExtra(unsigned NumArgs)
+ : ExtraKindOrNumArgs(ObjCMultiArgSelector + NumArgs) {}
+
+ /// Return the corresponding ExtraKind.
+ ExtraKind getKind() const {
+ return static_cast<ExtraKind>(ExtraKindOrNumArgs >
+ (unsigned)ObjCMultiArgSelector
+ ? (unsigned)ObjCMultiArgSelector
+ : ExtraKindOrNumArgs);
+ }
+
+ /// Return the number of arguments in an ObjC selector. Only valid when this
+ /// is indeed an ObjCMultiArgSelector.
+ unsigned getNumArgs() const {
+ assert(ExtraKindOrNumArgs >= (unsigned)ObjCMultiArgSelector &&
+ "getNumArgs called but this is not an ObjC selector!");
+ return ExtraKindOrNumArgs - (unsigned)ObjCMultiArgSelector;
+ }
+};
+
+} // namespace detail
+
+} // namespace clang
+
+namespace llvm {
+
+/// Define DenseMapInfo so that Selectors can be used as keys in DenseMap and
+/// DenseSets.
+template <>
+struct DenseMapInfo<clang::Selector> {
+ static clang::Selector getEmptyKey() {
+ return clang::Selector::getEmptyMarker();
+ }
+
+ static clang::Selector getTombstoneKey() {
+ return clang::Selector::getTombstoneMarker();
+ }
+
+ static unsigned getHashValue(clang::Selector S);
+
+ static bool isEqual(clang::Selector LHS, clang::Selector RHS) {
+ return LHS == RHS;
+ }
+};
+
+template<>
+struct PointerLikeTypeTraits<clang::Selector> {
+ static const void *getAsVoidPointer(clang::Selector P) {
+ return P.getAsOpaquePtr();
+ }
+
+ static clang::Selector getFromVoidPointer(const void *P) {
+ return clang::Selector(reinterpret_cast<uintptr_t>(P));
+ }
+
+ enum { NumLowBitsAvailable = 0 };
+};
+
+// Provide PointerLikeTypeTraits for IdentifierInfo pointers, which
+// are not guaranteed to be 8-byte aligned.
+template<>
+struct PointerLikeTypeTraits<clang::IdentifierInfo*> {
+ static void *getAsVoidPointer(clang::IdentifierInfo* P) {
+ return P;
+ }
+
+ static clang::IdentifierInfo *getFromVoidPointer(void *P) {
+ return static_cast<clang::IdentifierInfo*>(P);
+ }
+
+ enum { NumLowBitsAvailable = 1 };
+};
+
+template<>
+struct PointerLikeTypeTraits<const clang::IdentifierInfo*> {
+ static const void *getAsVoidPointer(const clang::IdentifierInfo* P) {
+ return P;
+ }
+
+ static const clang::IdentifierInfo *getFromVoidPointer(const void *P) {
+ return static_cast<const clang::IdentifierInfo*>(P);
+ }
+
+ enum { NumLowBitsAvailable = 1 };
+};
+
+} // namespace llvm
+
+#endif // LLVM_CLANG_BASIC_IDENTIFIERTABLE_H
diff --git a/clang-r353983/include/clang/Basic/LLVM.h b/clang-r353983/include/clang/Basic/LLVM.h
new file mode 100644
index 00000000..e9bb96af
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/LLVM.h
@@ -0,0 +1,88 @@
+//===--- LLVM.h - Import various common LLVM datatypes ----------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+/// \file
+/// Forward-declares and imports various common LLVM datatypes that
+/// clang wants to use unqualified.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_LLVM_H
+#define LLVM_CLANG_BASIC_LLVM_H
+
+// Do not proliferate #includes here, require clients to #include their
+// dependencies.
+// Casting.h has complex templates that cannot be easily forward declared.
+#include "llvm/Support/Casting.h"
+// None.h includes an enumerator that is desired & cannot be forward declared
+// without a definition of NoneType.
+#include "llvm/ADT/None.h"
+
+namespace llvm {
+ // ADT's.
+ class StringRef;
+ class Twine;
+ class VersionTuple;
+ template<typename T> class ArrayRef;
+ template<typename T> class MutableArrayRef;
+ template<typename T> class OwningArrayRef;
+ template<unsigned InternalLen> class SmallString;
+ template<typename T, unsigned N> class SmallVector;
+ template<typename T> class SmallVectorImpl;
+ template<typename T> class Optional;
+ template <class T> class Expected;
+
+ template<typename T>
+ struct SaveAndRestore;
+
+ // Reference counting.
+ template <typename T> class IntrusiveRefCntPtr;
+ template <typename T> struct IntrusiveRefCntPtrInfo;
+ template <class Derived> class RefCountedBase;
+
+ class raw_ostream;
+ class raw_pwrite_stream;
+ // TODO: DenseMap, ...
+}
+
+
+namespace clang {
+ // Casting operators.
+ using llvm::isa;
+ using llvm::cast;
+ using llvm::dyn_cast;
+ using llvm::dyn_cast_or_null;
+ using llvm::cast_or_null;
+
+ // ADT's.
+ using llvm::ArrayRef;
+ using llvm::MutableArrayRef;
+ using llvm::None;
+ using llvm::Optional;
+ using llvm::OwningArrayRef;
+ using llvm::SaveAndRestore;
+ using llvm::SmallString;
+ using llvm::SmallVector;
+ using llvm::SmallVectorImpl;
+ using llvm::StringRef;
+ using llvm::Twine;
+ using llvm::VersionTuple;
+
+ // Error handling.
+ using llvm::Expected;
+
+ // Reference counting.
+ using llvm::IntrusiveRefCntPtr;
+ using llvm::IntrusiveRefCntPtrInfo;
+ using llvm::RefCountedBase;
+
+ using llvm::raw_ostream;
+ using llvm::raw_pwrite_stream;
+} // end namespace clang.
+
+#endif
diff --git a/clang-r353983/include/clang/Basic/Lambda.h b/clang-r353983/include/clang/Basic/Lambda.h
new file mode 100644
index 00000000..853821a3
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/Lambda.h
@@ -0,0 +1,43 @@
+//===--- Lambda.h - Types for C++ Lambdas -----------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Defines several types used to describe C++ lambda expressions
+/// that are shared between the parser and AST.
+///
+//===----------------------------------------------------------------------===//
+
+
+#ifndef LLVM_CLANG_BASIC_LAMBDA_H
+#define LLVM_CLANG_BASIC_LAMBDA_H
+
+namespace clang {
+
+/// The default, if any, capture method for a lambda expression.
+enum LambdaCaptureDefault {
+ LCD_None,
+ LCD_ByCopy,
+ LCD_ByRef
+};
+
+/// The different capture forms in a lambda introducer
+///
+/// C++11 allows capture of \c this, or of local variables by copy or
+/// by reference. C++1y also allows "init-capture", where the initializer
+/// is an expression.
+enum LambdaCaptureKind {
+ LCK_This, ///< Capturing the \c *this object by reference
+ LCK_StarThis, /// < Capturing the \c *this object by copy
+ LCK_ByCopy, ///< Capturing by copy (a.k.a., by value)
+ LCK_ByRef, ///< Capturing by reference
+ LCK_VLAType ///< Capturing variable-length array type
+};
+
+} // end namespace clang
+
+#endif // LLVM_CLANG_BASIC_LAMBDA_H
diff --git a/clang-r353983/include/clang/Basic/LangOptions.def b/clang-r353983/include/clang/Basic/LangOptions.def
new file mode 100644
index 00000000..d52f9c0b
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/LangOptions.def
@@ -0,0 +1,328 @@
+//===--- LangOptions.def - Language option database -------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the language options. Users of this file must
+// define the LANGOPT macro to make use of this information.
+//
+// Optionally, the user may also define:
+//
+// BENIGN_LANGOPT: for options that don't affect the construction of the AST in
+// any way (that is, the value can be different between an implicit module
+// and the user of that module).
+//
+// COMPATIBLE_LANGOPT: for options that affect the construction of the AST in
+// a way that doesn't prevent interoperability (that is, the value can be
+// different between an explicit module and the user of that module).
+//
+// ENUM_LANGOPT: for options that have enumeration, rather than unsigned, type.
+//
+// VALUE_LANGOPT: for options that describe a value rather than a flag.
+//
+// BENIGN_ENUM_LANGOPT, COMPATIBLE_ENUM_LANGOPT,
+// BENIGN_VALUE_LANGOPT, COMPATIBLE_VALUE_LANGOPT: combinations of the above.
+//
+// FIXME: Clients should be able to more easily select whether they want
+// different levels of compatibility versus how to handle different kinds
+// of option.
+//
+// The Description field should be a noun phrase, for instance "frobbing all
+// widgets" or "C's implicit blintz feature".
+//===----------------------------------------------------------------------===//
+
+#ifndef LANGOPT
+# error Define the LANGOPT macro to handle language options
+#endif
+
+#ifndef COMPATIBLE_LANGOPT
+# define COMPATIBLE_LANGOPT(Name, Bits, Default, Description) \
+ LANGOPT(Name, Bits, Default, Description)
+#endif
+
+#ifndef BENIGN_LANGOPT
+# define BENIGN_LANGOPT(Name, Bits, Default, Description) \
+ COMPATIBLE_LANGOPT(Name, Bits, Default, Description)
+#endif
+
+#ifndef ENUM_LANGOPT
+# define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
+ LANGOPT(Name, Bits, Default, Description)
+#endif
+
+#ifndef COMPATIBLE_ENUM_LANGOPT
+# define COMPATIBLE_ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
+ ENUM_LANGOPT(Name, Type, Bits, Default, Description)
+#endif
+
+#ifndef BENIGN_ENUM_LANGOPT
+# define BENIGN_ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
+ COMPATIBLE_ENUM_LANGOPT(Name, Type, Bits, Default, Description)
+#endif
+
+#ifndef VALUE_LANGOPT
+# define VALUE_LANGOPT(Name, Bits, Default, Description) \
+ LANGOPT(Name, Bits, Default, Description)
+#endif
+
+#ifndef COMPATIBLE_VALUE_LANGOPT
+# define COMPATIBLE_VALUE_LANGOPT(Name, Bits, Default, Description) \
+ VALUE_LANGOPT(Name, Bits, Default, Description)
+#endif
+
+#ifndef BENIGN_VALUE_LANGOPT
+# define BENIGN_VALUE_LANGOPT(Name, Bits, Default, Description) \
+ COMPATIBLE_VALUE_LANGOPT(Name, Bits, Default, Description)
+#endif
+
+// FIXME: A lot of the BENIGN_ options should be COMPATIBLE_ instead.
+LANGOPT(C99 , 1, 0, "C99")
+LANGOPT(C11 , 1, 0, "C11")
+LANGOPT(C17 , 1, 0, "C17")
+LANGOPT(MSVCCompat , 1, 0, "Microsoft Visual C++ full compatibility mode")
+LANGOPT(MicrosoftExt , 1, 0, "Microsoft C++ extensions")
+LANGOPT(AsmBlocks , 1, 0, "Microsoft inline asm blocks")
+LANGOPT(Borland , 1, 0, "Borland extensions")
+LANGOPT(CPlusPlus , 1, 0, "C++")
+LANGOPT(CPlusPlus11 , 1, 0, "C++11")
+LANGOPT(CPlusPlus14 , 1, 0, "C++14")
+LANGOPT(CPlusPlus17 , 1, 0, "C++17")
+LANGOPT(CPlusPlus2a , 1, 0, "C++2a")
+LANGOPT(ObjC , 1, 0, "Objective-C")
+BENIGN_LANGOPT(ObjCDefaultSynthProperties , 1, 0,
+ "Objective-C auto-synthesized properties")
+BENIGN_LANGOPT(EncodeExtendedBlockSig , 1, 0,
+ "Encoding extended block type signature")
+BENIGN_LANGOPT(ObjCInferRelatedResultType , 1, 1,
+ "Objective-C related result type inference")
+LANGOPT(AppExt , 1, 0, "Objective-C App Extension")
+LANGOPT(Trigraphs , 1, 0,"trigraphs")
+LANGOPT(LineComment , 1, 0, "'//' comments")
+LANGOPT(Bool , 1, 0, "bool, true, and false keywords")
+LANGOPT(Half , 1, 0, "half keyword")
+LANGOPT(WChar , 1, CPlusPlus, "wchar_t keyword")
+LANGOPT(Char8 , 1, 0, "char8_t keyword")
+LANGOPT(DeclSpecKeyword , 1, 0, "__declspec keyword")
+BENIGN_LANGOPT(DollarIdents , 1, 1, "'$' in identifiers")
+BENIGN_LANGOPT(AsmPreprocessor, 1, 0, "preprocessor in asm mode")
+LANGOPT(GNUMode , 1, 1, "GNU extensions")
+LANGOPT(GNUKeywords , 1, 1, "GNU keywords")
+BENIGN_LANGOPT(ImplicitInt, 1, !C99 && !CPlusPlus, "C89 implicit 'int'")
+LANGOPT(Digraphs , 1, 0, "digraphs")
+BENIGN_LANGOPT(HexFloats , 1, C99, "C99 hexadecimal float constants")
+LANGOPT(CXXOperatorNames , 1, 0, "C++ operator name keywords")
+LANGOPT(AppleKext , 1, 0, "Apple kext support")
+BENIGN_LANGOPT(PascalStrings, 1, 0, "Pascal string support")
+LANGOPT(WritableStrings , 1, 0, "writable string support")
+LANGOPT(ConstStrings , 1, 0, "const-qualified string support")
+LANGOPT(LaxVectorConversions , 1, 1, "lax vector conversions")
+LANGOPT(AltiVec , 1, 0, "AltiVec-style vector initializers")
+LANGOPT(ZVector , 1, 0, "System z vector extensions")
+LANGOPT(Exceptions , 1, 0, "exception handling")
+LANGOPT(ObjCExceptions , 1, 0, "Objective-C exceptions")
+LANGOPT(CXXExceptions , 1, 0, "C++ exceptions")
+LANGOPT(DWARFExceptions , 1, 0, "dwarf exception handling")
+LANGOPT(SjLjExceptions , 1, 0, "setjmp-longjump exception handling")
+LANGOPT(SEHExceptions , 1, 0, "SEH .xdata exception handling")
+LANGOPT(ExternCNoUnwind , 1, 0, "Assume extern C functions don't unwind")
+LANGOPT(TraditionalCPP , 1, 0, "traditional CPP emulation")
+LANGOPT(RTTI , 1, 1, "run-time type information")
+LANGOPT(RTTIData , 1, 1, "emit run-time type information data")
+LANGOPT(MSBitfields , 1, 0, "Microsoft-compatible structure layout")
+LANGOPT(Freestanding, 1, 0, "freestanding implementation")
+LANGOPT(NoBuiltin , 1, 0, "disable builtin functions")
+LANGOPT(NoMathBuiltin , 1, 0, "disable math builtin functions")
+LANGOPT(GNUAsm , 1, 1, "GNU-style inline assembly")
+LANGOPT(CoroutinesTS , 1, 0, "C++ coroutines TS")
+LANGOPT(DllExportInlines , 1, 1, "dllexported classes dllexport inline methods")
+LANGOPT(RelaxedTemplateTemplateArgs, 1, 0, "C++17 relaxed matching of template template arguments")
+
+LANGOPT(DoubleSquareBracketAttributes, 1, 0, "'[[]]' attributes extension for all language standard modes")
+
+BENIGN_LANGOPT(ThreadsafeStatics , 1, 1, "thread-safe static initializers")
+LANGOPT(POSIXThreads , 1, 0, "POSIX thread support")
+LANGOPT(Blocks , 1, 0, "blocks extension to C")
+BENIGN_LANGOPT(EmitAllDecls , 1, 0, "emitting all declarations")
+LANGOPT(MathErrno , 1, 1, "errno in math functions")
+BENIGN_LANGOPT(HeinousExtensions , 1, 0, "extensions that we really don't like and may be ripped out at any time")
+LANGOPT(Modules , 1, 0, "modules extension to C")
+COMPATIBLE_LANGOPT(ModulesTS , 1, 0, "C++ Modules TS")
+BENIGN_ENUM_LANGOPT(CompilingModule, CompilingModuleKind, 2, CMK_None,
+ "compiling a module interface")
+BENIGN_LANGOPT(CompilingPCH, 1, 0, "building a pch")
+BENIGN_LANGOPT(BuildingPCHWithObjectFile, 1, 0, "building a pch which has a corresponding object file")
+COMPATIBLE_LANGOPT(ModulesDeclUse , 1, 0, "require declaration of module uses")
+BENIGN_LANGOPT(ModulesSearchAll , 1, 1, "searching even non-imported modules to find unresolved references")
+COMPATIBLE_LANGOPT(ModulesStrictDeclUse, 1, 0, "requiring declaration of module uses and all headers to be in modules")
+BENIGN_LANGOPT(ModulesErrorRecovery, 1, 1, "automatically importing modules as needed when performing error recovery")
+BENIGN_LANGOPT(ImplicitModules, 1, 1, "building modules that are not specified via -fmodule-file")
+COMPATIBLE_LANGOPT(ModulesLocalVisibility, 1, 0, "local submodule visibility")
+COMPATIBLE_LANGOPT(Optimize , 1, 0, "__OPTIMIZE__ predefined macro")
+COMPATIBLE_LANGOPT(OptimizeSize , 1, 0, "__OPTIMIZE_SIZE__ predefined macro")
+COMPATIBLE_LANGOPT(Static , 1, 0, "__STATIC__ predefined macro (as opposed to __DYNAMIC__)")
+VALUE_LANGOPT(PackStruct , 32, 0,
+ "default struct packing maximum alignment")
+VALUE_LANGOPT(MaxTypeAlign , 32, 0,
+ "default maximum alignment for types")
+VALUE_LANGOPT(AlignDouble , 1, 0, "Controls if doubles should be aligned to 8 bytes (x86 only)")
+COMPATIBLE_VALUE_LANGOPT(PICLevel , 2, 0, "__PIC__ level")
+COMPATIBLE_VALUE_LANGOPT(PIE , 1, 0, "is pie")
+COMPATIBLE_LANGOPT(GNUInline , 1, 0, "GNU inline semantics")
+COMPATIBLE_LANGOPT(NoInlineDefine , 1, 0, "__NO_INLINE__ predefined macro")
+COMPATIBLE_LANGOPT(Deprecated , 1, 0, "__DEPRECATED predefined macro")
+COMPATIBLE_LANGOPT(FastMath , 1, 0, "fast FP math optimizations, and __FAST_MATH__ predefined macro")
+COMPATIBLE_LANGOPT(FiniteMathOnly , 1, 0, "__FINITE_MATH_ONLY__ predefined macro")
+COMPATIBLE_LANGOPT(UnsafeFPMath , 1, 0, "Unsafe Floating Point Math")
+
+BENIGN_LANGOPT(ObjCGCBitmapPrint , 1, 0, "printing of GC's bitmap layout for __weak/__strong ivars")
+
+BENIGN_LANGOPT(AccessControl , 1, 1, "C++ access control")
+LANGOPT(CharIsSigned , 1, 1, "signed char")
+LANGOPT(WCharSize , 4, 0, "width of wchar_t")
+LANGOPT(WCharIsSigned , 1, 0, "signed or unsigned wchar_t")
+ENUM_LANGOPT(MSPointerToMemberRepresentationMethod, PragmaMSPointersToMembersKind, 2, PPTMK_BestCase, "member-pointer representation method")
+ENUM_LANGOPT(DefaultCallingConv, DefaultCallingConvention, 3, DCC_None, "default calling convention")
+
+LANGOPT(ShortEnums , 1, 0, "short enum types")
+
+LANGOPT(OpenCL , 1, 0, "OpenCL")
+LANGOPT(OpenCLVersion , 32, 0, "OpenCL C version")
+LANGOPT(OpenCLCPlusPlus , 1, 0, "OpenCL C++")
+LANGOPT(OpenCLCPlusPlusVersion , 32, 0, "OpenCL C++ version")
+LANGOPT(NativeHalfType , 1, 0, "Native half type support")
+LANGOPT(NativeHalfArgsAndReturns, 1, 0, "Native half args and returns")
+LANGOPT(HalfArgsAndReturns, 1, 0, "half args and returns")
+LANGOPT(CUDA , 1, 0, "CUDA")
+LANGOPT(HIP , 1, 0, "HIP")
+LANGOPT(OpenMP , 32, 0, "OpenMP support and version of OpenMP (31, 40 or 45)")
+LANGOPT(OpenMPSimd , 1, 0, "Use SIMD only OpenMP support.")
+LANGOPT(OpenMPUseTLS , 1, 0, "Use TLS for threadprivates or runtime calls")
+LANGOPT(OpenMPIsDevice , 1, 0, "Generate code only for OpenMP target device")
+LANGOPT(OpenMPCUDAMode , 1, 0, "Generate code for OpenMP pragmas in SIMT/SPMD mode")
+LANGOPT(OpenMPCUDAForceFullRuntime , 1, 0, "Force to use full runtime in all constructs when offloading to CUDA devices")
+LANGOPT(OpenMPCUDANumSMs , 32, 0, "Number of SMs for CUDA devices.")
+LANGOPT(OpenMPCUDABlocksPerSM , 32, 0, "Number of blocks per SM for CUDA devices.")
+LANGOPT(OpenMPOptimisticCollapse , 1, 0, "Use at most 32 bits to represent the collapsed loop nest counter.")
+LANGOPT(RenderScript , 1, 0, "RenderScript")
+
+LANGOPT(CUDAIsDevice , 1, 0, "compiling for CUDA device")
+LANGOPT(CUDAAllowVariadicFunctions, 1, 0, "allowing variadic functions in CUDA device code")
+LANGOPT(CUDAHostDeviceConstexpr, 1, 1, "treating unattributed constexpr functions as __host__ __device__")
+LANGOPT(CUDADeviceApproxTranscendentals, 1, 0, "using approximate transcendental functions")
+LANGOPT(GPURelocatableDeviceCode, 1, 0, "generate relocatable device code")
+
+LANGOPT(SizedDeallocation , 1, 0, "sized deallocation")
+LANGOPT(AlignedAllocation , 1, 0, "aligned allocation")
+LANGOPT(AlignedAllocationUnavailable, 1, 0, "aligned allocation functions are unavailable")
+LANGOPT(NewAlignOverride , 32, 0, "maximum alignment guaranteed by '::operator new(size_t)'")
+LANGOPT(ConceptsTS , 1, 0, "enable C++ Extensions for Concepts")
+BENIGN_LANGOPT(ModulesCodegen , 1, 0, "Modules code generation")
+BENIGN_LANGOPT(ModulesDebugInfo , 1, 0, "Modules debug info")
+BENIGN_LANGOPT(ElideConstructors , 1, 1, "C++ copy constructor elision")
+BENIGN_LANGOPT(DumpRecordLayouts , 1, 0, "dumping the layout of IRgen'd records")
+BENIGN_LANGOPT(DumpRecordLayoutsSimple , 1, 0, "dumping the layout of IRgen'd records in a simple form")
+BENIGN_LANGOPT(DumpVTableLayouts , 1, 0, "dumping the layouts of emitted vtables")
+LANGOPT(NoConstantCFStrings , 1, 0, "no constant CoreFoundation strings")
+BENIGN_LANGOPT(InlineVisibilityHidden , 1, 0, "hidden visibility for inline C++ methods")
+LANGOPT(GlobalAllocationFunctionVisibilityHidden , 1, 0, "hidden visibility for global operator new and delete declaration")
+BENIGN_LANGOPT(ParseUnknownAnytype, 1, 0, "__unknown_anytype")
+BENIGN_LANGOPT(DebuggerSupport , 1, 0, "debugger support")
+BENIGN_LANGOPT(DebuggerCastResultToId, 1, 0, "for 'po' in the debugger, cast the result to id if it is of unknown type")
+BENIGN_LANGOPT(DebuggerObjCLiteral , 1, 0, "debugger Objective-C literals and subscripting support")
+
+BENIGN_LANGOPT(SpellChecking , 1, 1, "spell-checking")
+LANGOPT(SinglePrecisionConstants , 1, 0, "treating double-precision floating point constants as single precision constants")
+LANGOPT(FastRelaxedMath , 1, 0, "OpenCL fast relaxed math")
+/// FP_CONTRACT mode (on/off/fast).
+ENUM_LANGOPT(DefaultFPContractMode, FPContractModeKind, 2, FPC_Off, "FP contraction type")
+LANGOPT(NoBitFieldTypeAlign , 1, 0, "bit-field type alignment")
+LANGOPT(HexagonQdsp6Compat , 1, 0, "hexagon-qdsp6 backward compatibility")
+LANGOPT(ObjCAutoRefCount , 1, 0, "Objective-C automated reference counting")
+LANGOPT(ObjCWeakRuntime , 1, 0, "__weak support in the ARC runtime")
+LANGOPT(ObjCWeak , 1, 0, "Objective-C __weak in ARC and MRC files")
+LANGOPT(ObjCSubscriptingLegacyRuntime , 1, 0, "Subscripting support in legacy ObjectiveC runtime")
+LANGOPT(CFProtectionBranch , 1, 0, "Control-Flow Branch Protection enabled")
+LANGOPT(FakeAddressSpaceMap , 1, 0, "OpenCL fake address space map")
+ENUM_LANGOPT(AddressSpaceMapMangling , AddrSpaceMapMangling, 2, ASMM_Target, "OpenCL address space map mangling mode")
+LANGOPT(IncludeDefaultHeader, 1, 0, "Include default header file for OpenCL")
+BENIGN_LANGOPT(DelayedTemplateParsing , 1, 0, "delayed template parsing")
+LANGOPT(BlocksRuntimeOptional , 1, 0, "optional blocks runtime")
+LANGOPT(
+ CompleteMemberPointers, 1, 0,
+ "Require member pointer base types to be complete at the point where the "
+ "type's inheritance model would be determined under the Microsoft ABI")
+
+ENUM_LANGOPT(GC, GCMode, 2, NonGC, "Objective-C Garbage Collection mode")
+ENUM_LANGOPT(ValueVisibilityMode, Visibility, 3, DefaultVisibility,
+ "default visibility for functions and variables [-fvisibility]")
+ENUM_LANGOPT(TypeVisibilityMode, Visibility, 3, DefaultVisibility,
+ "default visibility for types [-ftype-visibility]")
+LANGOPT(SetVisibilityForExternDecls, 1, 0,
+ "apply global symbol visibility to external declarations without an explicit visibility")
+ENUM_LANGOPT(StackProtector, StackProtectorMode, 2, SSPOff,
+ "stack protector mode")
+ENUM_LANGOPT(TrivialAutoVarInit, TrivialAutoVarInitKind, 2, TrivialAutoVarInitKind::Uninitialized,
+ "trivial automatic variable initialization")
+ENUM_LANGOPT(SignedOverflowBehavior, SignedOverflowBehaviorTy, 2, SOB_Undefined,
+ "signed integer overflow handling")
+
+BENIGN_LANGOPT(ArrowDepth, 32, 256,
+ "maximum number of operator->s to follow")
+BENIGN_LANGOPT(InstantiationDepth, 32, 1024,
+ "maximum template instantiation depth")
+BENIGN_LANGOPT(ConstexprCallDepth, 32, 512,
+ "maximum constexpr call depth")
+BENIGN_LANGOPT(ConstexprStepLimit, 32, 1048576,
+ "maximum constexpr evaluation steps")
+BENIGN_LANGOPT(BracketDepth, 32, 256,
+ "maximum bracket nesting depth")
+BENIGN_LANGOPT(NumLargeByValueCopy, 32, 0,
+ "if non-zero, warn about parameter or return Warn if parameter/return value is larger in bytes than this setting. 0 is no check.")
+VALUE_LANGOPT(MSCompatibilityVersion, 32, 0, "Microsoft Visual C/C++ Version")
+VALUE_LANGOPT(VtorDispMode, 2, 1, "How many vtordisps to insert")
+
+LANGOPT(ApplePragmaPack, 1, 0, "Apple gcc-compatible #pragma pack handling")
+
+LANGOPT(RetainCommentsFromSystemHeaders, 1, 0, "retain documentation comments from system headers in the AST")
+
+LANGOPT(SanitizeAddressFieldPadding, 2, 0, "controls how aggressive is ASan "
+ "field padding (0: none, 1:least "
+ "aggressive, 2: more aggressive)")
+
+LANGOPT(XRayInstrument, 1, 0, "controls whether to do XRay instrumentation")
+LANGOPT(XRayAlwaysEmitCustomEvents, 1, 0,
+ "controls whether to always emit intrinsic calls to "
+ "__xray_customevent(...) builtin.")
+LANGOPT(XRayAlwaysEmitTypedEvents, 1, 0,
+ "controls whether to always emit intrinsic calls to "
+ "__xray_typedevent(...) builtin.")
+
+LANGOPT(ForceEmitVTables, 1, 0, "whether to emit all vtables")
+
+BENIGN_LANGOPT(AllowEditorPlaceholders, 1, 0,
+ "allow editor placeholders in source")
+
+ENUM_LANGOPT(ClangABICompat, ClangABI, 4, ClangABI::Latest,
+ "version of Clang that we should attempt to be ABI-compatible "
+ "with")
+
+COMPATIBLE_VALUE_LANGOPT(FunctionAlignment, 5, 0, "Default alignment for functions")
+
+LANGOPT(FixedPoint, 1, 0, "fixed point types")
+LANGOPT(PaddingOnUnsignedFixedPoint, 1, 0,
+ "unsigned fixed point types having one extra padding bit")
+
+LANGOPT(RegisterStaticDestructors, 1, 1, "Register C++ static destructors")
+
+#undef LANGOPT
+#undef COMPATIBLE_LANGOPT
+#undef BENIGN_LANGOPT
+#undef ENUM_LANGOPT
+#undef COMPATIBLE_ENUM_LANGOPT
+#undef BENIGN_ENUM_LANGOPT
+#undef VALUE_LANGOPT
+#undef COMPATIBLE_VALUE_LANGOPT
+#undef BENIGN_VALUE_LANGOPT
diff --git a/clang-r353983/include/clang/Basic/LangOptions.h b/clang-r353983/include/clang/Basic/LangOptions.h
new file mode 100644
index 00000000..c7e29931
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/LangOptions.h
@@ -0,0 +1,375 @@
+//===- LangOptions.h - C Language Family Language Options -------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+/// \file
+/// Defines the clang::LangOptions interface.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_LANGOPTIONS_H
+#define LLVM_CLANG_BASIC_LANGOPTIONS_H
+
+#include "clang/Basic/CommentOptions.h"
+#include "clang/Basic/LLVM.h"
+#include "clang/Basic/ObjCRuntime.h"
+#include "clang/Basic/Sanitizers.h"
+#include "clang/Basic/Visibility.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/ADT/Triple.h"
+#include <string>
+#include <vector>
+
+namespace clang {
+
+/// Bitfields of LangOptions, split out from LangOptions in order to ensure that
+/// this large collection of bitfields is a trivial class type.
+class LangOptionsBase {
+public:
+ // Define simple language options (with no accessors).
+#define LANGOPT(Name, Bits, Default, Description) unsigned Name : Bits;
+#define ENUM_LANGOPT(Name, Type, Bits, Default, Description)
+#include "clang/Basic/LangOptions.def"
+
+protected:
+ // Define language options of enumeration type. These are private, and will
+ // have accessors (below).
+#define LANGOPT(Name, Bits, Default, Description)
+#define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
+ unsigned Name : Bits;
+#include "clang/Basic/LangOptions.def"
+};
+
+/// Keeps track of the various options that can be
+/// enabled, which controls the dialect of C or C++ that is accepted.
+class LangOptions : public LangOptionsBase {
+public:
+ using Visibility = clang::Visibility;
+
+ enum GCMode { NonGC, GCOnly, HybridGC };
+ enum StackProtectorMode { SSPOff, SSPOn, SSPStrong, SSPReq };
+
+ // Automatic variables live on the stack, and when trivial they're usually
+ // uninitialized because it's undefined behavior to use them without
+ // initializing them.
+ enum class TrivialAutoVarInitKind { Uninitialized, Zero, Pattern };
+
+ enum SignedOverflowBehaviorTy {
+ // Default C standard behavior.
+ SOB_Undefined,
+
+ // -fwrapv
+ SOB_Defined,
+
+ // -ftrapv
+ SOB_Trapping
+ };
+
+ // FIXME: Unify with TUKind.
+ enum CompilingModuleKind {
+ /// Not compiling a module interface at all.
+ CMK_None,
+
+ /// Compiling a module from a module map.
+ CMK_ModuleMap,
+
+ /// Compiling a module from a list of header files.
+ CMK_HeaderModule,
+
+ /// Compiling a C++ modules TS module interface unit.
+ CMK_ModuleInterface,
+ };
+
+ enum PragmaMSPointersToMembersKind {
+ PPTMK_BestCase,
+ PPTMK_FullGeneralitySingleInheritance,
+ PPTMK_FullGeneralityMultipleInheritance,
+ PPTMK_FullGeneralityVirtualInheritance
+ };
+
+ enum DefaultCallingConvention {
+ DCC_None,
+ DCC_CDecl,
+ DCC_FastCall,
+ DCC_StdCall,
+ DCC_VectorCall,
+ DCC_RegCall
+ };
+
+ enum AddrSpaceMapMangling { ASMM_Target, ASMM_On, ASMM_Off };
+
+ // Corresponds to _MSC_VER
+ enum MSVCMajorVersion {
+ MSVC2010 = 1600,
+ MSVC2012 = 1700,
+ MSVC2013 = 1800,
+ MSVC2015 = 1900,
+ MSVC2017 = 1910,
+ MSVC2017_5 = 1912
+ };
+
+ /// Clang versions with different platform ABI conformance.
+ enum class ClangABI {
+ /// Attempt to be ABI-compatible with code generated by Clang 3.8.x
+ /// (SVN r257626). This causes <1 x long long> to be passed in an
+ /// integer register instead of an SSE register on x64_64.
+ Ver3_8,
+
+ /// Attempt to be ABI-compatible with code generated by Clang 4.0.x
+ /// (SVN r291814). This causes move operations to be ignored when
+ /// determining whether a class type can be passed or returned directly.
+ Ver4,
+
+ /// Attempt to be ABI-compatible with code generated by Clang 6.0.x
+ /// (SVN r321711). This causes determination of whether a type is
+ /// standard-layout to ignore collisions between empty base classes
+ /// and between base classes and member subobjects, which affects
+ /// whether we reuse base class tail padding in some ABIs.
+ Ver6,
+
+ /// Attempt to be ABI-compatible with code generated by Clang 7.0.x
+ /// (SVN r338536). This causes alignof (C++) and _Alignof (C11) to be
+ /// compatible with __alignof (i.e., return the preferred alignment)
+ /// rather than returning the required alignment.
+ Ver7,
+
+ /// Conform to the underlying platform's C and C++ ABIs as closely
+ /// as we can.
+ Latest
+ };
+
+ enum class CoreFoundationABI {
+ /// No interoperability ABI has been specified
+ Unspecified,
+ /// CoreFoundation does not have any language interoperability
+ Standalone,
+ /// Interoperability with the ObjectiveC runtime
+ ObjectiveC,
+ /// Interoperability with the latest known version of the Swift runtime
+ Swift,
+ /// Interoperability with the Swift 5.0 runtime
+ Swift5_0,
+ /// Interoperability with the Swift 4.2 runtime
+ Swift4_2,
+ /// Interoperability with the Swift 4.1 runtime
+ Swift4_1,
+ };
+
+ enum FPContractModeKind {
+ // Form fused FP ops only where result will not be affected.
+ FPC_Off,
+
+ // Form fused FP ops according to FP_CONTRACT rules.
+ FPC_On,
+
+ // Aggressively fuse FP ops (E.g. FMA).
+ FPC_Fast
+ };
+
+ // TODO: merge FEnvAccessModeKind and FPContractModeKind
+ enum FEnvAccessModeKind {
+ FEA_Off,
+
+ FEA_On
+ };
+
+
+public:
+ /// Set of enabled sanitizers.
+ SanitizerSet Sanitize;
+
+ /// Paths to blacklist files specifying which objects
+ /// (files, functions, variables) should not be instrumented.
+ std::vector<std::string> SanitizerBlacklistFiles;
+
+ /// Paths to the XRay "always instrument" files specifying which
+ /// objects (files, functions, variables) should be imbued with the XRay
+ /// "always instrument" attribute.
+ /// WARNING: This is a deprecated field and will go away in the future.
+ std::vector<std::string> XRayAlwaysInstrumentFiles;
+
+ /// Paths to the XRay "never instrument" files specifying which
+ /// objects (files, functions, variables) should be imbued with the XRay
+ /// "never instrument" attribute.
+ /// WARNING: This is a deprecated field and will go away in the future.
+ std::vector<std::string> XRayNeverInstrumentFiles;
+
+ /// Paths to the XRay attribute list files, specifying which objects
+ /// (files, functions, variables) should be imbued with the appropriate XRay
+ /// attribute(s).
+ std::vector<std::string> XRayAttrListFiles;
+
+ clang::ObjCRuntime ObjCRuntime;
+
+ CoreFoundationABI CFRuntime = CoreFoundationABI::Unspecified;
+
+ std::string ObjCConstantStringClass;
+
+ /// The name of the handler function to be called when -ftrapv is
+ /// specified.
+ ///
+ /// If none is specified, abort (GCC-compatible behaviour).
+ std::string OverflowHandler;
+
+ /// The module currently being compiled as specified by -fmodule-name.
+ std::string ModuleName;
+
+ /// The name of the current module, of which the main source file
+ /// is a part. If CompilingModule is set, we are compiling the interface
+ /// of this module, otherwise we are compiling an implementation file of
+ /// it. This starts as ModuleName in case -fmodule-name is provided and
+ /// changes during compilation to reflect the current module.
+ std::string CurrentModule;
+
+ /// The names of any features to enable in module 'requires' decls
+ /// in addition to the hard-coded list in Module.cpp and the target features.
+ ///
+ /// This list is sorted.
+ std::vector<std::string> ModuleFeatures;
+
+ /// Options for parsing comments.
+ CommentOptions CommentOpts;
+
+ /// A list of all -fno-builtin-* function names (e.g., memset).
+ std::vector<std::string> NoBuiltinFuncs;
+
+ /// Triples of the OpenMP targets that the host code codegen should
+ /// take into account in order to generate accurate offloading descriptors.
+ std::vector<llvm::Triple> OMPTargetTriples;
+
+ /// Name of the IR file that contains the result of the OpenMP target
+ /// host code generation.
+ std::string OMPHostIRFile;
+
+ /// Indicates whether the front-end is explicitly told that the
+ /// input is a header file (i.e. -x c-header).
+ bool IsHeaderFile = false;
+
+ LangOptions();
+
+ // Define accessors/mutators for language options of enumeration type.
+#define LANGOPT(Name, Bits, Default, Description)
+#define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
+ Type get##Name() const { return static_cast<Type>(Name); } \
+ void set##Name(Type Value) { Name = static_cast<unsigned>(Value); }
+#include "clang/Basic/LangOptions.def"
+
+ /// Are we compiling a module interface (.cppm or module map)?
+ bool isCompilingModule() const {
+ return getCompilingModule() != CMK_None;
+ }
+
+ /// Do we need to track the owning module for a local declaration?
+ bool trackLocalOwningModule() const {
+ return isCompilingModule() || ModulesLocalVisibility || ModulesTS;
+ }
+
+ bool isSignedOverflowDefined() const {
+ return getSignedOverflowBehavior() == SOB_Defined;
+ }
+
+ bool isSubscriptPointerArithmetic() const {
+ return ObjCRuntime.isSubscriptPointerArithmetic() &&
+ !ObjCSubscriptingLegacyRuntime;
+ }
+
+ bool isCompatibleWithMSVC(MSVCMajorVersion MajorVersion) const {
+ return MSCompatibilityVersion >= MajorVersion * 100000U;
+ }
+
+ /// Reset all of the options that are not considered when building a
+ /// module.
+ void resetNonModularOptions();
+
+ /// Is this a libc/libm function that is no longer recognized as a
+ /// builtin because a -fno-builtin-* option has been specified?
+ bool isNoBuiltinFunc(StringRef Name) const;
+
+ /// True if any ObjC types may have non-trivial lifetime qualifiers.
+ bool allowsNonTrivialObjCLifetimeQualifiers() const {
+ return ObjCAutoRefCount || ObjCWeak;
+ }
+
+ bool assumeFunctionsAreConvergent() const {
+ return (CUDA && CUDAIsDevice) || OpenCL;
+ }
+
+ /// Return the OpenCL C or C++ version as a VersionTuple.
+ VersionTuple getOpenCLVersionTuple() const;
+};
+
+/// Floating point control options
+class FPOptions {
+public:
+ FPOptions() : fp_contract(LangOptions::FPC_Off),
+ fenv_access(LangOptions::FEA_Off) {}
+
+ // Used for serializing.
+ explicit FPOptions(unsigned I)
+ : fp_contract(static_cast<LangOptions::FPContractModeKind>(I & 3)),
+ fenv_access(static_cast<LangOptions::FEnvAccessModeKind>((I >> 2) & 1))
+ {}
+
+ explicit FPOptions(const LangOptions &LangOpts)
+ : fp_contract(LangOpts.getDefaultFPContractMode()),
+ fenv_access(LangOptions::FEA_Off) {}
+ // FIXME: Use getDefaultFEnvAccessMode() when available.
+
+ bool allowFPContractWithinStatement() const {
+ return fp_contract == LangOptions::FPC_On;
+ }
+
+ bool allowFPContractAcrossStatement() const {
+ return fp_contract == LangOptions::FPC_Fast;
+ }
+
+ void setAllowFPContractWithinStatement() {
+ fp_contract = LangOptions::FPC_On;
+ }
+
+ void setAllowFPContractAcrossStatement() {
+ fp_contract = LangOptions::FPC_Fast;
+ }
+
+ void setDisallowFPContract() { fp_contract = LangOptions::FPC_Off; }
+
+ bool allowFEnvAccess() const {
+ return fenv_access == LangOptions::FEA_On;
+ }
+
+ void setAllowFEnvAccess() {
+ fenv_access = LangOptions::FEA_On;
+ }
+
+ void setDisallowFEnvAccess() { fenv_access = LangOptions::FEA_Off; }
+
+ /// Used to serialize this.
+ unsigned getInt() const { return fp_contract | (fenv_access << 2); }
+
+private:
+ /// Adjust BinaryOperator::FPFeatures to match the total bit-field size
+ /// of these two.
+ unsigned fp_contract : 2;
+ unsigned fenv_access : 1;
+};
+
+/// Describes the kind of translation unit being processed.
+enum TranslationUnitKind {
+ /// The translation unit is a complete translation unit.
+ TU_Complete,
+
+ /// The translation unit is a prefix to a translation unit, and is
+ /// not complete.
+ TU_Prefix,
+
+ /// The translation unit is a module.
+ TU_Module
+};
+
+} // namespace clang
+
+#endif // LLVM_CLANG_BASIC_LANGOPTIONS_H
diff --git a/clang-r353983/include/clang/Basic/Linkage.h b/clang-r353983/include/clang/Basic/Linkage.h
new file mode 100644
index 00000000..696f85b1
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/Linkage.h
@@ -0,0 +1,128 @@
+//===- Linkage.h - Linkage enumeration and utilities ------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+/// \file
+/// Defines the Linkage enumeration and various utility functions.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_LINKAGE_H
+#define LLVM_CLANG_BASIC_LINKAGE_H
+
+#include <utility>
+
+namespace clang {
+
+/// Describes the different kinds of linkage
+/// (C++ [basic.link], C99 6.2.2) that an entity may have.
+enum Linkage : unsigned char {
+ /// No linkage, which means that the entity is unique and
+ /// can only be referred to from within its scope.
+ NoLinkage = 0,
+
+ /// Internal linkage, which indicates that the entity can
+ /// be referred to from within the translation unit (but not other
+ /// translation units).
+ InternalLinkage,
+
+ /// External linkage within a unique namespace.
+ ///
+ /// From the language perspective, these entities have external
+ /// linkage. However, since they reside in an anonymous namespace,
+ /// their names are unique to this translation unit, which is
+ /// equivalent to having internal linkage from the code-generation
+ /// point of view.
+ UniqueExternalLinkage,
+
+ /// No linkage according to the standard, but is visible from other
+ /// translation units because of types defined in a inline function.
+ VisibleNoLinkage,
+
+ /// Internal linkage according to the Modules TS, but can be referred
+ /// to from other translation units indirectly through inline functions and
+ /// templates in the module interface.
+ ModuleInternalLinkage,
+
+ /// Module linkage, which indicates that the entity can be referred
+ /// to from other translation units within the same module, and indirectly
+ /// from arbitrary other translation units through inline functions and
+ /// templates in the module interface.
+ ModuleLinkage,
+
+ /// External linkage, which indicates that the entity can
+ /// be referred to from other translation units.
+ ExternalLinkage
+};
+
+/// Describes the different kinds of language linkage
+/// (C++ [dcl.link]) that an entity may have.
+enum LanguageLinkage {
+ CLanguageLinkage,
+ CXXLanguageLinkage,
+ NoLanguageLinkage
+};
+
+/// A more specific kind of linkage than enum Linkage.
+///
+/// This is relevant to CodeGen and AST file reading.
+enum GVALinkage {
+ GVA_Internal,
+ GVA_AvailableExternally,
+ GVA_DiscardableODR,
+ GVA_StrongExternal,
+ GVA_StrongODR
+};
+
+inline bool isDiscardableGVALinkage(GVALinkage L) {
+ return L <= GVA_DiscardableODR;
+}
+
+inline bool isExternallyVisible(Linkage L) {
+ return L >= VisibleNoLinkage;
+}
+
+inline Linkage getFormalLinkage(Linkage L) {
+ switch (L) {
+ case UniqueExternalLinkage:
+ return ExternalLinkage;
+ case VisibleNoLinkage:
+ return NoLinkage;
+ case ModuleInternalLinkage:
+ return InternalLinkage;
+ default:
+ return L;
+ }
+}
+
+inline bool isExternalFormalLinkage(Linkage L) {
+ return getFormalLinkage(L) == ExternalLinkage;
+}
+
+/// Compute the minimum linkage given two linkages.
+///
+/// The linkage can be interpreted as a pair formed by the formal linkage and
+/// a boolean for external visibility. This is just what getFormalLinkage and
+/// isExternallyVisible return. We want the minimum of both components. The
+/// Linkage enum is defined in an order that makes this simple, we just need
+/// special cases for when VisibleNoLinkage would lose the visible bit and
+/// become NoLinkage.
+inline Linkage minLinkage(Linkage L1, Linkage L2) {
+ if (L2 == VisibleNoLinkage)
+ std::swap(L1, L2);
+ if (L1 == VisibleNoLinkage) {
+ if (L2 == InternalLinkage)
+ return NoLinkage;
+ if (L2 == UniqueExternalLinkage)
+ return NoLinkage;
+ }
+ return L1 < L2 ? L1 : L2;
+}
+
+} // namespace clang
+
+#endif // LLVM_CLANG_BASIC_LINKAGE_H
diff --git a/clang-r353983/include/clang/Basic/MSP430Target.def b/clang-r353983/include/clang/Basic/MSP430Target.def
new file mode 100644
index 00000000..a1e192c1
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/MSP430Target.def
@@ -0,0 +1,246 @@
+//===--- MSP430Target.def - MSP430 Feature/Processor Database----*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the MSP430 devices and their features.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef MSP430_MCU_FEAT
+#define MSP430_MCU_FEAT(NAME, HWMULT) MSP430_MCU(NAME)
+#endif
+
+#ifndef MSP430_MCU
+#define MSP430_MCU(NAME)
+#endif
+
+MSP430_MCU("msp430c111")
+MSP430_MCU("msp430c1111")
+MSP430_MCU("msp430c112")
+MSP430_MCU("msp430c1121")
+MSP430_MCU("msp430c1331")
+MSP430_MCU("msp430c1351")
+MSP430_MCU("msp430e112")
+MSP430_MCU("msp430f110")
+MSP430_MCU("msp430f1101")
+MSP430_MCU("msp430f1101a")
+MSP430_MCU("msp430f1111")
+MSP430_MCU("msp430f1111a")
+MSP430_MCU("msp430f112")
+MSP430_MCU("msp430f1121")
+MSP430_MCU("msp430f1121a")
+MSP430_MCU("msp430f1122")
+MSP430_MCU("msp430f1132")
+MSP430_MCU("msp430f122")
+MSP430_MCU("msp430f1222")
+MSP430_MCU("msp430f123")
+MSP430_MCU("msp430f1232")
+MSP430_MCU("msp430f133")
+MSP430_MCU("msp430f135")
+MSP430_MCU("msp430f155")
+MSP430_MCU("msp430f156")
+MSP430_MCU("msp430f157")
+MSP430_MCU("msp430p112")
+MSP430_MCU("msp430f2001")
+MSP430_MCU("msp430f2011")
+MSP430_MCU("msp430f2002")
+MSP430_MCU("msp430f2012")
+MSP430_MCU("msp430f2003")
+MSP430_MCU("msp430f2013")
+MSP430_MCU("msp430f2101")
+MSP430_MCU("msp430f2111")
+MSP430_MCU("msp430f2121")
+MSP430_MCU("msp430f2131")
+MSP430_MCU("msp430f2112")
+MSP430_MCU("msp430f2122")
+MSP430_MCU("msp430f2132")
+MSP430_MCU("msp430f2232")
+MSP430_MCU("msp430f2252")
+MSP430_MCU("msp430f2272")
+MSP430_MCU("msp430f2234")
+MSP430_MCU("msp430f2254")
+MSP430_MCU("msp430f2274")
+MSP430_MCU("msp430g2211")
+MSP430_MCU("msp430g2201")
+MSP430_MCU("msp430g2111")
+MSP430_MCU("msp430g2101")
+MSP430_MCU("msp430g2001")
+MSP430_MCU("msp430g2231")
+MSP430_MCU("msp430g2221")
+MSP430_MCU("msp430g2131")
+MSP430_MCU("msp430g2121")
+MSP430_MCU("msp430g2102")
+MSP430_MCU("msp430g2202")
+MSP430_MCU("msp430g2302")
+MSP430_MCU("msp430g2402")
+MSP430_MCU("msp430g2132")
+MSP430_MCU("msp430g2232")
+MSP430_MCU("msp430g2332")
+MSP430_MCU("msp430g2432")
+MSP430_MCU("msp430g2112")
+MSP430_MCU("msp430g2212")
+MSP430_MCU("msp430g2312")
+MSP430_MCU("msp430g2412")
+MSP430_MCU("msp430g2152")
+MSP430_MCU("msp430g2252")
+MSP430_MCU("msp430g2352")
+MSP430_MCU("msp430g2452")
+MSP430_MCU("msp430g2113")
+MSP430_MCU("msp430g2213")
+MSP430_MCU("msp430g2313")
+MSP430_MCU("msp430g2413")
+MSP430_MCU("msp430g2513")
+MSP430_MCU("msp430g2153")
+MSP430_MCU("msp430g2253")
+MSP430_MCU("msp430g2353")
+MSP430_MCU("msp430g2453")
+MSP430_MCU("msp430g2553")
+MSP430_MCU("msp430g2203")
+MSP430_MCU("msp430g2303")
+MSP430_MCU("msp430g2403")
+MSP430_MCU("msp430g2233")
+MSP430_MCU("msp430g2333")
+MSP430_MCU("msp430g2433")
+MSP430_MCU("msp430g2533")
+MSP430_MCU("msp430tch5e")
+MSP430_MCU("msp430g2444")
+MSP430_MCU("msp430g2544")
+MSP430_MCU("msp430g2744")
+MSP430_MCU("msp430g2755")
+MSP430_MCU("msp430g2855")
+MSP430_MCU("msp430g2955")
+MSP430_MCU("msp430g2230")
+MSP430_MCU("msp430g2210")
+MSP430_MCU("msp430c311s")
+MSP430_MCU("msp430c312")
+MSP430_MCU("msp430c313")
+MSP430_MCU("msp430c314")
+MSP430_MCU("msp430c315")
+MSP430_MCU("msp430c323")
+MSP430_MCU("msp430c325")
+MSP430_MCU("msp430c412")
+MSP430_MCU("msp430c413")
+MSP430_MCU("msp430e313")
+MSP430_MCU("msp430e315")
+MSP430_MCU("msp430e325")
+MSP430_MCU("msp430p313")
+MSP430_MCU("msp430p315")
+MSP430_MCU("msp430p315s")
+MSP430_MCU("msp430p325")
+MSP430_MCU("msp430f412")
+MSP430_MCU("msp430f413")
+MSP430_MCU("msp430f415")
+MSP430_MCU("msp430f417")
+MSP430_MCU("msp430f4132")
+MSP430_MCU("msp430f4152")
+MSP430_MCU("msp430f435")
+MSP430_MCU("msp430f436")
+MSP430_MCU("msp430f437")
+MSP430_MCU("msp430f4351")
+MSP430_MCU("msp430f4361")
+MSP430_MCU("msp430f4371")
+MSP430_MCU("msp430fe423")
+MSP430_MCU("msp430fe425")
+MSP430_MCU("msp430fe427")
+MSP430_MCU("msp430fe423a")
+MSP430_MCU("msp430fe425a")
+MSP430_MCU("msp430fe427a")
+MSP430_MCU("msp430fe4232")
+MSP430_MCU("msp430fe4242")
+MSP430_MCU("msp430fe4252")
+MSP430_MCU("msp430fe4272")
+MSP430_MCU("msp430f4250")
+MSP430_MCU("msp430f4260")
+MSP430_MCU("msp430f4270")
+MSP430_MCU("msp430fg4250")
+MSP430_MCU("msp430fg4260")
+MSP430_MCU("msp430fg4270")
+MSP430_MCU("msp430fw423")
+MSP430_MCU("msp430fw425")
+MSP430_MCU("msp430fw427")
+MSP430_MCU("msp430fw428")
+MSP430_MCU("msp430fw429")
+MSP430_MCU("msp430fg437")
+MSP430_MCU("msp430fg438")
+MSP430_MCU("msp430fg439")
+MSP430_MCU("msp430f438")
+MSP430_MCU("msp430f439")
+MSP430_MCU("msp430f477")
+MSP430_MCU("msp430f478")
+MSP430_MCU("msp430f479")
+MSP430_MCU("msp430fg477")
+MSP430_MCU("msp430fg478")
+MSP430_MCU("msp430fg479")
+
+// With 16-bit hardware multiplier
+MSP430_MCU_FEAT("msp430f147", "16bit")
+MSP430_MCU_FEAT("msp430f148", "16bit")
+MSP430_MCU_FEAT("msp430f149", "16bit")
+MSP430_MCU_FEAT("msp430f1471", "16bit")
+MSP430_MCU_FEAT("msp430f1481", "16bit")
+MSP430_MCU_FEAT("msp430f1491", "16bit")
+MSP430_MCU_FEAT("msp430f167", "16bit")
+MSP430_MCU_FEAT("msp430f168", "16bit")
+MSP430_MCU_FEAT("msp430f169", "16bit")
+MSP430_MCU_FEAT("msp430f1610", "16bit")
+MSP430_MCU_FEAT("msp430f1611", "16bit")
+MSP430_MCU_FEAT("msp430f1612", "16bit")
+MSP430_MCU_FEAT("msp430c336", "16bit")
+MSP430_MCU_FEAT("msp430c337", "16bit")
+MSP430_MCU_FEAT("msp430e337", "16bit")
+MSP430_MCU_FEAT("msp430p337", "16bit")
+MSP430_MCU_FEAT("msp430f423", "16bit")
+MSP430_MCU_FEAT("msp430f425", "16bit")
+MSP430_MCU_FEAT("msp430f427", "16bit")
+MSP430_MCU_FEAT("msp430f423a", "16bit")
+MSP430_MCU_FEAT("msp430f425a", "16bit")
+MSP430_MCU_FEAT("msp430f427a", "16bit")
+MSP430_MCU_FEAT("msp430f4481", "16bit")
+MSP430_MCU_FEAT("msp430f4491", "16bit")
+MSP430_MCU_FEAT("msp430f447", "16bit")
+MSP430_MCU_FEAT("msp430f448", "16bit")
+MSP430_MCU_FEAT("msp430f449", "16bit")
+MSP430_MCU_FEAT("msp430f2330", "16bit")
+MSP430_MCU_FEAT("msp430f2350", "16bit")
+MSP430_MCU_FEAT("msp430f2370", "16bit")
+MSP430_MCU_FEAT("msp430f233", "16bit")
+MSP430_MCU_FEAT("msp430f235", "16bit")
+MSP430_MCU_FEAT("msp430f247", "16bit")
+MSP430_MCU_FEAT("msp430f248", "16bit")
+MSP430_MCU_FEAT("msp430f249", "16bit")
+MSP430_MCU_FEAT("msp430f2410", "16bit")
+MSP430_MCU_FEAT("msp430f2471", "16bit")
+MSP430_MCU_FEAT("msp430f2481", "16bit")
+MSP430_MCU_FEAT("msp430f2491", "16bit")
+MSP430_MCU_FEAT("msp430i2020", "16bit")
+MSP430_MCU_FEAT("msp430i2021", "16bit")
+MSP430_MCU_FEAT("msp430i2030", "16bit")
+MSP430_MCU_FEAT("msp430i2031", "16bit")
+MSP430_MCU_FEAT("msp430i2040", "16bit")
+MSP430_MCU_FEAT("msp430i2041", "16bit")
+MSP430_MCU_FEAT("msp430afe221", "16bit")
+MSP430_MCU_FEAT("msp430afe231", "16bit")
+MSP430_MCU_FEAT("msp430afe251", "16bit")
+MSP430_MCU_FEAT("msp430afe222", "16bit")
+MSP430_MCU_FEAT("msp430afe232", "16bit")
+MSP430_MCU_FEAT("msp430afe252", "16bit")
+MSP430_MCU_FEAT("msp430afe223", "16bit")
+MSP430_MCU_FEAT("msp430afe233", "16bit")
+MSP430_MCU_FEAT("msp430afe253", "16bit")
+
+// With 32 Bit Hardware Multiplier
+MSP430_MCU_FEAT("msp430f4783", "32bit")
+MSP430_MCU_FEAT("msp430f4793", "32bit")
+MSP430_MCU_FEAT("msp430f4784", "32bit")
+MSP430_MCU_FEAT("msp430f4794", "32bit")
+
+// Generic MSUs
+MSP430_MCU("msp430")
+MSP430_MCU("msp430i2xxgeneric")
+
+#undef MSP430_MCU
+#undef MSP430_MCU_FEAT
diff --git a/clang-r353983/include/clang/Basic/MacroBuilder.h b/clang-r353983/include/clang/Basic/MacroBuilder.h
new file mode 100644
index 00000000..96e67cbb
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/MacroBuilder.h
@@ -0,0 +1,47 @@
+//===--- MacroBuilder.h - CPP Macro building utility ------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Defines the clang::MacroBuilder utility class.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_MACROBUILDER_H
+#define LLVM_CLANG_BASIC_MACROBUILDER_H
+
+#include "clang/Basic/LLVM.h"
+#include "llvm/ADT/Twine.h"
+#include "llvm/Support/raw_ostream.h"
+
+namespace clang {
+
+class MacroBuilder {
+ raw_ostream &Out;
+public:
+ MacroBuilder(raw_ostream &Output) : Out(Output) {}
+
+ /// Append a \#define line for macro of the form "\#define Name Value\n".
+ void defineMacro(const Twine &Name, const Twine &Value = "1") {
+ Out << "#define " << Name << ' ' << Value << '\n';
+ }
+
+ /// Append a \#undef line for Name. Name should be of the form XXX
+ /// and we emit "\#undef XXX".
+ void undefineMacro(const Twine &Name) {
+ Out << "#undef " << Name << '\n';
+ }
+
+ /// Directly append Str and a newline to the underlying buffer.
+ void append(const Twine &Str) {
+ Out << Str << '\n';
+ }
+};
+
+} // end namespace clang
+
+#endif
diff --git a/clang-r353983/include/clang/Basic/MemoryBufferCache.h b/clang-r353983/include/clang/Basic/MemoryBufferCache.h
new file mode 100644
index 00000000..9a2b62e0
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/MemoryBufferCache.h
@@ -0,0 +1,79 @@
+//===- MemoryBufferCache.h - Cache for loaded memory buffers ----*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_MEMORYBUFFERCACHE_H
+#define LLVM_CLANG_BASIC_MEMORYBUFFERCACHE_H
+
+#include "llvm/ADT/IntrusiveRefCntPtr.h"
+#include "llvm/ADT/StringMap.h"
+#include <memory>
+
+namespace llvm {
+class MemoryBuffer;
+} // end namespace llvm
+
+namespace clang {
+
+/// Manage memory buffers across multiple users.
+///
+/// Ensures that multiple users have a consistent view of each buffer. This is
+/// used by \a CompilerInstance when building PCMs to ensure that each \a
+/// ModuleManager sees the same files.
+///
+/// \a finalizeCurrentBuffers() should be called before creating a new user.
+/// This locks in the current buffers, ensuring that no buffer that has already
+/// been accessed can be purged, preventing use-after-frees.
+class MemoryBufferCache : public llvm::RefCountedBase<MemoryBufferCache> {
+ struct BufferEntry {
+ std::unique_ptr<llvm::MemoryBuffer> Buffer;
+
+ /// Track the timeline of when this was added to the cache.
+ unsigned Index;
+ };
+
+ /// Cache of buffers.
+ llvm::StringMap<BufferEntry> Buffers;
+
+ /// Monotonically increasing index.
+ unsigned NextIndex = 0;
+
+ /// Bumped to prevent "older" buffers from being removed.
+ unsigned FirstRemovableIndex = 0;
+
+public:
+ /// Store the Buffer under the Filename.
+ ///
+ /// \pre There is not already buffer is not already in the cache.
+ /// \return a reference to the buffer as a convenience.
+ llvm::MemoryBuffer &addBuffer(llvm::StringRef Filename,
+ std::unique_ptr<llvm::MemoryBuffer> Buffer);
+
+ /// Try to remove a buffer from the cache.
+ ///
+ /// \return false on success, iff \c !isBufferFinal().
+ bool tryToRemoveBuffer(llvm::StringRef Filename);
+
+ /// Get a pointer to the buffer if it exists; else nullptr.
+ llvm::MemoryBuffer *lookupBuffer(llvm::StringRef Filename);
+
+ /// Check whether the buffer is final.
+ ///
+ /// \return true iff \a finalizeCurrentBuffers() has been called since the
+ /// buffer was added. This prevents buffers from being removed.
+ bool isBufferFinal(llvm::StringRef Filename);
+
+ /// Finalize the current buffers in the cache.
+ ///
+ /// Should be called when creating a new user to ensure previous uses aren't
+ /// invalidated.
+ void finalizeCurrentBuffers();
+};
+
+} // end namespace clang
+
+#endif // LLVM_CLANG_BASIC_MEMORYBUFFERCACHE_H
diff --git a/clang-r353983/include/clang/Basic/Module.h b/clang-r353983/include/clang/Basic/Module.h
new file mode 100644
index 00000000..0e891af5
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/Module.h
@@ -0,0 +1,651 @@
+//===- Module.h - Describe a module -----------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+/// \file
+/// Defines the clang::Module class, which describes a module in the
+/// source code.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_MODULE_H
+#define LLVM_CLANG_BASIC_MODULE_H
+
+#include "clang/Basic/FileManager.h"
+#include "clang/Basic/SourceLocation.h"
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/DenseSet.h"
+#include "llvm/ADT/Optional.h"
+#include "llvm/ADT/PointerIntPair.h"
+#include "llvm/ADT/PointerUnion.h"
+#include "llvm/ADT/SetVector.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/STLExtras.h"
+#include "llvm/ADT/StringMap.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/ADT/iterator_range.h"
+#include <array>
+#include <cassert>
+#include <cstdint>
+#include <ctime>
+#include <string>
+#include <utility>
+#include <vector>
+
+namespace llvm {
+
+class raw_ostream;
+
+} // namespace llvm
+
+namespace clang {
+
+class LangOptions;
+class TargetInfo;
+
+/// Describes the name of a module.
+using ModuleId = SmallVector<std::pair<std::string, SourceLocation>, 2>;
+
+/// The signature of a module, which is a hash of the AST content.
+struct ASTFileSignature : std::array<uint32_t, 5> {
+ ASTFileSignature(std::array<uint32_t, 5> S = {{0}})
+ : std::array<uint32_t, 5>(std::move(S)) {}
+
+ explicit operator bool() const {
+ return *this != std::array<uint32_t, 5>({{0}});
+ }
+};
+
+/// Describes a module or submodule.
+class Module {
+public:
+ /// The name of this module.
+ std::string Name;
+
+ /// The location of the module definition.
+ SourceLocation DefinitionLoc;
+
+ enum ModuleKind {
+ /// This is a module that was defined by a module map and built out
+ /// of header files.
+ ModuleMapModule,
+
+ /// This is a C++ Modules TS module interface unit.
+ ModuleInterfaceUnit,
+
+ /// This is a fragment of the global module within some C++ Modules
+ /// TS module.
+ GlobalModuleFragment,
+ };
+
+ /// The kind of this module.
+ ModuleKind Kind = ModuleMapModule;
+
+ /// The parent of this module. This will be NULL for the top-level
+ /// module.
+ Module *Parent;
+
+ /// The build directory of this module. This is the directory in
+ /// which the module is notionally built, and relative to which its headers
+ /// are found.
+ const DirectoryEntry *Directory = nullptr;
+
+ /// The presumed file name for the module map defining this module.
+ /// Only non-empty when building from preprocessed source.
+ std::string PresumedModuleMapFile;
+
+ /// The umbrella header or directory.
+ llvm::PointerUnion<const DirectoryEntry *, const FileEntry *> Umbrella;
+
+ /// The module signature.
+ ASTFileSignature Signature;
+
+ /// The name of the umbrella entry, as written in the module map.
+ std::string UmbrellaAsWritten;
+
+ /// The module through which entities defined in this module will
+ /// eventually be exposed, for use in "private" modules.
+ std::string ExportAsModule;
+
+private:
+ /// The submodules of this module, indexed by name.
+ std::vector<Module *> SubModules;
+
+ /// A mapping from the submodule name to the index into the
+ /// \c SubModules vector at which that submodule resides.
+ llvm::StringMap<unsigned> SubModuleIndex;
+
+ /// The AST file if this is a top-level module which has a
+ /// corresponding serialized AST file, or null otherwise.
+ const FileEntry *ASTFile = nullptr;
+
+ /// The top-level headers associated with this module.
+ llvm::SmallSetVector<const FileEntry *, 2> TopHeaders;
+
+ /// top-level header filenames that aren't resolved to FileEntries yet.
+ std::vector<std::string> TopHeaderNames;
+
+ /// Cache of modules visible to lookup in this module.
+ mutable llvm::DenseSet<const Module*> VisibleModulesCache;
+
+ /// The ID used when referencing this module within a VisibleModuleSet.
+ unsigned VisibilityID;
+
+public:
+ enum HeaderKind {
+ HK_Normal,
+ HK_Textual,
+ HK_Private,
+ HK_PrivateTextual,
+ HK_Excluded
+ };
+ static const int NumHeaderKinds = HK_Excluded + 1;
+
+ /// Information about a header directive as found in the module map
+ /// file.
+ struct Header {
+ std::string NameAsWritten;
+ const FileEntry *Entry;
+
+ explicit operator bool() { return Entry; }
+ };
+
+ /// Information about a directory name as found in the module map
+ /// file.
+ struct DirectoryName {
+ std::string NameAsWritten;
+ const DirectoryEntry *Entry;
+
+ explicit operator bool() { return Entry; }
+ };
+
+ /// The headers that are part of this module.
+ SmallVector<Header, 2> Headers[5];
+
+ /// Stored information about a header directive that was found in the
+ /// module map file but has not been resolved to a file.
+ struct UnresolvedHeaderDirective {
+ HeaderKind Kind = HK_Normal;
+ SourceLocation FileNameLoc;
+ std::string FileName;
+ bool IsUmbrella = false;
+ bool HasBuiltinHeader = false;
+ Optional<off_t> Size;
+ Optional<time_t> ModTime;
+ };
+
+ /// Headers that are mentioned in the module map file but that we have not
+ /// yet attempted to resolve to a file on the file system.
+ SmallVector<UnresolvedHeaderDirective, 1> UnresolvedHeaders;
+
+ /// Headers that are mentioned in the module map file but could not be
+ /// found on the file system.
+ SmallVector<UnresolvedHeaderDirective, 1> MissingHeaders;
+
+ /// An individual requirement: a feature name and a flag indicating
+ /// the required state of that feature.
+ using Requirement = std::pair<std::string, bool>;
+
+ /// The set of language features required to use this module.
+ ///
+ /// If any of these requirements are not available, the \c IsAvailable bit
+ /// will be false to indicate that this (sub)module is not available.
+ SmallVector<Requirement, 2> Requirements;
+
+ /// A module with the same name that shadows this module.
+ Module *ShadowingModule = nullptr;
+
+ /// Whether this module is missing a feature from \c Requirements.
+ unsigned IsMissingRequirement : 1;
+
+ /// Whether we tried and failed to load a module file for this module.
+ unsigned HasIncompatibleModuleFile : 1;
+
+ /// Whether this module is available in the current translation unit.
+ ///
+ /// If the module is missing headers or does not meet all requirements then
+ /// this bit will be 0.
+ unsigned IsAvailable : 1;
+
+ /// Whether this module was loaded from a module file.
+ unsigned IsFromModuleFile : 1;
+
+ /// Whether this is a framework module.
+ unsigned IsFramework : 1;
+
+ /// Whether this is an explicit submodule.
+ unsigned IsExplicit : 1;
+
+ /// Whether this is a "system" module (which assumes that all
+ /// headers in it are system headers).
+ unsigned IsSystem : 1;
+
+ /// Whether this is an 'extern "C"' module (which implicitly puts all
+ /// headers in it within an 'extern "C"' block, and allows the module to be
+ /// imported within such a block).
+ unsigned IsExternC : 1;
+
+ /// Whether this is an inferred submodule (module * { ... }).
+ unsigned IsInferred : 1;
+
+ /// Whether we should infer submodules for this module based on
+ /// the headers.
+ ///
+ /// Submodules can only be inferred for modules with an umbrella header.
+ unsigned InferSubmodules : 1;
+
+ /// Whether, when inferring submodules, the inferred submodules
+ /// should be explicit.
+ unsigned InferExplicitSubmodules : 1;
+
+ /// Whether, when inferring submodules, the inferr submodules should
+ /// export all modules they import (e.g., the equivalent of "export *").
+ unsigned InferExportWildcard : 1;
+
+ /// Whether the set of configuration macros is exhaustive.
+ ///
+ /// When the set of configuration macros is exhaustive, meaning
+ /// that no identifier not in this list should affect how the module is
+ /// built.
+ unsigned ConfigMacrosExhaustive : 1;
+
+ /// Whether files in this module can only include non-modular headers
+ /// and headers from used modules.
+ unsigned NoUndeclaredIncludes : 1;
+
+ /// Whether this module came from a "private" module map, found next
+ /// to a regular (public) module map.
+ unsigned ModuleMapIsPrivate : 1;
+
+ /// Describes the visibility of the various names within a
+ /// particular module.
+ enum NameVisibilityKind {
+ /// All of the names in this module are hidden.
+ Hidden,
+ /// All of the names in this module are visible.
+ AllVisible
+ };
+
+ /// The visibility of names within this particular module.
+ NameVisibilityKind NameVisibility;
+
+ /// The location of the inferred submodule.
+ SourceLocation InferredSubmoduleLoc;
+
+ /// The set of modules imported by this module, and on which this
+ /// module depends.
+ llvm::SmallSetVector<Module *, 2> Imports;
+
+ /// Describes an exported module.
+ ///
+ /// The pointer is the module being re-exported, while the bit will be true
+ /// to indicate that this is a wildcard export.
+ using ExportDecl = llvm::PointerIntPair<Module *, 1, bool>;
+
+ /// The set of export declarations.
+ SmallVector<ExportDecl, 2> Exports;
+
+ /// Describes an exported module that has not yet been resolved
+ /// (perhaps because the module it refers to has not yet been loaded).
+ struct UnresolvedExportDecl {
+ /// The location of the 'export' keyword in the module map file.
+ SourceLocation ExportLoc;
+
+ /// The name of the module.
+ ModuleId Id;
+
+ /// Whether this export declaration ends in a wildcard, indicating
+ /// that all of its submodules should be exported (rather than the named
+ /// module itself).
+ bool Wildcard;
+ };
+
+ /// The set of export declarations that have yet to be resolved.
+ SmallVector<UnresolvedExportDecl, 2> UnresolvedExports;
+
+ /// The directly used modules.
+ SmallVector<Module *, 2> DirectUses;
+
+ /// The set of use declarations that have yet to be resolved.
+ SmallVector<ModuleId, 2> UnresolvedDirectUses;
+
+ /// A library or framework to link against when an entity from this
+ /// module is used.
+ struct LinkLibrary {
+ LinkLibrary() = default;
+ LinkLibrary(const std::string &Library, bool IsFramework)
+ : Library(Library), IsFramework(IsFramework) {}
+
+ /// The library to link against.
+ ///
+ /// This will typically be a library or framework name, but can also
+ /// be an absolute path to the library or framework.
+ std::string Library;
+
+ /// Whether this is a framework rather than a library.
+ bool IsFramework = false;
+ };
+
+ /// The set of libraries or frameworks to link against when
+ /// an entity from this module is used.
+ llvm::SmallVector<LinkLibrary, 2> LinkLibraries;
+
+ /// Autolinking uses the framework name for linking purposes
+ /// when this is false and the export_as name otherwise.
+ bool UseExportAsModuleLinkName = false;
+
+ /// The set of "configuration macros", which are macros that
+ /// (intentionally) change how this module is built.
+ std::vector<std::string> ConfigMacros;
+
+ /// An unresolved conflict with another module.
+ struct UnresolvedConflict {
+ /// The (unresolved) module id.
+ ModuleId Id;
+
+ /// The message provided to the user when there is a conflict.
+ std::string Message;
+ };
+
+ /// The list of conflicts for which the module-id has not yet been
+ /// resolved.
+ std::vector<UnresolvedConflict> UnresolvedConflicts;
+
+ /// A conflict between two modules.
+ struct Conflict {
+ /// The module that this module conflicts with.
+ Module *Other;
+
+ /// The message provided to the user when there is a conflict.
+ std::string Message;
+ };
+
+ /// The list of conflicts.
+ std::vector<Conflict> Conflicts;
+
+ /// Construct a new module or submodule.
+ Module(StringRef Name, SourceLocation DefinitionLoc, Module *Parent,
+ bool IsFramework, bool IsExplicit, unsigned VisibilityID);
+
+ ~Module();
+
+ /// Determine whether this module is available for use within the
+ /// current translation unit.
+ bool isAvailable() const { return IsAvailable; }
+
+ /// Determine whether this module is available for use within the
+ /// current translation unit.
+ ///
+ /// \param LangOpts The language options used for the current
+ /// translation unit.
+ ///
+ /// \param Target The target options used for the current translation unit.
+ ///
+ /// \param Req If this module is unavailable because of a missing requirement,
+ /// this parameter will be set to one of the requirements that is not met for
+ /// use of this module.
+ ///
+ /// \param MissingHeader If this module is unavailable because of a missing
+ /// header, this parameter will be set to one of the missing headers.
+ ///
+ /// \param ShadowingModule If this module is unavailable because it is
+ /// shadowed, this parameter will be set to the shadowing module.
+ bool isAvailable(const LangOptions &LangOpts,
+ const TargetInfo &Target,
+ Requirement &Req,
+ UnresolvedHeaderDirective &MissingHeader,
+ Module *&ShadowingModule) const;
+
+ /// Determine whether this module is a submodule.
+ bool isSubModule() const { return Parent != nullptr; }
+
+ /// Determine whether this module is a submodule of the given other
+ /// module.
+ bool isSubModuleOf(const Module *Other) const;
+
+ /// Determine whether this module is a part of a framework,
+ /// either because it is a framework module or because it is a submodule
+ /// of a framework module.
+ bool isPartOfFramework() const {
+ for (const Module *Mod = this; Mod; Mod = Mod->Parent)
+ if (Mod->IsFramework)
+ return true;
+
+ return false;
+ }
+
+ /// Determine whether this module is a subframework of another
+ /// framework.
+ bool isSubFramework() const {
+ return IsFramework && Parent && Parent->isPartOfFramework();
+ }
+
+ /// Set the parent of this module. This should only be used if the parent
+ /// could not be set during module creation.
+ void setParent(Module *M) {
+ assert(!Parent);
+ Parent = M;
+ Parent->SubModuleIndex[Name] = Parent->SubModules.size();
+ Parent->SubModules.push_back(this);
+ }
+
+ /// Retrieve the full name of this module, including the path from
+ /// its top-level module.
+ /// \param AllowStringLiterals If \c true, components that might not be
+ /// lexically valid as identifiers will be emitted as string literals.
+ std::string getFullModuleName(bool AllowStringLiterals = false) const;
+
+ /// Whether the full name of this module is equal to joining
+ /// \p nameParts with "."s.
+ ///
+ /// This is more efficient than getFullModuleName().
+ bool fullModuleNameIs(ArrayRef<StringRef> nameParts) const;
+
+ /// Retrieve the top-level module for this (sub)module, which may
+ /// be this module.
+ Module *getTopLevelModule() {
+ return const_cast<Module *>(
+ const_cast<const Module *>(this)->getTopLevelModule());
+ }
+
+ /// Retrieve the top-level module for this (sub)module, which may
+ /// be this module.
+ const Module *getTopLevelModule() const;
+
+ /// Retrieve the name of the top-level module.
+ StringRef getTopLevelModuleName() const {
+ return getTopLevelModule()->Name;
+ }
+
+ /// The serialized AST file for this module, if one was created.
+ const FileEntry *getASTFile() const {
+ return getTopLevelModule()->ASTFile;
+ }
+
+ /// Set the serialized AST file for the top-level module of this module.
+ void setASTFile(const FileEntry *File) {
+ assert((File == nullptr || getASTFile() == nullptr ||
+ getASTFile() == File) && "file path changed");
+ getTopLevelModule()->ASTFile = File;
+ }
+
+ /// Retrieve the directory for which this module serves as the
+ /// umbrella.
+ DirectoryName getUmbrellaDir() const;
+
+ /// Retrieve the header that serves as the umbrella header for this
+ /// module.
+ Header getUmbrellaHeader() const {
+ if (auto *E = Umbrella.dyn_cast<const FileEntry *>())
+ return Header{UmbrellaAsWritten, E};
+ return Header{};
+ }
+
+ /// Determine whether this module has an umbrella directory that is
+ /// not based on an umbrella header.
+ bool hasUmbrellaDir() const {
+ return Umbrella && Umbrella.is<const DirectoryEntry *>();
+ }
+
+ /// Add a top-level header associated with this module.
+ void addTopHeader(const FileEntry *File) {
+ assert(File);
+ TopHeaders.insert(File);
+ }
+
+ /// Add a top-level header filename associated with this module.
+ void addTopHeaderFilename(StringRef Filename) {
+ TopHeaderNames.push_back(Filename);
+ }
+
+ /// The top-level headers associated with this module.
+ ArrayRef<const FileEntry *> getTopHeaders(FileManager &FileMgr);
+
+ /// Determine whether this module has declared its intention to
+ /// directly use another module.
+ bool directlyUses(const Module *Requested) const;
+
+ /// Add the given feature requirement to the list of features
+ /// required by this module.
+ ///
+ /// \param Feature The feature that is required by this module (and
+ /// its submodules).
+ ///
+ /// \param RequiredState The required state of this feature: \c true
+ /// if it must be present, \c false if it must be absent.
+ ///
+ /// \param LangOpts The set of language options that will be used to
+ /// evaluate the availability of this feature.
+ ///
+ /// \param Target The target options that will be used to evaluate the
+ /// availability of this feature.
+ void addRequirement(StringRef Feature, bool RequiredState,
+ const LangOptions &LangOpts,
+ const TargetInfo &Target);
+
+ /// Mark this module and all of its submodules as unavailable.
+ void markUnavailable(bool MissingRequirement = false);
+
+ /// Find the submodule with the given name.
+ ///
+ /// \returns The submodule if found, or NULL otherwise.
+ Module *findSubmodule(StringRef Name) const;
+
+ /// Determine whether the specified module would be visible to
+ /// a lookup at the end of this module.
+ ///
+ /// FIXME: This may return incorrect results for (submodules of) the
+ /// module currently being built, if it's queried before we see all
+ /// of its imports.
+ bool isModuleVisible(const Module *M) const {
+ if (VisibleModulesCache.empty())
+ buildVisibleModulesCache();
+ return VisibleModulesCache.count(M);
+ }
+
+ unsigned getVisibilityID() const { return VisibilityID; }
+
+ using submodule_iterator = std::vector<Module *>::iterator;
+ using submodule_const_iterator = std::vector<Module *>::const_iterator;
+
+ submodule_iterator submodule_begin() { return SubModules.begin(); }
+ submodule_const_iterator submodule_begin() const {return SubModules.begin();}
+ submodule_iterator submodule_end() { return SubModules.end(); }
+ submodule_const_iterator submodule_end() const { return SubModules.end(); }
+
+ llvm::iterator_range<submodule_iterator> submodules() {
+ return llvm::make_range(submodule_begin(), submodule_end());
+ }
+ llvm::iterator_range<submodule_const_iterator> submodules() const {
+ return llvm::make_range(submodule_begin(), submodule_end());
+ }
+
+ /// Appends this module's list of exported modules to \p Exported.
+ ///
+ /// This provides a subset of immediately imported modules (the ones that are
+ /// directly exported), not the complete set of exported modules.
+ void getExportedModules(SmallVectorImpl<Module *> &Exported) const;
+
+ static StringRef getModuleInputBufferName() {
+ return "<module-includes>";
+ }
+
+ /// Print the module map for this module to the given stream.
+ void print(raw_ostream &OS, unsigned Indent = 0) const;
+
+ /// Dump the contents of this module to the given output stream.
+ void dump() const;
+
+private:
+ void buildVisibleModulesCache() const;
+};
+
+/// A set of visible modules.
+class VisibleModuleSet {
+public:
+ VisibleModuleSet() = default;
+ VisibleModuleSet(VisibleModuleSet &&O)
+ : ImportLocs(std::move(O.ImportLocs)), Generation(O.Generation ? 1 : 0) {
+ O.ImportLocs.clear();
+ ++O.Generation;
+ }
+
+ /// Move from another visible modules set. Guaranteed to leave the source
+ /// empty and bump the generation on both.
+ VisibleModuleSet &operator=(VisibleModuleSet &&O) {
+ ImportLocs = std::move(O.ImportLocs);
+ O.ImportLocs.clear();
+ ++O.Generation;
+ ++Generation;
+ return *this;
+ }
+
+ /// Get the current visibility generation. Incremented each time the
+ /// set of visible modules changes in any way.
+ unsigned getGeneration() const { return Generation; }
+
+ /// Determine whether a module is visible.
+ bool isVisible(const Module *M) const {
+ return getImportLoc(M).isValid();
+ }
+
+ /// Get the location at which the import of a module was triggered.
+ SourceLocation getImportLoc(const Module *M) const {
+ return M->getVisibilityID() < ImportLocs.size()
+ ? ImportLocs[M->getVisibilityID()]
+ : SourceLocation();
+ }
+
+ /// A callback to call when a module is made visible (directly or
+ /// indirectly) by a call to \ref setVisible.
+ using VisibleCallback = llvm::function_ref<void(Module *M)>;
+
+ /// A callback to call when a module conflict is found. \p Path
+ /// consists of a sequence of modules from the conflicting module to the one
+ /// made visible, where each was exported by the next.
+ using ConflictCallback =
+ llvm::function_ref<void(ArrayRef<Module *> Path, Module *Conflict,
+ StringRef Message)>;
+
+ /// Make a specific module visible.
+ void setVisible(Module *M, SourceLocation Loc,
+ VisibleCallback Vis = [](Module *) {},
+ ConflictCallback Cb = [](ArrayRef<Module *>, Module *,
+ StringRef) {});
+
+private:
+ /// Import locations for each visible module. Indexed by the module's
+ /// VisibilityID.
+ std::vector<SourceLocation> ImportLocs;
+
+ /// Visibility generation, bumped every time the visibility state changes.
+ unsigned Generation = 0;
+};
+
+} // namespace clang
+
+#endif // LLVM_CLANG_BASIC_MODULE_H
diff --git a/clang-r353983/include/clang/Basic/ObjCRuntime.h b/clang-r353983/include/clang/Basic/ObjCRuntime.h
new file mode 100644
index 00000000..921df689
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/ObjCRuntime.h
@@ -0,0 +1,438 @@
+//===- ObjCRuntime.h - Objective-C Runtime Configuration --------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+/// \file
+/// Defines types useful for describing an Objective-C runtime.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_OBJCRUNTIME_H
+#define LLVM_CLANG_BASIC_OBJCRUNTIME_H
+
+#include "clang/Basic/LLVM.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/ADT/Triple.h"
+#include "llvm/Support/ErrorHandling.h"
+#include "llvm/Support/VersionTuple.h"
+#include <string>
+
+namespace clang {
+
+/// The basic abstraction for the target Objective-C runtime.
+class ObjCRuntime {
+public:
+ /// The basic Objective-C runtimes that we know about.
+ enum Kind {
+ /// 'macosx' is the Apple-provided NeXT-derived runtime on Mac OS
+ /// X platforms that use the non-fragile ABI; the version is a
+ /// release of that OS.
+ MacOSX,
+
+ /// 'macosx-fragile' is the Apple-provided NeXT-derived runtime on
+ /// Mac OS X platforms that use the fragile ABI; the version is a
+ /// release of that OS.
+ FragileMacOSX,
+
+ /// 'ios' is the Apple-provided NeXT-derived runtime on iOS or the iOS
+ /// simulator; it is always non-fragile. The version is a release
+ /// version of iOS.
+ iOS,
+
+ /// 'watchos' is a variant of iOS for Apple's watchOS. The version
+ /// is a release version of watchOS.
+ WatchOS,
+
+ /// 'gcc' is the Objective-C runtime shipped with GCC, implementing a
+ /// fragile Objective-C ABI
+ GCC,
+
+ /// 'gnustep' is the modern non-fragile GNUstep runtime.
+ GNUstep,
+
+ /// 'objfw' is the Objective-C runtime included in ObjFW
+ ObjFW
+ };
+
+private:
+ Kind TheKind = MacOSX;
+ VersionTuple Version;
+
+public:
+ /// A bogus initialization of the runtime.
+ ObjCRuntime() = default;
+ ObjCRuntime(Kind kind, const VersionTuple &version)
+ : TheKind(kind), Version(version) {}
+
+ void set(Kind kind, VersionTuple version) {
+ TheKind = kind;
+ Version = version;
+ }
+
+ Kind getKind() const { return TheKind; }
+ const VersionTuple &getVersion() const { return Version; }
+
+ /// Does this runtime follow the set of implied behaviors for a
+ /// "non-fragile" ABI?
+ bool isNonFragile() const {
+ switch (getKind()) {
+ case FragileMacOSX: return false;
+ case GCC: return false;
+ case MacOSX: return true;
+ case GNUstep: return true;
+ case ObjFW: return true;
+ case iOS: return true;
+ case WatchOS: return true;
+ }
+ llvm_unreachable("bad kind");
+ }
+
+ /// The inverse of isNonFragile(): does this runtime follow the set of
+ /// implied behaviors for a "fragile" ABI?
+ bool isFragile() const { return !isNonFragile(); }
+
+ /// The default dispatch mechanism to use for the specified architecture
+ bool isLegacyDispatchDefaultForArch(llvm::Triple::ArchType Arch) {
+ // The GNUstep runtime uses a newer dispatch method by default from
+ // version 1.6 onwards
+ if (getKind() == GNUstep && getVersion() >= VersionTuple(1, 6)) {
+ if (Arch == llvm::Triple::arm ||
+ Arch == llvm::Triple::x86 ||
+ Arch == llvm::Triple::x86_64)
+ return false;
+ }
+ else if ((getKind() == MacOSX) && isNonFragile() &&
+ (getVersion() >= VersionTuple(10, 0)) &&
+ (getVersion() < VersionTuple(10, 6)))
+ return Arch != llvm::Triple::x86_64;
+ // Except for deployment target of 10.5 or less,
+ // Mac runtimes use legacy dispatch everywhere now.
+ return true;
+ }
+
+ /// Is this runtime basically of the GNU family of runtimes?
+ bool isGNUFamily() const {
+ switch (getKind()) {
+ case FragileMacOSX:
+ case MacOSX:
+ case iOS:
+ case WatchOS:
+ return false;
+ case GCC:
+ case GNUstep:
+ case ObjFW:
+ return true;
+ }
+ llvm_unreachable("bad kind");
+ }
+
+ /// Is this runtime basically of the NeXT family of runtimes?
+ bool isNeXTFamily() const {
+ // For now, this is just the inverse of isGNUFamily(), but that's
+ // not inherently true.
+ return !isGNUFamily();
+ }
+
+ /// Does this runtime allow ARC at all?
+ bool allowsARC() const {
+ switch (getKind()) {
+ case FragileMacOSX:
+ // No stub library for the fragile runtime.
+ return getVersion() >= VersionTuple(10, 7);
+ case MacOSX: return true;
+ case iOS: return true;
+ case WatchOS: return true;
+ case GCC: return false;
+ case GNUstep: return true;
+ case ObjFW: return true;
+ }
+ llvm_unreachable("bad kind");
+ }
+
+ /// Does this runtime natively provide the ARC entrypoints?
+ ///
+ /// ARC cannot be directly supported on a platform that does not provide
+ /// these entrypoints, although it may be supportable via a stub
+ /// library.
+ bool hasNativeARC() const {
+ switch (getKind()) {
+ case FragileMacOSX: return getVersion() >= VersionTuple(10, 7);
+ case MacOSX: return getVersion() >= VersionTuple(10, 7);
+ case iOS: return getVersion() >= VersionTuple(5);
+ case WatchOS: return true;
+
+ case GCC: return false;
+ case GNUstep: return getVersion() >= VersionTuple(1, 6);
+ case ObjFW: return true;
+ }
+ llvm_unreachable("bad kind");
+ }
+
+ /// Does this runtime provide ARC entrypoints that are likely to be faster
+ /// than an ordinary message send of the appropriate selector?
+ ///
+ /// The ARC entrypoints are guaranteed to be equivalent to just sending the
+ /// corresponding message. If the entrypoint is implemented naively as just a
+ /// message send, using it is a trade-off: it sacrifices a few cycles of
+ /// overhead to save a small amount of code. However, it's possible for
+ /// runtimes to detect and special-case classes that use "standard"
+ /// retain/release behavior; if that's dynamically a large proportion of all
+ /// retained objects, using the entrypoint will also be faster than using a
+ /// message send.
+ ///
+ /// When this method returns true, Clang will turn non-super message sends of
+ /// certain selectors into calls to the correspond entrypoint:
+ /// retain => objc_retain
+ /// release => objc_release
+ /// autorelease => objc_autorelease
+ bool shouldUseARCFunctionsForRetainRelease() const {
+ switch (getKind()) {
+ case FragileMacOSX:
+ return false;
+ case MacOSX:
+ return getVersion() >= VersionTuple(10, 10);
+ case iOS:
+ return getVersion() >= VersionTuple(8);
+ case WatchOS:
+ return true;
+ case GCC:
+ return false;
+ case GNUstep:
+ return false;
+ case ObjFW:
+ return false;
+ }
+ llvm_unreachable("bad kind");
+ }
+
+ /// Does this runtime provide entrypoints that are likely to be faster
+ /// than an ordinary message send of the "alloc" selector?
+ ///
+ /// The "alloc" entrypoint is guaranteed to be equivalent to just sending the
+ /// corresponding message. If the entrypoint is implemented naively as just a
+ /// message send, using it is a trade-off: it sacrifices a few cycles of
+ /// overhead to save a small amount of code. However, it's possible for
+ /// runtimes to detect and special-case classes that use "standard"
+ /// alloc behavior; if that's dynamically a large proportion of all
+ /// objects, using the entrypoint will also be faster than using a message
+ /// send.
+ ///
+ /// When this method returns true, Clang will turn non-super message sends of
+ /// certain selectors into calls to the corresponding entrypoint:
+ /// alloc => objc_alloc
+ /// allocWithZone:nil => objc_allocWithZone
+ bool shouldUseRuntimeFunctionsForAlloc() const {
+ switch (getKind()) {
+ case FragileMacOSX:
+ return false;
+ case MacOSX:
+ return getVersion() >= VersionTuple(10, 10);
+ case iOS:
+ return getVersion() >= VersionTuple(8);
+ case WatchOS:
+ return true;
+
+ case GCC:
+ return false;
+ case GNUstep:
+ return false;
+ case ObjFW:
+ return false;
+ }
+ llvm_unreachable("bad kind");
+ }
+
+ /// Does this runtime supports optimized setter entrypoints?
+ bool hasOptimizedSetter() const {
+ switch (getKind()) {
+ case MacOSX:
+ return getVersion() >= VersionTuple(10, 8);
+ case iOS:
+ return (getVersion() >= VersionTuple(6));
+ case WatchOS:
+ return true;
+ case GNUstep:
+ return getVersion() >= VersionTuple(1, 7);
+ default:
+ return false;
+ }
+ }
+
+ /// Does this runtime allow the use of __weak?
+ bool allowsWeak() const {
+ return hasNativeWeak();
+ }
+
+ /// Does this runtime natively provide ARC-compliant 'weak'
+ /// entrypoints?
+ bool hasNativeWeak() const {
+ // Right now, this is always equivalent to whether the runtime
+ // natively supports ARC decision.
+ return hasNativeARC();
+ }
+
+ /// Does this runtime directly support the subscripting methods?
+ ///
+ /// This is really a property of the library, not the runtime.
+ bool hasSubscripting() const {
+ switch (getKind()) {
+ case FragileMacOSX: return false;
+ case MacOSX: return getVersion() >= VersionTuple(10, 11);
+ case iOS: return getVersion() >= VersionTuple(9);
+ case WatchOS: return true;
+
+ // This is really a lie, because some implementations and versions
+ // of the runtime do not support ARC. Probably -fgnu-runtime
+ // should imply a "maximal" runtime or something?
+ case GCC: return true;
+ case GNUstep: return true;
+ case ObjFW: return true;
+ }
+ llvm_unreachable("bad kind");
+ }
+
+ /// Does this runtime allow sizeof or alignof on object types?
+ bool allowsSizeofAlignof() const {
+ return isFragile();
+ }
+
+ /// Does this runtime allow pointer arithmetic on objects?
+ ///
+ /// This covers +, -, ++, --, and (if isSubscriptPointerArithmetic()
+ /// yields true) [].
+ bool allowsPointerArithmetic() const {
+ switch (getKind()) {
+ case FragileMacOSX:
+ case GCC:
+ return true;
+ case MacOSX:
+ case iOS:
+ case WatchOS:
+ case GNUstep:
+ case ObjFW:
+ return false;
+ }
+ llvm_unreachable("bad kind");
+ }
+
+ /// Is subscripting pointer arithmetic?
+ bool isSubscriptPointerArithmetic() const {
+ return allowsPointerArithmetic();
+ }
+
+ /// Does this runtime provide an objc_terminate function?
+ ///
+ /// This is used in handlers for exceptions during the unwind process;
+ /// without it, abort() must be used in pure ObjC files.
+ bool hasTerminate() const {
+ switch (getKind()) {
+ case FragileMacOSX: return getVersion() >= VersionTuple(10, 8);
+ case MacOSX: return getVersion() >= VersionTuple(10, 8);
+ case iOS: return getVersion() >= VersionTuple(5);
+ case WatchOS: return true;
+ case GCC: return false;
+ case GNUstep: return false;
+ case ObjFW: return false;
+ }
+ llvm_unreachable("bad kind");
+ }
+
+ /// Does this runtime support weakly importing classes?
+ bool hasWeakClassImport() const {
+ switch (getKind()) {
+ case MacOSX: return true;
+ case iOS: return true;
+ case WatchOS: return true;
+ case FragileMacOSX: return false;
+ case GCC: return true;
+ case GNUstep: return true;
+ case ObjFW: return true;
+ }
+ llvm_unreachable("bad kind");
+ }
+
+ /// Does this runtime use zero-cost exceptions?
+ bool hasUnwindExceptions() const {
+ switch (getKind()) {
+ case MacOSX: return true;
+ case iOS: return true;
+ case WatchOS: return true;
+ case FragileMacOSX: return false;
+ case GCC: return true;
+ case GNUstep: return true;
+ case ObjFW: return true;
+ }
+ llvm_unreachable("bad kind");
+ }
+
+ bool hasAtomicCopyHelper() const {
+ switch (getKind()) {
+ case FragileMacOSX:
+ case MacOSX:
+ case iOS:
+ case WatchOS:
+ return true;
+ case GNUstep:
+ return getVersion() >= VersionTuple(1, 7);
+ default: return false;
+ }
+ }
+
+ /// Is objc_unsafeClaimAutoreleasedReturnValue available?
+ bool hasARCUnsafeClaimAutoreleasedReturnValue() const {
+ switch (getKind()) {
+ case MacOSX:
+ case FragileMacOSX:
+ return getVersion() >= VersionTuple(10, 11);
+ case iOS:
+ return getVersion() >= VersionTuple(9);
+ case WatchOS:
+ return getVersion() >= VersionTuple(2);
+ case GNUstep:
+ return false;
+ default:
+ return false;
+ }
+ }
+
+ /// Are the empty collection symbols available?
+ bool hasEmptyCollections() const {
+ switch (getKind()) {
+ default:
+ return false;
+ case MacOSX:
+ return getVersion() >= VersionTuple(10, 11);
+ case iOS:
+ return getVersion() >= VersionTuple(9);
+ case WatchOS:
+ return getVersion() >= VersionTuple(2);
+ }
+ }
+
+ /// Try to parse an Objective-C runtime specification from the given
+ /// string.
+ ///
+ /// \return true on error.
+ bool tryParse(StringRef input);
+
+ std::string getAsString() const;
+
+ friend bool operator==(const ObjCRuntime &left, const ObjCRuntime &right) {
+ return left.getKind() == right.getKind() &&
+ left.getVersion() == right.getVersion();
+ }
+
+ friend bool operator!=(const ObjCRuntime &left, const ObjCRuntime &right) {
+ return !(left == right);
+ }
+};
+
+raw_ostream &operator<<(raw_ostream &out, const ObjCRuntime &value);
+
+} // namespace clang
+
+#endif // LLVM_CLANG_BASIC_OBJCRUNTIME_H
diff --git a/clang-r353983/include/clang/Basic/OpenCLExtensionTypes.def b/clang-r353983/include/clang/Basic/OpenCLExtensionTypes.def
new file mode 100644
index 00000000..84ffbe93
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/OpenCLExtensionTypes.def
@@ -0,0 +1,40 @@
+//===-- OpenCLExtensionTypes.def - Metadata about BuiltinTypes ------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+// This file extends builtin types database with OpenCL extension types.
+// Custom code should define this macro:
+// EXT_OPAQUE_TYPE(Name, Id, Ext)
+
+#ifdef EXT_OPAQUE_TYPE
+
+#ifndef INTEL_SUBGROUP_AVC_TYPE
+#define INTEL_SUBGROUP_AVC_TYPE(Name, Id) \
+ EXT_OPAQUE_TYPE(intel_sub_group_avc_##Name, OCLIntelSubgroupAVC##Id, \
+ cl_intel_device_side_avc_motion_estimation)
+#endif
+
+#endif
+
+#ifdef INTEL_SUBGROUP_AVC_TYPE
+INTEL_SUBGROUP_AVC_TYPE(mce_payload_t, McePayload)
+INTEL_SUBGROUP_AVC_TYPE(ime_payload_t, ImePayload)
+INTEL_SUBGROUP_AVC_TYPE(ref_payload_t, RefPayload)
+INTEL_SUBGROUP_AVC_TYPE(sic_payload_t, SicPayload)
+INTEL_SUBGROUP_AVC_TYPE(mce_result_t, MceResult)
+INTEL_SUBGROUP_AVC_TYPE(ime_result_t, ImeResult)
+INTEL_SUBGROUP_AVC_TYPE(ref_result_t, RefResult)
+INTEL_SUBGROUP_AVC_TYPE(sic_result_t, SicResult)
+INTEL_SUBGROUP_AVC_TYPE(ime_result_single_reference_streamout_t, ImeResultSingleRefStreamout)
+INTEL_SUBGROUP_AVC_TYPE(ime_result_dual_reference_streamout_t, ImeResultDualRefStreamout)
+INTEL_SUBGROUP_AVC_TYPE(ime_single_reference_streamin_t, ImeSingleRefStreamin)
+INTEL_SUBGROUP_AVC_TYPE(ime_dual_reference_streamin_t, ImeDualRefStreamin)
+
+#undef INTEL_SUBGROUP_AVC_TYPE
+#endif // INTEL_SUBGROUP_AVC_TYPE
+
+#undef EXT_OPAQUE_TYPE
+
diff --git a/clang-r353983/include/clang/Basic/OpenCLExtensions.def b/clang-r353983/include/clang/Basic/OpenCLExtensions.def
new file mode 100644
index 00000000..40ac88f6
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/OpenCLExtensions.def
@@ -0,0 +1,93 @@
+//===--- OpenCLExtensions.def - OpenCL extension list -----------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the list of supported OpenCL extensions.
+//
+//===----------------------------------------------------------------------===//
+
+// Macro OPENCLEXT or OPENCLEXT_INTERNAL can be defined to enumerate the
+// OpenCL extensions listed in this file.
+//
+// If the extensions are to be enumerated without the supported OpenCL version,
+// define OPENCLEXT(ext) where ext is the name of the extension.
+//
+// If the extensions are to be enumerated with supported OpenCL version,
+// define OPENCLEXT_INTERNAL(ext, avail, core) where
+// ext - name of the extension or optional core feature.
+// avail - minimum OpenCL version supporting it.
+// core - minimum OpenCL version when the extension becomes optional core
+// feature or core feature. ~0U indicates not a core feature or an
+// optional core feature.
+
+#ifndef OPENCLEXT_INTERNAL
+#ifndef OPENCLEXT
+#pragma error "macro OPENCLEXT or OPENCLEXT_INTERNAL is required"
+#else
+#define OPENCLEXT_INTERNAL(ext, ...) OPENCLEXT(ext)
+#endif // OPENCLEXT
+#endif // OPENCLEXT_INTERNAL
+
+// OpenCL 1.0.
+OPENCLEXT_INTERNAL(cl_khr_3d_image_writes, 100, 200)
+// fprounding mode is special since it is not mentioned beyond 1.0
+OPENCLEXT_INTERNAL(cl_khr_select_fprounding_mode, 100, 110)
+OPENCLEXT_INTERNAL(cl_khr_byte_addressable_store, 100, 110)
+OPENCLEXT_INTERNAL(cl_khr_fp16, 100, ~0U)
+OPENCLEXT_INTERNAL(cl_khr_fp64, 100, 120)
+OPENCLEXT_INTERNAL(cl_khr_global_int32_base_atomics, 100, 110)
+OPENCLEXT_INTERNAL(cl_khr_global_int32_extended_atomics, 100, 110)
+OPENCLEXT_INTERNAL(cl_khr_local_int32_base_atomics, 100, 110)
+OPENCLEXT_INTERNAL(cl_khr_local_int32_extended_atomics, 100, 110)
+OPENCLEXT_INTERNAL(cl_khr_int64_base_atomics, 100, ~0U)
+OPENCLEXT_INTERNAL(cl_khr_int64_extended_atomics, 100, ~0U)
+OPENCLEXT_INTERNAL(cl_khr_gl_sharing, 100, ~0U)
+OPENCLEXT_INTERNAL(cl_khr_icd, 100, ~0U)
+
+// OpenCL 1.1.
+OPENCLEXT_INTERNAL(cl_khr_gl_event, 110, ~0U)
+OPENCLEXT_INTERNAL(cl_khr_d3d10_sharing, 110, ~0U)
+
+// EMBEDDED_PROFILE
+OPENCLEXT_INTERNAL(cles_khr_int64, 110, ~0U)
+
+// OpenCL 1.2.
+OPENCLEXT_INTERNAL(cl_khr_context_abort, 120, ~0U)
+OPENCLEXT_INTERNAL(cl_khr_d3d11_sharing, 120, ~0U)
+OPENCLEXT_INTERNAL(cl_khr_depth_images, 120, ~0U)
+OPENCLEXT_INTERNAL(cl_khr_dx9_media_sharing, 120, ~0U)
+OPENCLEXT_INTERNAL(cl_khr_image2d_from_buffer, 120, ~0U)
+OPENCLEXT_INTERNAL(cl_khr_initialize_memory, 120, ~0U)
+OPENCLEXT_INTERNAL(cl_khr_gl_depth_images, 120, ~0U)
+OPENCLEXT_INTERNAL(cl_khr_gl_msaa_sharing, 120, ~0U)
+OPENCLEXT_INTERNAL(cl_khr_spir, 120, ~0U)
+
+// OpenCL 2.0.
+OPENCLEXT_INTERNAL(cl_khr_egl_event, 200, ~0U)
+OPENCLEXT_INTERNAL(cl_khr_egl_image, 200, ~0U)
+OPENCLEXT_INTERNAL(cl_khr_mipmap_image, 200, ~0U)
+OPENCLEXT_INTERNAL(cl_khr_srgb_image_writes, 200, ~0U)
+OPENCLEXT_INTERNAL(cl_khr_subgroups, 200, ~0U)
+OPENCLEXT_INTERNAL(cl_khr_terminate_context, 200, ~0U)
+
+// Clang Extensions.
+OPENCLEXT_INTERNAL(cl_clang_storage_class_specifiers, 100, ~0U)
+
+// AMD OpenCL extensions
+OPENCLEXT_INTERNAL(cl_amd_media_ops, 100, ~0U)
+OPENCLEXT_INTERNAL(cl_amd_media_ops2, 100, ~0U)
+
+// Intel OpenCL extensions
+OPENCLEXT_INTERNAL(cl_intel_subgroups, 120, ~0U)
+OPENCLEXT_INTERNAL(cl_intel_subgroups_short, 120, ~0U)
+OPENCLEXT_INTERNAL(cl_intel_device_side_avc_motion_estimation, 120, ~0U)
+
+#undef OPENCLEXT_INTERNAL
+
+#ifdef OPENCLEXT
+#undef OPENCLEXT
+#endif
diff --git a/clang-r353983/include/clang/Basic/OpenCLImageTypes.def b/clang-r353983/include/clang/Basic/OpenCLImageTypes.def
new file mode 100644
index 00000000..cfb018a6
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/OpenCLImageTypes.def
@@ -0,0 +1,87 @@
+//===-- OpenCLImageTypes.def - Metadata about BuiltinTypes ------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+// This file extends builtin types database with OpenCL image singleton types.
+// Custom code should define one of those three macros:
+// GENERIC_IMAGE_TYPE(Type, Id) - a generic image with its Id without an
+// access type
+// IMAGE_TYPE(Type, Id, SingletonId, AccessType, CGSuffix) - an image type
+// with given ID, singleton ID access type and a codegen suffix
+// GENERIC_IMAGE_TYPE_EXT(Type, Id, Ext) - a generic image with its Id and
+// required extension without an access type
+
+#ifdef GENERIC_IMAGE_TYPE
+
+#define IMAGE_READ_TYPE(Type, Id, Ext) GENERIC_IMAGE_TYPE(Type, Id)
+#define IMAGE_WRITE_TYPE(Type, Id, Ext)
+#define IMAGE_READ_WRITE_TYPE(Type, Id, Ext)
+
+#elif defined(GENERIC_IMAGE_TYPE_EXT)
+#define IMAGE_READ_TYPE(Type, Id, Ext) GENERIC_IMAGE_TYPE_EXT(Type, Id##ROTy, Ext)
+#define IMAGE_WRITE_TYPE(Type, Id, Ext) GENERIC_IMAGE_TYPE_EXT(Type, Id##WOTy, Ext)
+#define IMAGE_READ_WRITE_TYPE(Type, Id, Ext) GENERIC_IMAGE_TYPE_EXT(Type, Id##RWTy, Ext)
+
+#else
+#ifndef IMAGE_READ_TYPE
+#define IMAGE_READ_TYPE(Type, Id, Ext) \
+ IMAGE_TYPE(Type, Id##RO, Id##ROTy, read_only, ro)
+#endif
+#ifndef IMAGE_WRITE_TYPE
+#define IMAGE_WRITE_TYPE(Type, Id, Ext) \
+ IMAGE_TYPE(Type, Id##WO, Id##WOTy, write_only, wo)
+#endif
+#ifndef IMAGE_READ_WRITE_TYPE
+#define IMAGE_READ_WRITE_TYPE(Type, Id, Ext) \
+ IMAGE_TYPE(Type, Id##RW, Id##RWTy, read_write, rw)
+#endif
+
+#endif
+
+IMAGE_READ_TYPE(image1d, OCLImage1d, "")
+IMAGE_READ_TYPE(image1d_array, OCLImage1dArray, "")
+IMAGE_READ_TYPE(image1d_buffer, OCLImage1dBuffer, "")
+IMAGE_READ_TYPE(image2d, OCLImage2d, "")
+IMAGE_READ_TYPE(image2d_array, OCLImage2dArray, "")
+IMAGE_READ_TYPE(image2d_depth, OCLImage2dDepth, "")
+IMAGE_READ_TYPE(image2d_array_depth, OCLImage2dArrayDepth, "")
+IMAGE_READ_TYPE(image2d_msaa, OCLImage2dMSAA, "cl_khr_gl_msaa_sharing")
+IMAGE_READ_TYPE(image2d_array_msaa, OCLImage2dArrayMSAA, "cl_khr_gl_msaa_sharing")
+IMAGE_READ_TYPE(image2d_msaa_depth, OCLImage2dMSAADepth, "cl_khr_gl_msaa_sharing")
+IMAGE_READ_TYPE(image2d_array_msaa_depth, OCLImage2dArrayMSAADepth, "cl_khr_gl_msaa_sharing")
+IMAGE_READ_TYPE(image3d, OCLImage3d, "")
+
+IMAGE_WRITE_TYPE(image1d, OCLImage1d, "")
+IMAGE_WRITE_TYPE(image1d_array, OCLImage1dArray, "")
+IMAGE_WRITE_TYPE(image1d_buffer, OCLImage1dBuffer, "")
+IMAGE_WRITE_TYPE(image2d, OCLImage2d, "")
+IMAGE_WRITE_TYPE(image2d_array, OCLImage2dArray, "")
+IMAGE_WRITE_TYPE(image2d_depth, OCLImage2dDepth, "")
+IMAGE_WRITE_TYPE(image2d_array_depth, OCLImage2dArrayDepth, "")
+IMAGE_WRITE_TYPE(image2d_msaa, OCLImage2dMSAA, "cl_khr_gl_msaa_sharing")
+IMAGE_WRITE_TYPE(image2d_array_msaa, OCLImage2dArrayMSAA, "cl_khr_gl_msaa_sharing")
+IMAGE_WRITE_TYPE(image2d_msaa_depth, OCLImage2dMSAADepth, "cl_khr_gl_msaa_sharing")
+IMAGE_WRITE_TYPE(image2d_array_msaa_depth, OCLImage2dArrayMSAADepth, "cl_khr_gl_msaa_sharing")
+IMAGE_WRITE_TYPE(image3d, OCLImage3d, "cl_khr_3d_image_writes")
+
+IMAGE_READ_WRITE_TYPE(image1d, OCLImage1d, "")
+IMAGE_READ_WRITE_TYPE(image1d_array, OCLImage1dArray, "")
+IMAGE_READ_WRITE_TYPE(image1d_buffer, OCLImage1dBuffer, "")
+IMAGE_READ_WRITE_TYPE(image2d, OCLImage2d, "")
+IMAGE_READ_WRITE_TYPE(image2d_array, OCLImage2dArray, "")
+IMAGE_READ_WRITE_TYPE(image2d_depth, OCLImage2dDepth, "")
+IMAGE_READ_WRITE_TYPE(image2d_array_depth, OCLImage2dArrayDepth, "")
+IMAGE_READ_WRITE_TYPE(image2d_msaa, OCLImage2dMSAA, "cl_khr_gl_msaa_sharing")
+IMAGE_READ_WRITE_TYPE(image2d_array_msaa, OCLImage2dArrayMSAA, "cl_khr_gl_msaa_sharing")
+IMAGE_READ_WRITE_TYPE(image2d_msaa_depth, OCLImage2dMSAADepth, "cl_khr_gl_msaa_sharing")
+IMAGE_READ_WRITE_TYPE(image2d_array_msaa_depth, OCLImage2dArrayMSAADepth, "cl_khr_gl_msaa_sharing")
+IMAGE_READ_WRITE_TYPE(image3d, OCLImage3d, "")
+
+#undef IMAGE_TYPE
+#undef GENERIC_IMAGE_TYPE
+#undef IMAGE_READ_TYPE
+#undef IMAGE_WRITE_TYPE
+#undef IMAGE_READ_WRITE_TYPE
diff --git a/clang-r353983/include/clang/Basic/OpenCLOptions.h b/clang-r353983/include/clang/Basic/OpenCLOptions.h
new file mode 100644
index 00000000..47310da1
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/OpenCLOptions.h
@@ -0,0 +1,142 @@
+//===--- OpenCLOptions.h ----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Defines the clang::OpenCLOptions class.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_OPENCLOPTIONS_H
+#define LLVM_CLANG_BASIC_OPENCLOPTIONS_H
+
+#include "clang/Basic/LangOptions.h"
+#include "llvm/ADT/StringMap.h"
+
+namespace clang {
+
+/// OpenCL supported extensions and optional core features
+class OpenCLOptions {
+ struct Info {
+ bool Supported; // Is this option supported
+ bool Enabled; // Is this option enabled
+ unsigned Avail; // Option starts to be available in this OpenCL version
+ unsigned Core; // Option becomes (optional) core feature in this OpenCL
+ // version
+ Info(bool S = false, bool E = false, unsigned A = 100, unsigned C = ~0U)
+ :Supported(S), Enabled(E), Avail(A), Core(C){}
+ };
+ llvm::StringMap<Info> OptMap;
+public:
+ bool isKnown(llvm::StringRef Ext) const {
+ return OptMap.find(Ext) != OptMap.end();
+ }
+
+ bool isEnabled(llvm::StringRef Ext) const {
+ return OptMap.find(Ext)->second.Enabled;
+ }
+
+ // Is supported as either an extension or an (optional) core feature for
+ // OpenCL version \p CLVer.
+ bool isSupported(llvm::StringRef Ext, LangOptions LO) const {
+ // In C++ mode all extensions should work at least as in v2.0.
+ auto CLVer = LO.OpenCLCPlusPlus ? 200 : LO.OpenCLVersion;
+ auto I = OptMap.find(Ext)->getValue();
+ return I.Supported && I.Avail <= CLVer;
+ }
+
+ // Is supported (optional) OpenCL core features for OpenCL version \p CLVer.
+ // For supported extension, return false.
+ bool isSupportedCore(llvm::StringRef Ext, LangOptions LO) const {
+ // In C++ mode all extensions should work at least as in v2.0.
+ auto CLVer = LO.OpenCLCPlusPlus ? 200 : LO.OpenCLVersion;
+ auto I = OptMap.find(Ext)->getValue();
+ return I.Supported && I.Avail <= CLVer && I.Core != ~0U && CLVer >= I.Core;
+ }
+
+ // Is supported OpenCL extension for OpenCL version \p CLVer.
+ // For supported (optional) core feature, return false.
+ bool isSupportedExtension(llvm::StringRef Ext, LangOptions LO) const {
+ // In C++ mode all extensions should work at least as in v2.0.
+ auto CLVer = LO.OpenCLCPlusPlus ? 200 : LO.OpenCLVersion;
+ auto I = OptMap.find(Ext)->getValue();
+ return I.Supported && I.Avail <= CLVer && (I.Core == ~0U || CLVer < I.Core);
+ }
+
+ void enable(llvm::StringRef Ext, bool V = true) {
+ OptMap[Ext].Enabled = V;
+ }
+
+ /// Enable or disable support for OpenCL extensions
+ /// \param Ext name of the extension optionally prefixed with
+ /// '+' or '-'
+ /// \param V used when \p Ext is not prefixed by '+' or '-'
+ void support(llvm::StringRef Ext, bool V = true) {
+ assert(!Ext.empty() && "Extension is empty.");
+
+ switch (Ext[0]) {
+ case '+':
+ V = true;
+ Ext = Ext.drop_front();
+ break;
+ case '-':
+ V = false;
+ Ext = Ext.drop_front();
+ break;
+ }
+
+ if (Ext.equals("all")) {
+ supportAll(V);
+ return;
+ }
+ OptMap[Ext].Supported = V;
+ }
+
+ OpenCLOptions(){
+#define OPENCLEXT_INTERNAL(Ext, AvailVer, CoreVer) \
+ OptMap[#Ext].Avail = AvailVer; \
+ OptMap[#Ext].Core = CoreVer;
+#include "clang/Basic/OpenCLExtensions.def"
+ }
+
+ void addSupport(const OpenCLOptions &Opts) {
+ for (auto &I:Opts.OptMap)
+ if (I.second.Supported)
+ OptMap[I.getKey()].Supported = true;
+ }
+
+ void copy(const OpenCLOptions &Opts) {
+ OptMap = Opts.OptMap;
+ }
+
+ // Turn on or off support of all options.
+ void supportAll(bool On = true) {
+ for (llvm::StringMap<Info>::iterator I = OptMap.begin(),
+ E = OptMap.end(); I != E; ++I)
+ I->second.Supported = On;
+ }
+
+ void disableAll() {
+ for (llvm::StringMap<Info>::iterator I = OptMap.begin(),
+ E = OptMap.end(); I != E; ++I)
+ I->second.Enabled = false;
+ }
+
+ void enableSupportedCore(LangOptions LO) {
+ for (llvm::StringMap<Info>::iterator I = OptMap.begin(), E = OptMap.end();
+ I != E; ++I)
+ if (isSupportedCore(I->getKey(), LO))
+ I->second.Enabled = true;
+ }
+
+ friend class ASTWriter;
+ friend class ASTReader;
+};
+
+} // end namespace clang
+
+#endif
diff --git a/clang-r353983/include/clang/Basic/OpenMPKinds.def b/clang-r353983/include/clang/Basic/OpenMPKinds.def
new file mode 100644
index 00000000..ecb2c8d1
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/OpenMPKinds.def
@@ -0,0 +1,954 @@
+//===--- OpenMPKinds.def - OpenMP directives and clauses list ---*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+/// \file
+/// This file defines the list of supported OpenMP directives and
+/// clauses.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef OPENMP_DIRECTIVE
+# define OPENMP_DIRECTIVE(Name)
+#endif
+#ifndef OPENMP_DIRECTIVE_EXT
+#define OPENMP_DIRECTIVE_EXT(Name, Str)
+#endif
+#ifndef OPENMP_CLAUSE
+# define OPENMP_CLAUSE(Name, Class)
+#endif
+#ifndef OPENMP_PARALLEL_CLAUSE
+# define OPENMP_PARALLEL_CLAUSE(Name)
+#endif
+#ifndef OPENMP_SIMD_CLAUSE
+# define OPENMP_SIMD_CLAUSE(Name)
+#endif
+#ifndef OPENMP_FOR_CLAUSE
+# define OPENMP_FOR_CLAUSE(Name)
+#endif
+#ifndef OPENMP_FOR_SIMD_CLAUSE
+# define OPENMP_FOR_SIMD_CLAUSE(Name)
+#endif
+#ifndef OPENMP_SECTIONS_CLAUSE
+# define OPENMP_SECTIONS_CLAUSE(Name)
+#endif
+#ifndef OPENMP_SINGLE_CLAUSE
+# define OPENMP_SINGLE_CLAUSE(Name)
+#endif
+#ifndef OPENMP_PARALLEL_FOR_CLAUSE
+# define OPENMP_PARALLEL_FOR_CLAUSE(Name)
+#endif
+#ifndef OPENMP_PARALLEL_FOR_SIMD_CLAUSE
+# define OPENMP_PARALLEL_FOR_SIMD_CLAUSE(Name)
+#endif
+#ifndef OPENMP_PARALLEL_SECTIONS_CLAUSE
+# define OPENMP_PARALLEL_SECTIONS_CLAUSE(Name)
+#endif
+#ifndef OPENMP_TASK_CLAUSE
+# define OPENMP_TASK_CLAUSE(Name)
+#endif
+#ifndef OPENMP_ATOMIC_CLAUSE
+# define OPENMP_ATOMIC_CLAUSE(Name)
+#endif
+#ifndef OPENMP_TARGET_CLAUSE
+# define OPENMP_TARGET_CLAUSE(Name)
+#endif
+#ifndef OPENMP_REQUIRES_CLAUSE
+# define OPENMP_REQUIRES_CLAUSE(Name)
+#endif
+#ifndef OPENMP_TARGET_DATA_CLAUSE
+# define OPENMP_TARGET_DATA_CLAUSE(Name)
+#endif
+#ifndef OPENMP_TARGET_ENTER_DATA_CLAUSE
+#define OPENMP_TARGET_ENTER_DATA_CLAUSE(Name)
+#endif
+#ifndef OPENMP_TARGET_EXIT_DATA_CLAUSE
+#define OPENMP_TARGET_EXIT_DATA_CLAUSE(Name)
+#endif
+#ifndef OPENMP_TARGET_PARALLEL_CLAUSE
+# define OPENMP_TARGET_PARALLEL_CLAUSE(Name)
+#endif
+#ifndef OPENMP_TARGET_PARALLEL_FOR_CLAUSE
+# define OPENMP_TARGET_PARALLEL_FOR_CLAUSE(Name)
+#endif
+#ifndef OPENMP_TARGET_UPDATE_CLAUSE
+# define OPENMP_TARGET_UPDATE_CLAUSE(Name)
+#endif
+#ifndef OPENMP_TEAMS_CLAUSE
+# define OPENMP_TEAMS_CLAUSE(Name)
+#endif
+#ifndef OPENMP_CANCEL_CLAUSE
+# define OPENMP_CANCEL_CLAUSE(Name)
+#endif
+#ifndef OPENMP_ORDERED_CLAUSE
+# define OPENMP_ORDERED_CLAUSE(Name)
+#endif
+#ifndef OPENMP_TASKLOOP_CLAUSE
+# define OPENMP_TASKLOOP_CLAUSE(Name)
+#endif
+#ifndef OPENMP_TASKLOOP_SIMD_CLAUSE
+# define OPENMP_TASKLOOP_SIMD_CLAUSE(Name)
+#endif
+#ifndef OPENMP_CRITICAL_CLAUSE
+# define OPENMP_CRITICAL_CLAUSE(Name)
+#endif
+#ifndef OPENMP_DISTRIBUTE_CLAUSE
+#define OPENMP_DISTRIBUTE_CLAUSE(Name)
+#endif
+#ifndef OPENMP_DEFAULT_KIND
+# define OPENMP_DEFAULT_KIND(Name)
+#endif
+#ifndef OPENMP_PROC_BIND_KIND
+# define OPENMP_PROC_BIND_KIND(Name)
+#endif
+#ifndef OPENMP_SCHEDULE_KIND
+#define OPENMP_SCHEDULE_KIND(Name)
+#endif
+#ifndef OPENMP_SCHEDULE_MODIFIER
+#define OPENMP_SCHEDULE_MODIFIER(Name)
+#endif
+#ifndef OPENMP_DEPEND_KIND
+#define OPENMP_DEPEND_KIND(Name)
+#endif
+#ifndef OPENMP_LINEAR_KIND
+#define OPENMP_LINEAR_KIND(Name)
+#endif
+#ifndef OPENMP_MAP_KIND
+#define OPENMP_MAP_KIND(Name)
+#endif
+#ifndef OPENMP_MAP_MODIFIER_KIND
+#define OPENMP_MAP_MODIFIER_KIND(Name)
+#endif
+#ifndef OPENMP_DIST_SCHEDULE_KIND
+#define OPENMP_DIST_SCHEDULE_KIND(Name)
+#endif
+#ifndef OPENMP_DEFAULTMAP_KIND
+#define OPENMP_DEFAULTMAP_KIND(Name)
+#endif
+#ifndef OPENMP_ATOMIC_DEFAULT_MEM_ORDER_KIND
+#define OPENMP_ATOMIC_DEFAULT_MEM_ORDER_KIND(Name)
+#endif
+#ifndef OPENMP_DEFAULTMAP_MODIFIER
+#define OPENMP_DEFAULTMAP_MODIFIER(Name)
+#endif
+#ifndef OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE
+#define OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(Name)
+#endif
+#ifndef OPENMP_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE
+#define OPENMP_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(Name)
+#endif
+#ifndef OPENMP_DISTRIBUTE_SIMD_CLAUSE
+#define OPENMP_DISTRIBUTE_SIMD_CLAUSE(Name)
+#endif
+#ifndef OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE
+#define OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE(Name)
+#endif
+#ifndef OPENMP_TARGET_SIMD_CLAUSE
+#define OPENMP_TARGET_SIMD_CLAUSE(Name)
+#endif
+#ifndef OPENMP_TEAMS_DISTRIBUTE_CLAUSE
+#define OPENMP_TEAMS_DISTRIBUTE_CLAUSE(Name)
+#endif
+#ifndef OPENMP_TEAMS_DISTRIBUTE_SIMD_CLAUSE
+#define OPENMP_TEAMS_DISTRIBUTE_SIMD_CLAUSE(Name)
+#endif
+#ifndef OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE
+#define OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(Name)
+#endif
+#ifndef OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE
+#define OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(Name)
+#endif
+#ifndef OPENMP_TARGET_TEAMS_CLAUSE
+#define OPENMP_TARGET_TEAMS_CLAUSE(Name)
+#endif
+#ifndef OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE
+#define OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(Name)
+#endif
+#ifndef OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE
+#define OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(Name)
+#endif
+#ifndef OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE
+#define OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(Name)
+#endif
+#ifndef OPENMP_TARGET_TEAMS_DISTRIBUTE_SIMD_CLAUSE
+#define OPENMP_TARGET_TEAMS_DISTRIBUTE_SIMD_CLAUSE(Name)
+#endif
+#ifndef OPENMP_TASKGROUP_CLAUSE
+#define OPENMP_TASKGROUP_CLAUSE(Name)
+#endif
+#ifndef OPENMP_DECLARE_MAPPER_CLAUSE
+#define OPENMP_DECLARE_MAPPER_CLAUSE(Name)
+#endif
+
+// OpenMP directives.
+OPENMP_DIRECTIVE(threadprivate)
+OPENMP_DIRECTIVE(parallel)
+OPENMP_DIRECTIVE(task)
+OPENMP_DIRECTIVE(simd)
+OPENMP_DIRECTIVE(for)
+OPENMP_DIRECTIVE(sections)
+OPENMP_DIRECTIVE(section)
+OPENMP_DIRECTIVE(single)
+OPENMP_DIRECTIVE(master)
+OPENMP_DIRECTIVE(critical)
+OPENMP_DIRECTIVE(taskyield)
+OPENMP_DIRECTIVE(barrier)
+OPENMP_DIRECTIVE(taskwait)
+OPENMP_DIRECTIVE(taskgroup)
+OPENMP_DIRECTIVE(flush)
+OPENMP_DIRECTIVE(ordered)
+OPENMP_DIRECTIVE(atomic)
+OPENMP_DIRECTIVE(target)
+OPENMP_DIRECTIVE(teams)
+OPENMP_DIRECTIVE(cancel)
+OPENMP_DIRECTIVE(requires)
+OPENMP_DIRECTIVE_EXT(target_data, "target data")
+OPENMP_DIRECTIVE_EXT(target_enter_data, "target enter data")
+OPENMP_DIRECTIVE_EXT(target_exit_data, "target exit data")
+OPENMP_DIRECTIVE_EXT(target_parallel, "target parallel")
+OPENMP_DIRECTIVE_EXT(target_parallel_for, "target parallel for")
+OPENMP_DIRECTIVE_EXT(target_update, "target update")
+OPENMP_DIRECTIVE_EXT(parallel_for, "parallel for")
+OPENMP_DIRECTIVE_EXT(parallel_for_simd, "parallel for simd")
+OPENMP_DIRECTIVE_EXT(parallel_sections, "parallel sections")
+OPENMP_DIRECTIVE_EXT(for_simd, "for simd")
+OPENMP_DIRECTIVE_EXT(cancellation_point, "cancellation point")
+OPENMP_DIRECTIVE_EXT(declare_reduction, "declare reduction")
+OPENMP_DIRECTIVE_EXT(declare_mapper, "declare mapper")
+OPENMP_DIRECTIVE_EXT(declare_simd, "declare simd")
+OPENMP_DIRECTIVE(taskloop)
+OPENMP_DIRECTIVE_EXT(taskloop_simd, "taskloop simd")
+OPENMP_DIRECTIVE(distribute)
+OPENMP_DIRECTIVE_EXT(declare_target, "declare target")
+OPENMP_DIRECTIVE_EXT(end_declare_target, "end declare target")
+OPENMP_DIRECTIVE_EXT(distribute_parallel_for, "distribute parallel for")
+OPENMP_DIRECTIVE_EXT(distribute_parallel_for_simd, "distribute parallel for simd")
+OPENMP_DIRECTIVE_EXT(distribute_simd, "distribute simd")
+OPENMP_DIRECTIVE_EXT(target_parallel_for_simd, "target parallel for simd")
+OPENMP_DIRECTIVE_EXT(target_simd, "target simd")
+OPENMP_DIRECTIVE_EXT(teams_distribute, "teams distribute")
+OPENMP_DIRECTIVE_EXT(teams_distribute_simd, "teams distribute simd")
+OPENMP_DIRECTIVE_EXT(teams_distribute_parallel_for_simd, "teams distribute parallel for simd")
+OPENMP_DIRECTIVE_EXT(teams_distribute_parallel_for, "teams distribute parallel for")
+OPENMP_DIRECTIVE_EXT(target_teams, "target teams")
+OPENMP_DIRECTIVE_EXT(target_teams_distribute, "target teams distribute")
+OPENMP_DIRECTIVE_EXT(target_teams_distribute_parallel_for, "target teams distribute parallel for")
+OPENMP_DIRECTIVE_EXT(target_teams_distribute_parallel_for_simd, "target teams distribute parallel for simd")
+OPENMP_DIRECTIVE_EXT(target_teams_distribute_simd, "target teams distribute simd")
+
+// OpenMP clauses.
+OPENMP_CLAUSE(if, OMPIfClause)
+OPENMP_CLAUSE(final, OMPFinalClause)
+OPENMP_CLAUSE(num_threads, OMPNumThreadsClause)
+OPENMP_CLAUSE(safelen, OMPSafelenClause)
+OPENMP_CLAUSE(simdlen, OMPSimdlenClause)
+OPENMP_CLAUSE(collapse, OMPCollapseClause)
+OPENMP_CLAUSE(default, OMPDefaultClause)
+OPENMP_CLAUSE(private, OMPPrivateClause)
+OPENMP_CLAUSE(firstprivate, OMPFirstprivateClause)
+OPENMP_CLAUSE(lastprivate, OMPLastprivateClause)
+OPENMP_CLAUSE(shared, OMPSharedClause)
+OPENMP_CLAUSE(reduction, OMPReductionClause)
+OPENMP_CLAUSE(linear, OMPLinearClause)
+OPENMP_CLAUSE(aligned, OMPAlignedClause)
+OPENMP_CLAUSE(copyin, OMPCopyinClause)
+OPENMP_CLAUSE(copyprivate, OMPCopyprivateClause)
+OPENMP_CLAUSE(proc_bind, OMPProcBindClause)
+OPENMP_CLAUSE(schedule, OMPScheduleClause)
+OPENMP_CLAUSE(ordered, OMPOrderedClause)
+OPENMP_CLAUSE(nowait, OMPNowaitClause)
+OPENMP_CLAUSE(untied, OMPUntiedClause)
+OPENMP_CLAUSE(mergeable, OMPMergeableClause)
+OPENMP_CLAUSE(read, OMPReadClause)
+OPENMP_CLAUSE(write, OMPWriteClause)
+OPENMP_CLAUSE(update, OMPUpdateClause)
+OPENMP_CLAUSE(capture, OMPCaptureClause)
+OPENMP_CLAUSE(seq_cst, OMPSeqCstClause)
+OPENMP_CLAUSE(depend, OMPDependClause)
+OPENMP_CLAUSE(device, OMPDeviceClause)
+OPENMP_CLAUSE(threads, OMPThreadsClause)
+OPENMP_CLAUSE(simd, OMPSIMDClause)
+OPENMP_CLAUSE(map, OMPMapClause)
+OPENMP_CLAUSE(num_teams, OMPNumTeamsClause)
+OPENMP_CLAUSE(thread_limit, OMPThreadLimitClause)
+OPENMP_CLAUSE(priority, OMPPriorityClause)
+OPENMP_CLAUSE(grainsize, OMPGrainsizeClause)
+OPENMP_CLAUSE(nogroup, OMPNogroupClause)
+OPENMP_CLAUSE(num_tasks, OMPNumTasksClause)
+OPENMP_CLAUSE(hint, OMPHintClause)
+OPENMP_CLAUSE(dist_schedule, OMPDistScheduleClause)
+OPENMP_CLAUSE(defaultmap, OMPDefaultmapClause)
+OPENMP_CLAUSE(to, OMPToClause)
+OPENMP_CLAUSE(from, OMPFromClause)
+OPENMP_CLAUSE(use_device_ptr, OMPUseDevicePtrClause)
+OPENMP_CLAUSE(is_device_ptr, OMPIsDevicePtrClause)
+OPENMP_CLAUSE(task_reduction, OMPTaskReductionClause)
+OPENMP_CLAUSE(in_reduction, OMPInReductionClause)
+OPENMP_CLAUSE(unified_address, OMPUnifiedAddressClause)
+OPENMP_CLAUSE(unified_shared_memory, OMPUnifiedSharedMemoryClause)
+OPENMP_CLAUSE(reverse_offload, OMPReverseOffloadClause)
+OPENMP_CLAUSE(dynamic_allocators, OMPDynamicAllocatorsClause)
+OPENMP_CLAUSE(atomic_default_mem_order, OMPAtomicDefaultMemOrderClause)
+
+// Clauses allowed for OpenMP directive 'parallel'.
+OPENMP_PARALLEL_CLAUSE(if)
+OPENMP_PARALLEL_CLAUSE(num_threads)
+OPENMP_PARALLEL_CLAUSE(default)
+OPENMP_PARALLEL_CLAUSE(proc_bind)
+OPENMP_PARALLEL_CLAUSE(private)
+OPENMP_PARALLEL_CLAUSE(firstprivate)
+OPENMP_PARALLEL_CLAUSE(shared)
+OPENMP_PARALLEL_CLAUSE(reduction)
+OPENMP_PARALLEL_CLAUSE(copyin)
+
+// Clauses allowed for directive 'omp simd'.
+OPENMP_SIMD_CLAUSE(private)
+OPENMP_SIMD_CLAUSE(lastprivate)
+OPENMP_SIMD_CLAUSE(linear)
+OPENMP_SIMD_CLAUSE(aligned)
+OPENMP_SIMD_CLAUSE(safelen)
+OPENMP_SIMD_CLAUSE(simdlen)
+OPENMP_SIMD_CLAUSE(collapse)
+OPENMP_SIMD_CLAUSE(reduction)
+
+// Clauses allowed for directive 'omp for'.
+OPENMP_FOR_CLAUSE(private)
+OPENMP_FOR_CLAUSE(lastprivate)
+OPENMP_FOR_CLAUSE(firstprivate)
+OPENMP_FOR_CLAUSE(reduction)
+OPENMP_FOR_CLAUSE(collapse)
+OPENMP_FOR_CLAUSE(schedule)
+OPENMP_FOR_CLAUSE(ordered)
+OPENMP_FOR_CLAUSE(nowait)
+OPENMP_FOR_CLAUSE(linear)
+
+// Clauses allowed for directive 'omp for simd'.
+OPENMP_FOR_SIMD_CLAUSE(private)
+OPENMP_FOR_SIMD_CLAUSE(firstprivate)
+OPENMP_FOR_SIMD_CLAUSE(lastprivate)
+OPENMP_FOR_SIMD_CLAUSE(reduction)
+OPENMP_FOR_SIMD_CLAUSE(schedule)
+OPENMP_FOR_SIMD_CLAUSE(collapse)
+OPENMP_FOR_SIMD_CLAUSE(nowait)
+OPENMP_FOR_SIMD_CLAUSE(safelen)
+OPENMP_FOR_SIMD_CLAUSE(simdlen)
+OPENMP_FOR_SIMD_CLAUSE(linear)
+OPENMP_FOR_SIMD_CLAUSE(aligned)
+OPENMP_FOR_SIMD_CLAUSE(ordered)
+
+// Clauses allowed for OpenMP directive 'omp sections'.
+OPENMP_SECTIONS_CLAUSE(private)
+OPENMP_SECTIONS_CLAUSE(lastprivate)
+OPENMP_SECTIONS_CLAUSE(firstprivate)
+OPENMP_SECTIONS_CLAUSE(reduction)
+OPENMP_SECTIONS_CLAUSE(nowait)
+
+// Clauses allowed for directive 'omp single'.
+OPENMP_SINGLE_CLAUSE(private)
+OPENMP_SINGLE_CLAUSE(firstprivate)
+OPENMP_SINGLE_CLAUSE(copyprivate)
+OPENMP_SINGLE_CLAUSE(nowait)
+
+// Clauses allowed for OpenMP directive 'cancel'.
+OPENMP_CANCEL_CLAUSE(if)
+
+// Static attributes for 'default' clause.
+OPENMP_DEFAULT_KIND(none)
+OPENMP_DEFAULT_KIND(shared)
+
+// Static attributes for 'proc_bind' clause.
+OPENMP_PROC_BIND_KIND(master)
+OPENMP_PROC_BIND_KIND(close)
+OPENMP_PROC_BIND_KIND(spread)
+
+// Static attributes for 'schedule' clause.
+OPENMP_SCHEDULE_KIND(static)
+OPENMP_SCHEDULE_KIND(dynamic)
+OPENMP_SCHEDULE_KIND(guided)
+OPENMP_SCHEDULE_KIND(auto)
+OPENMP_SCHEDULE_KIND(runtime)
+
+// Modifiers for 'schedule' clause.
+OPENMP_SCHEDULE_MODIFIER(monotonic)
+OPENMP_SCHEDULE_MODIFIER(nonmonotonic)
+OPENMP_SCHEDULE_MODIFIER(simd)
+
+// Static attributes for 'defaultmap' clause.
+OPENMP_DEFAULTMAP_KIND(scalar)
+
+// Modifiers for 'defaultmap' clause.
+OPENMP_DEFAULTMAP_MODIFIER(tofrom)
+
+// Static attributes for 'depend' clause.
+OPENMP_DEPEND_KIND(in)
+OPENMP_DEPEND_KIND(out)
+OPENMP_DEPEND_KIND(inout)
+OPENMP_DEPEND_KIND(mutexinoutset)
+OPENMP_DEPEND_KIND(source)
+OPENMP_DEPEND_KIND(sink)
+
+// Modifiers for 'linear' clause.
+OPENMP_LINEAR_KIND(val)
+OPENMP_LINEAR_KIND(ref)
+OPENMP_LINEAR_KIND(uval)
+
+// Clauses allowed for OpenMP directive 'parallel for'.
+OPENMP_PARALLEL_FOR_CLAUSE(if)
+OPENMP_PARALLEL_FOR_CLAUSE(num_threads)
+OPENMP_PARALLEL_FOR_CLAUSE(default)
+OPENMP_PARALLEL_FOR_CLAUSE(proc_bind)
+OPENMP_PARALLEL_FOR_CLAUSE(private)
+OPENMP_PARALLEL_FOR_CLAUSE(firstprivate)
+OPENMP_PARALLEL_FOR_CLAUSE(shared)
+OPENMP_PARALLEL_FOR_CLAUSE(reduction)
+OPENMP_PARALLEL_FOR_CLAUSE(copyin)
+OPENMP_PARALLEL_FOR_CLAUSE(lastprivate)
+OPENMP_PARALLEL_FOR_CLAUSE(collapse)
+OPENMP_PARALLEL_FOR_CLAUSE(schedule)
+OPENMP_PARALLEL_FOR_CLAUSE(ordered)
+OPENMP_PARALLEL_FOR_CLAUSE(linear)
+
+// Clauses allowed for OpenMP directive 'parallel for simd'.
+OPENMP_PARALLEL_FOR_SIMD_CLAUSE(if)
+OPENMP_PARALLEL_FOR_SIMD_CLAUSE(num_threads)
+OPENMP_PARALLEL_FOR_SIMD_CLAUSE(default)
+OPENMP_PARALLEL_FOR_SIMD_CLAUSE(proc_bind)
+OPENMP_PARALLEL_FOR_SIMD_CLAUSE(private)
+OPENMP_PARALLEL_FOR_SIMD_CLAUSE(firstprivate)
+OPENMP_PARALLEL_FOR_SIMD_CLAUSE(shared)
+OPENMP_PARALLEL_FOR_SIMD_CLAUSE(reduction)
+OPENMP_PARALLEL_FOR_SIMD_CLAUSE(copyin)
+OPENMP_PARALLEL_FOR_SIMD_CLAUSE(lastprivate)
+OPENMP_PARALLEL_FOR_SIMD_CLAUSE(collapse)
+OPENMP_PARALLEL_FOR_SIMD_CLAUSE(schedule)
+OPENMP_PARALLEL_FOR_SIMD_CLAUSE(safelen)
+OPENMP_PARALLEL_FOR_SIMD_CLAUSE(simdlen)
+OPENMP_PARALLEL_FOR_SIMD_CLAUSE(linear)
+OPENMP_PARALLEL_FOR_SIMD_CLAUSE(aligned)
+OPENMP_PARALLEL_FOR_SIMD_CLAUSE(ordered)
+
+// Clauses allowed for OpenMP directive 'parallel sections'.
+OPENMP_PARALLEL_SECTIONS_CLAUSE(if)
+OPENMP_PARALLEL_SECTIONS_CLAUSE(num_threads)
+OPENMP_PARALLEL_SECTIONS_CLAUSE(default)
+OPENMP_PARALLEL_SECTIONS_CLAUSE(proc_bind)
+OPENMP_PARALLEL_SECTIONS_CLAUSE(private)
+OPENMP_PARALLEL_SECTIONS_CLAUSE(firstprivate)
+OPENMP_PARALLEL_SECTIONS_CLAUSE(shared)
+OPENMP_PARALLEL_SECTIONS_CLAUSE(reduction)
+OPENMP_PARALLEL_SECTIONS_CLAUSE(copyin)
+OPENMP_PARALLEL_SECTIONS_CLAUSE(lastprivate)
+
+// Clauses allowed for OpenMP directive 'task'.
+OPENMP_TASK_CLAUSE(if)
+OPENMP_TASK_CLAUSE(final)
+OPENMP_TASK_CLAUSE(default)
+OPENMP_TASK_CLAUSE(private)
+OPENMP_TASK_CLAUSE(firstprivate)
+OPENMP_TASK_CLAUSE(shared)
+OPENMP_TASK_CLAUSE(untied)
+OPENMP_TASK_CLAUSE(mergeable)
+OPENMP_TASK_CLAUSE(depend)
+OPENMP_TASK_CLAUSE(priority)
+OPENMP_TASK_CLAUSE(in_reduction)
+
+// Clauses allowed for OpenMP directive 'atomic'.
+OPENMP_ATOMIC_CLAUSE(read)
+OPENMP_ATOMIC_CLAUSE(write)
+OPENMP_ATOMIC_CLAUSE(update)
+OPENMP_ATOMIC_CLAUSE(capture)
+OPENMP_ATOMIC_CLAUSE(seq_cst)
+
+// Clauses allowed for OpenMP directive 'target'.
+OPENMP_TARGET_CLAUSE(if)
+OPENMP_TARGET_CLAUSE(device)
+OPENMP_TARGET_CLAUSE(map)
+OPENMP_TARGET_CLAUSE(private)
+OPENMP_TARGET_CLAUSE(nowait)
+OPENMP_TARGET_CLAUSE(depend)
+OPENMP_TARGET_CLAUSE(defaultmap)
+OPENMP_TARGET_CLAUSE(firstprivate)
+OPENMP_TARGET_CLAUSE(is_device_ptr)
+OPENMP_TARGET_CLAUSE(reduction)
+
+// Clauses allowed for OpenMP directive 'requires'.
+OPENMP_REQUIRES_CLAUSE(unified_address)
+OPENMP_REQUIRES_CLAUSE(unified_shared_memory)
+OPENMP_REQUIRES_CLAUSE(reverse_offload)
+OPENMP_REQUIRES_CLAUSE(dynamic_allocators)
+OPENMP_REQUIRES_CLAUSE(atomic_default_mem_order)
+
+// Modifiers for 'atomic_default_mem_order' clause.
+OPENMP_ATOMIC_DEFAULT_MEM_ORDER_KIND(seq_cst)
+OPENMP_ATOMIC_DEFAULT_MEM_ORDER_KIND(acq_rel)
+OPENMP_ATOMIC_DEFAULT_MEM_ORDER_KIND(relaxed)
+
+// Clauses allowed for OpenMP directive 'target data'.
+OPENMP_TARGET_DATA_CLAUSE(if)
+OPENMP_TARGET_DATA_CLAUSE(device)
+OPENMP_TARGET_DATA_CLAUSE(map)
+OPENMP_TARGET_DATA_CLAUSE(use_device_ptr)
+
+// Clauses allowed for OpenMP directive 'target enter data'.
+OPENMP_TARGET_ENTER_DATA_CLAUSE(if)
+OPENMP_TARGET_ENTER_DATA_CLAUSE(device)
+OPENMP_TARGET_ENTER_DATA_CLAUSE(map)
+OPENMP_TARGET_ENTER_DATA_CLAUSE(nowait)
+OPENMP_TARGET_ENTER_DATA_CLAUSE(depend)
+
+// Clauses allowed for OpenMP directive 'target exit data'.
+OPENMP_TARGET_EXIT_DATA_CLAUSE(if)
+OPENMP_TARGET_EXIT_DATA_CLAUSE(device)
+OPENMP_TARGET_EXIT_DATA_CLAUSE(map)
+OPENMP_TARGET_EXIT_DATA_CLAUSE(nowait)
+OPENMP_TARGET_EXIT_DATA_CLAUSE(depend)
+
+// Clauses allowed for OpenMP directive 'target parallel'.
+OPENMP_TARGET_PARALLEL_CLAUSE(if)
+OPENMP_TARGET_PARALLEL_CLAUSE(device)
+OPENMP_TARGET_PARALLEL_CLAUSE(map)
+OPENMP_TARGET_PARALLEL_CLAUSE(private)
+OPENMP_TARGET_PARALLEL_CLAUSE(firstprivate)
+OPENMP_TARGET_PARALLEL_CLAUSE(nowait)
+OPENMP_TARGET_PARALLEL_CLAUSE(depend)
+OPENMP_TARGET_PARALLEL_CLAUSE(defaultmap)
+OPENMP_TARGET_PARALLEL_CLAUSE(num_threads)
+OPENMP_TARGET_PARALLEL_CLAUSE(default)
+OPENMP_TARGET_PARALLEL_CLAUSE(proc_bind)
+OPENMP_TARGET_PARALLEL_CLAUSE(shared)
+OPENMP_TARGET_PARALLEL_CLAUSE(reduction)
+OPENMP_TARGET_PARALLEL_CLAUSE(is_device_ptr)
+
+// Clauses allowed for OpenMP directive 'target parallel for'.
+OPENMP_TARGET_PARALLEL_FOR_CLAUSE(if)
+OPENMP_TARGET_PARALLEL_FOR_CLAUSE(device)
+OPENMP_TARGET_PARALLEL_FOR_CLAUSE(map)
+OPENMP_TARGET_PARALLEL_FOR_CLAUSE(private)
+OPENMP_TARGET_PARALLEL_FOR_CLAUSE(firstprivate)
+OPENMP_TARGET_PARALLEL_FOR_CLAUSE(lastprivate)
+OPENMP_TARGET_PARALLEL_FOR_CLAUSE(nowait)
+OPENMP_TARGET_PARALLEL_FOR_CLAUSE(depend)
+OPENMP_TARGET_PARALLEL_FOR_CLAUSE(defaultmap)
+OPENMP_TARGET_PARALLEL_FOR_CLAUSE(num_threads)
+OPENMP_TARGET_PARALLEL_FOR_CLAUSE(default)
+OPENMP_TARGET_PARALLEL_FOR_CLAUSE(proc_bind)
+OPENMP_TARGET_PARALLEL_FOR_CLAUSE(shared)
+OPENMP_TARGET_PARALLEL_FOR_CLAUSE(reduction)
+OPENMP_TARGET_PARALLEL_FOR_CLAUSE(collapse)
+OPENMP_TARGET_PARALLEL_FOR_CLAUSE(schedule)
+OPENMP_TARGET_PARALLEL_FOR_CLAUSE(ordered)
+OPENMP_TARGET_PARALLEL_FOR_CLAUSE(linear)
+OPENMP_TARGET_PARALLEL_FOR_CLAUSE(is_device_ptr)
+
+// Clauses allowed for OpenMP directive 'target update'.
+OPENMP_TARGET_UPDATE_CLAUSE(if)
+OPENMP_TARGET_UPDATE_CLAUSE(device)
+OPENMP_TARGET_UPDATE_CLAUSE(to)
+OPENMP_TARGET_UPDATE_CLAUSE(from)
+OPENMP_TARGET_UPDATE_CLAUSE(nowait)
+OPENMP_TARGET_UPDATE_CLAUSE(depend)
+
+// Clauses allowed for OpenMP directive 'teams'.
+OPENMP_TEAMS_CLAUSE(default)
+OPENMP_TEAMS_CLAUSE(private)
+OPENMP_TEAMS_CLAUSE(firstprivate)
+OPENMP_TEAMS_CLAUSE(shared)
+OPENMP_TEAMS_CLAUSE(reduction)
+OPENMP_TEAMS_CLAUSE(num_teams)
+OPENMP_TEAMS_CLAUSE(thread_limit)
+
+// Clauses allowed for OpenMP directive 'ordered'.
+OPENMP_ORDERED_CLAUSE(threads)
+OPENMP_ORDERED_CLAUSE(simd)
+OPENMP_ORDERED_CLAUSE(depend)
+
+// Map types for 'map' clause.
+OPENMP_MAP_KIND(alloc)
+OPENMP_MAP_KIND(to)
+OPENMP_MAP_KIND(from)
+OPENMP_MAP_KIND(tofrom)
+OPENMP_MAP_KIND(delete)
+OPENMP_MAP_KIND(release)
+
+// Map-type-modifiers for 'map' clause.
+OPENMP_MAP_MODIFIER_KIND(always)
+OPENMP_MAP_MODIFIER_KIND(close)
+
+// Clauses allowed for OpenMP directive 'taskloop'.
+OPENMP_TASKLOOP_CLAUSE(if)
+OPENMP_TASKLOOP_CLAUSE(shared)
+OPENMP_TASKLOOP_CLAUSE(private)
+OPENMP_TASKLOOP_CLAUSE(firstprivate)
+OPENMP_TASKLOOP_CLAUSE(lastprivate)
+OPENMP_TASKLOOP_CLAUSE(default)
+OPENMP_TASKLOOP_CLAUSE(collapse)
+OPENMP_TASKLOOP_CLAUSE(final)
+OPENMP_TASKLOOP_CLAUSE(untied)
+OPENMP_TASKLOOP_CLAUSE(mergeable)
+OPENMP_TASKLOOP_CLAUSE(priority)
+OPENMP_TASKLOOP_CLAUSE(grainsize)
+OPENMP_TASKLOOP_CLAUSE(nogroup)
+OPENMP_TASKLOOP_CLAUSE(num_tasks)
+OPENMP_TASKLOOP_CLAUSE(reduction)
+OPENMP_TASKLOOP_CLAUSE(in_reduction)
+
+// Clauses allowed for OpenMP directive 'taskloop simd'.
+OPENMP_TASKLOOP_SIMD_CLAUSE(if)
+OPENMP_TASKLOOP_SIMD_CLAUSE(shared)
+OPENMP_TASKLOOP_SIMD_CLAUSE(private)
+OPENMP_TASKLOOP_SIMD_CLAUSE(firstprivate)
+OPENMP_TASKLOOP_SIMD_CLAUSE(lastprivate)
+OPENMP_TASKLOOP_SIMD_CLAUSE(default)
+OPENMP_TASKLOOP_SIMD_CLAUSE(collapse)
+OPENMP_TASKLOOP_SIMD_CLAUSE(final)
+OPENMP_TASKLOOP_SIMD_CLAUSE(untied)
+OPENMP_TASKLOOP_SIMD_CLAUSE(mergeable)
+OPENMP_TASKLOOP_SIMD_CLAUSE(priority)
+OPENMP_TASKLOOP_SIMD_CLAUSE(linear)
+OPENMP_TASKLOOP_SIMD_CLAUSE(aligned)
+OPENMP_TASKLOOP_SIMD_CLAUSE(safelen)
+OPENMP_TASKLOOP_SIMD_CLAUSE(simdlen)
+OPENMP_TASKLOOP_SIMD_CLAUSE(grainsize)
+OPENMP_TASKLOOP_SIMD_CLAUSE(nogroup)
+OPENMP_TASKLOOP_SIMD_CLAUSE(num_tasks)
+OPENMP_TASKLOOP_SIMD_CLAUSE(reduction)
+OPENMP_TASKLOOP_SIMD_CLAUSE(in_reduction)
+
+// Clauses allowed for OpenMP directive 'critical'.
+OPENMP_CRITICAL_CLAUSE(hint)
+
+// Clauses allowed for OpenMP directive 'distribute'
+OPENMP_DISTRIBUTE_CLAUSE(private)
+OPENMP_DISTRIBUTE_CLAUSE(firstprivate)
+OPENMP_DISTRIBUTE_CLAUSE(lastprivate)
+OPENMP_DISTRIBUTE_CLAUSE(collapse)
+OPENMP_DISTRIBUTE_CLAUSE(dist_schedule)
+
+// Static attributes for 'dist_schedule' clause.
+OPENMP_DIST_SCHEDULE_KIND(static)
+
+// Clauses allowed for OpenMP directive 'distribute parallel for'
+OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(firstprivate)
+OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(lastprivate)
+OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(collapse)
+OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(dist_schedule)
+OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(if)
+OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(num_threads)
+OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(default)
+OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(proc_bind)
+OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(private)
+OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(shared)
+OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(reduction)
+OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(copyin)
+OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(schedule)
+
+// Clauses allowed for OpenMP directive 'distribute parallel for simd'
+OPENMP_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(firstprivate)
+OPENMP_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(lastprivate)
+OPENMP_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(collapse)
+OPENMP_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(dist_schedule)
+OPENMP_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(if)
+OPENMP_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(num_threads)
+OPENMP_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(default)
+OPENMP_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(proc_bind)
+OPENMP_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(private)
+OPENMP_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(shared)
+OPENMP_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(reduction)
+OPENMP_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(copyin)
+OPENMP_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(schedule)
+OPENMP_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(linear)
+OPENMP_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(aligned)
+OPENMP_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(safelen)
+OPENMP_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(simdlen)
+
+// Clauses allowed for OpenMP directive 'distribute simd'
+OPENMP_DISTRIBUTE_SIMD_CLAUSE(private)
+OPENMP_DISTRIBUTE_SIMD_CLAUSE(firstprivate)
+OPENMP_DISTRIBUTE_SIMD_CLAUSE(lastprivate)
+OPENMP_DISTRIBUTE_SIMD_CLAUSE(collapse)
+OPENMP_DISTRIBUTE_SIMD_CLAUSE(dist_schedule)
+OPENMP_DISTRIBUTE_SIMD_CLAUSE(linear)
+OPENMP_DISTRIBUTE_SIMD_CLAUSE(aligned)
+OPENMP_DISTRIBUTE_SIMD_CLAUSE(safelen)
+OPENMP_DISTRIBUTE_SIMD_CLAUSE(simdlen)
+OPENMP_DISTRIBUTE_SIMD_CLAUSE(reduction)
+
+// Clauses allowed for OpenMP directive 'target parallel for simd'.
+OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE(if)
+OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE(device)
+OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE(map)
+OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE(private)
+OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE(firstprivate)
+OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE(lastprivate)
+OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE(nowait)
+OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE(depend)
+OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE(defaultmap)
+OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE(num_threads)
+OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE(default)
+OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE(proc_bind)
+OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE(shared)
+OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE(reduction)
+OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE(collapse)
+OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE(schedule)
+OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE(ordered)
+OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE(linear)
+OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE(safelen)
+OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE(simdlen)
+OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE(aligned)
+OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE(is_device_ptr)
+
+// Clauses allowed for OpenMP directive 'target simd'.
+OPENMP_TARGET_SIMD_CLAUSE(if)
+OPENMP_TARGET_SIMD_CLAUSE(device)
+OPENMP_TARGET_SIMD_CLAUSE(map)
+OPENMP_TARGET_SIMD_CLAUSE(private)
+OPENMP_TARGET_SIMD_CLAUSE(nowait)
+OPENMP_TARGET_SIMD_CLAUSE(depend)
+OPENMP_TARGET_SIMD_CLAUSE(defaultmap)
+OPENMP_TARGET_SIMD_CLAUSE(firstprivate)
+OPENMP_TARGET_SIMD_CLAUSE(is_device_ptr)
+OPENMP_TARGET_SIMD_CLAUSE(lastprivate)
+OPENMP_TARGET_SIMD_CLAUSE(linear)
+OPENMP_TARGET_SIMD_CLAUSE(aligned)
+OPENMP_TARGET_SIMD_CLAUSE(safelen)
+OPENMP_TARGET_SIMD_CLAUSE(simdlen)
+OPENMP_TARGET_SIMD_CLAUSE(collapse)
+OPENMP_TARGET_SIMD_CLAUSE(reduction)
+
+// Clauses allowed for OpenMP directive 'teams distribute'.
+OPENMP_TEAMS_DISTRIBUTE_CLAUSE(default)
+OPENMP_TEAMS_DISTRIBUTE_CLAUSE(private)
+OPENMP_TEAMS_DISTRIBUTE_CLAUSE(firstprivate)
+OPENMP_TEAMS_DISTRIBUTE_CLAUSE(shared)
+OPENMP_TEAMS_DISTRIBUTE_CLAUSE(reduction)
+OPENMP_TEAMS_DISTRIBUTE_CLAUSE(num_teams)
+OPENMP_TEAMS_DISTRIBUTE_CLAUSE(thread_limit)
+OPENMP_TEAMS_DISTRIBUTE_CLAUSE(lastprivate)
+OPENMP_TEAMS_DISTRIBUTE_CLAUSE(collapse)
+OPENMP_TEAMS_DISTRIBUTE_CLAUSE(dist_schedule)
+
+// Clauses allowed for OpenMP directive 'teams distribute simd'
+OPENMP_TEAMS_DISTRIBUTE_SIMD_CLAUSE(default)
+OPENMP_TEAMS_DISTRIBUTE_SIMD_CLAUSE(private)
+OPENMP_TEAMS_DISTRIBUTE_SIMD_CLAUSE(firstprivate)
+OPENMP_TEAMS_DISTRIBUTE_SIMD_CLAUSE(shared)
+OPENMP_TEAMS_DISTRIBUTE_SIMD_CLAUSE(reduction)
+OPENMP_TEAMS_DISTRIBUTE_SIMD_CLAUSE(num_teams)
+OPENMP_TEAMS_DISTRIBUTE_SIMD_CLAUSE(thread_limit)
+OPENMP_TEAMS_DISTRIBUTE_SIMD_CLAUSE(lastprivate)
+OPENMP_TEAMS_DISTRIBUTE_SIMD_CLAUSE(collapse)
+OPENMP_TEAMS_DISTRIBUTE_SIMD_CLAUSE(dist_schedule)
+OPENMP_TEAMS_DISTRIBUTE_SIMD_CLAUSE(linear)
+OPENMP_TEAMS_DISTRIBUTE_SIMD_CLAUSE(aligned)
+OPENMP_TEAMS_DISTRIBUTE_SIMD_CLAUSE(safelen)
+OPENMP_TEAMS_DISTRIBUTE_SIMD_CLAUSE(simdlen)
+
+// Clauses allowed for OpenMP directive 'teams distribute parallel for simd'
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(firstprivate)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(lastprivate)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(collapse)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(dist_schedule)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(if)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(num_threads)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(default)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(proc_bind)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(private)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(shared)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(reduction)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(schedule)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(linear)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(aligned)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(safelen)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(simdlen)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(num_teams)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(thread_limit)
+
+// Clauses allowed for OpenMP directive 'teams distribute parallel for'
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(firstprivate)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(lastprivate)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(collapse)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(dist_schedule)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(if)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(num_threads)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(default)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(proc_bind)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(private)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(shared)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(reduction)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(schedule)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(num_teams)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(thread_limit)
+OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(copyin)
+
+// Clauses allowed for OpenMP directive 'target teams'.
+OPENMP_TARGET_TEAMS_CLAUSE(if)
+OPENMP_TARGET_TEAMS_CLAUSE(device)
+OPENMP_TARGET_TEAMS_CLAUSE(map)
+OPENMP_TARGET_TEAMS_CLAUSE(private)
+OPENMP_TARGET_TEAMS_CLAUSE(nowait)
+OPENMP_TARGET_TEAMS_CLAUSE(depend)
+OPENMP_TARGET_TEAMS_CLAUSE(defaultmap)
+OPENMP_TARGET_TEAMS_CLAUSE(firstprivate)
+OPENMP_TARGET_TEAMS_CLAUSE(is_device_ptr)
+OPENMP_TARGET_TEAMS_CLAUSE(default)
+OPENMP_TARGET_TEAMS_CLAUSE(shared)
+OPENMP_TARGET_TEAMS_CLAUSE(reduction)
+OPENMP_TARGET_TEAMS_CLAUSE(num_teams)
+OPENMP_TARGET_TEAMS_CLAUSE(thread_limit)
+
+// Clauses allowed for OpenMP directive 'target teams distribute'.
+OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(if)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(device)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(map)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(private)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(nowait)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(depend)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(defaultmap)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(firstprivate)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(is_device_ptr)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(default)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(shared)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(reduction)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(num_teams)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(thread_limit)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(lastprivate)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(collapse)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(dist_schedule)
+
+// Clauses allowed for OpenMP directive 'target teams distribute parallel for'.
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(if)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(device)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(map)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(private)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(nowait)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(depend)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(defaultmap)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(firstprivate)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(is_device_ptr)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(default)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(shared)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(reduction)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(num_teams)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(thread_limit)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(lastprivate)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(collapse)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(dist_schedule)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(num_threads)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(proc_bind)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(schedule)
+
+// Clauses allowed for OpenMP directive
+// 'target teams distribute parallel for simd'.
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(if)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(device)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(map)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(private)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(nowait)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(depend)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(defaultmap)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(firstprivate)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(is_device_ptr)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(default)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(shared)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(reduction)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(num_teams)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(thread_limit)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(lastprivate)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(collapse)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(dist_schedule)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(num_threads)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(proc_bind)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(schedule)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(linear)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(aligned)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(safelen)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(simdlen)
+
+// Clauses allowed for OpenMP directive 'target teams distribute simd'.
+OPENMP_TARGET_TEAMS_DISTRIBUTE_SIMD_CLAUSE(if)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_SIMD_CLAUSE(device)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_SIMD_CLAUSE(map)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_SIMD_CLAUSE(private)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_SIMD_CLAUSE(nowait)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_SIMD_CLAUSE(depend)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_SIMD_CLAUSE(defaultmap)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_SIMD_CLAUSE(firstprivate)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_SIMD_CLAUSE(lastprivate)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_SIMD_CLAUSE(is_device_ptr)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_SIMD_CLAUSE(shared)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_SIMD_CLAUSE(reduction)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_SIMD_CLAUSE(num_teams)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_SIMD_CLAUSE(thread_limit)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_SIMD_CLAUSE(collapse)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_SIMD_CLAUSE(dist_schedule)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_SIMD_CLAUSE(linear)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_SIMD_CLAUSE(aligned)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_SIMD_CLAUSE(safelen)
+OPENMP_TARGET_TEAMS_DISTRIBUTE_SIMD_CLAUSE(simdlen)
+
+// Clauses allowed for OpenMP directive 'taskgroup'.
+OPENMP_TASKGROUP_CLAUSE(task_reduction)
+
+// Clauses allowed for OpenMP directive 'declare mapper'.
+OPENMP_DECLARE_MAPPER_CLAUSE(map)
+
+#undef OPENMP_DECLARE_MAPPER_CLAUSE
+#undef OPENMP_TASKGROUP_CLAUSE
+#undef OPENMP_TASKLOOP_SIMD_CLAUSE
+#undef OPENMP_TASKLOOP_CLAUSE
+#undef OPENMP_LINEAR_KIND
+#undef OPENMP_DEPEND_KIND
+#undef OPENMP_SCHEDULE_MODIFIER
+#undef OPENMP_SCHEDULE_KIND
+#undef OPENMP_PROC_BIND_KIND
+#undef OPENMP_DEFAULT_KIND
+#undef OPENMP_DIRECTIVE
+#undef OPENMP_DIRECTIVE_EXT
+#undef OPENMP_CLAUSE
+#undef OPENMP_CRITICAL_CLAUSE
+#undef OPENMP_ORDERED_CLAUSE
+#undef OPENMP_CANCEL_CLAUSE
+#undef OPENMP_SINGLE_CLAUSE
+#undef OPENMP_SECTIONS_CLAUSE
+#undef OPENMP_PARALLEL_CLAUSE
+#undef OPENMP_PARALLEL_FOR_CLAUSE
+#undef OPENMP_PARALLEL_FOR_SIMD_CLAUSE
+#undef OPENMP_PARALLEL_SECTIONS_CLAUSE
+#undef OPENMP_TASK_CLAUSE
+#undef OPENMP_ATOMIC_CLAUSE
+#undef OPENMP_TARGET_CLAUSE
+#undef OPENMP_REQUIRES_CLAUSE
+#undef OPENMP_ATOMIC_DEFAULT_MEM_ORDER_KIND
+#undef OPENMP_TARGET_DATA_CLAUSE
+#undef OPENMP_TARGET_ENTER_DATA_CLAUSE
+#undef OPENMP_TARGET_EXIT_DATA_CLAUSE
+#undef OPENMP_TARGET_PARALLEL_CLAUSE
+#undef OPENMP_TARGET_PARALLEL_FOR_CLAUSE
+#undef OPENMP_TEAMS_CLAUSE
+#undef OPENMP_SIMD_CLAUSE
+#undef OPENMP_FOR_CLAUSE
+#undef OPENMP_FOR_SIMD_CLAUSE
+#undef OPENMP_MAP_KIND
+#undef OPENMP_MAP_MODIFIER_KIND
+#undef OPENMP_DISTRIBUTE_CLAUSE
+#undef OPENMP_DIST_SCHEDULE_KIND
+#undef OPENMP_DEFAULTMAP_KIND
+#undef OPENMP_DEFAULTMAP_MODIFIER
+#undef OPENMP_TARGET_UPDATE_CLAUSE
+#undef OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE
+#undef OPENMP_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE
+#undef OPENMP_DISTRIBUTE_SIMD_CLAUSE
+#undef OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE
+#undef OPENMP_TARGET_SIMD_CLAUSE
+#undef OPENMP_TEAMS_DISTRIBUTE_CLAUSE
+#undef OPENMP_TEAMS_DISTRIBUTE_SIMD_CLAUSE
+#undef OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE
+#undef OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE
+#undef OPENMP_TARGET_TEAMS_CLAUSE
+#undef OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE
+#undef OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE
+#undef OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE
+#undef OPENMP_TARGET_TEAMS_DISTRIBUTE_SIMD_CLAUSE
diff --git a/clang-r353983/include/clang/Basic/OpenMPKinds.h b/clang-r353983/include/clang/Basic/OpenMPKinds.h
new file mode 100644
index 00000000..17e66a53
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/OpenMPKinds.h
@@ -0,0 +1,262 @@
+//===--- OpenMPKinds.h - OpenMP enums ---------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Defines some OpenMP-specific enums and functions.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_OPENMPKINDS_H
+#define LLVM_CLANG_BASIC_OPENMPKINDS_H
+
+#include "llvm/ADT/StringRef.h"
+
+namespace clang {
+
+/// OpenMP directives.
+enum OpenMPDirectiveKind {
+#define OPENMP_DIRECTIVE(Name) \
+ OMPD_##Name,
+#define OPENMP_DIRECTIVE_EXT(Name, Str) \
+ OMPD_##Name,
+#include "clang/Basic/OpenMPKinds.def"
+ OMPD_unknown
+};
+
+/// OpenMP clauses.
+enum OpenMPClauseKind {
+#define OPENMP_CLAUSE(Name, Class) \
+ OMPC_##Name,
+#include "clang/Basic/OpenMPKinds.def"
+ OMPC_flush,
+ OMPC_threadprivate,
+ OMPC_uniform,
+ OMPC_unknown
+};
+
+/// OpenMP attributes for 'default' clause.
+enum OpenMPDefaultClauseKind {
+#define OPENMP_DEFAULT_KIND(Name) \
+ OMPC_DEFAULT_##Name,
+#include "clang/Basic/OpenMPKinds.def"
+ OMPC_DEFAULT_unknown
+};
+
+/// OpenMP attributes for 'proc_bind' clause.
+enum OpenMPProcBindClauseKind {
+#define OPENMP_PROC_BIND_KIND(Name) \
+ OMPC_PROC_BIND_##Name,
+#include "clang/Basic/OpenMPKinds.def"
+ OMPC_PROC_BIND_unknown
+};
+
+/// OpenMP attributes for 'schedule' clause.
+enum OpenMPScheduleClauseKind {
+#define OPENMP_SCHEDULE_KIND(Name) \
+ OMPC_SCHEDULE_##Name,
+#include "clang/Basic/OpenMPKinds.def"
+ OMPC_SCHEDULE_unknown
+};
+
+/// OpenMP modifiers for 'schedule' clause.
+enum OpenMPScheduleClauseModifier {
+ OMPC_SCHEDULE_MODIFIER_unknown = OMPC_SCHEDULE_unknown,
+#define OPENMP_SCHEDULE_MODIFIER(Name) \
+ OMPC_SCHEDULE_MODIFIER_##Name,
+#include "clang/Basic/OpenMPKinds.def"
+ OMPC_SCHEDULE_MODIFIER_last
+};
+
+/// OpenMP attributes for 'depend' clause.
+enum OpenMPDependClauseKind {
+#define OPENMP_DEPEND_KIND(Name) \
+ OMPC_DEPEND_##Name,
+#include "clang/Basic/OpenMPKinds.def"
+ OMPC_DEPEND_unknown
+};
+
+/// OpenMP attributes for 'linear' clause.
+enum OpenMPLinearClauseKind {
+#define OPENMP_LINEAR_KIND(Name) \
+ OMPC_LINEAR_##Name,
+#include "clang/Basic/OpenMPKinds.def"
+ OMPC_LINEAR_unknown
+};
+
+/// OpenMP mapping kind for 'map' clause.
+enum OpenMPMapClauseKind {
+#define OPENMP_MAP_KIND(Name) \
+ OMPC_MAP_##Name,
+#include "clang/Basic/OpenMPKinds.def"
+ OMPC_MAP_unknown
+};
+
+/// OpenMP modifier kind for 'map' clause.
+enum OpenMPMapModifierKind {
+ OMPC_MAP_MODIFIER_unknown = OMPC_MAP_unknown,
+#define OPENMP_MAP_MODIFIER_KIND(Name) \
+ OMPC_MAP_MODIFIER_##Name,
+#include "clang/Basic/OpenMPKinds.def"
+ OMPC_MAP_MODIFIER_last
+};
+
+/// OpenMP attributes for 'dist_schedule' clause.
+enum OpenMPDistScheduleClauseKind {
+#define OPENMP_DIST_SCHEDULE_KIND(Name) OMPC_DIST_SCHEDULE_##Name,
+#include "clang/Basic/OpenMPKinds.def"
+ OMPC_DIST_SCHEDULE_unknown
+};
+
+/// OpenMP attributes for 'defaultmap' clause.
+enum OpenMPDefaultmapClauseKind {
+#define OPENMP_DEFAULTMAP_KIND(Name) \
+ OMPC_DEFAULTMAP_##Name,
+#include "clang/Basic/OpenMPKinds.def"
+ OMPC_DEFAULTMAP_unknown
+};
+
+/// OpenMP modifiers for 'defaultmap' clause.
+enum OpenMPDefaultmapClauseModifier {
+ OMPC_DEFAULTMAP_MODIFIER_unknown = OMPC_DEFAULTMAP_unknown,
+#define OPENMP_DEFAULTMAP_MODIFIER(Name) \
+ OMPC_DEFAULTMAP_MODIFIER_##Name,
+#include "clang/Basic/OpenMPKinds.def"
+ OMPC_DEFAULTMAP_MODIFIER_last
+};
+
+/// OpenMP attributes for 'atomic_default_mem_order' clause.
+enum OpenMPAtomicDefaultMemOrderClauseKind {
+#define OPENMP_ATOMIC_DEFAULT_MEM_ORDER_KIND(Name) \
+ OMPC_ATOMIC_DEFAULT_MEM_ORDER_##Name,
+#include "clang/Basic/OpenMPKinds.def"
+ OMPC_ATOMIC_DEFAULT_MEM_ORDER_unknown
+};
+
+/// Scheduling data for loop-based OpenMP directives.
+struct OpenMPScheduleTy final {
+ OpenMPScheduleClauseKind Schedule = OMPC_SCHEDULE_unknown;
+ OpenMPScheduleClauseModifier M1 = OMPC_SCHEDULE_MODIFIER_unknown;
+ OpenMPScheduleClauseModifier M2 = OMPC_SCHEDULE_MODIFIER_unknown;
+};
+
+OpenMPDirectiveKind getOpenMPDirectiveKind(llvm::StringRef Str);
+const char *getOpenMPDirectiveName(OpenMPDirectiveKind Kind);
+
+OpenMPClauseKind getOpenMPClauseKind(llvm::StringRef Str);
+const char *getOpenMPClauseName(OpenMPClauseKind Kind);
+
+unsigned getOpenMPSimpleClauseType(OpenMPClauseKind Kind, llvm::StringRef Str);
+const char *getOpenMPSimpleClauseTypeName(OpenMPClauseKind Kind, unsigned Type);
+
+bool isAllowedClauseForDirective(OpenMPDirectiveKind DKind,
+ OpenMPClauseKind CKind);
+
+/// Checks if the specified directive is a directive with an associated
+/// loop construct.
+/// \param DKind Specified directive.
+/// \return true - the directive is a loop-associated directive like 'omp simd'
+/// or 'omp for' directive, otherwise - false.
+bool isOpenMPLoopDirective(OpenMPDirectiveKind DKind);
+
+/// Checks if the specified directive is a worksharing directive.
+/// \param DKind Specified directive.
+/// \return true - the directive is a worksharing directive like 'omp for',
+/// otherwise - false.
+bool isOpenMPWorksharingDirective(OpenMPDirectiveKind DKind);
+
+/// Checks if the specified directive is a taskloop directive.
+/// \param DKind Specified directive.
+/// \return true - the directive is a worksharing directive like 'omp taskloop',
+/// otherwise - false.
+bool isOpenMPTaskLoopDirective(OpenMPDirectiveKind DKind);
+
+/// Checks if the specified directive is a parallel-kind directive.
+/// \param DKind Specified directive.
+/// \return true - the directive is a parallel-like directive like 'omp
+/// parallel', otherwise - false.
+bool isOpenMPParallelDirective(OpenMPDirectiveKind DKind);
+
+/// Checks if the specified directive is a target code offload directive.
+/// \param DKind Specified directive.
+/// \return true - the directive is a target code offload directive like
+/// 'omp target', 'omp target parallel', 'omp target xxx'
+/// otherwise - false.
+bool isOpenMPTargetExecutionDirective(OpenMPDirectiveKind DKind);
+
+/// Checks if the specified directive is a target data offload directive.
+/// \param DKind Specified directive.
+/// \return true - the directive is a target data offload directive like
+/// 'omp target data', 'omp target update', 'omp target enter data',
+/// 'omp target exit data'
+/// otherwise - false.
+bool isOpenMPTargetDataManagementDirective(OpenMPDirectiveKind DKind);
+
+/// Checks if the specified composite/combined directive constitutes a teams
+/// directive in the outermost nest. For example
+/// 'omp teams distribute' or 'omp teams distribute parallel for'.
+/// \param DKind Specified directive.
+/// \return true - the directive has teams on the outermost nest, otherwise -
+/// false.
+bool isOpenMPNestingTeamsDirective(OpenMPDirectiveKind DKind);
+
+/// Checks if the specified directive is a teams-kind directive. For example,
+/// 'omp teams distribute' or 'omp target teams'.
+/// \param DKind Specified directive.
+/// \return true - the directive is a teams-like directive, otherwise - false.
+bool isOpenMPTeamsDirective(OpenMPDirectiveKind DKind);
+
+/// Checks if the specified directive is a simd directive.
+/// \param DKind Specified directive.
+/// \return true - the directive is a simd directive like 'omp simd',
+/// otherwise - false.
+bool isOpenMPSimdDirective(OpenMPDirectiveKind DKind);
+
+/// Checks if the specified directive is a distribute directive.
+/// \param DKind Specified directive.
+/// \return true - the directive is a distribute-directive like 'omp
+/// distribute',
+/// otherwise - false.
+bool isOpenMPDistributeDirective(OpenMPDirectiveKind DKind);
+
+/// Checks if the specified composite/combined directive constitutes a
+/// distribute directive in the outermost nest. For example,
+/// 'omp distribute parallel for' or 'omp distribute'.
+/// \param DKind Specified directive.
+/// \return true - the directive has distribute on the outermost nest.
+/// otherwise - false.
+bool isOpenMPNestingDistributeDirective(OpenMPDirectiveKind DKind);
+
+/// Checks if the specified clause is one of private clauses like
+/// 'private', 'firstprivate', 'reduction' etc..
+/// \param Kind Clause kind.
+/// \return true - the clause is a private clause, otherwise - false.
+bool isOpenMPPrivate(OpenMPClauseKind Kind);
+
+/// Checks if the specified clause is one of threadprivate clauses like
+/// 'threadprivate', 'copyin' or 'copyprivate'.
+/// \param Kind Clause kind.
+/// \return true - the clause is a threadprivate clause, otherwise - false.
+bool isOpenMPThreadPrivate(OpenMPClauseKind Kind);
+
+/// Checks if the specified directive kind is one of tasking directives - task,
+/// taskloop or taksloop simd.
+bool isOpenMPTaskingDirective(OpenMPDirectiveKind Kind);
+
+/// Checks if the specified directive kind is one of the composite or combined
+/// directives that need loop bound sharing across loops outlined in nested
+/// functions
+bool isOpenMPLoopBoundSharingDirective(OpenMPDirectiveKind Kind);
+
+/// Return the captured regions of an OpenMP directive.
+void getOpenMPCaptureRegions(
+ llvm::SmallVectorImpl<OpenMPDirectiveKind> &CaptureRegions,
+ OpenMPDirectiveKind DKind);
+}
+
+#endif
+
diff --git a/clang-r353983/include/clang/Basic/OperatorKinds.def b/clang-r353983/include/clang/Basic/OperatorKinds.def
new file mode 100644
index 00000000..d464db29
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/OperatorKinds.def
@@ -0,0 +1,107 @@
+//===--- OperatorKinds.def - C++ Overloaded Operator Database ---*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the OverloadedOperator database, which includes
+// all of the overloadable C++ operators.
+//
+//===----------------------------------------------------------------------===//
+//
+/// @file OperatorKinds.def
+///
+/// In this file, each of the overloadable C++ operators is enumerated
+/// with either the OVERLOADED_OPERATOR or OVERLOADED_OPERATOR_MULTI
+/// macro, each of which can be specified by the code including this
+/// file. OVERLOADED_OPERATOR is used for single-token operators
+/// (e.g., "+"), and has six arguments:
+///
+/// Name: The name of the token. OO_Name will be the name of the
+/// corresponding enumerator in OverloadedOperatorKind in
+/// OperatorKinds.h.
+///
+/// Spelling: A string that provides a canonical spelling for the
+/// operator, e.g., "operator+".
+///
+/// Token: The name of the token that specifies the operator, e.g.,
+/// "plus" for operator+ or "greatergreaterequal" for
+/// "operator>>=". With a "kw_" prefix, the token name can be used as
+/// an enumerator into the TokenKind enumeration.
+///
+/// Unary: True if the operator can be declared as a unary operator.
+///
+/// Binary: True if the operator can be declared as a binary
+/// operator. Note that some operators (e.g., "operator+" and
+/// "operator*") can be both unary and binary.
+///
+/// MemberOnly: True if this operator can only be declared as a
+/// non-static member function. False if the operator can be both a
+/// non-member function and a non-static member function.
+///
+/// OVERLOADED_OPERATOR_MULTI is used to enumerate the multi-token
+/// overloaded operator names, e.g., "operator delete []". The macro
+/// has all of the parameters of OVERLOADED_OPERATOR except Token,
+/// which is omitted.
+
+#ifndef OVERLOADED_OPERATOR
+# define OVERLOADED_OPERATOR(Name,Spelling,Token,Unary,Binary,MemberOnly)
+#endif
+
+#ifndef OVERLOADED_OPERATOR_MULTI
+# define OVERLOADED_OPERATOR_MULTI(Name,Spelling,Unary,Binary,MemberOnly) \
+ OVERLOADED_OPERATOR(Name,Spelling,unknown,Unary,Binary,MemberOnly)
+#endif
+
+OVERLOADED_OPERATOR_MULTI(New , "new" , true , true , false)
+OVERLOADED_OPERATOR_MULTI(Delete , "delete" , true , true , false)
+OVERLOADED_OPERATOR_MULTI(Array_New , "new[]" , true , true , false)
+OVERLOADED_OPERATOR_MULTI(Array_Delete , "delete[]" , true , true , false)
+OVERLOADED_OPERATOR(Plus , "+" , plus , true , true , false)
+OVERLOADED_OPERATOR(Minus , "-" , minus , true , true , false)
+OVERLOADED_OPERATOR(Star , "*" , star , true , true , false)
+OVERLOADED_OPERATOR(Slash , "/" , slash , false, true , false)
+OVERLOADED_OPERATOR(Percent , "%" , percent , false, true , false)
+OVERLOADED_OPERATOR(Caret , "^" , caret , false, true , false)
+OVERLOADED_OPERATOR(Amp , "&" , amp , true , true , false)
+OVERLOADED_OPERATOR(Pipe , "|" , pipe , false, true , false)
+OVERLOADED_OPERATOR(Tilde , "~" , tilde , true , false, false)
+OVERLOADED_OPERATOR(Exclaim , "!" , exclaim , true , false, false)
+OVERLOADED_OPERATOR(Equal , "=" , equal , false, true , true)
+OVERLOADED_OPERATOR(Less , "<" , less , false, true , false)
+OVERLOADED_OPERATOR(Greater , ">" , greater , false, true , false)
+OVERLOADED_OPERATOR(PlusEqual , "+=" , plusequal , false, true , false)
+OVERLOADED_OPERATOR(MinusEqual , "-=" , minusequal , false, true , false)
+OVERLOADED_OPERATOR(StarEqual , "*=" , starequal , false, true , false)
+OVERLOADED_OPERATOR(SlashEqual , "/=" , slashequal , false, true , false)
+OVERLOADED_OPERATOR(PercentEqual , "%=" , percentequal , false, true , false)
+OVERLOADED_OPERATOR(CaretEqual , "^=" , caretequal , false, true , false)
+OVERLOADED_OPERATOR(AmpEqual , "&=" , ampequal , false, true , false)
+OVERLOADED_OPERATOR(PipeEqual , "|=" , pipeequal , false, true , false)
+OVERLOADED_OPERATOR(LessLess , "<<" , lessless , false, true , false)
+OVERLOADED_OPERATOR(GreaterGreater , ">>" , greatergreater , false, true , false)
+OVERLOADED_OPERATOR(LessLessEqual , "<<=" , lesslessequal , false, true , false)
+OVERLOADED_OPERATOR(GreaterGreaterEqual , ">>=" , greatergreaterequal, false, true , false)
+OVERLOADED_OPERATOR(EqualEqual , "==" , equalequal , false, true , false)
+OVERLOADED_OPERATOR(ExclaimEqual , "!=" , exclaimequal , false, true , false)
+OVERLOADED_OPERATOR(LessEqual , "<=" , lessequal , false, true , false)
+OVERLOADED_OPERATOR(GreaterEqual , ">=" , greaterequal , false, true , false)
+OVERLOADED_OPERATOR(Spaceship , "<=>" , spaceship , false, true , false)
+OVERLOADED_OPERATOR(AmpAmp , "&&" , ampamp , false, true , false)
+OVERLOADED_OPERATOR(PipePipe , "||" , pipepipe , false, true , false)
+OVERLOADED_OPERATOR(PlusPlus , "++" , plusplus , true , true , false)
+OVERLOADED_OPERATOR(MinusMinus , "--" , minusminus , true , true , false)
+OVERLOADED_OPERATOR(Comma , "," , comma , false, true , false)
+OVERLOADED_OPERATOR(ArrowStar , "->*" , arrowstar , false, true , false)
+OVERLOADED_OPERATOR(Arrow , "->" , arrow , true , false, true)
+OVERLOADED_OPERATOR_MULTI(Call , "()" , true , true , true)
+OVERLOADED_OPERATOR_MULTI(Subscript , "[]" , false, true , true)
+// ?: can *not* be overloaded, but we need the overload
+// resolution machinery for it.
+OVERLOADED_OPERATOR_MULTI(Conditional , "?" , false, true , false)
+OVERLOADED_OPERATOR(Coawait , "co_await", kw_co_await , true , false, false)
+
+#undef OVERLOADED_OPERATOR_MULTI
+#undef OVERLOADED_OPERATOR
diff --git a/clang-r353983/include/clang/Basic/OperatorKinds.h b/clang-r353983/include/clang/Basic/OperatorKinds.h
new file mode 100644
index 00000000..9757acaa
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/OperatorKinds.h
@@ -0,0 +1,35 @@
+//===--- OperatorKinds.h - C++ Overloaded Operators -------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Defines an enumeration for C++ overloaded operators.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_OPERATORKINDS_H
+#define LLVM_CLANG_BASIC_OPERATORKINDS_H
+
+namespace clang {
+
+/// Enumeration specifying the different kinds of C++ overloaded
+/// operators.
+enum OverloadedOperatorKind : int {
+ OO_None, ///< Not an overloaded operator
+#define OVERLOADED_OPERATOR(Name,Spelling,Token,Unary,Binary,MemberOnly) \
+ OO_##Name,
+#include "clang/Basic/OperatorKinds.def"
+ NUM_OVERLOADED_OPERATORS
+};
+
+/// Retrieve the spelling of the given overloaded operator, without
+/// the preceding "operator" keyword.
+const char *getOperatorSpelling(OverloadedOperatorKind Operator);
+
+} // end namespace clang
+
+#endif
diff --git a/clang-r353983/include/clang/Basic/OperatorPrecedence.h b/clang-r353983/include/clang/Basic/OperatorPrecedence.h
new file mode 100644
index 00000000..61ac7ad6
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/OperatorPrecedence.h
@@ -0,0 +1,52 @@
+//===--- OperatorPrecedence.h - Operator precedence levels ------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Defines and computes precedence levels for binary/ternary operators.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_OPERATORPRECEDENCE_H
+#define LLVM_CLANG_BASIC_OPERATORPRECEDENCE_H
+
+#include "clang/Basic/TokenKinds.h"
+
+namespace clang {
+
+/// PrecedenceLevels - These are precedences for the binary/ternary
+/// operators in the C99 grammar. These have been named to relate
+/// with the C99 grammar productions. Low precedences numbers bind
+/// more weakly than high numbers.
+namespace prec {
+ enum Level {
+ Unknown = 0, // Not binary operator.
+ Comma = 1, // ,
+ Assignment = 2, // =, *=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |=
+ Conditional = 3, // ?
+ LogicalOr = 4, // ||
+ LogicalAnd = 5, // &&
+ InclusiveOr = 6, // |
+ ExclusiveOr = 7, // ^
+ And = 8, // &
+ Equality = 9, // ==, !=
+ Relational = 10, // >=, <=, >, <
+ Spaceship = 11, // <=>
+ Shift = 12, // <<, >>
+ Additive = 13, // -, +
+ Multiplicative = 14, // *, /, %
+ PointerToMember = 15 // .*, ->*
+ };
+}
+
+/// Return the precedence of the specified binary operator token.
+prec::Level getBinOpPrecedence(tok::TokenKind Kind, bool GreaterThanIsOperator,
+ bool CPlusPlus11);
+
+} // end namespace clang
+
+#endif // LLVM_CLANG_OPERATOR_PRECEDENCE_H
diff --git a/clang-r353983/include/clang/Basic/PartialDiagnostic.h b/clang-r353983/include/clang/Basic/PartialDiagnostic.h
new file mode 100644
index 00000000..799951b8
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/PartialDiagnostic.h
@@ -0,0 +1,422 @@
+//===- PartialDiagnostic.h - Diagnostic "closures" --------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+/// \file
+/// Implements a partial diagnostic that can be emitted anwyhere
+/// in a DiagnosticBuilder stream.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_PARTIALDIAGNOSTIC_H
+#define LLVM_CLANG_BASIC_PARTIALDIAGNOSTIC_H
+
+#include "clang/Basic/Diagnostic.h"
+#include "clang/Basic/LLVM.h"
+#include "clang/Basic/SourceLocation.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/StringRef.h"
+#include <cassert>
+#include <cstdint>
+#include <string>
+#include <type_traits>
+#include <utility>
+
+namespace clang {
+
+class DeclContext;
+class IdentifierInfo;
+
+class PartialDiagnostic {
+public:
+ enum {
+ // The MaxArguments and MaxFixItHints member enum values from
+ // DiagnosticsEngine are private but DiagnosticsEngine declares
+ // PartialDiagnostic a friend. These enum values are redeclared
+ // here so that the nested Storage class below can access them.
+ MaxArguments = DiagnosticsEngine::MaxArguments
+ };
+
+ struct Storage {
+ enum {
+ /// The maximum number of arguments we can hold. We
+ /// currently only support up to 10 arguments (%0-%9).
+ ///
+ /// A single diagnostic with more than that almost certainly has to
+ /// be simplified anyway.
+ MaxArguments = PartialDiagnostic::MaxArguments
+ };
+
+ /// The number of entries in Arguments.
+ unsigned char NumDiagArgs = 0;
+
+ /// Specifies for each argument whether it is in DiagArgumentsStr
+ /// or in DiagArguments.
+ unsigned char DiagArgumentsKind[MaxArguments];
+
+ /// The values for the various substitution positions.
+ ///
+ /// This is used when the argument is not an std::string. The specific value
+ /// is mangled into an intptr_t and the interpretation depends on exactly
+ /// what sort of argument kind it is.
+ intptr_t DiagArgumentsVal[MaxArguments];
+
+ /// The values for the various substitution positions that have
+ /// string arguments.
+ std::string DiagArgumentsStr[MaxArguments];
+
+ /// The list of ranges added to this diagnostic.
+ SmallVector<CharSourceRange, 8> DiagRanges;
+
+ /// If valid, provides a hint with some code to insert, remove, or
+ /// modify at a particular position.
+ SmallVector<FixItHint, 6> FixItHints;
+
+ Storage() = default;
+ };
+
+ /// An allocator for Storage objects, which uses a small cache to
+ /// objects, used to reduce malloc()/free() traffic for partial diagnostics.
+ class StorageAllocator {
+ static const unsigned NumCached = 16;
+ Storage Cached[NumCached];
+ Storage *FreeList[NumCached];
+ unsigned NumFreeListEntries;
+
+ public:
+ StorageAllocator();
+ ~StorageAllocator();
+
+ /// Allocate new storage.
+ Storage *Allocate() {
+ if (NumFreeListEntries == 0)
+ return new Storage;
+
+ Storage *Result = FreeList[--NumFreeListEntries];
+ Result->NumDiagArgs = 0;
+ Result->DiagRanges.clear();
+ Result->FixItHints.clear();
+ return Result;
+ }
+
+ /// Free the given storage object.
+ void Deallocate(Storage *S) {
+ if (S >= Cached && S <= Cached + NumCached) {
+ FreeList[NumFreeListEntries++] = S;
+ return;
+ }
+
+ delete S;
+ }
+ };
+
+private:
+ // NOTE: Sema assumes that PartialDiagnostic is location-invariant
+ // in the sense that its bits can be safely memcpy'ed and destructed
+ // in the new location.
+
+ /// The diagnostic ID.
+ mutable unsigned DiagID = 0;
+
+ /// Storage for args and ranges.
+ mutable Storage *DiagStorage = nullptr;
+
+ /// Allocator used to allocate storage for this diagnostic.
+ StorageAllocator *Allocator = nullptr;
+
+ /// Retrieve storage for this particular diagnostic.
+ Storage *getStorage() const {
+ if (DiagStorage)
+ return DiagStorage;
+
+ if (Allocator)
+ DiagStorage = Allocator->Allocate();
+ else {
+ assert(Allocator != reinterpret_cast<StorageAllocator *>(~uintptr_t(0)));
+ DiagStorage = new Storage;
+ }
+ return DiagStorage;
+ }
+
+ void freeStorage() {
+ if (!DiagStorage)
+ return;
+
+ // The hot path for PartialDiagnostic is when we just used it to wrap an ID
+ // (typically so we have the flexibility of passing a more complex
+ // diagnostic into the callee, but that does not commonly occur).
+ //
+ // Split this out into a slow function for silly compilers (*cough*) which
+ // can't do decent partial inlining.
+ freeStorageSlow();
+ }
+
+ void freeStorageSlow() {
+ if (Allocator)
+ Allocator->Deallocate(DiagStorage);
+ else if (Allocator != reinterpret_cast<StorageAllocator *>(~uintptr_t(0)))
+ delete DiagStorage;
+ DiagStorage = nullptr;
+ }
+
+ void AddSourceRange(const CharSourceRange &R) const {
+ if (!DiagStorage)
+ DiagStorage = getStorage();
+
+ DiagStorage->DiagRanges.push_back(R);
+ }
+
+ void AddFixItHint(const FixItHint &Hint) const {
+ if (Hint.isNull())
+ return;
+
+ if (!DiagStorage)
+ DiagStorage = getStorage();
+
+ DiagStorage->FixItHints.push_back(Hint);
+ }
+
+public:
+ struct NullDiagnostic {};
+
+ /// Create a null partial diagnostic, which cannot carry a payload,
+ /// and only exists to be swapped with a real partial diagnostic.
+ PartialDiagnostic(NullDiagnostic) {}
+
+ PartialDiagnostic(unsigned DiagID, StorageAllocator &Allocator)
+ : DiagID(DiagID), Allocator(&Allocator) {}
+
+ PartialDiagnostic(const PartialDiagnostic &Other)
+ : DiagID(Other.DiagID), Allocator(Other.Allocator) {
+ if (Other.DiagStorage) {
+ DiagStorage = getStorage();
+ *DiagStorage = *Other.DiagStorage;
+ }
+ }
+
+ PartialDiagnostic(PartialDiagnostic &&Other)
+ : DiagID(Other.DiagID), DiagStorage(Other.DiagStorage),
+ Allocator(Other.Allocator) {
+ Other.DiagStorage = nullptr;
+ }
+
+ PartialDiagnostic(const PartialDiagnostic &Other, Storage *DiagStorage)
+ : DiagID(Other.DiagID), DiagStorage(DiagStorage),
+ Allocator(reinterpret_cast<StorageAllocator *>(~uintptr_t(0))) {
+ if (Other.DiagStorage)
+ *this->DiagStorage = *Other.DiagStorage;
+ }
+
+ PartialDiagnostic(const Diagnostic &Other, StorageAllocator &Allocator)
+ : DiagID(Other.getID()), Allocator(&Allocator) {
+ // Copy arguments.
+ for (unsigned I = 0, N = Other.getNumArgs(); I != N; ++I) {
+ if (Other.getArgKind(I) == DiagnosticsEngine::ak_std_string)
+ AddString(Other.getArgStdStr(I));
+ else
+ AddTaggedVal(Other.getRawArg(I), Other.getArgKind(I));
+ }
+
+ // Copy source ranges.
+ for (unsigned I = 0, N = Other.getNumRanges(); I != N; ++I)
+ AddSourceRange(Other.getRange(I));
+
+ // Copy fix-its.
+ for (unsigned I = 0, N = Other.getNumFixItHints(); I != N; ++I)
+ AddFixItHint(Other.getFixItHint(I));
+ }
+
+ PartialDiagnostic &operator=(const PartialDiagnostic &Other) {
+ DiagID = Other.DiagID;
+ if (Other.DiagStorage) {
+ if (!DiagStorage)
+ DiagStorage = getStorage();
+
+ *DiagStorage = *Other.DiagStorage;
+ } else {
+ freeStorage();
+ }
+
+ return *this;
+ }
+
+ PartialDiagnostic &operator=(PartialDiagnostic &&Other) {
+ freeStorage();
+
+ DiagID = Other.DiagID;
+ DiagStorage = Other.DiagStorage;
+ Allocator = Other.Allocator;
+
+ Other.DiagStorage = nullptr;
+ return *this;
+ }
+
+ ~PartialDiagnostic() {
+ freeStorage();
+ }
+
+ void swap(PartialDiagnostic &PD) {
+ std::swap(DiagID, PD.DiagID);
+ std::swap(DiagStorage, PD.DiagStorage);
+ std::swap(Allocator, PD.Allocator);
+ }
+
+ unsigned getDiagID() const { return DiagID; }
+
+ void AddTaggedVal(intptr_t V, DiagnosticsEngine::ArgumentKind Kind) const {
+ if (!DiagStorage)
+ DiagStorage = getStorage();
+
+ assert(DiagStorage->NumDiagArgs < Storage::MaxArguments &&
+ "Too many arguments to diagnostic!");
+ DiagStorage->DiagArgumentsKind[DiagStorage->NumDiagArgs] = Kind;
+ DiagStorage->DiagArgumentsVal[DiagStorage->NumDiagArgs++] = V;
+ }
+
+ void AddString(StringRef V) const {
+ if (!DiagStorage)
+ DiagStorage = getStorage();
+
+ assert(DiagStorage->NumDiagArgs < Storage::MaxArguments &&
+ "Too many arguments to diagnostic!");
+ DiagStorage->DiagArgumentsKind[DiagStorage->NumDiagArgs]
+ = DiagnosticsEngine::ak_std_string;
+ DiagStorage->DiagArgumentsStr[DiagStorage->NumDiagArgs++] = V;
+ }
+
+ void Emit(const DiagnosticBuilder &DB) const {
+ if (!DiagStorage)
+ return;
+
+ // Add all arguments.
+ for (unsigned i = 0, e = DiagStorage->NumDiagArgs; i != e; ++i) {
+ if ((DiagnosticsEngine::ArgumentKind)DiagStorage->DiagArgumentsKind[i]
+ == DiagnosticsEngine::ak_std_string)
+ DB.AddString(DiagStorage->DiagArgumentsStr[i]);
+ else
+ DB.AddTaggedVal(DiagStorage->DiagArgumentsVal[i],
+ (DiagnosticsEngine::ArgumentKind)DiagStorage->DiagArgumentsKind[i]);
+ }
+
+ // Add all ranges.
+ for (const CharSourceRange &Range : DiagStorage->DiagRanges)
+ DB.AddSourceRange(Range);
+
+ // Add all fix-its.
+ for (const FixItHint &Fix : DiagStorage->FixItHints)
+ DB.AddFixItHint(Fix);
+ }
+
+ void EmitToString(DiagnosticsEngine &Diags,
+ SmallVectorImpl<char> &Buf) const {
+ // FIXME: It should be possible to render a diagnostic to a string without
+ // messing with the state of the diagnostics engine.
+ DiagnosticBuilder DB(Diags.Report(getDiagID()));
+ Emit(DB);
+ DB.FlushCounts();
+ Diagnostic(&Diags).FormatDiagnostic(Buf);
+ DB.Clear();
+ Diags.Clear();
+ }
+
+ /// Clear out this partial diagnostic, giving it a new diagnostic ID
+ /// and removing all of its arguments, ranges, and fix-it hints.
+ void Reset(unsigned DiagID = 0) {
+ this->DiagID = DiagID;
+ freeStorage();
+ }
+
+ bool hasStorage() const { return DiagStorage != nullptr; }
+
+ /// Retrieve the string argument at the given index.
+ StringRef getStringArg(unsigned I) {
+ assert(DiagStorage && "No diagnostic storage?");
+ assert(I < DiagStorage->NumDiagArgs && "Not enough diagnostic args");
+ assert(DiagStorage->DiagArgumentsKind[I]
+ == DiagnosticsEngine::ak_std_string && "Not a string arg");
+ return DiagStorage->DiagArgumentsStr[I];
+ }
+
+ friend const PartialDiagnostic &operator<<(const PartialDiagnostic &PD,
+ unsigned I) {
+ PD.AddTaggedVal(I, DiagnosticsEngine::ak_uint);
+ return PD;
+ }
+
+ friend const PartialDiagnostic &operator<<(const PartialDiagnostic &PD,
+ int I) {
+ PD.AddTaggedVal(I, DiagnosticsEngine::ak_sint);
+ return PD;
+ }
+
+ friend inline const PartialDiagnostic &operator<<(const PartialDiagnostic &PD,
+ const char *S) {
+ PD.AddTaggedVal(reinterpret_cast<intptr_t>(S),
+ DiagnosticsEngine::ak_c_string);
+ return PD;
+ }
+
+ friend inline const PartialDiagnostic &operator<<(const PartialDiagnostic &PD,
+ StringRef S) {
+
+ PD.AddString(S);
+ return PD;
+ }
+
+ friend inline const PartialDiagnostic &operator<<(const PartialDiagnostic &PD,
+ const IdentifierInfo *II) {
+ PD.AddTaggedVal(reinterpret_cast<intptr_t>(II),
+ DiagnosticsEngine::ak_identifierinfo);
+ return PD;
+ }
+
+ // Adds a DeclContext to the diagnostic. The enable_if template magic is here
+ // so that we only match those arguments that are (statically) DeclContexts;
+ // other arguments that derive from DeclContext (e.g., RecordDecls) will not
+ // match.
+ template<typename T>
+ friend inline
+ typename std::enable_if<std::is_same<T, DeclContext>::value,
+ const PartialDiagnostic &>::type
+ operator<<(const PartialDiagnostic &PD, T *DC) {
+ PD.AddTaggedVal(reinterpret_cast<intptr_t>(DC),
+ DiagnosticsEngine::ak_declcontext);
+ return PD;
+ }
+
+ friend inline const PartialDiagnostic &operator<<(const PartialDiagnostic &PD,
+ SourceRange R) {
+ PD.AddSourceRange(CharSourceRange::getTokenRange(R));
+ return PD;
+ }
+
+ friend inline const PartialDiagnostic &operator<<(const PartialDiagnostic &PD,
+ const CharSourceRange &R) {
+ PD.AddSourceRange(R);
+ return PD;
+ }
+
+ friend const PartialDiagnostic &operator<<(const PartialDiagnostic &PD,
+ const FixItHint &Hint) {
+ PD.AddFixItHint(Hint);
+ return PD;
+ }
+};
+
+inline const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB,
+ const PartialDiagnostic &PD) {
+ PD.Emit(DB);
+ return DB;
+}
+
+/// A partial diagnostic along with the source location where this
+/// diagnostic occurs.
+using PartialDiagnosticAt = std::pair<SourceLocation, PartialDiagnostic>;
+
+} // namespace clang
+
+#endif // LLVM_CLANG_BASIC_PARTIALDIAGNOSTIC_H
diff --git a/clang-r353983/include/clang/Basic/PlistSupport.h b/clang-r353983/include/clang/Basic/PlistSupport.h
new file mode 100644
index 00000000..f81b469b
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/PlistSupport.h
@@ -0,0 +1,137 @@
+//===- PlistSupport.h - Plist Output Utilities ------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_PLISTSUPPORT_H
+#define LLVM_CLANG_BASIC_PLISTSUPPORT_H
+
+#include "clang/Basic/LLVM.h"
+#include "clang/Basic/SourceLocation.h"
+#include "clang/Basic/SourceManager.h"
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/raw_ostream.h"
+#include <cassert>
+#include <cstdint>
+
+namespace clang {
+namespace markup {
+
+using FIDMap = llvm::DenseMap<FileID, unsigned>;
+
+inline unsigned AddFID(FIDMap &FIDs, SmallVectorImpl<FileID> &V,
+ FileID FID) {
+ FIDMap::iterator I = FIDs.find(FID);
+ if (I != FIDs.end())
+ return I->second;
+ unsigned NewValue = V.size();
+ FIDs[FID] = NewValue;
+ V.push_back(FID);
+ return NewValue;
+}
+
+inline unsigned AddFID(FIDMap &FIDs, SmallVectorImpl<FileID> &V,
+ const SourceManager &SM, SourceLocation L) {
+ FileID FID = SM.getFileID(SM.getExpansionLoc(L));
+ return AddFID(FIDs, V, FID);
+}
+
+inline unsigned GetFID(const FIDMap &FIDs, FileID FID) {
+ FIDMap::const_iterator I = FIDs.find(FID);
+ assert(I != FIDs.end());
+ return I->second;
+}
+
+inline unsigned GetFID(const FIDMap &FIDs, const SourceManager &SM,
+ SourceLocation L) {
+ FileID FID = SM.getFileID(SM.getExpansionLoc(L));
+ return GetFID(FIDs, FID);
+}
+
+inline raw_ostream &Indent(raw_ostream &o, const unsigned indent) {
+ for (unsigned i = 0; i < indent; ++i)
+ o << ' ';
+ return o;
+}
+
+inline raw_ostream &EmitPlistHeader(raw_ostream &o) {
+ static const char *PlistHeader =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" "
+ "\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"
+ "<plist version=\"1.0\">\n";
+ return o << PlistHeader;
+}
+
+inline raw_ostream &EmitInteger(raw_ostream &o, int64_t value) {
+ o << "<integer>";
+ o << value;
+ o << "</integer>";
+ return o;
+}
+
+inline raw_ostream &EmitString(raw_ostream &o, StringRef s) {
+ o << "<string>";
+ for (StringRef::const_iterator I = s.begin(), E = s.end(); I != E; ++I) {
+ char c = *I;
+ switch (c) {
+ default:
+ o << c;
+ break;
+ case '&':
+ o << "&amp;";
+ break;
+ case '<':
+ o << "&lt;";
+ break;
+ case '>':
+ o << "&gt;";
+ break;
+ case '\'':
+ o << "&apos;";
+ break;
+ case '\"':
+ o << "&quot;";
+ break;
+ }
+ }
+ o << "</string>";
+ return o;
+}
+
+inline void EmitLocation(raw_ostream &o, const SourceManager &SM,
+ SourceLocation L, const FIDMap &FM, unsigned indent) {
+ if (L.isInvalid()) return;
+
+ FullSourceLoc Loc(SM.getExpansionLoc(L), const_cast<SourceManager &>(SM));
+
+ Indent(o, indent) << "<dict>\n";
+ Indent(o, indent) << " <key>line</key>";
+ EmitInteger(o, Loc.getExpansionLineNumber()) << '\n';
+ Indent(o, indent) << " <key>col</key>";
+ EmitInteger(o, Loc.getExpansionColumnNumber()) << '\n';
+ Indent(o, indent) << " <key>file</key>";
+ EmitInteger(o, GetFID(FM, SM, Loc)) << '\n';
+ Indent(o, indent) << "</dict>\n";
+}
+
+inline void EmitRange(raw_ostream &o, const SourceManager &SM,
+ CharSourceRange R, const FIDMap &FM, unsigned indent) {
+ if (R.isInvalid()) return;
+
+ assert(R.isCharRange() && "cannot handle a token range");
+ Indent(o, indent) << "<array>\n";
+ EmitLocation(o, SM, R.getBegin(), FM, indent + 1);
+ EmitLocation(o, SM, R.getEnd(), FM, indent + 1);
+ Indent(o, indent) << "</array>\n";
+}
+
+} // namespace markup
+} // namespace clang
+
+#endif // LLVM_CLANG_BASIC_PLISTSUPPORT_H
diff --git a/clang-r353983/include/clang/Basic/PragmaKinds.h b/clang-r353983/include/clang/Basic/PragmaKinds.h
new file mode 100644
index 00000000..103b97db
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/PragmaKinds.h
@@ -0,0 +1,30 @@
+//===--- PragmaKinds.h - #pragma comment() kinds ---------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_PRAGMA_KINDS_H
+#define LLVM_CLANG_BASIC_PRAGMA_KINDS_H
+
+namespace clang {
+
+enum PragmaMSCommentKind {
+ PCK_Unknown,
+ PCK_Linker, // #pragma comment(linker, ...)
+ PCK_Lib, // #pragma comment(lib, ...)
+ PCK_Compiler, // #pragma comment(compiler, ...)
+ PCK_ExeStr, // #pragma comment(exestr, ...)
+ PCK_User // #pragma comment(user, ...)
+};
+
+enum PragmaMSStructKind {
+ PMSST_OFF, // #pragms ms_struct off
+ PMSST_ON // #pragms ms_struct on
+};
+
+}
+
+#endif
diff --git a/clang-r353983/include/clang/Basic/PrettyStackTrace.h b/clang-r353983/include/clang/Basic/PrettyStackTrace.h
new file mode 100644
index 00000000..545a63b7
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/PrettyStackTrace.h
@@ -0,0 +1,37 @@
+//===- clang/Basic/PrettyStackTrace.h - Pretty Crash Handling --*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Defines the PrettyStackTraceEntry class, which is used to make
+/// crashes give more contextual information about what the program was doing
+/// when it crashed.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_PRETTYSTACKTRACE_H
+#define LLVM_CLANG_BASIC_PRETTYSTACKTRACE_H
+
+#include "clang/Basic/SourceLocation.h"
+#include "llvm/Support/PrettyStackTrace.h"
+
+namespace clang {
+
+ /// If a crash happens while one of these objects are live, the message
+ /// is printed out along with the specified source location.
+ class PrettyStackTraceLoc : public llvm::PrettyStackTraceEntry {
+ SourceManager &SM;
+ SourceLocation Loc;
+ const char *Message;
+ public:
+ PrettyStackTraceLoc(SourceManager &sm, SourceLocation L, const char *Msg)
+ : SM(sm), Loc(L), Message(Msg) {}
+ void print(raw_ostream &OS) const override;
+ };
+}
+
+#endif
diff --git a/clang-r353983/include/clang/Basic/SanitizerBlacklist.h b/clang-r353983/include/clang/Basic/SanitizerBlacklist.h
new file mode 100644
index 00000000..29af28b8
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/SanitizerBlacklist.h
@@ -0,0 +1,46 @@
+//===--- SanitizerBlacklist.h - Blacklist for sanitizers --------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// User-provided blacklist used to disable/alter instrumentation done in
+// sanitizers.
+//
+//===----------------------------------------------------------------------===//
+#ifndef LLVM_CLANG_BASIC_SANITIZERBLACKLIST_H
+#define LLVM_CLANG_BASIC_SANITIZERBLACKLIST_H
+
+#include "clang/Basic/LLVM.h"
+#include "clang/Basic/SanitizerSpecialCaseList.h"
+#include "clang/Basic/Sanitizers.h"
+#include "clang/Basic/SourceLocation.h"
+#include "clang/Basic/SourceManager.h"
+#include "llvm/ADT/StringRef.h"
+#include <memory>
+
+namespace clang {
+
+class SanitizerBlacklist {
+ std::unique_ptr<SanitizerSpecialCaseList> SSCL;
+ SourceManager &SM;
+
+public:
+ SanitizerBlacklist(const std::vector<std::string> &BlacklistPaths,
+ SourceManager &SM);
+ bool isBlacklistedGlobal(SanitizerMask Mask, StringRef GlobalName,
+ StringRef Category = StringRef()) const;
+ bool isBlacklistedType(SanitizerMask Mask, StringRef MangledTypeName,
+ StringRef Category = StringRef()) const;
+ bool isBlacklistedFunction(SanitizerMask Mask, StringRef FunctionName) const;
+ bool isBlacklistedFile(SanitizerMask Mask, StringRef FileName,
+ StringRef Category = StringRef()) const;
+ bool isBlacklistedLocation(SanitizerMask Mask, SourceLocation Loc,
+ StringRef Category = StringRef()) const;
+};
+
+} // end namespace clang
+
+#endif
diff --git a/clang-r353983/include/clang/Basic/SanitizerSpecialCaseList.h b/clang-r353983/include/clang/Basic/SanitizerSpecialCaseList.h
new file mode 100644
index 00000000..fb0db32c
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/SanitizerSpecialCaseList.h
@@ -0,0 +1,53 @@
+//===--- SanitizerSpecialCaseList.h - SCL for sanitizers --------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// An extension of SpecialCaseList to allowing querying sections by
+// SanitizerMask.
+//
+//===----------------------------------------------------------------------===//
+#ifndef LLVM_CLANG_BASIC_SANITIZERSPECIALCASELIST_H
+#define LLVM_CLANG_BASIC_SANITIZERSPECIALCASELIST_H
+
+#include "clang/Basic/LLVM.h"
+#include "clang/Basic/Sanitizers.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/SpecialCaseList.h"
+#include <memory>
+
+namespace clang {
+
+class SanitizerSpecialCaseList : public llvm::SpecialCaseList {
+public:
+ static std::unique_ptr<SanitizerSpecialCaseList>
+ create(const std::vector<std::string> &Paths, std::string &Error);
+
+ static std::unique_ptr<SanitizerSpecialCaseList>
+ createOrDie(const std::vector<std::string> &Paths);
+
+ // Query blacklisted entries if any bit in Mask matches the entry's section.
+ bool inSection(SanitizerMask Mask, StringRef Prefix, StringRef Query,
+ StringRef Category = StringRef()) const;
+
+protected:
+ // Initialize SanitizerSections.
+ void createSanitizerSections();
+
+ struct SanitizerSection {
+ SanitizerSection(SanitizerMask SM, SectionEntries &E)
+ : Mask(SM), Entries(E){};
+
+ SanitizerMask Mask;
+ SectionEntries &Entries;
+ };
+
+ std::vector<SanitizerSection> SanitizerSections;
+};
+
+} // end namespace clang
+
+#endif
diff --git a/clang-r353983/include/clang/Basic/Sanitizers.def b/clang-r353983/include/clang/Basic/Sanitizers.def
new file mode 100644
index 00000000..34bd6fc5
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/Sanitizers.def
@@ -0,0 +1,183 @@
+//===--- Sanitizers.def - Runtime sanitizer options -------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the options for specifying which runtime sanitizers to
+// enable. Users of this file must define the SANITIZER macro to make use of
+// this information. Users of this file can also define the SANITIZER_GROUP
+// macro to get information on options which refer to sets of sanitizers.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef SANITIZER
+#error "Define SANITIZER prior to including this file!"
+#endif
+
+// SANITIZER(NAME, ID)
+
+// The first value is the name of the sanitizer as a string. The sanitizer can
+// be enabled by specifying -fsanitize=NAME.
+
+// The second value is an identifier which can be used to refer to the
+// sanitizer.
+
+
+// SANITIZER_GROUP(NAME, ID, ALIAS)
+
+// The first two values have the same semantics as the corresponding SANITIZER
+// values. The third value is an expression ORing together the IDs of individual
+// sanitizers in this group.
+
+#ifndef SANITIZER_GROUP
+#define SANITIZER_GROUP(NAME, ID, ALIAS)
+#endif
+
+
+// AddressSanitizer
+SANITIZER("address", Address)
+
+// Kernel AddressSanitizer (KASan)
+SANITIZER("kernel-address", KernelAddress)
+
+// Hardware-assisted AddressSanitizer
+SANITIZER("hwaddress", HWAddress)
+
+// Kernel Hardware-assisted AddressSanitizer (KHWASan)
+SANITIZER("kernel-hwaddress", KernelHWAddress)
+
+// MemorySanitizer
+SANITIZER("memory", Memory)
+
+// Kernel MemorySanitizer (KMSAN)
+SANITIZER("kernel-memory", KernelMemory)
+
+// libFuzzer
+SANITIZER("fuzzer", Fuzzer)
+
+// libFuzzer-required instrumentation, no linking.
+SANITIZER("fuzzer-no-link", FuzzerNoLink)
+
+// ThreadSanitizer
+SANITIZER("thread", Thread)
+
+// LeakSanitizer
+SANITIZER("leak", Leak)
+
+// UndefinedBehaviorSanitizer
+SANITIZER("alignment", Alignment)
+SANITIZER("array-bounds", ArrayBounds)
+SANITIZER("bool", Bool)
+SANITIZER("builtin", Builtin)
+SANITIZER("enum", Enum)
+SANITIZER("float-cast-overflow", FloatCastOverflow)
+SANITIZER("float-divide-by-zero", FloatDivideByZero)
+SANITIZER("function", Function)
+SANITIZER("integer-divide-by-zero", IntegerDivideByZero)
+SANITIZER("nonnull-attribute", NonnullAttribute)
+SANITIZER("null", Null)
+SANITIZER("nullability-arg", NullabilityArg)
+SANITIZER("nullability-assign", NullabilityAssign)
+SANITIZER("nullability-return", NullabilityReturn)
+SANITIZER_GROUP("nullability", Nullability,
+ NullabilityArg | NullabilityAssign | NullabilityReturn)
+SANITIZER("object-size", ObjectSize)
+SANITIZER("pointer-overflow", PointerOverflow)
+SANITIZER("return", Return)
+SANITIZER("returns-nonnull-attribute", ReturnsNonnullAttribute)
+SANITIZER("shift-base", ShiftBase)
+SANITIZER("shift-exponent", ShiftExponent)
+SANITIZER_GROUP("shift", Shift, ShiftBase | ShiftExponent)
+SANITIZER("signed-integer-overflow", SignedIntegerOverflow)
+SANITIZER("unreachable", Unreachable)
+SANITIZER("vla-bound", VLABound)
+SANITIZER("vptr", Vptr)
+
+// IntegerSanitizer
+SANITIZER("unsigned-integer-overflow", UnsignedIntegerOverflow)
+
+// DataFlowSanitizer
+SANITIZER("dataflow", DataFlow)
+
+// Control Flow Integrity
+SANITIZER("cfi-cast-strict", CFICastStrict)
+SANITIZER("cfi-derived-cast", CFIDerivedCast)
+SANITIZER("cfi-icall", CFIICall)
+SANITIZER("cfi-mfcall", CFIMFCall)
+SANITIZER("cfi-unrelated-cast", CFIUnrelatedCast)
+SANITIZER("cfi-nvcall", CFINVCall)
+SANITIZER("cfi-vcall", CFIVCall)
+SANITIZER_GROUP("cfi", CFI,
+ CFIDerivedCast | CFIICall | CFIMFCall | CFIUnrelatedCast |
+ CFINVCall | CFIVCall)
+
+// Safe Stack
+SANITIZER("safe-stack", SafeStack)
+
+// Shadow Call Stack
+SANITIZER("shadow-call-stack", ShadowCallStack)
+
+// -fsanitize=undefined includes all the sanitizers which have low overhead, no
+// ABI or address space layout implications, and only catch undefined behavior.
+SANITIZER_GROUP("undefined", Undefined,
+ Alignment | Bool | Builtin | ArrayBounds | Enum |
+ FloatCastOverflow | FloatDivideByZero |
+ IntegerDivideByZero | NonnullAttribute | Null | ObjectSize |
+ PointerOverflow | Return | ReturnsNonnullAttribute | Shift |
+ SignedIntegerOverflow | Unreachable | VLABound | Function |
+ Vptr)
+
+// -fsanitize=undefined-trap is an alias for -fsanitize=undefined.
+SANITIZER_GROUP("undefined-trap", UndefinedTrap, Undefined)
+
+// ImplicitConversionSanitizer
+SANITIZER("implicit-unsigned-integer-truncation",
+ ImplicitUnsignedIntegerTruncation)
+SANITIZER("implicit-signed-integer-truncation", ImplicitSignedIntegerTruncation)
+SANITIZER_GROUP("implicit-integer-truncation", ImplicitIntegerTruncation,
+ ImplicitUnsignedIntegerTruncation |
+ ImplicitSignedIntegerTruncation)
+
+SANITIZER("implicit-integer-sign-change", ImplicitIntegerSignChange)
+
+SANITIZER_GROUP("implicit-integer-arithmetic-value-change",
+ ImplicitIntegerArithmeticValueChange,
+ ImplicitIntegerSignChange | ImplicitSignedIntegerTruncation)
+
+// FIXME:
+//SANITIZER_GROUP("implicit-integer-conversion", ImplicitIntegerConversion,
+// ImplicitIntegerArithmeticValueChange |
+// ImplicitUnsignedIntegerTruncation)
+//SANITIZER_GROUP("implicit-conversion", ImplicitConversion,
+// ImplicitIntegerConversion)
+
+SANITIZER_GROUP("implicit-conversion", ImplicitConversion,
+ ImplicitIntegerArithmeticValueChange |
+ ImplicitUnsignedIntegerTruncation)
+
+SANITIZER_GROUP("integer", Integer,
+ ImplicitConversion | IntegerDivideByZero | Shift |
+ SignedIntegerOverflow | UnsignedIntegerOverflow)
+
+SANITIZER("local-bounds", LocalBounds)
+SANITIZER_GROUP("bounds", Bounds, ArrayBounds | LocalBounds)
+
+// EfficiencySanitizer
+SANITIZER("efficiency-cache-frag", EfficiencyCacheFrag)
+SANITIZER("efficiency-working-set", EfficiencyWorkingSet)
+// Meta-group only used internally.
+SANITIZER_GROUP("efficiency-all", Efficiency,
+ EfficiencyCacheFrag | EfficiencyWorkingSet)
+
+// Scudo hardened allocator
+SANITIZER("scudo", Scudo)
+
+// Magic group, containing all sanitizers. For example, "-fno-sanitize=all"
+// can be used to disable all the sanitizers.
+SANITIZER_GROUP("all", All, ~0ULL)
+
+#undef SANITIZER
+#undef SANITIZER_GROUP
diff --git a/clang-r353983/include/clang/Basic/Sanitizers.h b/clang-r353983/include/clang/Basic/Sanitizers.h
new file mode 100644
index 00000000..f2cfadbe
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/Sanitizers.h
@@ -0,0 +1,92 @@
+//===- Sanitizers.h - C Language Family Language Options --------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+/// \file
+/// Defines the clang::SanitizerKind enum.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_SANITIZERS_H
+#define LLVM_CLANG_BASIC_SANITIZERS_H
+
+#include "clang/Basic/LLVM.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/MathExtras.h"
+#include <cassert>
+#include <cstdint>
+
+namespace clang {
+
+using SanitizerMask = uint64_t;
+
+namespace SanitizerKind {
+
+// Assign ordinals to possible values of -fsanitize= flag, which we will use as
+// bit positions.
+enum SanitizerOrdinal : uint64_t {
+#define SANITIZER(NAME, ID) SO_##ID,
+#define SANITIZER_GROUP(NAME, ID, ALIAS) SO_##ID##Group,
+#include "clang/Basic/Sanitizers.def"
+ SO_Count
+};
+
+// Define the set of sanitizer kinds, as well as the set of sanitizers each
+// sanitizer group expands into.
+#define SANITIZER(NAME, ID) \
+ const SanitizerMask ID = 1ULL << SO_##ID;
+#define SANITIZER_GROUP(NAME, ID, ALIAS) \
+ const SanitizerMask ID = ALIAS; \
+ const SanitizerMask ID##Group = 1ULL << SO_##ID##Group;
+#include "clang/Basic/Sanitizers.def"
+
+} // namespace SanitizerKind
+
+struct SanitizerSet {
+ /// Check if a certain (single) sanitizer is enabled.
+ bool has(SanitizerMask K) const {
+ assert(llvm::isPowerOf2_64(K));
+ return Mask & K;
+ }
+
+ /// Check if one or more sanitizers are enabled.
+ bool hasOneOf(SanitizerMask K) const { return Mask & K; }
+
+ /// Enable or disable a certain (single) sanitizer.
+ void set(SanitizerMask K, bool Value) {
+ assert(llvm::isPowerOf2_64(K));
+ Mask = Value ? (Mask | K) : (Mask & ~K);
+ }
+
+ /// Disable the sanitizers specified in \p K.
+ void clear(SanitizerMask K = SanitizerKind::All) { Mask &= ~K; }
+
+ /// Returns true if no sanitizers are enabled.
+ bool empty() const { return Mask == 0; }
+
+ /// Bitmask of enabled sanitizers.
+ SanitizerMask Mask = 0;
+};
+
+/// Parse a single value from a -fsanitize= or -fno-sanitize= value list.
+/// Returns a non-zero SanitizerMask, or \c 0 if \p Value is not known.
+SanitizerMask parseSanitizerValue(StringRef Value, bool AllowGroups);
+
+/// For each sanitizer group bit set in \p Kinds, set the bits for sanitizers
+/// this group enables.
+SanitizerMask expandSanitizerGroups(SanitizerMask Kinds);
+
+/// Return the sanitizers which do not affect preprocessing.
+inline SanitizerMask getPPTransparentSanitizers() {
+ return SanitizerKind::CFI | SanitizerKind::Integer |
+ SanitizerKind::ImplicitConversion | SanitizerKind::Nullability |
+ SanitizerKind::Undefined;
+}
+
+} // namespace clang
+
+#endif // LLVM_CLANG_BASIC_SANITIZERS_H
diff --git a/clang-r353983/include/clang/Basic/SourceLocation.h b/clang-r353983/include/clang/Basic/SourceLocation.h
new file mode 100644
index 00000000..ceebdf48
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/SourceLocation.h
@@ -0,0 +1,475 @@
+//===- SourceLocation.h - Compact identifier for Source Files ---*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+/// \file
+/// Defines the clang::SourceLocation class and associated facilities.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_SOURCELOCATION_H
+#define LLVM_CLANG_BASIC_SOURCELOCATION_H
+
+#include "clang/Basic/LLVM.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/PointerLikeTypeTraits.h"
+#include <cassert>
+#include <cstdint>
+#include <string>
+#include <utility>
+
+namespace llvm {
+
+template <typename T> struct DenseMapInfo;
+
+} // namespace llvm
+
+namespace clang {
+
+class SourceManager;
+
+/// An opaque identifier used by SourceManager which refers to a
+/// source file (MemoryBuffer) along with its \#include path and \#line data.
+///
+class FileID {
+ /// A mostly-opaque identifier, where 0 is "invalid", >0 is
+ /// this module, and <-1 is something loaded from another module.
+ int ID = 0;
+
+public:
+ bool isValid() const { return ID != 0; }
+ bool isInvalid() const { return ID == 0; }
+
+ bool operator==(const FileID &RHS) const { return ID == RHS.ID; }
+ bool operator<(const FileID &RHS) const { return ID < RHS.ID; }
+ bool operator<=(const FileID &RHS) const { return ID <= RHS.ID; }
+ bool operator!=(const FileID &RHS) const { return !(*this == RHS); }
+ bool operator>(const FileID &RHS) const { return RHS < *this; }
+ bool operator>=(const FileID &RHS) const { return RHS <= *this; }
+
+ static FileID getSentinel() { return get(-1); }
+ unsigned getHashValue() const { return static_cast<unsigned>(ID); }
+
+private:
+ friend class ASTWriter;
+ friend class ASTReader;
+ friend class SourceManager;
+
+ static FileID get(int V) {
+ FileID F;
+ F.ID = V;
+ return F;
+ }
+
+ int getOpaqueValue() const { return ID; }
+};
+
+/// Encodes a location in the source. The SourceManager can decode this
+/// to get at the full include stack, line and column information.
+///
+/// Technically, a source location is simply an offset into the manager's view
+/// of the input source, which is all input buffers (including macro
+/// expansions) concatenated in an effectively arbitrary order. The manager
+/// actually maintains two blocks of input buffers. One, starting at offset
+/// 0 and growing upwards, contains all buffers from this module. The other,
+/// starting at the highest possible offset and growing downwards, contains
+/// buffers of loaded modules.
+///
+/// In addition, one bit of SourceLocation is used for quick access to the
+/// information whether the location is in a file or a macro expansion.
+///
+/// It is important that this type remains small. It is currently 32 bits wide.
+class SourceLocation {
+ friend class ASTReader;
+ friend class ASTWriter;
+ friend class SourceManager;
+
+ unsigned ID = 0;
+
+ enum : unsigned {
+ MacroIDBit = 1U << 31
+ };
+
+public:
+ bool isFileID() const { return (ID & MacroIDBit) == 0; }
+ bool isMacroID() const { return (ID & MacroIDBit) != 0; }
+
+ /// Return true if this is a valid SourceLocation object.
+ ///
+ /// Invalid SourceLocations are often used when events have no corresponding
+ /// location in the source (e.g. a diagnostic is required for a command line
+ /// option).
+ bool isValid() const { return ID != 0; }
+ bool isInvalid() const { return ID == 0; }
+
+private:
+ /// Return the offset into the manager's global input view.
+ unsigned getOffset() const {
+ return ID & ~MacroIDBit;
+ }
+
+ static SourceLocation getFileLoc(unsigned ID) {
+ assert((ID & MacroIDBit) == 0 && "Ran out of source locations!");
+ SourceLocation L;
+ L.ID = ID;
+ return L;
+ }
+
+ static SourceLocation getMacroLoc(unsigned ID) {
+ assert((ID & MacroIDBit) == 0 && "Ran out of source locations!");
+ SourceLocation L;
+ L.ID = MacroIDBit | ID;
+ return L;
+ }
+
+public:
+ /// Return a source location with the specified offset from this
+ /// SourceLocation.
+ SourceLocation getLocWithOffset(int Offset) const {
+ assert(((getOffset()+Offset) & MacroIDBit) == 0 && "offset overflow");
+ SourceLocation L;
+ L.ID = ID+Offset;
+ return L;
+ }
+
+ /// When a SourceLocation itself cannot be used, this returns
+ /// an (opaque) 32-bit integer encoding for it.
+ ///
+ /// This should only be passed to SourceLocation::getFromRawEncoding, it
+ /// should not be inspected directly.
+ unsigned getRawEncoding() const { return ID; }
+
+ /// Turn a raw encoding of a SourceLocation object into
+ /// a real SourceLocation.
+ ///
+ /// \see getRawEncoding.
+ static SourceLocation getFromRawEncoding(unsigned Encoding) {
+ SourceLocation X;
+ X.ID = Encoding;
+ return X;
+ }
+
+ /// When a SourceLocation itself cannot be used, this returns
+ /// an (opaque) pointer encoding for it.
+ ///
+ /// This should only be passed to SourceLocation::getFromPtrEncoding, it
+ /// should not be inspected directly.
+ void* getPtrEncoding() const {
+ // Double cast to avoid a warning "cast to pointer from integer of different
+ // size".
+ return (void*)(uintptr_t)getRawEncoding();
+ }
+
+ /// Turn a pointer encoding of a SourceLocation object back
+ /// into a real SourceLocation.
+ static SourceLocation getFromPtrEncoding(const void *Encoding) {
+ return getFromRawEncoding((unsigned)(uintptr_t)Encoding);
+ }
+
+ static bool isPairOfFileLocations(SourceLocation Start, SourceLocation End) {
+ return Start.isValid() && Start.isFileID() && End.isValid() &&
+ End.isFileID();
+ }
+
+ void print(raw_ostream &OS, const SourceManager &SM) const;
+ std::string printToString(const SourceManager &SM) const;
+ void dump(const SourceManager &SM) const;
+};
+
+inline bool operator==(const SourceLocation &LHS, const SourceLocation &RHS) {
+ return LHS.getRawEncoding() == RHS.getRawEncoding();
+}
+
+inline bool operator!=(const SourceLocation &LHS, const SourceLocation &RHS) {
+ return !(LHS == RHS);
+}
+
+inline bool operator<(const SourceLocation &LHS, const SourceLocation &RHS) {
+ return LHS.getRawEncoding() < RHS.getRawEncoding();
+}
+
+/// A trivial tuple used to represent a source range.
+class SourceRange {
+ SourceLocation B;
+ SourceLocation E;
+
+public:
+ SourceRange() = default;
+ SourceRange(SourceLocation loc) : B(loc), E(loc) {}
+ SourceRange(SourceLocation begin, SourceLocation end) : B(begin), E(end) {}
+
+ SourceLocation getBegin() const { return B; }
+ SourceLocation getEnd() const { return E; }
+
+ void setBegin(SourceLocation b) { B = b; }
+ void setEnd(SourceLocation e) { E = e; }
+
+ bool isValid() const { return B.isValid() && E.isValid(); }
+ bool isInvalid() const { return !isValid(); }
+
+ bool operator==(const SourceRange &X) const {
+ return B == X.B && E == X.E;
+ }
+
+ bool operator!=(const SourceRange &X) const {
+ return B != X.B || E != X.E;
+ }
+
+ void print(raw_ostream &OS, const SourceManager &SM) const;
+ std::string printToString(const SourceManager &SM) const;
+ void dump(const SourceManager &SM) const;
+};
+
+/// Represents a character-granular source range.
+///
+/// The underlying SourceRange can either specify the starting/ending character
+/// of the range, or it can specify the start of the range and the start of the
+/// last token of the range (a "token range"). In the token range case, the
+/// size of the last token must be measured to determine the actual end of the
+/// range.
+class CharSourceRange {
+ SourceRange Range;
+ bool IsTokenRange = false;
+
+public:
+ CharSourceRange() = default;
+ CharSourceRange(SourceRange R, bool ITR) : Range(R), IsTokenRange(ITR) {}
+
+ static CharSourceRange getTokenRange(SourceRange R) {
+ return CharSourceRange(R, true);
+ }
+
+ static CharSourceRange getCharRange(SourceRange R) {
+ return CharSourceRange(R, false);
+ }
+
+ static CharSourceRange getTokenRange(SourceLocation B, SourceLocation E) {
+ return getTokenRange(SourceRange(B, E));
+ }
+
+ static CharSourceRange getCharRange(SourceLocation B, SourceLocation E) {
+ return getCharRange(SourceRange(B, E));
+ }
+
+ /// Return true if the end of this range specifies the start of
+ /// the last token. Return false if the end of this range specifies the last
+ /// character in the range.
+ bool isTokenRange() const { return IsTokenRange; }
+ bool isCharRange() const { return !IsTokenRange; }
+
+ SourceLocation getBegin() const { return Range.getBegin(); }
+ SourceLocation getEnd() const { return Range.getEnd(); }
+ SourceRange getAsRange() const { return Range; }
+
+ void setBegin(SourceLocation b) { Range.setBegin(b); }
+ void setEnd(SourceLocation e) { Range.setEnd(e); }
+ void setTokenRange(bool TR) { IsTokenRange = TR; }
+
+ bool isValid() const { return Range.isValid(); }
+ bool isInvalid() const { return !isValid(); }
+};
+
+/// Represents an unpacked "presumed" location which can be presented
+/// to the user.
+///
+/// A 'presumed' location can be modified by \#line and GNU line marker
+/// directives and is always the expansion point of a normal location.
+///
+/// You can get a PresumedLoc from a SourceLocation with SourceManager.
+class PresumedLoc {
+ const char *Filename = nullptr;
+ unsigned Line, Col;
+ SourceLocation IncludeLoc;
+
+public:
+ PresumedLoc() = default;
+ PresumedLoc(const char *FN, unsigned Ln, unsigned Co, SourceLocation IL)
+ : Filename(FN), Line(Ln), Col(Co), IncludeLoc(IL) {}
+
+ /// Return true if this object is invalid or uninitialized.
+ ///
+ /// This occurs when created with invalid source locations or when walking
+ /// off the top of a \#include stack.
+ bool isInvalid() const { return Filename == nullptr; }
+ bool isValid() const { return Filename != nullptr; }
+
+ /// Return the presumed filename of this location.
+ ///
+ /// This can be affected by \#line etc.
+ const char *getFilename() const {
+ assert(isValid());
+ return Filename;
+ }
+
+ /// Return the presumed line number of this location.
+ ///
+ /// This can be affected by \#line etc.
+ unsigned getLine() const {
+ assert(isValid());
+ return Line;
+ }
+
+ /// Return the presumed column number of this location.
+ ///
+ /// This cannot be affected by \#line, but is packaged here for convenience.
+ unsigned getColumn() const {
+ assert(isValid());
+ return Col;
+ }
+
+ /// Return the presumed include location of this location.
+ ///
+ /// This can be affected by GNU linemarker directives.
+ SourceLocation getIncludeLoc() const {
+ assert(isValid());
+ return IncludeLoc;
+ }
+};
+
+class FileEntry;
+
+/// A SourceLocation and its associated SourceManager.
+///
+/// This is useful for argument passing to functions that expect both objects.
+class FullSourceLoc : public SourceLocation {
+ const SourceManager *SrcMgr = nullptr;
+
+public:
+ /// Creates a FullSourceLoc where isValid() returns \c false.
+ FullSourceLoc() = default;
+
+ explicit FullSourceLoc(SourceLocation Loc, const SourceManager &SM)
+ : SourceLocation(Loc), SrcMgr(&SM) {}
+
+ bool hasManager() const {
+ bool hasSrcMgr = SrcMgr != nullptr;
+ assert(hasSrcMgr == isValid() && "FullSourceLoc has location but no manager");
+ return hasSrcMgr;
+ }
+
+ /// \pre This FullSourceLoc has an associated SourceManager.
+ const SourceManager &getManager() const {
+ assert(SrcMgr && "SourceManager is NULL.");
+ return *SrcMgr;
+ }
+
+ FileID getFileID() const;
+
+ FullSourceLoc getExpansionLoc() const;
+ FullSourceLoc getSpellingLoc() const;
+ FullSourceLoc getFileLoc() const;
+ PresumedLoc getPresumedLoc(bool UseLineDirectives = true) const;
+ bool isMacroArgExpansion(FullSourceLoc *StartLoc = nullptr) const;
+ FullSourceLoc getImmediateMacroCallerLoc() const;
+ std::pair<FullSourceLoc, StringRef> getModuleImportLoc() const;
+ unsigned getFileOffset() const;
+
+ unsigned getExpansionLineNumber(bool *Invalid = nullptr) const;
+ unsigned getExpansionColumnNumber(bool *Invalid = nullptr) const;
+
+ unsigned getSpellingLineNumber(bool *Invalid = nullptr) const;
+ unsigned getSpellingColumnNumber(bool *Invalid = nullptr) const;
+
+ const char *getCharacterData(bool *Invalid = nullptr) const;
+
+ unsigned getLineNumber(bool *Invalid = nullptr) const;
+ unsigned getColumnNumber(bool *Invalid = nullptr) const;
+
+ const FileEntry *getFileEntry() const;
+
+ /// Return a StringRef to the source buffer data for the
+ /// specified FileID.
+ StringRef getBufferData(bool *Invalid = nullptr) const;
+
+ /// Decompose the specified location into a raw FileID + Offset pair.
+ ///
+ /// The first element is the FileID, the second is the offset from the
+ /// start of the buffer of the location.
+ std::pair<FileID, unsigned> getDecomposedLoc() const;
+
+ bool isInSystemHeader() const;
+
+ /// Determines the order of 2 source locations in the translation unit.
+ ///
+ /// \returns true if this source location comes before 'Loc', false otherwise.
+ bool isBeforeInTranslationUnitThan(SourceLocation Loc) const;
+
+ /// Determines the order of 2 source locations in the translation unit.
+ ///
+ /// \returns true if this source location comes before 'Loc', false otherwise.
+ bool isBeforeInTranslationUnitThan(FullSourceLoc Loc) const {
+ assert(Loc.isValid());
+ assert(SrcMgr == Loc.SrcMgr && "Loc comes from another SourceManager!");
+ return isBeforeInTranslationUnitThan((SourceLocation)Loc);
+ }
+
+ /// Comparison function class, useful for sorting FullSourceLocs.
+ struct BeforeThanCompare {
+ bool operator()(const FullSourceLoc& lhs, const FullSourceLoc& rhs) const {
+ return lhs.isBeforeInTranslationUnitThan(rhs);
+ }
+ };
+
+ /// Prints information about this FullSourceLoc to stderr.
+ ///
+ /// This is useful for debugging.
+ void dump() const;
+
+ friend bool
+ operator==(const FullSourceLoc &LHS, const FullSourceLoc &RHS) {
+ return LHS.getRawEncoding() == RHS.getRawEncoding() &&
+ LHS.SrcMgr == RHS.SrcMgr;
+ }
+
+ friend bool
+ operator!=(const FullSourceLoc &LHS, const FullSourceLoc &RHS) {
+ return !(LHS == RHS);
+ }
+};
+
+} // namespace clang
+
+namespace llvm {
+
+ /// Define DenseMapInfo so that FileID's can be used as keys in DenseMap and
+ /// DenseSets.
+ template <>
+ struct DenseMapInfo<clang::FileID> {
+ static clang::FileID getEmptyKey() {
+ return {};
+ }
+
+ static clang::FileID getTombstoneKey() {
+ return clang::FileID::getSentinel();
+ }
+
+ static unsigned getHashValue(clang::FileID S) {
+ return S.getHashValue();
+ }
+
+ static bool isEqual(clang::FileID LHS, clang::FileID RHS) {
+ return LHS == RHS;
+ }
+ };
+
+ // Teach SmallPtrSet how to handle SourceLocation.
+ template<>
+ struct PointerLikeTypeTraits<clang::SourceLocation> {
+ enum { NumLowBitsAvailable = 0 };
+
+ static void *getAsVoidPointer(clang::SourceLocation L) {
+ return L.getPtrEncoding();
+ }
+
+ static clang::SourceLocation getFromVoidPointer(void *P) {
+ return clang::SourceLocation::getFromRawEncoding((unsigned)(uintptr_t)P);
+ }
+ };
+
+} // namespace llvm
+
+#endif // LLVM_CLANG_BASIC_SOURCELOCATION_H
diff --git a/clang-r353983/include/clang/Basic/SourceManager.h b/clang-r353983/include/clang/Basic/SourceManager.h
new file mode 100644
index 00000000..2bdf1d5e
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/SourceManager.h
@@ -0,0 +1,1868 @@
+//===- SourceManager.h - Track and cache source files -----------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+/// \file
+/// Defines the SourceManager interface.
+///
+/// There are three different types of locations in a %file: a spelling
+/// location, an expansion location, and a presumed location.
+///
+/// Given an example of:
+/// \code
+/// #define min(x, y) x < y ? x : y
+/// \endcode
+///
+/// and then later on a use of min:
+/// \code
+/// #line 17
+/// return min(a, b);
+/// \endcode
+///
+/// The expansion location is the line in the source code where the macro
+/// was expanded (the return statement), the spelling location is the
+/// location in the source where the macro was originally defined,
+/// and the presumed location is where the line directive states that
+/// the line is 17, or any other line.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_SOURCEMANAGER_H
+#define LLVM_CLANG_BASIC_SOURCEMANAGER_H
+
+#include "clang/Basic/Diagnostic.h"
+#include "clang/Basic/FileManager.h"
+#include "clang/Basic/SourceLocation.h"
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/BitVector.h"
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/DenseSet.h"
+#include "llvm/ADT/IntrusiveRefCntPtr.h"
+#include "llvm/ADT/PointerIntPair.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Allocator.h"
+#include "llvm/Support/Compiler.h"
+#include "llvm/Support/MemoryBuffer.h"
+#include <cassert>
+#include <cstddef>
+#include <map>
+#include <memory>
+#include <string>
+#include <utility>
+#include <vector>
+
+namespace clang {
+
+class ASTReader;
+class ASTWriter;
+class LineTableInfo;
+class SourceManager;
+
+/// Public enums and private classes that are part of the
+/// SourceManager implementation.
+namespace SrcMgr {
+
+ /// Indicates whether a file or directory holds normal user code,
+ /// system code, or system code which is implicitly 'extern "C"' in C++ mode.
+ ///
+ /// Entire directories can be tagged with this (this is maintained by
+ /// DirectoryLookup and friends) as can specific FileInfos when a \#pragma
+ /// system_header is seen or in various other cases.
+ ///
+ enum CharacteristicKind {
+ C_User, C_System, C_ExternCSystem, C_User_ModuleMap, C_System_ModuleMap
+ };
+
+ /// Determine whether a file / directory characteristic is for system code.
+ inline bool isSystem(CharacteristicKind CK) {
+ return CK != C_User && CK != C_User_ModuleMap;
+ }
+
+ /// Determine whether a file characteristic is for a module map.
+ inline bool isModuleMap(CharacteristicKind CK) {
+ return CK == C_User_ModuleMap || CK == C_System_ModuleMap;
+ }
+
+ /// One instance of this struct is kept for every file loaded or used.
+ ///
+ /// This object owns the MemoryBuffer object.
+ class alignas(8) ContentCache {
+ enum CCFlags {
+ /// Whether the buffer is invalid.
+ InvalidFlag = 0x01,
+
+ /// Whether the buffer should not be freed on destruction.
+ DoNotFreeFlag = 0x02
+ };
+
+ /// The actual buffer containing the characters from the input
+ /// file.
+ ///
+ /// This is owned by the ContentCache object. The bits indicate
+ /// whether the buffer is invalid.
+ mutable llvm::PointerIntPair<llvm::MemoryBuffer *, 2> Buffer;
+
+ public:
+ /// Reference to the file entry representing this ContentCache.
+ ///
+ /// This reference does not own the FileEntry object.
+ ///
+ /// It is possible for this to be NULL if the ContentCache encapsulates
+ /// an imaginary text buffer.
+ const FileEntry *OrigEntry;
+
+ /// References the file which the contents were actually loaded from.
+ ///
+ /// Can be different from 'Entry' if we overridden the contents of one file
+ /// with the contents of another file.
+ const FileEntry *ContentsEntry;
+
+ /// A bump pointer allocated array of offsets for each source line.
+ ///
+ /// This is lazily computed. This is owned by the SourceManager
+ /// BumpPointerAllocator object.
+ unsigned *SourceLineCache = nullptr;
+
+ /// The number of lines in this ContentCache.
+ ///
+ /// This is only valid if SourceLineCache is non-null.
+ unsigned NumLines = 0;
+
+ /// Indicates whether the buffer itself was provided to override
+ /// the actual file contents.
+ ///
+ /// When true, the original entry may be a virtual file that does not
+ /// exist.
+ unsigned BufferOverridden : 1;
+
+ /// True if this content cache was initially created for a source
+ /// file considered as a system one.
+ unsigned IsSystemFile : 1;
+
+ /// True if this file may be transient, that is, if it might not
+ /// exist at some later point in time when this content entry is used,
+ /// after serialization and deserialization.
+ unsigned IsTransient : 1;
+
+ ContentCache(const FileEntry *Ent = nullptr) : ContentCache(Ent, Ent) {}
+
+ ContentCache(const FileEntry *Ent, const FileEntry *contentEnt)
+ : Buffer(nullptr, false), OrigEntry(Ent), ContentsEntry(contentEnt),
+ BufferOverridden(false), IsSystemFile(false), IsTransient(false) {}
+
+ /// The copy ctor does not allow copies where source object has either
+ /// a non-NULL Buffer or SourceLineCache. Ownership of allocated memory
+ /// is not transferred, so this is a logical error.
+ ContentCache(const ContentCache &RHS)
+ : Buffer(nullptr, false), BufferOverridden(false), IsSystemFile(false),
+ IsTransient(false) {
+ OrigEntry = RHS.OrigEntry;
+ ContentsEntry = RHS.ContentsEntry;
+
+ assert(RHS.Buffer.getPointer() == nullptr &&
+ RHS.SourceLineCache == nullptr &&
+ "Passed ContentCache object cannot own a buffer.");
+
+ NumLines = RHS.NumLines;
+ }
+
+ ContentCache &operator=(const ContentCache& RHS) = delete;
+
+ ~ContentCache();
+
+ /// Returns the memory buffer for the associated content.
+ ///
+ /// \param Diag Object through which diagnostics will be emitted if the
+ /// buffer cannot be retrieved.
+ ///
+ /// \param Loc If specified, is the location that invalid file diagnostics
+ /// will be emitted at.
+ ///
+ /// \param Invalid If non-NULL, will be set \c true if an error occurred.
+ llvm::MemoryBuffer *getBuffer(DiagnosticsEngine &Diag,
+ const SourceManager &SM,
+ SourceLocation Loc = SourceLocation(),
+ bool *Invalid = nullptr) const;
+
+ /// Returns the size of the content encapsulated by this
+ /// ContentCache.
+ ///
+ /// This can be the size of the source file or the size of an
+ /// arbitrary scratch buffer. If the ContentCache encapsulates a source
+ /// file this size is retrieved from the file's FileEntry.
+ unsigned getSize() const;
+
+ /// Returns the number of bytes actually mapped for this
+ /// ContentCache.
+ ///
+ /// This can be 0 if the MemBuffer was not actually expanded.
+ unsigned getSizeBytesMapped() const;
+
+ /// Returns the kind of memory used to back the memory buffer for
+ /// this content cache. This is used for performance analysis.
+ llvm::MemoryBuffer::BufferKind getMemoryBufferKind() const;
+
+ /// Get the underlying buffer, returning NULL if the buffer is not
+ /// yet available.
+ llvm::MemoryBuffer *getRawBuffer() const { return Buffer.getPointer(); }
+
+ /// Replace the existing buffer (which will be deleted)
+ /// with the given buffer.
+ void replaceBuffer(llvm::MemoryBuffer *B, bool DoNotFree = false);
+
+ /// Determine whether the buffer itself is invalid.
+ bool isBufferInvalid() const {
+ return Buffer.getInt() & InvalidFlag;
+ }
+
+ /// Determine whether the buffer should be freed.
+ bool shouldFreeBuffer() const {
+ return (Buffer.getInt() & DoNotFreeFlag) == 0;
+ }
+ };
+
+ // Assert that the \c ContentCache objects will always be 8-byte aligned so
+ // that we can pack 3 bits of integer into pointers to such objects.
+ static_assert(alignof(ContentCache) >= 8,
+ "ContentCache must be 8-byte aligned.");
+
+ /// Information about a FileID, basically just the logical file
+ /// that it represents and include stack information.
+ ///
+ /// Each FileInfo has include stack information, indicating where it came
+ /// from. This information encodes the \#include chain that a token was
+ /// expanded from. The main include file has an invalid IncludeLoc.
+ ///
+ /// FileInfos contain a "ContentCache *", with the contents of the file.
+ ///
+ class FileInfo {
+ friend class clang::SourceManager;
+ friend class clang::ASTWriter;
+ friend class clang::ASTReader;
+
+ /// The location of the \#include that brought in this file.
+ ///
+ /// This is an invalid SLOC for the main file (top of the \#include chain).
+ unsigned IncludeLoc; // Really a SourceLocation
+
+ /// Number of FileIDs (files and macros) that were created during
+ /// preprocessing of this \#include, including this SLocEntry.
+ ///
+ /// Zero means the preprocessor didn't provide such info for this SLocEntry.
+ unsigned NumCreatedFIDs : 31;
+
+ /// Whether this FileInfo has any \#line directives.
+ unsigned HasLineDirectives : 1;
+
+ /// The content cache and the characteristic of the file.
+ llvm::PointerIntPair<const ContentCache*, 3, CharacteristicKind>
+ ContentAndKind;
+
+ public:
+ /// Return a FileInfo object.
+ static FileInfo get(SourceLocation IL, const ContentCache *Con,
+ CharacteristicKind FileCharacter) {
+ FileInfo X;
+ X.IncludeLoc = IL.getRawEncoding();
+ X.NumCreatedFIDs = 0;
+ X.HasLineDirectives = false;
+ X.ContentAndKind.setPointer(Con);
+ X.ContentAndKind.setInt(FileCharacter);
+ return X;
+ }
+
+ SourceLocation getIncludeLoc() const {
+ return SourceLocation::getFromRawEncoding(IncludeLoc);
+ }
+
+ const ContentCache *getContentCache() const {
+ return ContentAndKind.getPointer();
+ }
+
+ /// Return whether this is a system header or not.
+ CharacteristicKind getFileCharacteristic() const {
+ return ContentAndKind.getInt();
+ }
+
+ /// Return true if this FileID has \#line directives in it.
+ bool hasLineDirectives() const { return HasLineDirectives; }
+
+ /// Set the flag that indicates that this FileID has
+ /// line table entries associated with it.
+ void setHasLineDirectives() {
+ HasLineDirectives = true;
+ }
+ };
+
+ /// Each ExpansionInfo encodes the expansion location - where
+ /// the token was ultimately expanded, and the SpellingLoc - where the actual
+ /// character data for the token came from.
+ class ExpansionInfo {
+ // Really these are all SourceLocations.
+
+ /// Where the spelling for the token can be found.
+ unsigned SpellingLoc;
+
+ /// In a macro expansion, ExpansionLocStart and ExpansionLocEnd
+ /// indicate the start and end of the expansion. In object-like macros,
+ /// they will be the same. In a function-like macro expansion, the start
+ /// will be the identifier and the end will be the ')'. Finally, in
+ /// macro-argument instantiations, the end will be 'SourceLocation()', an
+ /// invalid location.
+ unsigned ExpansionLocStart, ExpansionLocEnd;
+
+ /// Whether the expansion range is a token range.
+ bool ExpansionIsTokenRange;
+
+ public:
+ SourceLocation getSpellingLoc() const {
+ SourceLocation SpellLoc = SourceLocation::getFromRawEncoding(SpellingLoc);
+ return SpellLoc.isInvalid() ? getExpansionLocStart() : SpellLoc;
+ }
+
+ SourceLocation getExpansionLocStart() const {
+ return SourceLocation::getFromRawEncoding(ExpansionLocStart);
+ }
+
+ SourceLocation getExpansionLocEnd() const {
+ SourceLocation EndLoc =
+ SourceLocation::getFromRawEncoding(ExpansionLocEnd);
+ return EndLoc.isInvalid() ? getExpansionLocStart() : EndLoc;
+ }
+
+ bool isExpansionTokenRange() const {
+ return ExpansionIsTokenRange;
+ }
+
+ CharSourceRange getExpansionLocRange() const {
+ return CharSourceRange(
+ SourceRange(getExpansionLocStart(), getExpansionLocEnd()),
+ isExpansionTokenRange());
+ }
+
+ bool isMacroArgExpansion() const {
+ // Note that this needs to return false for default constructed objects.
+ return getExpansionLocStart().isValid() &&
+ SourceLocation::getFromRawEncoding(ExpansionLocEnd).isInvalid();
+ }
+
+ bool isMacroBodyExpansion() const {
+ return getExpansionLocStart().isValid() &&
+ SourceLocation::getFromRawEncoding(ExpansionLocEnd).isValid();
+ }
+
+ bool isFunctionMacroExpansion() const {
+ return getExpansionLocStart().isValid() &&
+ getExpansionLocStart() != getExpansionLocEnd();
+ }
+
+ /// Return a ExpansionInfo for an expansion.
+ ///
+ /// Start and End specify the expansion range (where the macro is
+ /// expanded), and SpellingLoc specifies the spelling location (where
+ /// the characters from the token come from). All three can refer to
+ /// normal File SLocs or expansion locations.
+ static ExpansionInfo create(SourceLocation SpellingLoc,
+ SourceLocation Start, SourceLocation End,
+ bool ExpansionIsTokenRange = true) {
+ ExpansionInfo X;
+ X.SpellingLoc = SpellingLoc.getRawEncoding();
+ X.ExpansionLocStart = Start.getRawEncoding();
+ X.ExpansionLocEnd = End.getRawEncoding();
+ X.ExpansionIsTokenRange = ExpansionIsTokenRange;
+ return X;
+ }
+
+ /// Return a special ExpansionInfo for the expansion of
+ /// a macro argument into a function-like macro's body.
+ ///
+ /// ExpansionLoc specifies the expansion location (where the macro is
+ /// expanded). This doesn't need to be a range because a macro is always
+ /// expanded at a macro parameter reference, and macro parameters are
+ /// always exactly one token. SpellingLoc specifies the spelling location
+ /// (where the characters from the token come from). ExpansionLoc and
+ /// SpellingLoc can both refer to normal File SLocs or expansion locations.
+ ///
+ /// Given the code:
+ /// \code
+ /// #define F(x) f(x)
+ /// F(42);
+ /// \endcode
+ ///
+ /// When expanding '\c F(42)', the '\c x' would call this with an
+ /// SpellingLoc pointing at '\c 42' and an ExpansionLoc pointing at its
+ /// location in the definition of '\c F'.
+ static ExpansionInfo createForMacroArg(SourceLocation SpellingLoc,
+ SourceLocation ExpansionLoc) {
+ // We store an intentionally invalid source location for the end of the
+ // expansion range to mark that this is a macro argument location rather
+ // than a normal one.
+ return create(SpellingLoc, ExpansionLoc, SourceLocation());
+ }
+
+ /// Return a special ExpansionInfo representing a token that ends
+ /// prematurely. This is used to model a '>>' token that has been split
+ /// into '>' tokens and similar cases. Unlike for the other forms of
+ /// expansion, the expansion range in this case is a character range, not
+ /// a token range.
+ static ExpansionInfo createForTokenSplit(SourceLocation SpellingLoc,
+ SourceLocation Start,
+ SourceLocation End) {
+ return create(SpellingLoc, Start, End, false);
+ }
+ };
+
+ /// This is a discriminated union of FileInfo and ExpansionInfo.
+ ///
+ /// SourceManager keeps an array of these objects, and they are uniquely
+ /// identified by the FileID datatype.
+ class SLocEntry {
+ unsigned Offset : 31;
+ unsigned IsExpansion : 1;
+ union {
+ FileInfo File;
+ ExpansionInfo Expansion;
+ };
+
+ public:
+ SLocEntry() : Offset(), IsExpansion(), File() {}
+
+ unsigned getOffset() const { return Offset; }
+
+ bool isExpansion() const { return IsExpansion; }
+ bool isFile() const { return !isExpansion(); }
+
+ const FileInfo &getFile() const {
+ assert(isFile() && "Not a file SLocEntry!");
+ return File;
+ }
+
+ const ExpansionInfo &getExpansion() const {
+ assert(isExpansion() && "Not a macro expansion SLocEntry!");
+ return Expansion;
+ }
+
+ static SLocEntry get(unsigned Offset, const FileInfo &FI) {
+ assert(!(Offset & (1u << 31)) && "Offset is too large");
+ SLocEntry E;
+ E.Offset = Offset;
+ E.IsExpansion = false;
+ E.File = FI;
+ return E;
+ }
+
+ static SLocEntry get(unsigned Offset, const ExpansionInfo &Expansion) {
+ assert(!(Offset & (1u << 31)) && "Offset is too large");
+ SLocEntry E;
+ E.Offset = Offset;
+ E.IsExpansion = true;
+ E.Expansion = Expansion;
+ return E;
+ }
+ };
+
+} // namespace SrcMgr
+
+/// External source of source location entries.
+class ExternalSLocEntrySource {
+public:
+ virtual ~ExternalSLocEntrySource();
+
+ /// Read the source location entry with index ID, which will always be
+ /// less than -1.
+ ///
+ /// \returns true if an error occurred that prevented the source-location
+ /// entry from being loaded.
+ virtual bool ReadSLocEntry(int ID) = 0;
+
+ /// Retrieve the module import location and name for the given ID, if
+ /// in fact it was loaded from a module (rather than, say, a precompiled
+ /// header).
+ virtual std::pair<SourceLocation, StringRef> getModuleImportLoc(int ID) = 0;
+};
+
+/// Holds the cache used by isBeforeInTranslationUnit.
+///
+/// The cache structure is complex enough to be worth breaking out of
+/// SourceManager.
+class InBeforeInTUCacheEntry {
+ /// The FileID's of the cached query.
+ ///
+ /// If these match up with a subsequent query, the result can be reused.
+ FileID LQueryFID, RQueryFID;
+
+ /// True if LQueryFID was created before RQueryFID.
+ ///
+ /// This is used to compare macro expansion locations.
+ bool IsLQFIDBeforeRQFID;
+
+ /// The file found in common between the two \#include traces, i.e.,
+ /// the nearest common ancestor of the \#include tree.
+ FileID CommonFID;
+
+ /// The offset of the previous query in CommonFID.
+ ///
+ /// Usually, this represents the location of the \#include for QueryFID, but
+ /// if LQueryFID is a parent of RQueryFID (or vice versa) then these can be a
+ /// random token in the parent.
+ unsigned LCommonOffset, RCommonOffset;
+
+public:
+ /// Return true if the currently cached values match up with
+ /// the specified LHS/RHS query.
+ ///
+ /// If not, we can't use the cache.
+ bool isCacheValid(FileID LHS, FileID RHS) const {
+ return LQueryFID == LHS && RQueryFID == RHS;
+ }
+
+ /// If the cache is valid, compute the result given the
+ /// specified offsets in the LHS/RHS FileID's.
+ bool getCachedResult(unsigned LOffset, unsigned ROffset) const {
+ // If one of the query files is the common file, use the offset. Otherwise,
+ // use the #include loc in the common file.
+ if (LQueryFID != CommonFID) LOffset = LCommonOffset;
+ if (RQueryFID != CommonFID) ROffset = RCommonOffset;
+
+ // It is common for multiple macro expansions to be "included" from the same
+ // location (expansion location), in which case use the order of the FileIDs
+ // to determine which came first. This will also take care the case where
+ // one of the locations points at the inclusion/expansion point of the other
+ // in which case its FileID will come before the other.
+ if (LOffset == ROffset)
+ return IsLQFIDBeforeRQFID;
+
+ return LOffset < ROffset;
+ }
+
+ /// Set up a new query.
+ void setQueryFIDs(FileID LHS, FileID RHS, bool isLFIDBeforeRFID) {
+ assert(LHS != RHS);
+ LQueryFID = LHS;
+ RQueryFID = RHS;
+ IsLQFIDBeforeRQFID = isLFIDBeforeRFID;
+ }
+
+ void clear() {
+ LQueryFID = RQueryFID = FileID();
+ IsLQFIDBeforeRQFID = false;
+ }
+
+ void setCommonLoc(FileID commonFID, unsigned lCommonOffset,
+ unsigned rCommonOffset) {
+ CommonFID = commonFID;
+ LCommonOffset = lCommonOffset;
+ RCommonOffset = rCommonOffset;
+ }
+};
+
+/// The stack used when building modules on demand, which is used
+/// to provide a link between the source managers of the different compiler
+/// instances.
+using ModuleBuildStack = ArrayRef<std::pair<std::string, FullSourceLoc>>;
+
+/// This class handles loading and caching of source files into memory.
+///
+/// This object owns the MemoryBuffer objects for all of the loaded
+/// files and assigns unique FileID's for each unique \#include chain.
+///
+/// The SourceManager can be queried for information about SourceLocation
+/// objects, turning them into either spelling or expansion locations. Spelling
+/// locations represent where the bytes corresponding to a token came from and
+/// expansion locations represent where the location is in the user's view. In
+/// the case of a macro expansion, for example, the spelling location indicates
+/// where the expanded token came from and the expansion location specifies
+/// where it was expanded.
+class SourceManager : public RefCountedBase<SourceManager> {
+ /// DiagnosticsEngine object.
+ DiagnosticsEngine &Diag;
+
+ FileManager &FileMgr;
+
+ mutable llvm::BumpPtrAllocator ContentCacheAlloc;
+
+ /// Memoized information about all of the files tracked by this
+ /// SourceManager.
+ ///
+ /// This map allows us to merge ContentCache entries based
+ /// on their FileEntry*. All ContentCache objects will thus have unique,
+ /// non-null, FileEntry pointers.
+ llvm::DenseMap<const FileEntry*, SrcMgr::ContentCache*> FileInfos;
+
+ /// True if the ContentCache for files that are overridden by other
+ /// files, should report the original file name. Defaults to true.
+ bool OverridenFilesKeepOriginalName = true;
+
+ /// True if non-system source files should be treated as volatile
+ /// (likely to change while trying to use them). Defaults to false.
+ bool UserFilesAreVolatile;
+
+ /// True if all files read during this compilation should be treated
+ /// as transient (may not be present in later compilations using a module
+ /// file created from this compilation). Defaults to false.
+ bool FilesAreTransient = false;
+
+ struct OverriddenFilesInfoTy {
+ /// Files that have been overridden with the contents from another
+ /// file.
+ llvm::DenseMap<const FileEntry *, const FileEntry *> OverriddenFiles;
+
+ /// Files that were overridden with a memory buffer.
+ llvm::DenseSet<const FileEntry *> OverriddenFilesWithBuffer;
+ };
+
+ /// Lazily create the object keeping overridden files info, since
+ /// it is uncommonly used.
+ std::unique_ptr<OverriddenFilesInfoTy> OverriddenFilesInfo;
+
+ OverriddenFilesInfoTy &getOverriddenFilesInfo() {
+ if (!OverriddenFilesInfo)
+ OverriddenFilesInfo.reset(new OverriddenFilesInfoTy);
+ return *OverriddenFilesInfo;
+ }
+
+ /// Information about various memory buffers that we have read in.
+ ///
+ /// All FileEntry* within the stored ContentCache objects are NULL,
+ /// as they do not refer to a file.
+ std::vector<SrcMgr::ContentCache*> MemBufferInfos;
+
+ /// The table of SLocEntries that are local to this module.
+ ///
+ /// Positive FileIDs are indexes into this table. Entry 0 indicates an invalid
+ /// expansion.
+ SmallVector<SrcMgr::SLocEntry, 0> LocalSLocEntryTable;
+
+ /// The table of SLocEntries that are loaded from other modules.
+ ///
+ /// Negative FileIDs are indexes into this table. To get from ID to an index,
+ /// use (-ID - 2).
+ mutable SmallVector<SrcMgr::SLocEntry, 0> LoadedSLocEntryTable;
+
+ /// The starting offset of the next local SLocEntry.
+ ///
+ /// This is LocalSLocEntryTable.back().Offset + the size of that entry.
+ unsigned NextLocalOffset;
+
+ /// The starting offset of the latest batch of loaded SLocEntries.
+ ///
+ /// This is LoadedSLocEntryTable.back().Offset, except that that entry might
+ /// not have been loaded, so that value would be unknown.
+ unsigned CurrentLoadedOffset;
+
+ /// The highest possible offset is 2^31-1, so CurrentLoadedOffset
+ /// starts at 2^31.
+ static const unsigned MaxLoadedOffset = 1U << 31U;
+
+ /// A bitmap that indicates whether the entries of LoadedSLocEntryTable
+ /// have already been loaded from the external source.
+ ///
+ /// Same indexing as LoadedSLocEntryTable.
+ llvm::BitVector SLocEntryLoaded;
+
+ /// An external source for source location entries.
+ ExternalSLocEntrySource *ExternalSLocEntries = nullptr;
+
+ /// A one-entry cache to speed up getFileID.
+ ///
+ /// LastFileIDLookup records the last FileID looked up or created, because it
+ /// is very common to look up many tokens from the same file.
+ mutable FileID LastFileIDLookup;
+
+ /// Holds information for \#line directives.
+ ///
+ /// This is referenced by indices from SLocEntryTable.
+ LineTableInfo *LineTable = nullptr;
+
+ /// These ivars serve as a cache used in the getLineNumber
+ /// method which is used to speedup getLineNumber calls to nearby locations.
+ mutable FileID LastLineNoFileIDQuery;
+ mutable SrcMgr::ContentCache *LastLineNoContentCache;
+ mutable unsigned LastLineNoFilePos;
+ mutable unsigned LastLineNoResult;
+
+ /// The file ID for the main source file of the translation unit.
+ FileID MainFileID;
+
+ /// The file ID for the precompiled preamble there is one.
+ FileID PreambleFileID;
+
+ // Statistics for -print-stats.
+ mutable unsigned NumLinearScans = 0;
+ mutable unsigned NumBinaryProbes = 0;
+
+ /// Associates a FileID with its "included/expanded in" decomposed
+ /// location.
+ ///
+ /// Used to cache results from and speed-up \c getDecomposedIncludedLoc
+ /// function.
+ mutable llvm::DenseMap<FileID, std::pair<FileID, unsigned>> IncludedLocMap;
+
+ /// The key value into the IsBeforeInTUCache table.
+ using IsBeforeInTUCacheKey = std::pair<FileID, FileID>;
+
+ /// The IsBeforeInTranslationUnitCache is a mapping from FileID pairs
+ /// to cache results.
+ using InBeforeInTUCache =
+ llvm::DenseMap<IsBeforeInTUCacheKey, InBeforeInTUCacheEntry>;
+
+ /// Cache results for the isBeforeInTranslationUnit method.
+ mutable InBeforeInTUCache IBTUCache;
+ mutable InBeforeInTUCacheEntry IBTUCacheOverflow;
+
+ /// Return the cache entry for comparing the given file IDs
+ /// for isBeforeInTranslationUnit.
+ InBeforeInTUCacheEntry &getInBeforeInTUCache(FileID LFID, FileID RFID) const;
+
+ // Cache for the "fake" buffer used for error-recovery purposes.
+ mutable std::unique_ptr<llvm::MemoryBuffer> FakeBufferForRecovery;
+
+ mutable std::unique_ptr<SrcMgr::ContentCache> FakeContentCacheForRecovery;
+
+ /// Lazily computed map of macro argument chunks to their expanded
+ /// source location.
+ using MacroArgsMap = std::map<unsigned, SourceLocation>;
+
+ mutable llvm::DenseMap<FileID, std::unique_ptr<MacroArgsMap>>
+ MacroArgsCacheMap;
+
+ /// The stack of modules being built, which is used to detect
+ /// cycles in the module dependency graph as modules are being built, as
+ /// well as to describe why we're rebuilding a particular module.
+ ///
+ /// There is no way to set this value from the command line. If we ever need
+ /// to do so (e.g., if on-demand module construction moves out-of-process),
+ /// we can add a cc1-level option to do so.
+ SmallVector<std::pair<std::string, FullSourceLoc>, 2> StoredModuleBuildStack;
+
+public:
+ SourceManager(DiagnosticsEngine &Diag, FileManager &FileMgr,
+ bool UserFilesAreVolatile = false);
+ explicit SourceManager(const SourceManager &) = delete;
+ SourceManager &operator=(const SourceManager &) = delete;
+ ~SourceManager();
+
+ void clearIDTables();
+
+ /// Initialize this source manager suitably to replay the compilation
+ /// described by \p Old. Requires that \p Old outlive \p *this.
+ void initializeForReplay(const SourceManager &Old);
+
+ DiagnosticsEngine &getDiagnostics() const { return Diag; }
+
+ FileManager &getFileManager() const { return FileMgr; }
+
+ /// Set true if the SourceManager should report the original file name
+ /// for contents of files that were overridden by other files. Defaults to
+ /// true.
+ void setOverridenFilesKeepOriginalName(bool value) {
+ OverridenFilesKeepOriginalName = value;
+ }
+
+ /// True if non-system source files should be treated as volatile
+ /// (likely to change while trying to use them).
+ bool userFilesAreVolatile() const { return UserFilesAreVolatile; }
+
+ /// Retrieve the module build stack.
+ ModuleBuildStack getModuleBuildStack() const {
+ return StoredModuleBuildStack;
+ }
+
+ /// Set the module build stack.
+ void setModuleBuildStack(ModuleBuildStack stack) {
+ StoredModuleBuildStack.clear();
+ StoredModuleBuildStack.append(stack.begin(), stack.end());
+ }
+
+ /// Push an entry to the module build stack.
+ void pushModuleBuildStack(StringRef moduleName, FullSourceLoc importLoc) {
+ StoredModuleBuildStack.push_back(std::make_pair(moduleName.str(),importLoc));
+ }
+
+ //===--------------------------------------------------------------------===//
+ // MainFileID creation and querying methods.
+ //===--------------------------------------------------------------------===//
+
+ /// Returns the FileID of the main source file.
+ FileID getMainFileID() const { return MainFileID; }
+
+ /// Set the file ID for the main source file.
+ void setMainFileID(FileID FID) {
+ MainFileID = FID;
+ }
+
+ /// Set the file ID for the precompiled preamble.
+ void setPreambleFileID(FileID Preamble) {
+ assert(PreambleFileID.isInvalid() && "PreambleFileID already set!");
+ PreambleFileID = Preamble;
+ }
+
+ /// Get the file ID for the precompiled preamble if there is one.
+ FileID getPreambleFileID() const { return PreambleFileID; }
+
+ //===--------------------------------------------------------------------===//
+ // Methods to create new FileID's and macro expansions.
+ //===--------------------------------------------------------------------===//
+
+ /// Create a new FileID that represents the specified file
+ /// being \#included from the specified IncludePosition.
+ ///
+ /// This translates NULL into standard input.
+ FileID createFileID(const FileEntry *SourceFile, SourceLocation IncludePos,
+ SrcMgr::CharacteristicKind FileCharacter,
+ int LoadedID = 0, unsigned LoadedOffset = 0) {
+ const SrcMgr::ContentCache *IR =
+ getOrCreateContentCache(SourceFile, isSystem(FileCharacter));
+ assert(IR && "getOrCreateContentCache() cannot return NULL");
+ return createFileID(IR, IncludePos, FileCharacter, LoadedID, LoadedOffset);
+ }
+
+ /// Create a new FileID that represents the specified memory buffer.
+ ///
+ /// This does no caching of the buffer and takes ownership of the
+ /// MemoryBuffer, so only pass a MemoryBuffer to this once.
+ FileID createFileID(std::unique_ptr<llvm::MemoryBuffer> Buffer,
+ SrcMgr::CharacteristicKind FileCharacter = SrcMgr::C_User,
+ int LoadedID = 0, unsigned LoadedOffset = 0,
+ SourceLocation IncludeLoc = SourceLocation()) {
+ return createFileID(
+ createMemBufferContentCache(Buffer.release(), /*DoNotFree*/ false),
+ IncludeLoc, FileCharacter, LoadedID, LoadedOffset);
+ }
+
+ enum UnownedTag { Unowned };
+
+ /// Create a new FileID that represents the specified memory buffer.
+ ///
+ /// This does no caching of the buffer and takes ownership of the
+ /// MemoryBuffer, so only pass a MemoryBuffer to this once.
+ FileID createFileID(UnownedTag, llvm::MemoryBuffer *Buffer,
+ SrcMgr::CharacteristicKind FileCharacter = SrcMgr::C_User,
+ int LoadedID = 0, unsigned LoadedOffset = 0,
+ SourceLocation IncludeLoc = SourceLocation()) {
+ return createFileID(createMemBufferContentCache(Buffer, /*DoNotFree*/true),
+ IncludeLoc, FileCharacter, LoadedID, LoadedOffset);
+ }
+
+ /// Get the FileID for \p SourceFile if it exists. Otherwise, create a
+ /// new FileID for the \p SourceFile.
+ FileID getOrCreateFileID(const FileEntry *SourceFile,
+ SrcMgr::CharacteristicKind FileCharacter) {
+ FileID ID = translateFile(SourceFile);
+ return ID.isValid() ? ID : createFileID(SourceFile, SourceLocation(),
+ FileCharacter);
+ }
+
+ /// Return a new SourceLocation that encodes the
+ /// fact that a token from SpellingLoc should actually be referenced from
+ /// ExpansionLoc, and that it represents the expansion of a macro argument
+ /// into the function-like macro body.
+ SourceLocation createMacroArgExpansionLoc(SourceLocation Loc,
+ SourceLocation ExpansionLoc,
+ unsigned TokLength);
+
+ /// Return a new SourceLocation that encodes the fact
+ /// that a token from SpellingLoc should actually be referenced from
+ /// ExpansionLoc.
+ SourceLocation createExpansionLoc(SourceLocation Loc,
+ SourceLocation ExpansionLocStart,
+ SourceLocation ExpansionLocEnd,
+ unsigned TokLength,
+ bool ExpansionIsTokenRange = true,
+ int LoadedID = 0,
+ unsigned LoadedOffset = 0);
+
+ /// Return a new SourceLocation that encodes that the token starting
+ /// at \p TokenStart ends prematurely at \p TokenEnd.
+ SourceLocation createTokenSplitLoc(SourceLocation SpellingLoc,
+ SourceLocation TokenStart,
+ SourceLocation TokenEnd);
+
+ /// Retrieve the memory buffer associated with the given file.
+ ///
+ /// \param Invalid If non-NULL, will be set \c true if an error
+ /// occurs while retrieving the memory buffer.
+ llvm::MemoryBuffer *getMemoryBufferForFile(const FileEntry *File,
+ bool *Invalid = nullptr);
+
+ /// Override the contents of the given source file by providing an
+ /// already-allocated buffer.
+ ///
+ /// \param SourceFile the source file whose contents will be overridden.
+ ///
+ /// \param Buffer the memory buffer whose contents will be used as the
+ /// data in the given source file.
+ ///
+ /// \param DoNotFree If true, then the buffer will not be freed when the
+ /// source manager is destroyed.
+ void overrideFileContents(const FileEntry *SourceFile,
+ llvm::MemoryBuffer *Buffer, bool DoNotFree);
+ void overrideFileContents(const FileEntry *SourceFile,
+ std::unique_ptr<llvm::MemoryBuffer> Buffer) {
+ overrideFileContents(SourceFile, Buffer.release(), /*DoNotFree*/ false);
+ }
+
+ /// Override the given source file with another one.
+ ///
+ /// \param SourceFile the source file which will be overridden.
+ ///
+ /// \param NewFile the file whose contents will be used as the
+ /// data instead of the contents of the given source file.
+ void overrideFileContents(const FileEntry *SourceFile,
+ const FileEntry *NewFile);
+
+ /// Returns true if the file contents have been overridden.
+ bool isFileOverridden(const FileEntry *File) const {
+ if (OverriddenFilesInfo) {
+ if (OverriddenFilesInfo->OverriddenFilesWithBuffer.count(File))
+ return true;
+ if (OverriddenFilesInfo->OverriddenFiles.find(File) !=
+ OverriddenFilesInfo->OverriddenFiles.end())
+ return true;
+ }
+ return false;
+ }
+
+ /// Disable overridding the contents of a file, previously enabled
+ /// with #overrideFileContents.
+ ///
+ /// This should be called before parsing has begun.
+ void disableFileContentsOverride(const FileEntry *File);
+
+ /// Specify that a file is transient.
+ void setFileIsTransient(const FileEntry *SourceFile);
+
+ /// Specify that all files that are read during this compilation are
+ /// transient.
+ void setAllFilesAreTransient(bool Transient) {
+ FilesAreTransient = Transient;
+ }
+
+ //===--------------------------------------------------------------------===//
+ // FileID manipulation methods.
+ //===--------------------------------------------------------------------===//
+
+ /// Return the buffer for the specified FileID.
+ ///
+ /// If there is an error opening this buffer the first time, this
+ /// manufactures a temporary buffer and returns a non-empty error string.
+ llvm::MemoryBuffer *getBuffer(FileID FID, SourceLocation Loc,
+ bool *Invalid = nullptr) const {
+ bool MyInvalid = false;
+ const SrcMgr::SLocEntry &Entry = getSLocEntry(FID, &MyInvalid);
+ if (MyInvalid || !Entry.isFile()) {
+ if (Invalid)
+ *Invalid = true;
+
+ return getFakeBufferForRecovery();
+ }
+
+ return Entry.getFile().getContentCache()->getBuffer(Diag, *this, Loc,
+ Invalid);
+ }
+
+ llvm::MemoryBuffer *getBuffer(FileID FID, bool *Invalid = nullptr) const {
+ bool MyInvalid = false;
+ const SrcMgr::SLocEntry &Entry = getSLocEntry(FID, &MyInvalid);
+ if (MyInvalid || !Entry.isFile()) {
+ if (Invalid)
+ *Invalid = true;
+
+ return getFakeBufferForRecovery();
+ }
+
+ return Entry.getFile().getContentCache()->getBuffer(Diag, *this,
+ SourceLocation(),
+ Invalid);
+ }
+
+ /// Returns the FileEntry record for the provided FileID.
+ const FileEntry *getFileEntryForID(FileID FID) const {
+ bool MyInvalid = false;
+ const SrcMgr::SLocEntry &Entry = getSLocEntry(FID, &MyInvalid);
+ if (MyInvalid || !Entry.isFile())
+ return nullptr;
+
+ const SrcMgr::ContentCache *Content = Entry.getFile().getContentCache();
+ if (!Content)
+ return nullptr;
+ return Content->OrigEntry;
+ }
+
+ /// Returns the FileEntry record for the provided SLocEntry.
+ const FileEntry *getFileEntryForSLocEntry(const SrcMgr::SLocEntry &sloc) const
+ {
+ const SrcMgr::ContentCache *Content = sloc.getFile().getContentCache();
+ if (!Content)
+ return nullptr;
+ return Content->OrigEntry;
+ }
+
+ /// Return a StringRef to the source buffer data for the
+ /// specified FileID.
+ ///
+ /// \param FID The file ID whose contents will be returned.
+ /// \param Invalid If non-NULL, will be set true if an error occurred.
+ StringRef getBufferData(FileID FID, bool *Invalid = nullptr) const;
+
+ /// Get the number of FileIDs (files and macros) that were created
+ /// during preprocessing of \p FID, including it.
+ unsigned getNumCreatedFIDsForFileID(FileID FID) const {
+ bool Invalid = false;
+ const SrcMgr::SLocEntry &Entry = getSLocEntry(FID, &Invalid);
+ if (Invalid || !Entry.isFile())
+ return 0;
+
+ return Entry.getFile().NumCreatedFIDs;
+ }
+
+ /// Set the number of FileIDs (files and macros) that were created
+ /// during preprocessing of \p FID, including it.
+ void setNumCreatedFIDsForFileID(FileID FID, unsigned NumFIDs,
+ bool Force = false) const {
+ bool Invalid = false;
+ const SrcMgr::SLocEntry &Entry = getSLocEntry(FID, &Invalid);
+ if (Invalid || !Entry.isFile())
+ return;
+
+ assert((Force || Entry.getFile().NumCreatedFIDs == 0) && "Already set!");
+ const_cast<SrcMgr::FileInfo &>(Entry.getFile()).NumCreatedFIDs = NumFIDs;
+ }
+
+ //===--------------------------------------------------------------------===//
+ // SourceLocation manipulation methods.
+ //===--------------------------------------------------------------------===//
+
+ /// Return the FileID for a SourceLocation.
+ ///
+ /// This is a very hot method that is used for all SourceManager queries
+ /// that start with a SourceLocation object. It is responsible for finding
+ /// the entry in SLocEntryTable which contains the specified location.
+ ///
+ FileID getFileID(SourceLocation SpellingLoc) const {
+ unsigned SLocOffset = SpellingLoc.getOffset();
+
+ // If our one-entry cache covers this offset, just return it.
+ if (isOffsetInFileID(LastFileIDLookup, SLocOffset))
+ return LastFileIDLookup;
+
+ return getFileIDSlow(SLocOffset);
+ }
+
+ /// Return the filename of the file containing a SourceLocation.
+ StringRef getFilename(SourceLocation SpellingLoc) const {
+ if (const FileEntry *F = getFileEntryForID(getFileID(SpellingLoc)))
+ return F->getName();
+ return StringRef();
+ }
+
+ /// Return the source location corresponding to the first byte of
+ /// the specified file.
+ SourceLocation getLocForStartOfFile(FileID FID) const {
+ bool Invalid = false;
+ const SrcMgr::SLocEntry &Entry = getSLocEntry(FID, &Invalid);
+ if (Invalid || !Entry.isFile())
+ return SourceLocation();
+
+ unsigned FileOffset = Entry.getOffset();
+ return SourceLocation::getFileLoc(FileOffset);
+ }
+
+ /// Return the source location corresponding to the last byte of the
+ /// specified file.
+ SourceLocation getLocForEndOfFile(FileID FID) const {
+ bool Invalid = false;
+ const SrcMgr::SLocEntry &Entry = getSLocEntry(FID, &Invalid);
+ if (Invalid || !Entry.isFile())
+ return SourceLocation();
+
+ unsigned FileOffset = Entry.getOffset();
+ return SourceLocation::getFileLoc(FileOffset + getFileIDSize(FID));
+ }
+
+ /// Returns the include location if \p FID is a \#include'd file
+ /// otherwise it returns an invalid location.
+ SourceLocation getIncludeLoc(FileID FID) const {
+ bool Invalid = false;
+ const SrcMgr::SLocEntry &Entry = getSLocEntry(FID, &Invalid);
+ if (Invalid || !Entry.isFile())
+ return SourceLocation();
+
+ return Entry.getFile().getIncludeLoc();
+ }
+
+ // Returns the import location if the given source location is
+ // located within a module, or an invalid location if the source location
+ // is within the current translation unit.
+ std::pair<SourceLocation, StringRef>
+ getModuleImportLoc(SourceLocation Loc) const {
+ FileID FID = getFileID(Loc);
+
+ // Positive file IDs are in the current translation unit, and -1 is a
+ // placeholder.
+ if (FID.ID >= -1)
+ return std::make_pair(SourceLocation(), "");
+
+ return ExternalSLocEntries->getModuleImportLoc(FID.ID);
+ }
+
+ /// Given a SourceLocation object \p Loc, return the expansion
+ /// location referenced by the ID.
+ SourceLocation getExpansionLoc(SourceLocation Loc) const {
+ // Handle the non-mapped case inline, defer to out of line code to handle
+ // expansions.
+ if (Loc.isFileID()) return Loc;
+ return getExpansionLocSlowCase(Loc);
+ }
+
+ /// Given \p Loc, if it is a macro location return the expansion
+ /// location or the spelling location, depending on if it comes from a
+ /// macro argument or not.
+ SourceLocation getFileLoc(SourceLocation Loc) const {
+ if (Loc.isFileID()) return Loc;
+ return getFileLocSlowCase(Loc);
+ }
+
+ /// Return the start/end of the expansion information for an
+ /// expansion location.
+ ///
+ /// \pre \p Loc is required to be an expansion location.
+ CharSourceRange getImmediateExpansionRange(SourceLocation Loc) const;
+
+ /// Given a SourceLocation object, return the range of
+ /// tokens covered by the expansion in the ultimate file.
+ CharSourceRange getExpansionRange(SourceLocation Loc) const;
+
+ /// Given a SourceRange object, return the range of
+ /// tokens or characters covered by the expansion in the ultimate file.
+ CharSourceRange getExpansionRange(SourceRange Range) const {
+ SourceLocation Begin = getExpansionRange(Range.getBegin()).getBegin();
+ CharSourceRange End = getExpansionRange(Range.getEnd());
+ return CharSourceRange(SourceRange(Begin, End.getEnd()),
+ End.isTokenRange());
+ }
+
+ /// Given a CharSourceRange object, return the range of
+ /// tokens or characters covered by the expansion in the ultimate file.
+ CharSourceRange getExpansionRange(CharSourceRange Range) const {
+ CharSourceRange Expansion = getExpansionRange(Range.getAsRange());
+ if (Expansion.getEnd() == Range.getEnd())
+ Expansion.setTokenRange(Range.isTokenRange());
+ return Expansion;
+ }
+
+ /// Given a SourceLocation object, return the spelling
+ /// location referenced by the ID.
+ ///
+ /// This is the place where the characters that make up the lexed token
+ /// can be found.
+ SourceLocation getSpellingLoc(SourceLocation Loc) const {
+ // Handle the non-mapped case inline, defer to out of line code to handle
+ // expansions.
+ if (Loc.isFileID()) return Loc;
+ return getSpellingLocSlowCase(Loc);
+ }
+
+ /// Given a SourceLocation object, return the spelling location
+ /// referenced by the ID.
+ ///
+ /// This is the first level down towards the place where the characters
+ /// that make up the lexed token can be found. This should not generally
+ /// be used by clients.
+ SourceLocation getImmediateSpellingLoc(SourceLocation Loc) const;
+
+ /// Form a SourceLocation from a FileID and Offset pair.
+ SourceLocation getComposedLoc(FileID FID, unsigned Offset) const {
+ bool Invalid = false;
+ const SrcMgr::SLocEntry &Entry = getSLocEntry(FID, &Invalid);
+ if (Invalid)
+ return SourceLocation();
+
+ unsigned GlobalOffset = Entry.getOffset() + Offset;
+ return Entry.isFile() ? SourceLocation::getFileLoc(GlobalOffset)
+ : SourceLocation::getMacroLoc(GlobalOffset);
+ }
+
+ /// Decompose the specified location into a raw FileID + Offset pair.
+ ///
+ /// The first element is the FileID, the second is the offset from the
+ /// start of the buffer of the location.
+ std::pair<FileID, unsigned> getDecomposedLoc(SourceLocation Loc) const {
+ FileID FID = getFileID(Loc);
+ bool Invalid = false;
+ const SrcMgr::SLocEntry &E = getSLocEntry(FID, &Invalid);
+ if (Invalid)
+ return std::make_pair(FileID(), 0);
+ return std::make_pair(FID, Loc.getOffset()-E.getOffset());
+ }
+
+ /// Decompose the specified location into a raw FileID + Offset pair.
+ ///
+ /// If the location is an expansion record, walk through it until we find
+ /// the final location expanded.
+ std::pair<FileID, unsigned>
+ getDecomposedExpansionLoc(SourceLocation Loc) const {
+ FileID FID = getFileID(Loc);
+ bool Invalid = false;
+ const SrcMgr::SLocEntry *E = &getSLocEntry(FID, &Invalid);
+ if (Invalid)
+ return std::make_pair(FileID(), 0);
+
+ unsigned Offset = Loc.getOffset()-E->getOffset();
+ if (Loc.isFileID())
+ return std::make_pair(FID, Offset);
+
+ return getDecomposedExpansionLocSlowCase(E);
+ }
+
+ /// Decompose the specified location into a raw FileID + Offset pair.
+ ///
+ /// If the location is an expansion record, walk through it until we find
+ /// its spelling record.
+ std::pair<FileID, unsigned>
+ getDecomposedSpellingLoc(SourceLocation Loc) const {
+ FileID FID = getFileID(Loc);
+ bool Invalid = false;
+ const SrcMgr::SLocEntry *E = &getSLocEntry(FID, &Invalid);
+ if (Invalid)
+ return std::make_pair(FileID(), 0);
+
+ unsigned Offset = Loc.getOffset()-E->getOffset();
+ if (Loc.isFileID())
+ return std::make_pair(FID, Offset);
+ return getDecomposedSpellingLocSlowCase(E, Offset);
+ }
+
+ /// Returns the "included/expanded in" decomposed location of the given
+ /// FileID.
+ std::pair<FileID, unsigned> getDecomposedIncludedLoc(FileID FID) const;
+
+ /// Returns the offset from the start of the file that the
+ /// specified SourceLocation represents.
+ ///
+ /// This is not very meaningful for a macro ID.
+ unsigned getFileOffset(SourceLocation SpellingLoc) const {
+ return getDecomposedLoc(SpellingLoc).second;
+ }
+
+ /// Tests whether the given source location represents a macro
+ /// argument's expansion into the function-like macro definition.
+ ///
+ /// \param StartLoc If non-null and function returns true, it is set to the
+ /// start location of the macro argument expansion.
+ ///
+ /// Such source locations only appear inside of the expansion
+ /// locations representing where a particular function-like macro was
+ /// expanded.
+ bool isMacroArgExpansion(SourceLocation Loc,
+ SourceLocation *StartLoc = nullptr) const;
+
+ /// Tests whether the given source location represents the expansion of
+ /// a macro body.
+ ///
+ /// This is equivalent to testing whether the location is part of a macro
+ /// expansion but not the expansion of an argument to a function-like macro.
+ bool isMacroBodyExpansion(SourceLocation Loc) const;
+
+ /// Returns true if the given MacroID location points at the beginning
+ /// of the immediate macro expansion.
+ ///
+ /// \param MacroBegin If non-null and function returns true, it is set to the
+ /// begin location of the immediate macro expansion.
+ bool isAtStartOfImmediateMacroExpansion(SourceLocation Loc,
+ SourceLocation *MacroBegin = nullptr) const;
+
+ /// Returns true if the given MacroID location points at the character
+ /// end of the immediate macro expansion.
+ ///
+ /// \param MacroEnd If non-null and function returns true, it is set to the
+ /// character end location of the immediate macro expansion.
+ bool
+ isAtEndOfImmediateMacroExpansion(SourceLocation Loc,
+ SourceLocation *MacroEnd = nullptr) const;
+
+ /// Returns true if \p Loc is inside the [\p Start, +\p Length)
+ /// chunk of the source location address space.
+ ///
+ /// If it's true and \p RelativeOffset is non-null, it will be set to the
+ /// relative offset of \p Loc inside the chunk.
+ bool isInSLocAddrSpace(SourceLocation Loc,
+ SourceLocation Start, unsigned Length,
+ unsigned *RelativeOffset = nullptr) const {
+ assert(((Start.getOffset() < NextLocalOffset &&
+ Start.getOffset()+Length <= NextLocalOffset) ||
+ (Start.getOffset() >= CurrentLoadedOffset &&
+ Start.getOffset()+Length < MaxLoadedOffset)) &&
+ "Chunk is not valid SLoc address space");
+ unsigned LocOffs = Loc.getOffset();
+ unsigned BeginOffs = Start.getOffset();
+ unsigned EndOffs = BeginOffs + Length;
+ if (LocOffs >= BeginOffs && LocOffs < EndOffs) {
+ if (RelativeOffset)
+ *RelativeOffset = LocOffs - BeginOffs;
+ return true;
+ }
+
+ return false;
+ }
+
+ /// Return true if both \p LHS and \p RHS are in the local source
+ /// location address space or the loaded one.
+ ///
+ /// If it's true and \p RelativeOffset is non-null, it will be set to the
+ /// offset of \p RHS relative to \p LHS.
+ bool isInSameSLocAddrSpace(SourceLocation LHS, SourceLocation RHS,
+ int *RelativeOffset) const {
+ unsigned LHSOffs = LHS.getOffset(), RHSOffs = RHS.getOffset();
+ bool LHSLoaded = LHSOffs >= CurrentLoadedOffset;
+ bool RHSLoaded = RHSOffs >= CurrentLoadedOffset;
+
+ if (LHSLoaded == RHSLoaded) {
+ if (RelativeOffset)
+ *RelativeOffset = RHSOffs - LHSOffs;
+ return true;
+ }
+
+ return false;
+ }
+
+ //===--------------------------------------------------------------------===//
+ // Queries about the code at a SourceLocation.
+ //===--------------------------------------------------------------------===//
+
+ /// Return a pointer to the start of the specified location
+ /// in the appropriate spelling MemoryBuffer.
+ ///
+ /// \param Invalid If non-NULL, will be set \c true if an error occurs.
+ const char *getCharacterData(SourceLocation SL,
+ bool *Invalid = nullptr) const;
+
+ /// Return the column # for the specified file position.
+ ///
+ /// This is significantly cheaper to compute than the line number. This
+ /// returns zero if the column number isn't known. This may only be called
+ /// on a file sloc, so you must choose a spelling or expansion location
+ /// before calling this method.
+ unsigned getColumnNumber(FileID FID, unsigned FilePos,
+ bool *Invalid = nullptr) const;
+ unsigned getSpellingColumnNumber(SourceLocation Loc,
+ bool *Invalid = nullptr) const;
+ unsigned getExpansionColumnNumber(SourceLocation Loc,
+ bool *Invalid = nullptr) const;
+ unsigned getPresumedColumnNumber(SourceLocation Loc,
+ bool *Invalid = nullptr) const;
+
+ /// Given a SourceLocation, return the spelling line number
+ /// for the position indicated.
+ ///
+ /// This requires building and caching a table of line offsets for the
+ /// MemoryBuffer, so this is not cheap: use only when about to emit a
+ /// diagnostic.
+ unsigned getLineNumber(FileID FID, unsigned FilePos, bool *Invalid = nullptr) const;
+ unsigned getSpellingLineNumber(SourceLocation Loc, bool *Invalid = nullptr) const;
+ unsigned getExpansionLineNumber(SourceLocation Loc, bool *Invalid = nullptr) const;
+ unsigned getPresumedLineNumber(SourceLocation Loc, bool *Invalid = nullptr) const;
+
+ /// Return the filename or buffer identifier of the buffer the
+ /// location is in.
+ ///
+ /// Note that this name does not respect \#line directives. Use
+ /// getPresumedLoc for normal clients.
+ StringRef getBufferName(SourceLocation Loc, bool *Invalid = nullptr) const;
+
+ /// Return the file characteristic of the specified source
+ /// location, indicating whether this is a normal file, a system
+ /// header, or an "implicit extern C" system header.
+ ///
+ /// This state can be modified with flags on GNU linemarker directives like:
+ /// \code
+ /// # 4 "foo.h" 3
+ /// \endcode
+ /// which changes all source locations in the current file after that to be
+ /// considered to be from a system header.
+ SrcMgr::CharacteristicKind getFileCharacteristic(SourceLocation Loc) const;
+
+ /// Returns the "presumed" location of a SourceLocation specifies.
+ ///
+ /// A "presumed location" can be modified by \#line or GNU line marker
+ /// directives. This provides a view on the data that a user should see
+ /// in diagnostics, for example.
+ ///
+ /// Note that a presumed location is always given as the expansion point of
+ /// an expansion location, not at the spelling location.
+ ///
+ /// \returns The presumed location of the specified SourceLocation. If the
+ /// presumed location cannot be calculated (e.g., because \p Loc is invalid
+ /// or the file containing \p Loc has changed on disk), returns an invalid
+ /// presumed location.
+ PresumedLoc getPresumedLoc(SourceLocation Loc,
+ bool UseLineDirectives = true) const;
+
+ /// Returns whether the PresumedLoc for a given SourceLocation is
+ /// in the main file.
+ ///
+ /// This computes the "presumed" location for a SourceLocation, then checks
+ /// whether it came from a file other than the main file. This is different
+ /// from isWrittenInMainFile() because it takes line marker directives into
+ /// account.
+ bool isInMainFile(SourceLocation Loc) const;
+
+ /// Returns true if the spelling locations for both SourceLocations
+ /// are part of the same file buffer.
+ ///
+ /// This check ignores line marker directives.
+ bool isWrittenInSameFile(SourceLocation Loc1, SourceLocation Loc2) const {
+ return getFileID(Loc1) == getFileID(Loc2);
+ }
+
+ /// Returns true if the spelling location for the given location
+ /// is in the main file buffer.
+ ///
+ /// This check ignores line marker directives.
+ bool isWrittenInMainFile(SourceLocation Loc) const {
+ return getFileID(Loc) == getMainFileID();
+ }
+
+ /// Returns whether \p Loc is located in a <built-in> file.
+ bool isWrittenInBuiltinFile(SourceLocation Loc) const {
+ StringRef Filename(getPresumedLoc(Loc).getFilename());
+ return Filename.equals("<built-in>");
+ }
+
+ /// Returns whether \p Loc is located in a <command line> file.
+ bool isWrittenInCommandLineFile(SourceLocation Loc) const {
+ StringRef Filename(getPresumedLoc(Loc).getFilename());
+ return Filename.equals("<command line>");
+ }
+
+ /// Returns whether \p Loc is located in a <scratch space> file.
+ bool isWrittenInScratchSpace(SourceLocation Loc) const {
+ StringRef Filename(getPresumedLoc(Loc).getFilename());
+ return Filename.equals("<scratch space>");
+ }
+
+ /// Returns if a SourceLocation is in a system header.
+ bool isInSystemHeader(SourceLocation Loc) const {
+ return isSystem(getFileCharacteristic(Loc));
+ }
+
+ /// Returns if a SourceLocation is in an "extern C" system header.
+ bool isInExternCSystemHeader(SourceLocation Loc) const {
+ return getFileCharacteristic(Loc) == SrcMgr::C_ExternCSystem;
+ }
+
+ /// Returns whether \p Loc is expanded from a macro in a system header.
+ bool isInSystemMacro(SourceLocation loc) const {
+ if (!loc.isMacroID())
+ return false;
+
+ // This happens when the macro is the result of a paste, in that case
+ // its spelling is the scratch memory, so we take the parent context.
+ if (isWrittenInScratchSpace(getSpellingLoc(loc)))
+ return isInSystemHeader(getSpellingLoc(getImmediateMacroCallerLoc(loc)));
+
+ return isInSystemHeader(getSpellingLoc(loc));
+ }
+
+ /// The size of the SLocEntry that \p FID represents.
+ unsigned getFileIDSize(FileID FID) const;
+
+ /// Given a specific FileID, returns true if \p Loc is inside that
+ /// FileID chunk and sets relative offset (offset of \p Loc from beginning
+ /// of FileID) to \p relativeOffset.
+ bool isInFileID(SourceLocation Loc, FileID FID,
+ unsigned *RelativeOffset = nullptr) const {
+ unsigned Offs = Loc.getOffset();
+ if (isOffsetInFileID(FID, Offs)) {
+ if (RelativeOffset)
+ *RelativeOffset = Offs - getSLocEntry(FID).getOffset();
+ return true;
+ }
+
+ return false;
+ }
+
+ //===--------------------------------------------------------------------===//
+ // Line Table Manipulation Routines
+ //===--------------------------------------------------------------------===//
+
+ /// Return the uniqued ID for the specified filename.
+ unsigned getLineTableFilenameID(StringRef Str);
+
+ /// Add a line note to the line table for the FileID and offset
+ /// specified by Loc.
+ ///
+ /// If FilenameID is -1, it is considered to be unspecified.
+ void AddLineNote(SourceLocation Loc, unsigned LineNo, int FilenameID,
+ bool IsFileEntry, bool IsFileExit,
+ SrcMgr::CharacteristicKind FileKind);
+
+ /// Determine if the source manager has a line table.
+ bool hasLineTable() const { return LineTable != nullptr; }
+
+ /// Retrieve the stored line table.
+ LineTableInfo &getLineTable();
+
+ //===--------------------------------------------------------------------===//
+ // Queries for performance analysis.
+ //===--------------------------------------------------------------------===//
+
+ /// Return the total amount of physical memory allocated by the
+ /// ContentCache allocator.
+ size_t getContentCacheSize() const {
+ return ContentCacheAlloc.getTotalMemory();
+ }
+
+ struct MemoryBufferSizes {
+ const size_t malloc_bytes;
+ const size_t mmap_bytes;
+
+ MemoryBufferSizes(size_t malloc_bytes, size_t mmap_bytes)
+ : malloc_bytes(malloc_bytes), mmap_bytes(mmap_bytes) {}
+ };
+
+ /// Return the amount of memory used by memory buffers, breaking down
+ /// by heap-backed versus mmap'ed memory.
+ MemoryBufferSizes getMemoryBufferSizes() const;
+
+ /// Return the amount of memory used for various side tables and
+ /// data structures in the SourceManager.
+ size_t getDataStructureSizes() const;
+
+ //===--------------------------------------------------------------------===//
+ // Other miscellaneous methods.
+ //===--------------------------------------------------------------------===//
+
+ /// Get the source location for the given file:line:col triplet.
+ ///
+ /// If the source file is included multiple times, the source location will
+ /// be based upon the first inclusion.
+ SourceLocation translateFileLineCol(const FileEntry *SourceFile,
+ unsigned Line, unsigned Col) const;
+
+ /// Get the FileID for the given file.
+ ///
+ /// If the source file is included multiple times, the FileID will be the
+ /// first inclusion.
+ FileID translateFile(const FileEntry *SourceFile) const;
+
+ /// Get the source location in \p FID for the given line:col.
+ /// Returns null location if \p FID is not a file SLocEntry.
+ SourceLocation translateLineCol(FileID FID,
+ unsigned Line, unsigned Col) const;
+
+ /// If \p Loc points inside a function macro argument, the returned
+ /// location will be the macro location in which the argument was expanded.
+ /// If a macro argument is used multiple times, the expanded location will
+ /// be at the first expansion of the argument.
+ /// e.g.
+ /// MY_MACRO(foo);
+ /// ^
+ /// Passing a file location pointing at 'foo', will yield a macro location
+ /// where 'foo' was expanded into.
+ SourceLocation getMacroArgExpandedLocation(SourceLocation Loc) const;
+
+ /// Determines the order of 2 source locations in the translation unit.
+ ///
+ /// \returns true if LHS source location comes before RHS, false otherwise.
+ bool isBeforeInTranslationUnit(SourceLocation LHS, SourceLocation RHS) const;
+
+ /// Determines whether the two decomposed source location is in the
+ /// same translation unit. As a byproduct, it also calculates the order
+ /// of the source locations in case they are in the same TU.
+ ///
+ /// \returns Pair of bools the first component is true if the two locations
+ /// are in the same TU. The second bool is true if the first is true
+ /// and \p LOffs is before \p ROffs.
+ std::pair<bool, bool>
+ isInTheSameTranslationUnit(std::pair<FileID, unsigned> &LOffs,
+ std::pair<FileID, unsigned> &ROffs) const;
+
+ /// Determines the order of 2 source locations in the "source location
+ /// address space".
+ bool isBeforeInSLocAddrSpace(SourceLocation LHS, SourceLocation RHS) const {
+ return isBeforeInSLocAddrSpace(LHS, RHS.getOffset());
+ }
+
+ /// Determines the order of a source location and a source location
+ /// offset in the "source location address space".
+ ///
+ /// Note that we always consider source locations loaded from
+ bool isBeforeInSLocAddrSpace(SourceLocation LHS, unsigned RHS) const {
+ unsigned LHSOffset = LHS.getOffset();
+ bool LHSLoaded = LHSOffset >= CurrentLoadedOffset;
+ bool RHSLoaded = RHS >= CurrentLoadedOffset;
+ if (LHSLoaded == RHSLoaded)
+ return LHSOffset < RHS;
+
+ return LHSLoaded;
+ }
+
+ /// Return true if the Point is within Start and End.
+ bool isPointWithin(SourceLocation Location, SourceLocation Start,
+ SourceLocation End) const {
+ return Location == Start || Location == End ||
+ (isBeforeInTranslationUnit(Start, Location) &&
+ isBeforeInTranslationUnit(Location, End));
+ }
+
+ // Iterators over FileInfos.
+ using fileinfo_iterator =
+ llvm::DenseMap<const FileEntry*, SrcMgr::ContentCache*>::const_iterator;
+
+ fileinfo_iterator fileinfo_begin() const { return FileInfos.begin(); }
+ fileinfo_iterator fileinfo_end() const { return FileInfos.end(); }
+ bool hasFileInfo(const FileEntry *File) const {
+ return FileInfos.find(File) != FileInfos.end();
+ }
+
+ /// Print statistics to stderr.
+ void PrintStats() const;
+
+ void dump() const;
+
+ /// Get the number of local SLocEntries we have.
+ unsigned local_sloc_entry_size() const { return LocalSLocEntryTable.size(); }
+
+ /// Get a local SLocEntry. This is exposed for indexing.
+ const SrcMgr::SLocEntry &getLocalSLocEntry(unsigned Index,
+ bool *Invalid = nullptr) const {
+ assert(Index < LocalSLocEntryTable.size() && "Invalid index");
+ return LocalSLocEntryTable[Index];
+ }
+
+ /// Get the number of loaded SLocEntries we have.
+ unsigned loaded_sloc_entry_size() const { return LoadedSLocEntryTable.size();}
+
+ /// Get a loaded SLocEntry. This is exposed for indexing.
+ const SrcMgr::SLocEntry &getLoadedSLocEntry(unsigned Index,
+ bool *Invalid = nullptr) const {
+ assert(Index < LoadedSLocEntryTable.size() && "Invalid index");
+ if (SLocEntryLoaded[Index])
+ return LoadedSLocEntryTable[Index];
+ return loadSLocEntry(Index, Invalid);
+ }
+
+ const SrcMgr::SLocEntry &getSLocEntry(FileID FID,
+ bool *Invalid = nullptr) const {
+ if (FID.ID == 0 || FID.ID == -1) {
+ if (Invalid) *Invalid = true;
+ return LocalSLocEntryTable[0];
+ }
+ return getSLocEntryByID(FID.ID, Invalid);
+ }
+
+ unsigned getNextLocalOffset() const { return NextLocalOffset; }
+
+ void setExternalSLocEntrySource(ExternalSLocEntrySource *Source) {
+ assert(LoadedSLocEntryTable.empty() &&
+ "Invalidating existing loaded entries");
+ ExternalSLocEntries = Source;
+ }
+
+ /// Allocate a number of loaded SLocEntries, which will be actually
+ /// loaded on demand from the external source.
+ ///
+ /// NumSLocEntries will be allocated, which occupy a total of TotalSize space
+ /// in the global source view. The lowest ID and the base offset of the
+ /// entries will be returned.
+ std::pair<int, unsigned>
+ AllocateLoadedSLocEntries(unsigned NumSLocEntries, unsigned TotalSize);
+
+ /// Returns true if \p Loc came from a PCH/Module.
+ bool isLoadedSourceLocation(SourceLocation Loc) const {
+ return Loc.getOffset() >= CurrentLoadedOffset;
+ }
+
+ /// Returns true if \p Loc did not come from a PCH/Module.
+ bool isLocalSourceLocation(SourceLocation Loc) const {
+ return Loc.getOffset() < NextLocalOffset;
+ }
+
+ /// Returns true if \p FID came from a PCH/Module.
+ bool isLoadedFileID(FileID FID) const {
+ assert(FID.ID != -1 && "Using FileID sentinel value");
+ return FID.ID < 0;
+ }
+
+ /// Returns true if \p FID did not come from a PCH/Module.
+ bool isLocalFileID(FileID FID) const {
+ return !isLoadedFileID(FID);
+ }
+
+ /// Gets the location of the immediate macro caller, one level up the stack
+ /// toward the initial macro typed into the source.
+ SourceLocation getImmediateMacroCallerLoc(SourceLocation Loc) const {
+ if (!Loc.isMacroID()) return Loc;
+
+ // When we have the location of (part of) an expanded parameter, its
+ // spelling location points to the argument as expanded in the macro call,
+ // and therefore is used to locate the macro caller.
+ if (isMacroArgExpansion(Loc))
+ return getImmediateSpellingLoc(Loc);
+
+ // Otherwise, the caller of the macro is located where this macro is
+ // expanded (while the spelling is part of the macro definition).
+ return getImmediateExpansionRange(Loc).getBegin();
+ }
+
+ /// \return Location of the top-level macro caller.
+ SourceLocation getTopMacroCallerLoc(SourceLocation Loc) const;
+
+private:
+ friend class ASTReader;
+ friend class ASTWriter;
+
+ llvm::MemoryBuffer *getFakeBufferForRecovery() const;
+ const SrcMgr::ContentCache *getFakeContentCacheForRecovery() const;
+
+ const SrcMgr::SLocEntry &loadSLocEntry(unsigned Index, bool *Invalid) const;
+
+ /// Get the entry with the given unwrapped FileID.
+ const SrcMgr::SLocEntry &getSLocEntryByID(int ID,
+ bool *Invalid = nullptr) const {
+ assert(ID != -1 && "Using FileID sentinel value");
+ if (ID < 0)
+ return getLoadedSLocEntryByID(ID, Invalid);
+ return getLocalSLocEntry(static_cast<unsigned>(ID), Invalid);
+ }
+
+ const SrcMgr::SLocEntry &
+ getLoadedSLocEntryByID(int ID, bool *Invalid = nullptr) const {
+ return getLoadedSLocEntry(static_cast<unsigned>(-ID - 2), Invalid);
+ }
+
+ /// Implements the common elements of storing an expansion info struct into
+ /// the SLocEntry table and producing a source location that refers to it.
+ SourceLocation createExpansionLocImpl(const SrcMgr::ExpansionInfo &Expansion,
+ unsigned TokLength,
+ int LoadedID = 0,
+ unsigned LoadedOffset = 0);
+
+ /// Return true if the specified FileID contains the
+ /// specified SourceLocation offset. This is a very hot method.
+ inline bool isOffsetInFileID(FileID FID, unsigned SLocOffset) const {
+ const SrcMgr::SLocEntry &Entry = getSLocEntry(FID);
+ // If the entry is after the offset, it can't contain it.
+ if (SLocOffset < Entry.getOffset()) return false;
+
+ // If this is the very last entry then it does.
+ if (FID.ID == -2)
+ return true;
+
+ // If it is the last local entry, then it does if the location is local.
+ if (FID.ID+1 == static_cast<int>(LocalSLocEntryTable.size()))
+ return SLocOffset < NextLocalOffset;
+
+ // Otherwise, the entry after it has to not include it. This works for both
+ // local and loaded entries.
+ return SLocOffset < getSLocEntryByID(FID.ID+1).getOffset();
+ }
+
+ /// Returns the previous in-order FileID or an invalid FileID if there
+ /// is no previous one.
+ FileID getPreviousFileID(FileID FID) const;
+
+ /// Returns the next in-order FileID or an invalid FileID if there is
+ /// no next one.
+ FileID getNextFileID(FileID FID) const;
+
+ /// Create a new fileID for the specified ContentCache and
+ /// include position.
+ ///
+ /// This works regardless of whether the ContentCache corresponds to a
+ /// file or some other input source.
+ FileID createFileID(const SrcMgr::ContentCache* File,
+ SourceLocation IncludePos,
+ SrcMgr::CharacteristicKind DirCharacter,
+ int LoadedID, unsigned LoadedOffset);
+
+ const SrcMgr::ContentCache *
+ getOrCreateContentCache(const FileEntry *SourceFile,
+ bool isSystemFile = false);
+
+ /// Create a new ContentCache for the specified memory buffer.
+ const SrcMgr::ContentCache *
+ createMemBufferContentCache(llvm::MemoryBuffer *Buf, bool DoNotFree);
+
+ FileID getFileIDSlow(unsigned SLocOffset) const;
+ FileID getFileIDLocal(unsigned SLocOffset) const;
+ FileID getFileIDLoaded(unsigned SLocOffset) const;
+
+ SourceLocation getExpansionLocSlowCase(SourceLocation Loc) const;
+ SourceLocation getSpellingLocSlowCase(SourceLocation Loc) const;
+ SourceLocation getFileLocSlowCase(SourceLocation Loc) const;
+
+ std::pair<FileID, unsigned>
+ getDecomposedExpansionLocSlowCase(const SrcMgr::SLocEntry *E) const;
+ std::pair<FileID, unsigned>
+ getDecomposedSpellingLocSlowCase(const SrcMgr::SLocEntry *E,
+ unsigned Offset) const;
+ void computeMacroArgsCache(MacroArgsMap &MacroArgsCache, FileID FID) const;
+ void associateFileChunkWithMacroArgExp(MacroArgsMap &MacroArgsCache,
+ FileID FID,
+ SourceLocation SpellLoc,
+ SourceLocation ExpansionLoc,
+ unsigned ExpansionLength) const;
+};
+
+/// Comparison function object.
+template<typename T>
+class BeforeThanCompare;
+
+/// Compare two source locations.
+template<>
+class BeforeThanCompare<SourceLocation> {
+ SourceManager &SM;
+
+public:
+ explicit BeforeThanCompare(SourceManager &SM) : SM(SM) {}
+
+ bool operator()(SourceLocation LHS, SourceLocation RHS) const {
+ return SM.isBeforeInTranslationUnit(LHS, RHS);
+ }
+};
+
+/// Compare two non-overlapping source ranges.
+template<>
+class BeforeThanCompare<SourceRange> {
+ SourceManager &SM;
+
+public:
+ explicit BeforeThanCompare(SourceManager &SM) : SM(SM) {}
+
+ bool operator()(SourceRange LHS, SourceRange RHS) const {
+ return SM.isBeforeInTranslationUnit(LHS.getBegin(), RHS.getBegin());
+ }
+};
+
+/// SourceManager and necessary depdencies (e.g. VFS, FileManager) for a single
+/// in-memorty file.
+class SourceManagerForFile {
+public:
+ /// Creates SourceManager and necessary depdencies (e.g. VFS, FileManager).
+ /// The main file in the SourceManager will be \p FileName with \p Content.
+ SourceManagerForFile(StringRef FileName, StringRef Content);
+
+ SourceManager &get() {
+ assert(SourceMgr);
+ return *SourceMgr;
+ }
+
+private:
+ // The order of these fields are important - they should be in the same order
+ // as they are created in `createSourceManagerForFile` so that they can be
+ // deleted in the reverse order as they are created.
+ std::unique_ptr<FileManager> FileMgr;
+ std::unique_ptr<DiagnosticsEngine> Diagnostics;
+ std::unique_ptr<SourceManager> SourceMgr;
+};
+
+} // namespace clang
+
+#endif // LLVM_CLANG_BASIC_SOURCEMANAGER_H
diff --git a/clang-r353983/include/clang/Basic/SourceManagerInternals.h b/clang-r353983/include/clang/Basic/SourceManagerInternals.h
new file mode 100644
index 00000000..e67b93ae
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/SourceManagerInternals.h
@@ -0,0 +1,133 @@
+//===- SourceManagerInternals.h - SourceManager Internals -------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+/// \file
+/// Defines implementation details of the clang::SourceManager class.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_SOURCEMANAGERINTERNALS_H
+#define LLVM_CLANG_BASIC_SOURCEMANAGERINTERNALS_H
+
+#include "clang/Basic/SourceLocation.h"
+#include "clang/Basic/SourceManager.h"
+#include "llvm/ADT/StringMap.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Allocator.h"
+#include <cassert>
+#include <map>
+#include <vector>
+
+namespace clang {
+
+//===----------------------------------------------------------------------===//
+// Line Table Implementation
+//===----------------------------------------------------------------------===//
+
+struct LineEntry {
+ /// The offset in this file that the line entry occurs at.
+ unsigned FileOffset;
+
+ /// The presumed line number of this line entry: \#line 4.
+ unsigned LineNo;
+
+ /// The ID of the filename identified by this line entry:
+ /// \#line 4 "foo.c". This is -1 if not specified.
+ int FilenameID;
+
+ /// Set the 0 if no flags, 1 if a system header,
+ SrcMgr::CharacteristicKind FileKind;
+
+ /// The offset of the virtual include stack location,
+ /// which is manipulated by GNU linemarker directives.
+ ///
+ /// If this is 0 then there is no virtual \#includer.
+ unsigned IncludeOffset;
+
+ static LineEntry get(unsigned Offs, unsigned Line, int Filename,
+ SrcMgr::CharacteristicKind FileKind,
+ unsigned IncludeOffset) {
+ LineEntry E;
+ E.FileOffset = Offs;
+ E.LineNo = Line;
+ E.FilenameID = Filename;
+ E.FileKind = FileKind;
+ E.IncludeOffset = IncludeOffset;
+ return E;
+ }
+};
+
+// needed for FindNearestLineEntry (upper_bound of LineEntry)
+inline bool operator<(const LineEntry &lhs, const LineEntry &rhs) {
+ // FIXME: should check the other field?
+ return lhs.FileOffset < rhs.FileOffset;
+}
+
+inline bool operator<(const LineEntry &E, unsigned Offset) {
+ return E.FileOffset < Offset;
+}
+
+inline bool operator<(unsigned Offset, const LineEntry &E) {
+ return Offset < E.FileOffset;
+}
+
+/// Used to hold and unique data used to represent \#line information.
+class LineTableInfo {
+ /// Map used to assign unique IDs to filenames in \#line directives.
+ ///
+ /// This allows us to unique the filenames that
+ /// frequently reoccur and reference them with indices. FilenameIDs holds
+ /// the mapping from string -> ID, and FilenamesByID holds the mapping of ID
+ /// to string.
+ llvm::StringMap<unsigned, llvm::BumpPtrAllocator> FilenameIDs;
+ std::vector<llvm::StringMapEntry<unsigned>*> FilenamesByID;
+
+ /// Map from FileIDs to a list of line entries (sorted by the offset
+ /// at which they occur in the file).
+ std::map<FileID, std::vector<LineEntry>> LineEntries;
+
+public:
+ void clear() {
+ FilenameIDs.clear();
+ FilenamesByID.clear();
+ LineEntries.clear();
+ }
+
+ unsigned getLineTableFilenameID(StringRef Str);
+
+ StringRef getFilename(unsigned ID) const {
+ assert(ID < FilenamesByID.size() && "Invalid FilenameID");
+ return FilenamesByID[ID]->getKey();
+ }
+
+ unsigned getNumFilenames() const { return FilenamesByID.size(); }
+
+ void AddLineNote(FileID FID, unsigned Offset,
+ unsigned LineNo, int FilenameID,
+ unsigned EntryExit, SrcMgr::CharacteristicKind FileKind);
+
+
+ /// Find the line entry nearest to FID that is before it.
+ ///
+ /// If there is no line entry before \p Offset in \p FID, returns null.
+ const LineEntry *FindNearestLineEntry(FileID FID, unsigned Offset);
+
+ // Low-level access
+ using iterator = std::map<FileID, std::vector<LineEntry>>::iterator;
+
+ iterator begin() { return LineEntries.begin(); }
+ iterator end() { return LineEntries.end(); }
+
+ /// Add a new line entry that has already been encoded into
+ /// the internal representation of the line table.
+ void AddEntry(FileID FID, const std::vector<LineEntry> &Entries);
+};
+
+} // namespace clang
+
+#endif // LLVM_CLANG_BASIC_SOURCEMANAGERINTERNALS_H
diff --git a/clang-r353983/include/clang/Basic/Specifiers.h b/clang-r353983/include/clang/Basic/Specifiers.h
new file mode 100644
index 00000000..7256acaf
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/Specifiers.h
@@ -0,0 +1,330 @@
+//===--- Specifiers.h - Declaration and Type Specifiers ---------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Defines various enumerations that describe declaration and
+/// type specifiers.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_SPECIFIERS_H
+#define LLVM_CLANG_BASIC_SPECIFIERS_H
+
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/DataTypes.h"
+#include "llvm/Support/ErrorHandling.h"
+
+namespace clang {
+ /// Specifies the width of a type, e.g., short, long, or long long.
+ enum TypeSpecifierWidth {
+ TSW_unspecified,
+ TSW_short,
+ TSW_long,
+ TSW_longlong
+ };
+
+ /// Specifies the signedness of a type, e.g., signed or unsigned.
+ enum TypeSpecifierSign {
+ TSS_unspecified,
+ TSS_signed,
+ TSS_unsigned
+ };
+
+ enum TypeSpecifiersPipe {
+ TSP_unspecified,
+ TSP_pipe
+ };
+
+ /// Specifies the kind of type.
+ enum TypeSpecifierType {
+ TST_unspecified,
+ TST_void,
+ TST_char,
+ TST_wchar, // C++ wchar_t
+ TST_char8, // C++20 char8_t (proposed)
+ TST_char16, // C++11 char16_t
+ TST_char32, // C++11 char32_t
+ TST_int,
+ TST_int128,
+ TST_half, // OpenCL half, ARM NEON __fp16
+ TST_Float16, // C11 extension ISO/IEC TS 18661-3
+ TST_Accum, // ISO/IEC JTC1 SC22 WG14 N1169 Extension
+ TST_Fract,
+ TST_float,
+ TST_double,
+ TST_float128,
+ TST_bool, // _Bool
+ TST_decimal32, // _Decimal32
+ TST_decimal64, // _Decimal64
+ TST_decimal128, // _Decimal128
+ TST_enum,
+ TST_union,
+ TST_struct,
+ TST_class, // C++ class type
+ TST_interface, // C++ (Microsoft-specific) __interface type
+ TST_typename, // Typedef, C++ class-name or enum name, etc.
+ TST_typeofType,
+ TST_typeofExpr,
+ TST_decltype, // C++11 decltype
+ TST_underlyingType, // __underlying_type for C++11
+ TST_auto, // C++11 auto
+ TST_decltype_auto, // C++1y decltype(auto)
+ TST_auto_type, // __auto_type extension
+ TST_unknown_anytype, // __unknown_anytype extension
+ TST_atomic, // C11 _Atomic
+#define GENERIC_IMAGE_TYPE(ImgType, Id) TST_##ImgType##_t, // OpenCL image types
+#include "clang/Basic/OpenCLImageTypes.def"
+ TST_error // erroneous type
+ };
+
+ /// Structure that packs information about the type specifiers that
+ /// were written in a particular type specifier sequence.
+ struct WrittenBuiltinSpecs {
+ static_assert(TST_error < 1 << 6, "Type bitfield not wide enough for TST");
+ /*DeclSpec::TST*/ unsigned Type : 6;
+ /*DeclSpec::TSS*/ unsigned Sign : 2;
+ /*DeclSpec::TSW*/ unsigned Width : 2;
+ unsigned ModeAttr : 1;
+ };
+
+ /// A C++ access specifier (public, private, protected), plus the
+ /// special value "none" which means different things in different contexts.
+ enum AccessSpecifier {
+ AS_public,
+ AS_protected,
+ AS_private,
+ AS_none
+ };
+
+ /// The categorization of expression values, currently following the
+ /// C++11 scheme.
+ enum ExprValueKind {
+ /// An r-value expression (a pr-value in the C++11 taxonomy)
+ /// produces a temporary value.
+ VK_RValue,
+
+ /// An l-value expression is a reference to an object with
+ /// independent storage.
+ VK_LValue,
+
+ /// An x-value expression is a reference to an object with
+ /// independent storage but which can be "moved", i.e.
+ /// efficiently cannibalized for its resources.
+ VK_XValue
+ };
+
+ /// A further classification of the kind of object referenced by an
+ /// l-value or x-value.
+ enum ExprObjectKind {
+ /// An ordinary object is located at an address in memory.
+ OK_Ordinary,
+
+ /// A bitfield object is a bitfield on a C or C++ record.
+ OK_BitField,
+
+ /// A vector component is an element or range of elements on a vector.
+ OK_VectorComponent,
+
+ /// An Objective-C property is a logical field of an Objective-C
+ /// object which is read and written via Objective-C method calls.
+ OK_ObjCProperty,
+
+ /// An Objective-C array/dictionary subscripting which reads an
+ /// object or writes at the subscripted array/dictionary element via
+ /// Objective-C method calls.
+ OK_ObjCSubscript
+ };
+
+ /// Describes the kind of template specialization that a
+ /// particular template specialization declaration represents.
+ enum TemplateSpecializationKind {
+ /// This template specialization was formed from a template-id but
+ /// has not yet been declared, defined, or instantiated.
+ TSK_Undeclared = 0,
+ /// This template specialization was implicitly instantiated from a
+ /// template. (C++ [temp.inst]).
+ TSK_ImplicitInstantiation,
+ /// This template specialization was declared or defined by an
+ /// explicit specialization (C++ [temp.expl.spec]) or partial
+ /// specialization (C++ [temp.class.spec]).
+ TSK_ExplicitSpecialization,
+ /// This template specialization was instantiated from a template
+ /// due to an explicit instantiation declaration request
+ /// (C++11 [temp.explicit]).
+ TSK_ExplicitInstantiationDeclaration,
+ /// This template specialization was instantiated from a template
+ /// due to an explicit instantiation definition request
+ /// (C++ [temp.explicit]).
+ TSK_ExplicitInstantiationDefinition
+ };
+
+ /// Determine whether this template specialization kind refers
+ /// to an instantiation of an entity (as opposed to a non-template or
+ /// an explicit specialization).
+ inline bool isTemplateInstantiation(TemplateSpecializationKind Kind) {
+ return Kind != TSK_Undeclared && Kind != TSK_ExplicitSpecialization;
+ }
+
+ /// True if this template specialization kind is an explicit
+ /// specialization, explicit instantiation declaration, or explicit
+ /// instantiation definition.
+ inline bool isTemplateExplicitInstantiationOrSpecialization(
+ TemplateSpecializationKind Kind) {
+ switch (Kind) {
+ case TSK_ExplicitSpecialization:
+ case TSK_ExplicitInstantiationDeclaration:
+ case TSK_ExplicitInstantiationDefinition:
+ return true;
+
+ case TSK_Undeclared:
+ case TSK_ImplicitInstantiation:
+ return false;
+ }
+ llvm_unreachable("bad template specialization kind");
+ }
+
+ /// Thread storage-class-specifier.
+ enum ThreadStorageClassSpecifier {
+ TSCS_unspecified,
+ /// GNU __thread.
+ TSCS___thread,
+ /// C++11 thread_local. Implies 'static' at block scope, but not at
+ /// class scope.
+ TSCS_thread_local,
+ /// C11 _Thread_local. Must be combined with either 'static' or 'extern'
+ /// if used at block scope.
+ TSCS__Thread_local
+ };
+
+ /// Storage classes.
+ enum StorageClass {
+ // These are legal on both functions and variables.
+ SC_None,
+ SC_Extern,
+ SC_Static,
+ SC_PrivateExtern,
+
+ // These are only legal on variables.
+ SC_Auto,
+ SC_Register
+ };
+
+ /// Checks whether the given storage class is legal for functions.
+ inline bool isLegalForFunction(StorageClass SC) {
+ return SC <= SC_PrivateExtern;
+ }
+
+ /// Checks whether the given storage class is legal for variables.
+ inline bool isLegalForVariable(StorageClass SC) {
+ return true;
+ }
+
+ /// In-class initialization styles for non-static data members.
+ enum InClassInitStyle {
+ ICIS_NoInit, ///< No in-class initializer.
+ ICIS_CopyInit, ///< Copy initialization.
+ ICIS_ListInit ///< Direct list-initialization.
+ };
+
+ /// CallingConv - Specifies the calling convention that a function uses.
+ enum CallingConv {
+ CC_C, // __attribute__((cdecl))
+ CC_X86StdCall, // __attribute__((stdcall))
+ CC_X86FastCall, // __attribute__((fastcall))
+ CC_X86ThisCall, // __attribute__((thiscall))
+ CC_X86VectorCall, // __attribute__((vectorcall))
+ CC_X86Pascal, // __attribute__((pascal))
+ CC_Win64, // __attribute__((ms_abi))
+ CC_X86_64SysV, // __attribute__((sysv_abi))
+ CC_X86RegCall, // __attribute__((regcall))
+ CC_AAPCS, // __attribute__((pcs("aapcs")))
+ CC_AAPCS_VFP, // __attribute__((pcs("aapcs-vfp")))
+ CC_IntelOclBicc, // __attribute__((intel_ocl_bicc))
+ CC_SpirFunction, // default for OpenCL functions on SPIR target
+ CC_OpenCLKernel, // inferred for OpenCL kernels
+ CC_Swift, // __attribute__((swiftcall))
+ CC_PreserveMost, // __attribute__((preserve_most))
+ CC_PreserveAll, // __attribute__((preserve_all))
+ CC_AArch64VectorCall, // __attribute__((aarch64_vector_pcs))
+ };
+
+ /// Checks whether the given calling convention supports variadic
+ /// calls. Unprototyped calls also use the variadic call rules.
+ inline bool supportsVariadicCall(CallingConv CC) {
+ switch (CC) {
+ case CC_X86StdCall:
+ case CC_X86FastCall:
+ case CC_X86ThisCall:
+ case CC_X86RegCall:
+ case CC_X86Pascal:
+ case CC_X86VectorCall:
+ case CC_SpirFunction:
+ case CC_OpenCLKernel:
+ case CC_Swift:
+ return false;
+ default:
+ return true;
+ }
+ }
+
+ /// The storage duration for an object (per C++ [basic.stc]).
+ enum StorageDuration {
+ SD_FullExpression, ///< Full-expression storage duration (for temporaries).
+ SD_Automatic, ///< Automatic storage duration (most local variables).
+ SD_Thread, ///< Thread storage duration.
+ SD_Static, ///< Static storage duration.
+ SD_Dynamic ///< Dynamic storage duration.
+ };
+
+ /// Describes the nullability of a particular type.
+ enum class NullabilityKind : uint8_t {
+ /// Values of this type can never be null.
+ NonNull = 0,
+ /// Values of this type can be null.
+ Nullable,
+ /// Whether values of this type can be null is (explicitly)
+ /// unspecified. This captures a (fairly rare) case where we
+ /// can't conclude anything about the nullability of the type even
+ /// though it has been considered.
+ Unspecified
+ };
+
+ /// Return true if \p L has a weaker nullability annotation than \p R. The
+ /// ordering is: Unspecified < Nullable < NonNull.
+ inline bool hasWeakerNullability(NullabilityKind L, NullabilityKind R) {
+ return uint8_t(L) > uint8_t(R);
+ }
+
+ /// Retrieve the spelling of the given nullability kind.
+ llvm::StringRef getNullabilitySpelling(NullabilityKind kind,
+ bool isContextSensitive = false);
+
+ /// Kinds of parameter ABI.
+ enum class ParameterABI {
+ /// This parameter uses ordinary ABI rules for its type.
+ Ordinary,
+
+ /// This parameter (which must have pointer type) is a Swift
+ /// indirect result parameter.
+ SwiftIndirectResult,
+
+ /// This parameter (which must have pointer-to-pointer type) uses
+ /// the special Swift error-result ABI treatment. There can be at
+ /// most one parameter on a given function that uses this treatment.
+ SwiftErrorResult,
+
+ /// This parameter (which must have pointer type) uses the special
+ /// Swift context-pointer ABI treatment. There can be at
+ /// most one parameter on a given function that uses this treatment.
+ SwiftContext
+ };
+
+ llvm::StringRef getParameterABISpelling(ParameterABI kind);
+} // end namespace clang
+
+#endif // LLVM_CLANG_BASIC_SPECIFIERS_H
diff --git a/clang-r353983/include/clang/Basic/Stack.h b/clang-r353983/include/clang/Basic/Stack.h
new file mode 100644
index 00000000..e0b04099
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/Stack.h
@@ -0,0 +1,26 @@
+//===--- Stack.h - Utilities for dealing with stack space -------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Defines utilities for dealing with stack allocation and stack space.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_STACK_H
+#define LLVM_CLANG_BASIC_STACK_H
+
+#include <cstddef>
+
+namespace clang {
+ /// The amount of stack space that Clang would like to be provided with.
+ /// If less than this much is available, we may be unable to reach our
+ /// template instantiation depth limit and other similar limits.
+ constexpr size_t DesiredStackSize = 8 << 20;
+} // end namespace clang
+
+#endif // LLVM_CLANG_BASIC_STACK_H
diff --git a/clang-r353983/include/clang/Basic/SyncScope.h b/clang-r353983/include/clang/Basic/SyncScope.h
new file mode 100644
index 00000000..3ebf40f7
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/SyncScope.h
@@ -0,0 +1,153 @@
+//===--- SyncScope.h - Atomic synchronization scopes ------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Provides definitions for the atomic synchronization scopes.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_SYNCSCOPE_H
+#define LLVM_CLANG_BASIC_SYNCSCOPE_H
+
+#include "clang/Basic/LangOptions.h"
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/StringRef.h"
+#include <memory>
+
+namespace clang {
+
+/// Defines synch scope values used internally by clang.
+///
+/// The enum values start from 0 and are contiguous. They are mainly used for
+/// enumerating all supported synch scope values and mapping them to LLVM
+/// synch scopes. Their numerical values may be different from the corresponding
+/// synch scope enums used in source languages.
+///
+/// In atomic builtin and expressions, language-specific synch scope enums are
+/// used. Currently only OpenCL memory scope enums are supported and assumed
+/// to be used by all languages. However, in the future, other languages may
+/// define their own set of synch scope enums. The language-specific synch scope
+/// values are represented by class AtomicScopeModel and its derived classes.
+///
+/// To add a new enum value:
+/// Add the enum value to enum class SyncScope.
+/// Update enum value Last if necessary.
+/// Update getAsString.
+///
+enum class SyncScope {
+ OpenCLWorkGroup,
+ OpenCLDevice,
+ OpenCLAllSVMDevices,
+ OpenCLSubGroup,
+ Last = OpenCLSubGroup
+};
+
+inline llvm::StringRef getAsString(SyncScope S) {
+ switch (S) {
+ case SyncScope::OpenCLWorkGroup:
+ return "opencl_workgroup";
+ case SyncScope::OpenCLDevice:
+ return "opencl_device";
+ case SyncScope::OpenCLAllSVMDevices:
+ return "opencl_allsvmdevices";
+ case SyncScope::OpenCLSubGroup:
+ return "opencl_subgroup";
+ }
+ llvm_unreachable("Invalid synch scope");
+}
+
+/// Defines the kind of atomic scope models.
+enum class AtomicScopeModelKind { None, OpenCL };
+
+/// Defines the interface for synch scope model.
+class AtomicScopeModel {
+public:
+ virtual ~AtomicScopeModel() {}
+ /// Maps language specific synch scope values to internal
+ /// SyncScope enum.
+ virtual SyncScope map(unsigned S) const = 0;
+
+ /// Check if the compile-time constant synch scope value
+ /// is valid.
+ virtual bool isValid(unsigned S) const = 0;
+
+ /// Get all possible synch scope values that might be
+ /// encountered at runtime for the current language.
+ virtual ArrayRef<unsigned> getRuntimeValues() const = 0;
+
+ /// If atomic builtin function is called with invalid
+ /// synch scope value at runtime, it will fall back to a valid
+ /// synch scope value returned by this function.
+ virtual unsigned getFallBackValue() const = 0;
+
+ /// Create an atomic scope model by AtomicScopeModelKind.
+ /// \return an empty std::unique_ptr for AtomicScopeModelKind::None.
+ static std::unique_ptr<AtomicScopeModel> create(AtomicScopeModelKind K);
+};
+
+/// Defines the synch scope model for OpenCL.
+class AtomicScopeOpenCLModel : public AtomicScopeModel {
+public:
+ /// The enum values match the pre-defined macros
+ /// __OPENCL_MEMORY_SCOPE_*, which are used to define memory_scope_*
+ /// enums in opencl-c.h.
+ enum ID {
+ WorkGroup = 1,
+ Device = 2,
+ AllSVMDevices = 3,
+ SubGroup = 4,
+ Last = SubGroup
+ };
+
+ AtomicScopeOpenCLModel() {}
+
+ SyncScope map(unsigned S) const override {
+ switch (static_cast<ID>(S)) {
+ case WorkGroup:
+ return SyncScope::OpenCLWorkGroup;
+ case Device:
+ return SyncScope::OpenCLDevice;
+ case AllSVMDevices:
+ return SyncScope::OpenCLAllSVMDevices;
+ case SubGroup:
+ return SyncScope::OpenCLSubGroup;
+ }
+ llvm_unreachable("Invalid language synch scope value");
+ }
+
+ bool isValid(unsigned S) const override {
+ return S >= static_cast<unsigned>(WorkGroup) &&
+ S <= static_cast<unsigned>(Last);
+ }
+
+ ArrayRef<unsigned> getRuntimeValues() const override {
+ static_assert(Last == SubGroup, "Does not include all synch scopes");
+ static const unsigned Scopes[] = {
+ static_cast<unsigned>(WorkGroup), static_cast<unsigned>(Device),
+ static_cast<unsigned>(AllSVMDevices), static_cast<unsigned>(SubGroup)};
+ return llvm::makeArrayRef(Scopes);
+ }
+
+ unsigned getFallBackValue() const override {
+ return static_cast<unsigned>(AllSVMDevices);
+ }
+};
+
+inline std::unique_ptr<AtomicScopeModel>
+AtomicScopeModel::create(AtomicScopeModelKind K) {
+ switch (K) {
+ case AtomicScopeModelKind::None:
+ return std::unique_ptr<AtomicScopeModel>{};
+ case AtomicScopeModelKind::OpenCL:
+ return llvm::make_unique<AtomicScopeOpenCLModel>();
+ }
+ llvm_unreachable("Invalid atomic scope model kind");
+}
+}
+
+#endif
diff --git a/clang-r353983/include/clang/Basic/TargetBuiltins.h b/clang-r353983/include/clang/Basic/TargetBuiltins.h
new file mode 100644
index 00000000..50262fa3
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/TargetBuiltins.h
@@ -0,0 +1,204 @@
+//===--- TargetBuiltins.h - Target specific builtin IDs ---------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Enumerates target-specific builtins in their own namespaces within
+/// namespace ::clang.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_TARGETBUILTINS_H
+#define LLVM_CLANG_BASIC_TARGETBUILTINS_H
+
+#include <stdint.h>
+#include "clang/Basic/Builtins.h"
+#undef PPC
+
+namespace clang {
+
+ namespace NEON {
+ enum {
+ LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
+#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
+#include "clang/Basic/BuiltinsNEON.def"
+ FirstTSBuiltin
+ };
+ }
+
+ /// ARM builtins
+ namespace ARM {
+ enum {
+ LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
+ LastNEONBuiltin = NEON::FirstTSBuiltin - 1,
+#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
+#include "clang/Basic/BuiltinsARM.def"
+ LastTSBuiltin
+ };
+ }
+
+ /// AArch64 builtins
+ namespace AArch64 {
+ enum {
+ LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
+ LastNEONBuiltin = NEON::FirstTSBuiltin - 1,
+ #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
+ #include "clang/Basic/BuiltinsAArch64.def"
+ LastTSBuiltin
+ };
+ }
+
+ /// PPC builtins
+ namespace PPC {
+ enum {
+ LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
+#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
+#include "clang/Basic/BuiltinsPPC.def"
+ LastTSBuiltin
+ };
+ }
+
+ /// NVPTX builtins
+ namespace NVPTX {
+ enum {
+ LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
+#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
+#include "clang/Basic/BuiltinsNVPTX.def"
+ LastTSBuiltin
+ };
+ }
+
+ /// AMDGPU builtins
+ namespace AMDGPU {
+ enum {
+ LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
+ #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
+ #include "clang/Basic/BuiltinsAMDGPU.def"
+ LastTSBuiltin
+ };
+ }
+
+ /// X86 builtins
+ namespace X86 {
+ enum {
+ LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
+#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
+#include "clang/Basic/BuiltinsX86.def"
+ FirstX86_64Builtin,
+ LastX86CommonBuiltin = FirstX86_64Builtin - 1,
+#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
+#include "clang/Basic/BuiltinsX86_64.def"
+ LastTSBuiltin
+ };
+ }
+
+ /// Flags to identify the types for overloaded Neon builtins.
+ ///
+ /// These must be kept in sync with the flags in utils/TableGen/NeonEmitter.h.
+ class NeonTypeFlags {
+ enum {
+ EltTypeMask = 0xf,
+ UnsignedFlag = 0x10,
+ QuadFlag = 0x20
+ };
+ uint32_t Flags;
+
+ public:
+ enum EltType {
+ Int8,
+ Int16,
+ Int32,
+ Int64,
+ Poly8,
+ Poly16,
+ Poly64,
+ Poly128,
+ Float16,
+ Float32,
+ Float64
+ };
+
+ NeonTypeFlags(unsigned F) : Flags(F) {}
+ NeonTypeFlags(EltType ET, bool IsUnsigned, bool IsQuad) : Flags(ET) {
+ if (IsUnsigned)
+ Flags |= UnsignedFlag;
+ if (IsQuad)
+ Flags |= QuadFlag;
+ }
+
+ EltType getEltType() const { return (EltType)(Flags & EltTypeMask); }
+ bool isPoly() const {
+ EltType ET = getEltType();
+ return ET == Poly8 || ET == Poly16;
+ }
+ bool isUnsigned() const { return (Flags & UnsignedFlag) != 0; }
+ bool isQuad() const { return (Flags & QuadFlag) != 0; }
+ };
+
+ /// Hexagon builtins
+ namespace Hexagon {
+ enum {
+ LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
+#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
+#include "clang/Basic/BuiltinsHexagon.def"
+ LastTSBuiltin
+ };
+ }
+
+ /// MIPS builtins
+ namespace Mips {
+ enum {
+ LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
+#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
+#include "clang/Basic/BuiltinsMips.def"
+ LastTSBuiltin
+ };
+ }
+
+ /// XCore builtins
+ namespace XCore {
+ enum {
+ LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
+#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
+#include "clang/Basic/BuiltinsXCore.def"
+ LastTSBuiltin
+ };
+ }
+
+ /// Le64 builtins
+ namespace Le64 {
+ enum {
+ LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
+ #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
+ #include "clang/Basic/BuiltinsLe64.def"
+ LastTSBuiltin
+ };
+ }
+
+ /// SystemZ builtins
+ namespace SystemZ {
+ enum {
+ LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
+#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
+#include "clang/Basic/BuiltinsSystemZ.def"
+ LastTSBuiltin
+ };
+ }
+
+ /// WebAssembly builtins
+ namespace WebAssembly {
+ enum {
+ LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
+#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
+#include "clang/Basic/BuiltinsWebAssembly.def"
+ LastTSBuiltin
+ };
+ }
+
+} // end namespace clang.
+
+#endif
diff --git a/clang-r353983/include/clang/Basic/TargetCXXABI.h b/clang-r353983/include/clang/Basic/TargetCXXABI.h
new file mode 100644
index 00000000..b1be4027
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/TargetCXXABI.h
@@ -0,0 +1,345 @@
+//===--- TargetCXXABI.h - C++ ABI Target Configuration ----------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Defines the TargetCXXABI class, which abstracts details of the
+/// C++ ABI that we're targeting.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_TARGETCXXABI_H
+#define LLVM_CLANG_BASIC_TARGETCXXABI_H
+
+#include "llvm/Support/ErrorHandling.h"
+
+namespace clang {
+
+/// The basic abstraction for the target C++ ABI.
+class TargetCXXABI {
+public:
+ /// The basic C++ ABI kind.
+ enum Kind {
+ /// The generic Itanium ABI is the standard ABI of most open-source
+ /// and Unix-like platforms. It is the primary ABI targeted by
+ /// many compilers, including Clang and GCC.
+ ///
+ /// It is documented here:
+ /// http://www.codesourcery.com/public/cxx-abi/
+ GenericItanium,
+
+ /// The generic ARM ABI is a modified version of the Itanium ABI
+ /// proposed by ARM for use on ARM-based platforms.
+ ///
+ /// These changes include:
+ /// - the representation of member function pointers is adjusted
+ /// to not conflict with the 'thumb' bit of ARM function pointers;
+ /// - constructors and destructors return 'this';
+ /// - guard variables are smaller;
+ /// - inline functions are never key functions;
+ /// - array cookies have a slightly different layout;
+ /// - additional convenience functions are specified;
+ /// - and more!
+ ///
+ /// It is documented here:
+ /// http://infocenter.arm.com
+ /// /help/topic/com.arm.doc.ihi0041c/IHI0041C_cppabi.pdf
+ GenericARM,
+
+ /// The iOS ABI is a partial implementation of the ARM ABI.
+ /// Several of the features of the ARM ABI were not fully implemented
+ /// in the compilers that iOS was launched with.
+ ///
+ /// Essentially, the iOS ABI includes the ARM changes to:
+ /// - member function pointers,
+ /// - guard variables,
+ /// - array cookies, and
+ /// - constructor/destructor signatures.
+ iOS,
+
+ /// The iOS 64-bit ABI is follows ARM's published 64-bit ABI more
+ /// closely, but we don't guarantee to follow it perfectly.
+ ///
+ /// It is documented here:
+ /// http://infocenter.arm.com
+ /// /help/topic/com.arm.doc.ihi0059a/IHI0059A_cppabi64.pdf
+ iOS64,
+
+ /// WatchOS is a modernisation of the iOS ABI, which roughly means it's
+ /// the iOS64 ABI ported to 32-bits. The primary difference from iOS64 is
+ /// that RTTI objects must still be unique at the moment.
+ WatchOS,
+
+ /// The generic AArch64 ABI is also a modified version of the Itanium ABI,
+ /// but it has fewer divergences than the 32-bit ARM ABI.
+ ///
+ /// The relevant changes from the generic ABI in this case are:
+ /// - representation of member function pointers adjusted as in ARM.
+ /// - guard variables are smaller.
+ GenericAArch64,
+
+ /// The generic Mips ABI is a modified version of the Itanium ABI.
+ ///
+ /// At the moment, only change from the generic ABI in this case is:
+ /// - representation of member function pointers adjusted as in ARM.
+ GenericMIPS,
+
+ /// The WebAssembly ABI is a modified version of the Itanium ABI.
+ ///
+ /// The changes from the Itanium ABI are:
+ /// - representation of member function pointers is adjusted, as in ARM;
+ /// - member functions are not specially aligned;
+ /// - constructors and destructors return 'this', as in ARM;
+ /// - guard variables are 32-bit on wasm32, as in ARM;
+ /// - unused bits of guard variables are reserved, as in ARM;
+ /// - inline functions are never key functions, as in ARM;
+ /// - C++11 POD rules are used for tail padding, as in iOS64.
+ ///
+ /// TODO: At present the WebAssembly ABI is not considered stable, so none
+ /// of these details is necessarily final yet.
+ WebAssembly,
+
+ /// The Microsoft ABI is the ABI used by Microsoft Visual Studio (and
+ /// compatible compilers).
+ ///
+ /// FIXME: should this be split into Win32 and Win64 variants?
+ ///
+ /// Only scattered and incomplete official documentation exists.
+ Microsoft
+ };
+
+private:
+ // Right now, this class is passed around as a cheap value type.
+ // If you add more members, especially non-POD members, please
+ // audit the users to pass it by reference instead.
+ Kind TheKind;
+
+public:
+ /// A bogus initialization of the platform ABI.
+ TargetCXXABI() : TheKind(GenericItanium) {}
+
+ TargetCXXABI(Kind kind) : TheKind(kind) {}
+
+ void set(Kind kind) {
+ TheKind = kind;
+ }
+
+ Kind getKind() const { return TheKind; }
+
+ /// Does this ABI generally fall into the Itanium family of ABIs?
+ bool isItaniumFamily() const {
+ switch (getKind()) {
+ case GenericAArch64:
+ case GenericItanium:
+ case GenericARM:
+ case iOS:
+ case iOS64:
+ case WatchOS:
+ case GenericMIPS:
+ case WebAssembly:
+ return true;
+
+ case Microsoft:
+ return false;
+ }
+ llvm_unreachable("bad ABI kind");
+ }
+
+ /// Is this ABI an MSVC-compatible ABI?
+ bool isMicrosoft() const {
+ switch (getKind()) {
+ case GenericAArch64:
+ case GenericItanium:
+ case GenericARM:
+ case iOS:
+ case iOS64:
+ case WatchOS:
+ case GenericMIPS:
+ case WebAssembly:
+ return false;
+
+ case Microsoft:
+ return true;
+ }
+ llvm_unreachable("bad ABI kind");
+ }
+
+ /// Are member functions differently aligned?
+ ///
+ /// Many Itanium-style C++ ABIs require member functions to be aligned, so
+ /// that a pointer to such a function is guaranteed to have a zero in the
+ /// least significant bit, so that pointers to member functions can use that
+ /// bit to distinguish between virtual and non-virtual functions. However,
+ /// some Itanium-style C++ ABIs differentiate between virtual and non-virtual
+ /// functions via other means, and consequently don't require that member
+ /// functions be aligned.
+ bool areMemberFunctionsAligned() const {
+ switch (getKind()) {
+ case WebAssembly:
+ // WebAssembly doesn't require any special alignment for member functions.
+ return false;
+ case GenericARM:
+ case GenericAArch64:
+ case GenericMIPS:
+ // TODO: ARM-style pointers to member functions put the discriminator in
+ // the this adjustment, so they don't require functions to have any
+ // special alignment and could therefore also return false.
+ case GenericItanium:
+ case iOS:
+ case iOS64:
+ case WatchOS:
+ case Microsoft:
+ return true;
+ }
+ llvm_unreachable("bad ABI kind");
+ }
+
+ /// Are arguments to a call destroyed left to right in the callee?
+ /// This is a fundamental language change, since it implies that objects
+ /// passed by value do *not* live to the end of the full expression.
+ /// Temporaries passed to a function taking a const reference live to the end
+ /// of the full expression as usual. Both the caller and the callee must
+ /// have access to the destructor, while only the caller needs the
+ /// destructor if this is false.
+ bool areArgsDestroyedLeftToRightInCallee() const {
+ return isMicrosoft();
+ }
+
+ /// Does this ABI have different entrypoints for complete-object
+ /// and base-subobject constructors?
+ bool hasConstructorVariants() const {
+ return isItaniumFamily();
+ }
+
+ /// Does this ABI allow virtual bases to be primary base classes?
+ bool hasPrimaryVBases() const {
+ return isItaniumFamily();
+ }
+
+ /// Does this ABI use key functions? If so, class data such as the
+ /// vtable is emitted with strong linkage by the TU containing the key
+ /// function.
+ bool hasKeyFunctions() const {
+ return isItaniumFamily();
+ }
+
+ /// Can an out-of-line inline function serve as a key function?
+ ///
+ /// This flag is only useful in ABIs where type data (for example,
+ /// vtables and type_info objects) are emitted only after processing
+ /// the definition of a special "key" virtual function. (This is safe
+ /// because the ODR requires that every virtual function be defined
+ /// somewhere in a program.) This usually permits such data to be
+ /// emitted in only a single object file, as opposed to redundantly
+ /// in every object file that requires it.
+ ///
+ /// One simple and common definition of "key function" is the first
+ /// virtual function in the class definition which is not defined there.
+ /// This rule works very well when that function has a non-inline
+ /// definition in some non-header file. Unfortunately, when that
+ /// function is defined inline, this rule requires the type data
+ /// to be emitted weakly, as if there were no key function.
+ ///
+ /// The ARM ABI observes that the ODR provides an additional guarantee:
+ /// a virtual function is always ODR-used, so if it is defined inline,
+ /// that definition must appear in every translation unit that defines
+ /// the class. Therefore, there is no reason to allow such functions
+ /// to serve as key functions.
+ ///
+ /// Because this changes the rules for emitting type data,
+ /// it can cause type data to be emitted with both weak and strong
+ /// linkage, which is not allowed on all platforms. Therefore,
+ /// exploiting this observation requires an ABI break and cannot be
+ /// done on a generic Itanium platform.
+ bool canKeyFunctionBeInline() const {
+ switch (getKind()) {
+ case GenericARM:
+ case iOS64:
+ case WebAssembly:
+ case WatchOS:
+ return false;
+
+ case GenericAArch64:
+ case GenericItanium:
+ case iOS: // old iOS compilers did not follow this rule
+ case Microsoft:
+ case GenericMIPS:
+ return true;
+ }
+ llvm_unreachable("bad ABI kind");
+ }
+
+ /// When is record layout allowed to allocate objects in the tail
+ /// padding of a base class?
+ ///
+ /// This decision cannot be changed without breaking platform ABI
+ /// compatibility, and yet it is tied to language guarantees which
+ /// the committee has so far seen fit to strengthen no less than
+ /// three separate times:
+ /// - originally, there were no restrictions at all;
+ /// - C++98 declared that objects could not be allocated in the
+ /// tail padding of a POD type;
+ /// - C++03 extended the definition of POD to include classes
+ /// containing member pointers; and
+ /// - C++11 greatly broadened the definition of POD to include
+ /// all trivial standard-layout classes.
+ /// Each of these changes technically took several existing
+ /// platforms and made them permanently non-conformant.
+ enum TailPaddingUseRules {
+ /// The tail-padding of a base class is always theoretically
+ /// available, even if it's POD. This is not strictly conforming
+ /// in any language mode.
+ AlwaysUseTailPadding,
+
+ /// Only allocate objects in the tail padding of a base class if
+ /// the base class is not POD according to the rules of C++ TR1.
+ /// This is non-strictly conforming in C++11 mode.
+ UseTailPaddingUnlessPOD03,
+
+ /// Only allocate objects in the tail padding of a base class if
+ /// the base class is not POD according to the rules of C++11.
+ UseTailPaddingUnlessPOD11
+ };
+ TailPaddingUseRules getTailPaddingUseRules() const {
+ switch (getKind()) {
+ // To preserve binary compatibility, the generic Itanium ABI has
+ // permanently locked the definition of POD to the rules of C++ TR1,
+ // and that trickles down to derived ABIs.
+ case GenericItanium:
+ case GenericAArch64:
+ case GenericARM:
+ case iOS:
+ case GenericMIPS:
+ return UseTailPaddingUnlessPOD03;
+
+ // iOS on ARM64 and WebAssembly use the C++11 POD rules. They do not honor
+ // the Itanium exception about classes with over-large bitfields.
+ case iOS64:
+ case WebAssembly:
+ case WatchOS:
+ return UseTailPaddingUnlessPOD11;
+
+ // MSVC always allocates fields in the tail-padding of a base class
+ // subobject, even if they're POD.
+ case Microsoft:
+ return AlwaysUseTailPadding;
+ }
+ llvm_unreachable("bad ABI kind");
+ }
+
+ friend bool operator==(const TargetCXXABI &left, const TargetCXXABI &right) {
+ return left.getKind() == right.getKind();
+ }
+
+ friend bool operator!=(const TargetCXXABI &left, const TargetCXXABI &right) {
+ return !(left == right);
+ }
+};
+
+} // end namespace clang
+
+#endif
diff --git a/clang-r353983/include/clang/Basic/TargetInfo.h b/clang-r353983/include/clang/Basic/TargetInfo.h
new file mode 100644
index 00000000..7a3dc3f6
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/TargetInfo.h
@@ -0,0 +1,1376 @@
+//===--- TargetInfo.h - Expose information about the target -----*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Defines the clang::TargetInfo interface.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_TARGETINFO_H
+#define LLVM_CLANG_BASIC_TARGETINFO_H
+
+#include "clang/Basic/AddressSpaces.h"
+#include "clang/Basic/LLVM.h"
+#include "clang/Basic/Specifiers.h"
+#include "clang/Basic/TargetCXXABI.h"
+#include "clang/Basic/TargetOptions.h"
+#include "llvm/ADT/APInt.h"
+#include "llvm/ADT/IntrusiveRefCntPtr.h"
+#include "llvm/ADT/Optional.h"
+#include "llvm/ADT/SmallSet.h"
+#include "llvm/ADT/StringMap.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/ADT/Triple.h"
+#include "llvm/IR/DataLayout.h"
+#include "llvm/Support/DataTypes.h"
+#include "llvm/Support/VersionTuple.h"
+#include <cassert>
+#include <string>
+#include <vector>
+
+namespace llvm {
+struct fltSemantics;
+}
+
+namespace clang {
+class DiagnosticsEngine;
+class LangOptions;
+class CodeGenOptions;
+class MacroBuilder;
+class QualType;
+class SourceLocation;
+class SourceManager;
+
+namespace Builtin { struct Info; }
+
+/// Fields controlling how types are laid out in memory; these may need to
+/// be copied for targets like AMDGPU that base their ABIs on an auxiliary
+/// CPU target.
+struct TransferrableTargetInfo {
+ unsigned char PointerWidth, PointerAlign;
+ unsigned char BoolWidth, BoolAlign;
+ unsigned char IntWidth, IntAlign;
+ unsigned char HalfWidth, HalfAlign;
+ unsigned char FloatWidth, FloatAlign;
+ unsigned char DoubleWidth, DoubleAlign;
+ unsigned char LongDoubleWidth, LongDoubleAlign, Float128Align;
+ unsigned char LargeArrayMinWidth, LargeArrayAlign;
+ unsigned char LongWidth, LongAlign;
+ unsigned char LongLongWidth, LongLongAlign;
+
+ // Fixed point bit widths
+ unsigned char ShortAccumWidth, ShortAccumAlign;
+ unsigned char AccumWidth, AccumAlign;
+ unsigned char LongAccumWidth, LongAccumAlign;
+ unsigned char ShortFractWidth, ShortFractAlign;
+ unsigned char FractWidth, FractAlign;
+ unsigned char LongFractWidth, LongFractAlign;
+
+ // If true, unsigned fixed point types have the same number of fractional bits
+ // as their signed counterparts, forcing the unsigned types to have one extra
+ // bit of padding. Otherwise, unsigned fixed point types have
+ // one more fractional bit than its corresponding signed type. This is false
+ // by default.
+ bool PaddingOnUnsignedFixedPoint;
+
+ // Fixed point integral and fractional bit sizes
+ // Saturated types share the same integral/fractional bits as their
+ // corresponding unsaturated types.
+ // For simplicity, the fractional bits in a _Fract type will be one less the
+ // width of that _Fract type. This leaves all signed _Fract types having no
+ // padding and unsigned _Fract types will only have 1 bit of padding after the
+ // sign if PaddingOnUnsignedFixedPoint is set.
+ unsigned char ShortAccumScale;
+ unsigned char AccumScale;
+ unsigned char LongAccumScale;
+
+ unsigned char SuitableAlign;
+ unsigned char DefaultAlignForAttributeAligned;
+ unsigned char MinGlobalAlign;
+
+ unsigned short NewAlign;
+ unsigned short MaxVectorAlign;
+ unsigned short MaxTLSAlign;
+
+ const llvm::fltSemantics *HalfFormat, *FloatFormat, *DoubleFormat,
+ *LongDoubleFormat, *Float128Format;
+
+ ///===---- Target Data Type Query Methods -------------------------------===//
+ enum IntType {
+ NoInt = 0,
+ SignedChar,
+ UnsignedChar,
+ SignedShort,
+ UnsignedShort,
+ SignedInt,
+ UnsignedInt,
+ SignedLong,
+ UnsignedLong,
+ SignedLongLong,
+ UnsignedLongLong
+ };
+
+ enum RealType {
+ NoFloat = 255,
+ Float = 0,
+ Double,
+ LongDouble,
+ Float128
+ };
+protected:
+ IntType SizeType, IntMaxType, PtrDiffType, IntPtrType, WCharType,
+ WIntType, Char16Type, Char32Type, Int64Type, SigAtomicType,
+ ProcessIDType;
+
+ /// Whether Objective-C's built-in boolean type should be signed char.
+ ///
+ /// Otherwise, when this flag is not set, the normal built-in boolean type is
+ /// used.
+ unsigned UseSignedCharForObjCBool : 1;
+
+ /// Control whether the alignment of bit-field types is respected when laying
+ /// out structures. If true, then the alignment of the bit-field type will be
+ /// used to (a) impact the alignment of the containing structure, and (b)
+ /// ensure that the individual bit-field will not straddle an alignment
+ /// boundary.
+ unsigned UseBitFieldTypeAlignment : 1;
+
+ /// Whether zero length bitfields (e.g., int : 0;) force alignment of
+ /// the next bitfield.
+ ///
+ /// If the alignment of the zero length bitfield is greater than the member
+ /// that follows it, `bar', `bar' will be aligned as the type of the
+ /// zero-length bitfield.
+ unsigned UseZeroLengthBitfieldAlignment : 1;
+
+ /// Whether explicit bit field alignment attributes are honored.
+ unsigned UseExplicitBitFieldAlignment : 1;
+
+ /// If non-zero, specifies a fixed alignment value for bitfields that follow
+ /// zero length bitfield, regardless of the zero length bitfield type.
+ unsigned ZeroLengthBitfieldBoundary;
+};
+
+/// Exposes information about the current target.
+///
+class TargetInfo : public virtual TransferrableTargetInfo,
+ public RefCountedBase<TargetInfo> {
+ std::shared_ptr<TargetOptions> TargetOpts;
+ llvm::Triple Triple;
+protected:
+ // Target values set by the ctor of the actual target implementation. Default
+ // values are specified by the TargetInfo constructor.
+ bool BigEndian;
+ bool TLSSupported;
+ bool VLASupported;
+ bool NoAsmVariants; // True if {|} are normal characters.
+ bool HasLegalHalfType; // True if the backend supports operations on the half
+ // LLVM IR type.
+ bool HasFloat128;
+ bool HasFloat16;
+
+ unsigned char MaxAtomicPromoteWidth, MaxAtomicInlineWidth;
+ unsigned short SimdDefaultAlign;
+ std::unique_ptr<llvm::DataLayout> DataLayout;
+ const char *MCountName;
+ unsigned char RegParmMax, SSERegParmMax;
+ TargetCXXABI TheCXXABI;
+ const LangASMap *AddrSpaceMap;
+
+ mutable StringRef PlatformName;
+ mutable VersionTuple PlatformMinVersion;
+
+ unsigned HasAlignMac68kSupport : 1;
+ unsigned RealTypeUsesObjCFPRet : 3;
+ unsigned ComplexLongDoubleUsesFP2Ret : 1;
+
+ unsigned HasBuiltinMSVaList : 1;
+
+ unsigned IsRenderScriptTarget : 1;
+
+ // TargetInfo Constructor. Default initializes all fields.
+ TargetInfo(const llvm::Triple &T);
+
+ void resetDataLayout(StringRef DL) {
+ DataLayout.reset(new llvm::DataLayout(DL));
+ }
+
+public:
+ /// Construct a target for the given options.
+ ///
+ /// \param Opts - The options to use to initialize the target. The target may
+ /// modify the options to canonicalize the target feature information to match
+ /// what the backend expects.
+ static TargetInfo *
+ CreateTargetInfo(DiagnosticsEngine &Diags,
+ const std::shared_ptr<TargetOptions> &Opts);
+
+ virtual ~TargetInfo();
+
+ /// Retrieve the target options.
+ TargetOptions &getTargetOpts() const {
+ assert(TargetOpts && "Missing target options");
+ return *TargetOpts;
+ }
+
+ /// The different kinds of __builtin_va_list types defined by
+ /// the target implementation.
+ enum BuiltinVaListKind {
+ /// typedef char* __builtin_va_list;
+ CharPtrBuiltinVaList = 0,
+
+ /// typedef void* __builtin_va_list;
+ VoidPtrBuiltinVaList,
+
+ /// __builtin_va_list as defined by the AArch64 ABI
+ /// http://infocenter.arm.com/help/topic/com.arm.doc.ihi0055a/IHI0055A_aapcs64.pdf
+ AArch64ABIBuiltinVaList,
+
+ /// __builtin_va_list as defined by the PNaCl ABI:
+ /// http://www.chromium.org/nativeclient/pnacl/bitcode-abi#TOC-Machine-Types
+ PNaClABIBuiltinVaList,
+
+ /// __builtin_va_list as defined by the Power ABI:
+ /// https://www.power.org
+ /// /resources/downloads/Power-Arch-32-bit-ABI-supp-1.0-Embedded.pdf
+ PowerABIBuiltinVaList,
+
+ /// __builtin_va_list as defined by the x86-64 ABI:
+ /// http://refspecs.linuxbase.org/elf/x86_64-abi-0.21.pdf
+ X86_64ABIBuiltinVaList,
+
+ /// __builtin_va_list as defined by ARM AAPCS ABI
+ /// http://infocenter.arm.com
+ // /help/topic/com.arm.doc.ihi0042d/IHI0042D_aapcs.pdf
+ AAPCSABIBuiltinVaList,
+
+ // typedef struct __va_list_tag
+ // {
+ // long __gpr;
+ // long __fpr;
+ // void *__overflow_arg_area;
+ // void *__reg_save_area;
+ // } va_list[1];
+ SystemZBuiltinVaList
+ };
+
+protected:
+ /// Specify if mangling based on address space map should be used or
+ /// not for language specific address spaces
+ bool UseAddrSpaceMapMangling;
+
+public:
+ IntType getSizeType() const { return SizeType; }
+ IntType getSignedSizeType() const {
+ switch (SizeType) {
+ case UnsignedShort:
+ return SignedShort;
+ case UnsignedInt:
+ return SignedInt;
+ case UnsignedLong:
+ return SignedLong;
+ case UnsignedLongLong:
+ return SignedLongLong;
+ default:
+ llvm_unreachable("Invalid SizeType");
+ }
+ }
+ IntType getIntMaxType() const { return IntMaxType; }
+ IntType getUIntMaxType() const {
+ return getCorrespondingUnsignedType(IntMaxType);
+ }
+ IntType getPtrDiffType(unsigned AddrSpace) const {
+ return AddrSpace == 0 ? PtrDiffType : getPtrDiffTypeV(AddrSpace);
+ }
+ IntType getUnsignedPtrDiffType(unsigned AddrSpace) const {
+ return getCorrespondingUnsignedType(getPtrDiffType(AddrSpace));
+ }
+ IntType getIntPtrType() const { return IntPtrType; }
+ IntType getUIntPtrType() const {
+ return getCorrespondingUnsignedType(IntPtrType);
+ }
+ IntType getWCharType() const { return WCharType; }
+ IntType getWIntType() const { return WIntType; }
+ IntType getChar16Type() const { return Char16Type; }
+ IntType getChar32Type() const { return Char32Type; }
+ IntType getInt64Type() const { return Int64Type; }
+ IntType getUInt64Type() const {
+ return getCorrespondingUnsignedType(Int64Type);
+ }
+ IntType getSigAtomicType() const { return SigAtomicType; }
+ IntType getProcessIDType() const { return ProcessIDType; }
+
+ static IntType getCorrespondingUnsignedType(IntType T) {
+ switch (T) {
+ case SignedChar:
+ return UnsignedChar;
+ case SignedShort:
+ return UnsignedShort;
+ case SignedInt:
+ return UnsignedInt;
+ case SignedLong:
+ return UnsignedLong;
+ case SignedLongLong:
+ return UnsignedLongLong;
+ default:
+ llvm_unreachable("Unexpected signed integer type");
+ }
+ }
+
+ /// In the event this target uses the same number of fractional bits for its
+ /// unsigned types as it does with its signed counterparts, there will be
+ /// exactly one bit of padding.
+ /// Return true if unsigned fixed point types have padding for this target.
+ bool doUnsignedFixedPointTypesHavePadding() const {
+ return PaddingOnUnsignedFixedPoint;
+ }
+
+ /// Return the width (in bits) of the specified integer type enum.
+ ///
+ /// For example, SignedInt -> getIntWidth().
+ unsigned getTypeWidth(IntType T) const;
+
+ /// Return integer type with specified width.
+ virtual IntType getIntTypeByWidth(unsigned BitWidth, bool IsSigned) const;
+
+ /// Return the smallest integer type with at least the specified width.
+ virtual IntType getLeastIntTypeByWidth(unsigned BitWidth,
+ bool IsSigned) const;
+
+ /// Return floating point type with specified width.
+ RealType getRealTypeByWidth(unsigned BitWidth) const;
+
+ /// Return the alignment (in bits) of the specified integer type enum.
+ ///
+ /// For example, SignedInt -> getIntAlign().
+ unsigned getTypeAlign(IntType T) const;
+
+ /// Returns true if the type is signed; false otherwise.
+ static bool isTypeSigned(IntType T);
+
+ /// Return the width of pointers on this target, for the
+ /// specified address space.
+ uint64_t getPointerWidth(unsigned AddrSpace) const {
+ return AddrSpace == 0 ? PointerWidth : getPointerWidthV(AddrSpace);
+ }
+ uint64_t getPointerAlign(unsigned AddrSpace) const {
+ return AddrSpace == 0 ? PointerAlign : getPointerAlignV(AddrSpace);
+ }
+
+ /// Return the maximum width of pointers on this target.
+ virtual uint64_t getMaxPointerWidth() const {
+ return PointerWidth;
+ }
+
+ /// Get integer value for null pointer.
+ /// \param AddrSpace address space of pointee in source language.
+ virtual uint64_t getNullPointerValue(LangAS AddrSpace) const { return 0; }
+
+ /// Return the size of '_Bool' and C++ 'bool' for this target, in bits.
+ unsigned getBoolWidth() const { return BoolWidth; }
+
+ /// Return the alignment of '_Bool' and C++ 'bool' for this target.
+ unsigned getBoolAlign() const { return BoolAlign; }
+
+ unsigned getCharWidth() const { return 8; } // FIXME
+ unsigned getCharAlign() const { return 8; } // FIXME
+
+ /// Return the size of 'signed short' and 'unsigned short' for this
+ /// target, in bits.
+ unsigned getShortWidth() const { return 16; } // FIXME
+
+ /// Return the alignment of 'signed short' and 'unsigned short' for
+ /// this target.
+ unsigned getShortAlign() const { return 16; } // FIXME
+
+ /// getIntWidth/Align - Return the size of 'signed int' and 'unsigned int' for
+ /// this target, in bits.
+ unsigned getIntWidth() const { return IntWidth; }
+ unsigned getIntAlign() const { return IntAlign; }
+
+ /// getLongWidth/Align - Return the size of 'signed long' and 'unsigned long'
+ /// for this target, in bits.
+ unsigned getLongWidth() const { return LongWidth; }
+ unsigned getLongAlign() const { return LongAlign; }
+
+ /// getLongLongWidth/Align - Return the size of 'signed long long' and
+ /// 'unsigned long long' for this target, in bits.
+ unsigned getLongLongWidth() const { return LongLongWidth; }
+ unsigned getLongLongAlign() const { return LongLongAlign; }
+
+ /// getShortAccumWidth/Align - Return the size of 'signed short _Accum' and
+ /// 'unsigned short _Accum' for this target, in bits.
+ unsigned getShortAccumWidth() const { return ShortAccumWidth; }
+ unsigned getShortAccumAlign() const { return ShortAccumAlign; }
+
+ /// getAccumWidth/Align - Return the size of 'signed _Accum' and
+ /// 'unsigned _Accum' for this target, in bits.
+ unsigned getAccumWidth() const { return AccumWidth; }
+ unsigned getAccumAlign() const { return AccumAlign; }
+
+ /// getLongAccumWidth/Align - Return the size of 'signed long _Accum' and
+ /// 'unsigned long _Accum' for this target, in bits.
+ unsigned getLongAccumWidth() const { return LongAccumWidth; }
+ unsigned getLongAccumAlign() const { return LongAccumAlign; }
+
+ /// getShortFractWidth/Align - Return the size of 'signed short _Fract' and
+ /// 'unsigned short _Fract' for this target, in bits.
+ unsigned getShortFractWidth() const { return ShortFractWidth; }
+ unsigned getShortFractAlign() const { return ShortFractAlign; }
+
+ /// getFractWidth/Align - Return the size of 'signed _Fract' and
+ /// 'unsigned _Fract' for this target, in bits.
+ unsigned getFractWidth() const { return FractWidth; }
+ unsigned getFractAlign() const { return FractAlign; }
+
+ /// getLongFractWidth/Align - Return the size of 'signed long _Fract' and
+ /// 'unsigned long _Fract' for this target, in bits.
+ unsigned getLongFractWidth() const { return LongFractWidth; }
+ unsigned getLongFractAlign() const { return LongFractAlign; }
+
+ /// getShortAccumScale/IBits - Return the number of fractional/integral bits
+ /// in a 'signed short _Accum' type.
+ unsigned getShortAccumScale() const { return ShortAccumScale; }
+ unsigned getShortAccumIBits() const {
+ return ShortAccumWidth - ShortAccumScale - 1;
+ }
+
+ /// getAccumScale/IBits - Return the number of fractional/integral bits
+ /// in a 'signed _Accum' type.
+ unsigned getAccumScale() const { return AccumScale; }
+ unsigned getAccumIBits() const { return AccumWidth - AccumScale - 1; }
+
+ /// getLongAccumScale/IBits - Return the number of fractional/integral bits
+ /// in a 'signed long _Accum' type.
+ unsigned getLongAccumScale() const { return LongAccumScale; }
+ unsigned getLongAccumIBits() const {
+ return LongAccumWidth - LongAccumScale - 1;
+ }
+
+ /// getUnsignedShortAccumScale/IBits - Return the number of
+ /// fractional/integral bits in a 'unsigned short _Accum' type.
+ unsigned getUnsignedShortAccumScale() const {
+ return PaddingOnUnsignedFixedPoint ? ShortAccumScale : ShortAccumScale + 1;
+ }
+ unsigned getUnsignedShortAccumIBits() const {
+ return PaddingOnUnsignedFixedPoint
+ ? getShortAccumIBits()
+ : ShortAccumWidth - getUnsignedShortAccumScale();
+ }
+
+ /// getUnsignedAccumScale/IBits - Return the number of fractional/integral
+ /// bits in a 'unsigned _Accum' type.
+ unsigned getUnsignedAccumScale() const {
+ return PaddingOnUnsignedFixedPoint ? AccumScale : AccumScale + 1;
+ }
+ unsigned getUnsignedAccumIBits() const {
+ return PaddingOnUnsignedFixedPoint ? getAccumIBits()
+ : AccumWidth - getUnsignedAccumScale();
+ }
+
+ /// getUnsignedLongAccumScale/IBits - Return the number of fractional/integral
+ /// bits in a 'unsigned long _Accum' type.
+ unsigned getUnsignedLongAccumScale() const {
+ return PaddingOnUnsignedFixedPoint ? LongAccumScale : LongAccumScale + 1;
+ }
+ unsigned getUnsignedLongAccumIBits() const {
+ return PaddingOnUnsignedFixedPoint
+ ? getLongAccumIBits()
+ : LongAccumWidth - getUnsignedLongAccumScale();
+ }
+
+ /// getShortFractScale - Return the number of fractional bits
+ /// in a 'signed short _Fract' type.
+ unsigned getShortFractScale() const { return ShortFractWidth - 1; }
+
+ /// getFractScale - Return the number of fractional bits
+ /// in a 'signed _Fract' type.
+ unsigned getFractScale() const { return FractWidth - 1; }
+
+ /// getLongFractScale - Return the number of fractional bits
+ /// in a 'signed long _Fract' type.
+ unsigned getLongFractScale() const { return LongFractWidth - 1; }
+
+ /// getUnsignedShortFractScale - Return the number of fractional bits
+ /// in a 'unsigned short _Fract' type.
+ unsigned getUnsignedShortFractScale() const {
+ return PaddingOnUnsignedFixedPoint ? getShortFractScale()
+ : getShortFractScale() + 1;
+ }
+
+ /// getUnsignedFractScale - Return the number of fractional bits
+ /// in a 'unsigned _Fract' type.
+ unsigned getUnsignedFractScale() const {
+ return PaddingOnUnsignedFixedPoint ? getFractScale() : getFractScale() + 1;
+ }
+
+ /// getUnsignedLongFractScale - Return the number of fractional bits
+ /// in a 'unsigned long _Fract' type.
+ unsigned getUnsignedLongFractScale() const {
+ return PaddingOnUnsignedFixedPoint ? getLongFractScale()
+ : getLongFractScale() + 1;
+ }
+
+ /// Determine whether the __int128 type is supported on this target.
+ virtual bool hasInt128Type() const {
+ return (getPointerWidth(0) >= 64) || getTargetOpts().ForceEnableInt128;
+ } // FIXME
+
+ /// Determine whether _Float16 is supported on this target.
+ virtual bool hasLegalHalfType() const { return HasLegalHalfType; }
+
+ /// Determine whether the __float128 type is supported on this target.
+ virtual bool hasFloat128Type() const { return HasFloat128; }
+
+ /// Determine whether the _Float16 type is supported on this target.
+ virtual bool hasFloat16Type() const { return HasFloat16; }
+
+ /// Return the alignment that is suitable for storing any
+ /// object with a fundamental alignment requirement.
+ unsigned getSuitableAlign() const { return SuitableAlign; }
+
+ /// Return the default alignment for __attribute__((aligned)) on
+ /// this target, to be used if no alignment value is specified.
+ unsigned getDefaultAlignForAttributeAligned() const {
+ return DefaultAlignForAttributeAligned;
+ }
+
+ /// getMinGlobalAlign - Return the minimum alignment of a global variable,
+ /// unless its alignment is explicitly reduced via attributes.
+ unsigned getMinGlobalAlign() const { return MinGlobalAlign; }
+
+ /// Return the largest alignment for which a suitably-sized allocation with
+ /// '::operator new(size_t)' is guaranteed to produce a correctly-aligned
+ /// pointer.
+ unsigned getNewAlign() const {
+ return NewAlign ? NewAlign : std::max(LongDoubleAlign, LongLongAlign);
+ }
+
+ /// getWCharWidth/Align - Return the size of 'wchar_t' for this target, in
+ /// bits.
+ unsigned getWCharWidth() const { return getTypeWidth(WCharType); }
+ unsigned getWCharAlign() const { return getTypeAlign(WCharType); }
+
+ /// getChar16Width/Align - Return the size of 'char16_t' for this target, in
+ /// bits.
+ unsigned getChar16Width() const { return getTypeWidth(Char16Type); }
+ unsigned getChar16Align() const { return getTypeAlign(Char16Type); }
+
+ /// getChar32Width/Align - Return the size of 'char32_t' for this target, in
+ /// bits.
+ unsigned getChar32Width() const { return getTypeWidth(Char32Type); }
+ unsigned getChar32Align() const { return getTypeAlign(Char32Type); }
+
+ /// getHalfWidth/Align/Format - Return the size/align/format of 'half'.
+ unsigned getHalfWidth() const { return HalfWidth; }
+ unsigned getHalfAlign() const { return HalfAlign; }
+ const llvm::fltSemantics &getHalfFormat() const { return *HalfFormat; }
+
+ /// getFloatWidth/Align/Format - Return the size/align/format of 'float'.
+ unsigned getFloatWidth() const { return FloatWidth; }
+ unsigned getFloatAlign() const { return FloatAlign; }
+ const llvm::fltSemantics &getFloatFormat() const { return *FloatFormat; }
+
+ /// getDoubleWidth/Align/Format - Return the size/align/format of 'double'.
+ unsigned getDoubleWidth() const { return DoubleWidth; }
+ unsigned getDoubleAlign() const { return DoubleAlign; }
+ const llvm::fltSemantics &getDoubleFormat() const { return *DoubleFormat; }
+
+ /// getLongDoubleWidth/Align/Format - Return the size/align/format of 'long
+ /// double'.
+ unsigned getLongDoubleWidth() const { return LongDoubleWidth; }
+ unsigned getLongDoubleAlign() const { return LongDoubleAlign; }
+ const llvm::fltSemantics &getLongDoubleFormat() const {
+ return *LongDoubleFormat;
+ }
+
+ /// getFloat128Width/Align/Format - Return the size/align/format of
+ /// '__float128'.
+ unsigned getFloat128Width() const { return 128; }
+ unsigned getFloat128Align() const { return Float128Align; }
+ const llvm::fltSemantics &getFloat128Format() const {
+ return *Float128Format;
+ }
+
+ /// Return true if the 'long double' type should be mangled like
+ /// __float128.
+ virtual bool useFloat128ManglingForLongDouble() const { return false; }
+
+ /// Return the value for the C99 FLT_EVAL_METHOD macro.
+ virtual unsigned getFloatEvalMethod() const { return 0; }
+
+ // getLargeArrayMinWidth/Align - Return the minimum array size that is
+ // 'large' and its alignment.
+ unsigned getLargeArrayMinWidth() const { return LargeArrayMinWidth; }
+ unsigned getLargeArrayAlign() const { return LargeArrayAlign; }
+
+ /// Return the maximum width lock-free atomic operation which will
+ /// ever be supported for the given target
+ unsigned getMaxAtomicPromoteWidth() const { return MaxAtomicPromoteWidth; }
+ /// Return the maximum width lock-free atomic operation which can be
+ /// inlined given the supported features of the given target.
+ unsigned getMaxAtomicInlineWidth() const { return MaxAtomicInlineWidth; }
+ /// Set the maximum inline or promote width lock-free atomic operation
+ /// for the given target.
+ virtual void setMaxAtomicWidth() {}
+ /// Returns true if the given target supports lock-free atomic
+ /// operations at the specified width and alignment.
+ virtual bool hasBuiltinAtomic(uint64_t AtomicSizeInBits,
+ uint64_t AlignmentInBits) const {
+ return AtomicSizeInBits <= AlignmentInBits &&
+ AtomicSizeInBits <= getMaxAtomicInlineWidth() &&
+ (AtomicSizeInBits <= getCharWidth() ||
+ llvm::isPowerOf2_64(AtomicSizeInBits / getCharWidth()));
+ }
+
+ /// Return the maximum vector alignment supported for the given target.
+ unsigned getMaxVectorAlign() const { return MaxVectorAlign; }
+ /// Return default simd alignment for the given target. Generally, this
+ /// value is type-specific, but this alignment can be used for most of the
+ /// types for the given target.
+ unsigned getSimdDefaultAlign() const { return SimdDefaultAlign; }
+
+ /// Return the size of intmax_t and uintmax_t for this target, in bits.
+ unsigned getIntMaxTWidth() const {
+ return getTypeWidth(IntMaxType);
+ }
+
+ // Return the size of unwind_word for this target.
+ virtual unsigned getUnwindWordWidth() const { return getPointerWidth(0); }
+
+ /// Return the "preferred" register width on this target.
+ virtual unsigned getRegisterWidth() const {
+ // Currently we assume the register width on the target matches the pointer
+ // width, we can introduce a new variable for this if/when some target wants
+ // it.
+ return PointerWidth;
+ }
+
+ /// Returns the name of the mcount instrumentation function.
+ const char *getMCountName() const {
+ return MCountName;
+ }
+
+ /// Check if the Objective-C built-in boolean type should be signed
+ /// char.
+ ///
+ /// Otherwise, if this returns false, the normal built-in boolean type
+ /// should also be used for Objective-C.
+ bool useSignedCharForObjCBool() const {
+ return UseSignedCharForObjCBool;
+ }
+ void noSignedCharForObjCBool() {
+ UseSignedCharForObjCBool = false;
+ }
+
+ /// Check whether the alignment of bit-field types is respected
+ /// when laying out structures.
+ bool useBitFieldTypeAlignment() const {
+ return UseBitFieldTypeAlignment;
+ }
+
+ /// Check whether zero length bitfields should force alignment of
+ /// the next member.
+ bool useZeroLengthBitfieldAlignment() const {
+ return UseZeroLengthBitfieldAlignment;
+ }
+
+ /// Get the fixed alignment value in bits for a member that follows
+ /// a zero length bitfield.
+ unsigned getZeroLengthBitfieldBoundary() const {
+ return ZeroLengthBitfieldBoundary;
+ }
+
+ /// Check whether explicit bitfield alignment attributes should be
+ // honored, as in "__attribute__((aligned(2))) int b : 1;".
+ bool useExplicitBitFieldAlignment() const {
+ return UseExplicitBitFieldAlignment;
+ }
+
+ /// Check whether this target support '\#pragma options align=mac68k'.
+ bool hasAlignMac68kSupport() const {
+ return HasAlignMac68kSupport;
+ }
+
+ /// Return the user string for the specified integer type enum.
+ ///
+ /// For example, SignedShort -> "short".
+ static const char *getTypeName(IntType T);
+
+ /// Return the constant suffix for the specified integer type enum.
+ ///
+ /// For example, SignedLong -> "L".
+ const char *getTypeConstantSuffix(IntType T) const;
+
+ /// Return the printf format modifier for the specified
+ /// integer type enum.
+ ///
+ /// For example, SignedLong -> "l".
+ static const char *getTypeFormatModifier(IntType T);
+
+ /// Check whether the given real type should use the "fpret" flavor of
+ /// Objective-C message passing on this target.
+ bool useObjCFPRetForRealType(RealType T) const {
+ return RealTypeUsesObjCFPRet & (1 << T);
+ }
+
+ /// Check whether _Complex long double should use the "fp2ret" flavor
+ /// of Objective-C message passing on this target.
+ bool useObjCFP2RetForComplexLongDouble() const {
+ return ComplexLongDoubleUsesFP2Ret;
+ }
+
+ /// Check whether llvm intrinsics such as llvm.convert.to.fp16 should be used
+ /// to convert to and from __fp16.
+ /// FIXME: This function should be removed once all targets stop using the
+ /// conversion intrinsics.
+ virtual bool useFP16ConversionIntrinsics() const {
+ return true;
+ }
+
+ /// Specify if mangling based on address space map should be used or
+ /// not for language specific address spaces
+ bool useAddressSpaceMapMangling() const {
+ return UseAddrSpaceMapMangling;
+ }
+
+ ///===---- Other target property query methods --------------------------===//
+
+ /// Appends the target-specific \#define values for this
+ /// target set to the specified buffer.
+ virtual void getTargetDefines(const LangOptions &Opts,
+ MacroBuilder &Builder) const = 0;
+
+
+ /// Return information about target-specific builtins for
+ /// the current primary target, and info about which builtins are non-portable
+ /// across the current set of primary and secondary targets.
+ virtual ArrayRef<Builtin::Info> getTargetBuiltins() const = 0;
+
+ /// The __builtin_clz* and __builtin_ctz* built-in
+ /// functions are specified to have undefined results for zero inputs, but
+ /// on targets that support these operations in a way that provides
+ /// well-defined results for zero without loss of performance, it is a good
+ /// idea to avoid optimizing based on that undef behavior.
+ virtual bool isCLZForZeroUndef() const { return true; }
+
+ /// Returns the kind of __builtin_va_list type that should be used
+ /// with this target.
+ virtual BuiltinVaListKind getBuiltinVaListKind() const = 0;
+
+ /// Returns whether or not type \c __builtin_ms_va_list type is
+ /// available on this target.
+ bool hasBuiltinMSVaList() const { return HasBuiltinMSVaList; }
+
+ /// Returns true for RenderScript.
+ bool isRenderScriptTarget() const { return IsRenderScriptTarget; }
+
+ /// Returns whether the passed in string is a valid clobber in an
+ /// inline asm statement.
+ ///
+ /// This is used by Sema.
+ bool isValidClobber(StringRef Name) const;
+
+ /// Returns whether the passed in string is a valid register name
+ /// according to GCC.
+ ///
+ /// This is used by Sema for inline asm statements.
+ virtual bool isValidGCCRegisterName(StringRef Name) const;
+
+ /// Returns the "normalized" GCC register name.
+ ///
+ /// ReturnCannonical true will return the register name without any additions
+ /// such as "{}" or "%" in it's canonical form, for example:
+ /// ReturnCanonical = true and Name = "rax", will return "ax".
+ StringRef getNormalizedGCCRegisterName(StringRef Name,
+ bool ReturnCanonical = false) const;
+
+ /// Extracts a register from the passed constraint (if it is a
+ /// single-register constraint) and the asm label expression related to a
+ /// variable in the input or output list of an inline asm statement.
+ ///
+ /// This function is used by Sema in order to diagnose conflicts between
+ /// the clobber list and the input/output lists.
+ virtual StringRef getConstraintRegister(StringRef Constraint,
+ StringRef Expression) const {
+ return "";
+ }
+
+ struct ConstraintInfo {
+ enum {
+ CI_None = 0x00,
+ CI_AllowsMemory = 0x01,
+ CI_AllowsRegister = 0x02,
+ CI_ReadWrite = 0x04, // "+r" output constraint (read and write).
+ CI_HasMatchingInput = 0x08, // This output operand has a matching input.
+ CI_ImmediateConstant = 0x10, // This operand must be an immediate constant
+ CI_EarlyClobber = 0x20, // "&" output constraint (early clobber).
+ };
+ unsigned Flags;
+ int TiedOperand;
+ struct {
+ int Min;
+ int Max;
+ } ImmRange;
+ llvm::SmallSet<int, 4> ImmSet;
+
+ std::string ConstraintStr; // constraint: "=rm"
+ std::string Name; // Operand name: [foo] with no []'s.
+ public:
+ ConstraintInfo(StringRef ConstraintStr, StringRef Name)
+ : Flags(0), TiedOperand(-1), ConstraintStr(ConstraintStr.str()),
+ Name(Name.str()) {
+ ImmRange.Min = ImmRange.Max = 0;
+ }
+
+ const std::string &getConstraintStr() const { return ConstraintStr; }
+ const std::string &getName() const { return Name; }
+ bool isReadWrite() const { return (Flags & CI_ReadWrite) != 0; }
+ bool earlyClobber() { return (Flags & CI_EarlyClobber) != 0; }
+ bool allowsRegister() const { return (Flags & CI_AllowsRegister) != 0; }
+ bool allowsMemory() const { return (Flags & CI_AllowsMemory) != 0; }
+
+ /// Return true if this output operand has a matching
+ /// (tied) input operand.
+ bool hasMatchingInput() const { return (Flags & CI_HasMatchingInput) != 0; }
+
+ /// Return true if this input operand is a matching
+ /// constraint that ties it to an output operand.
+ ///
+ /// If this returns true then getTiedOperand will indicate which output
+ /// operand this is tied to.
+ bool hasTiedOperand() const { return TiedOperand != -1; }
+ unsigned getTiedOperand() const {
+ assert(hasTiedOperand() && "Has no tied operand!");
+ return (unsigned)TiedOperand;
+ }
+
+ bool requiresImmediateConstant() const {
+ return (Flags & CI_ImmediateConstant) != 0;
+ }
+ bool isValidAsmImmediate(const llvm::APInt &Value) const {
+ return (Value.sge(ImmRange.Min) && Value.sle(ImmRange.Max)) ||
+ ImmSet.count(Value.getZExtValue()) != 0;
+ }
+
+ void setIsReadWrite() { Flags |= CI_ReadWrite; }
+ void setEarlyClobber() { Flags |= CI_EarlyClobber; }
+ void setAllowsMemory() { Flags |= CI_AllowsMemory; }
+ void setAllowsRegister() { Flags |= CI_AllowsRegister; }
+ void setHasMatchingInput() { Flags |= CI_HasMatchingInput; }
+ void setRequiresImmediate(int Min, int Max) {
+ Flags |= CI_ImmediateConstant;
+ ImmRange.Min = Min;
+ ImmRange.Max = Max;
+ }
+ void setRequiresImmediate(llvm::ArrayRef<int> Exacts) {
+ Flags |= CI_ImmediateConstant;
+ for (int Exact : Exacts)
+ ImmSet.insert(Exact);
+ }
+ void setRequiresImmediate(int Exact) {
+ Flags |= CI_ImmediateConstant;
+ ImmSet.insert(Exact);
+ }
+ void setRequiresImmediate() {
+ Flags |= CI_ImmediateConstant;
+ ImmRange.Min = INT_MIN;
+ ImmRange.Max = INT_MAX;
+ }
+
+ /// Indicate that this is an input operand that is tied to
+ /// the specified output operand.
+ ///
+ /// Copy over the various constraint information from the output.
+ void setTiedOperand(unsigned N, ConstraintInfo &Output) {
+ Output.setHasMatchingInput();
+ Flags = Output.Flags;
+ TiedOperand = N;
+ // Don't copy Name or constraint string.
+ }
+ };
+
+ /// Validate register name used for global register variables.
+ ///
+ /// This function returns true if the register passed in RegName can be used
+ /// for global register variables on this target. In addition, it returns
+ /// true in HasSizeMismatch if the size of the register doesn't match the
+ /// variable size passed in RegSize.
+ virtual bool validateGlobalRegisterVariable(StringRef RegName,
+ unsigned RegSize,
+ bool &HasSizeMismatch) const {
+ HasSizeMismatch = false;
+ return true;
+ }
+
+ // validateOutputConstraint, validateInputConstraint - Checks that
+ // a constraint is valid and provides information about it.
+ // FIXME: These should return a real error instead of just true/false.
+ bool validateOutputConstraint(ConstraintInfo &Info) const;
+ bool validateInputConstraint(MutableArrayRef<ConstraintInfo> OutputConstraints,
+ ConstraintInfo &info) const;
+
+ virtual bool validateOutputSize(StringRef /*Constraint*/,
+ unsigned /*Size*/) const {
+ return true;
+ }
+
+ virtual bool validateInputSize(StringRef /*Constraint*/,
+ unsigned /*Size*/) const {
+ return true;
+ }
+ virtual bool
+ validateConstraintModifier(StringRef /*Constraint*/,
+ char /*Modifier*/,
+ unsigned /*Size*/,
+ std::string &/*SuggestedModifier*/) const {
+ return true;
+ }
+ virtual bool
+ validateAsmConstraint(const char *&Name,
+ TargetInfo::ConstraintInfo &info) const = 0;
+
+ bool resolveSymbolicName(const char *&Name,
+ ArrayRef<ConstraintInfo> OutputConstraints,
+ unsigned &Index) const;
+
+ // Constraint parm will be left pointing at the last character of
+ // the constraint. In practice, it won't be changed unless the
+ // constraint is longer than one character.
+ virtual std::string convertConstraint(const char *&Constraint) const {
+ // 'p' defaults to 'r', but can be overridden by targets.
+ if (*Constraint == 'p')
+ return std::string("r");
+ return std::string(1, *Constraint);
+ }
+
+ /// Returns a string of target-specific clobbers, in LLVM format.
+ virtual const char *getClobbers() const = 0;
+
+ /// Returns true if NaN encoding is IEEE 754-2008.
+ /// Only MIPS allows a different encoding.
+ virtual bool isNan2008() const {
+ return true;
+ }
+
+ /// Returns the target triple of the primary target.
+ const llvm::Triple &getTriple() const {
+ return Triple;
+ }
+
+ const llvm::DataLayout &getDataLayout() const {
+ assert(DataLayout && "Uninitialized DataLayout!");
+ return *DataLayout;
+ }
+
+ struct GCCRegAlias {
+ const char * const Aliases[5];
+ const char * const Register;
+ };
+
+ struct AddlRegName {
+ const char * const Names[5];
+ const unsigned RegNum;
+ };
+
+ /// Does this target support "protected" visibility?
+ ///
+ /// Any target which dynamic libraries will naturally support
+ /// something like "default" (meaning that the symbol is visible
+ /// outside this shared object) and "hidden" (meaning that it isn't)
+ /// visibilities, but "protected" is really an ELF-specific concept
+ /// with weird semantics designed around the convenience of dynamic
+ /// linker implementations. Which is not to suggest that there's
+ /// consistent target-independent semantics for "default" visibility
+ /// either; the entire thing is pretty badly mangled.
+ virtual bool hasProtectedVisibility() const { return true; }
+
+ /// An optional hook that targets can implement to perform semantic
+ /// checking on attribute((section("foo"))) specifiers.
+ ///
+ /// In this case, "foo" is passed in to be checked. If the section
+ /// specifier is invalid, the backend should return a non-empty string
+ /// that indicates the problem.
+ ///
+ /// This hook is a simple quality of implementation feature to catch errors
+ /// and give good diagnostics in cases when the assembler or code generator
+ /// would otherwise reject the section specifier.
+ ///
+ virtual std::string isValidSectionSpecifier(StringRef SR) const {
+ return "";
+ }
+
+ /// Set forced language options.
+ ///
+ /// Apply changes to the target information with respect to certain
+ /// language options which change the target configuration and adjust
+ /// the language based on the target options where applicable.
+ virtual void adjust(LangOptions &Opts);
+
+ /// Adjust target options based on codegen options.
+ virtual void adjustTargetOptions(const CodeGenOptions &CGOpts,
+ TargetOptions &TargetOpts) const {}
+
+ /// Initialize the map with the default set of target features for the
+ /// CPU this should include all legal feature strings on the target.
+ ///
+ /// \return False on error (invalid features).
+ virtual bool initFeatureMap(llvm::StringMap<bool> &Features,
+ DiagnosticsEngine &Diags, StringRef CPU,
+ const std::vector<std::string> &FeatureVec) const;
+
+ /// Get the ABI currently in use.
+ virtual StringRef getABI() const { return StringRef(); }
+
+ /// Get the C++ ABI currently in use.
+ TargetCXXABI getCXXABI() const {
+ return TheCXXABI;
+ }
+
+ /// Target the specified CPU.
+ ///
+ /// \return False on error (invalid CPU name).
+ virtual bool setCPU(const std::string &Name) {
+ return false;
+ }
+
+ /// Fill a SmallVectorImpl with the valid values to setCPU.
+ virtual void fillValidCPUList(SmallVectorImpl<StringRef> &Values) const {}
+
+ /// brief Determine whether this TargetInfo supports the given CPU name.
+ virtual bool isValidCPUName(StringRef Name) const {
+ return true;
+ }
+
+ /// Use the specified ABI.
+ ///
+ /// \return False on error (invalid ABI name).
+ virtual bool setABI(const std::string &Name) {
+ return false;
+ }
+
+ /// Use the specified unit for FP math.
+ ///
+ /// \return False on error (invalid unit name).
+ virtual bool setFPMath(StringRef Name) {
+ return false;
+ }
+
+ /// Enable or disable a specific target feature;
+ /// the feature name must be valid.
+ virtual void setFeatureEnabled(llvm::StringMap<bool> &Features,
+ StringRef Name,
+ bool Enabled) const {
+ Features[Name] = Enabled;
+ }
+
+ /// Determine whether this TargetInfo supports the given feature.
+ virtual bool isValidFeatureName(StringRef Feature) const {
+ return true;
+ }
+
+ /// Perform initialization based on the user configured
+ /// set of features (e.g., +sse4).
+ ///
+ /// The list is guaranteed to have at most one entry per feature.
+ ///
+ /// The target may modify the features list, to change which options are
+ /// passed onwards to the backend.
+ /// FIXME: This part should be fixed so that we can change handleTargetFeatures
+ /// to merely a TargetInfo initialization routine.
+ ///
+ /// \return False on error.
+ virtual bool handleTargetFeatures(std::vector<std::string> &Features,
+ DiagnosticsEngine &Diags) {
+ return true;
+ }
+
+ /// Determine whether the given target has the given feature.
+ virtual bool hasFeature(StringRef Feature) const {
+ return false;
+ }
+
+ /// Identify whether this target supports multiversioning of functions,
+ /// which requires support for cpu_supports and cpu_is functionality.
+ bool supportsMultiVersioning() const {
+ return getTriple().getArch() == llvm::Triple::x86 ||
+ getTriple().getArch() == llvm::Triple::x86_64;
+ }
+
+ /// Identify whether this target supports IFuncs.
+ bool supportsIFunc() const { return getTriple().isOSBinFormatELF(); }
+
+ // Validate the contents of the __builtin_cpu_supports(const char*)
+ // argument.
+ virtual bool validateCpuSupports(StringRef Name) const { return false; }
+
+ // Return the target-specific priority for features/cpus/vendors so
+ // that they can be properly sorted for checking.
+ virtual unsigned multiVersionSortPriority(StringRef Name) const {
+ return 0;
+ }
+
+ // Validate the contents of the __builtin_cpu_is(const char*)
+ // argument.
+ virtual bool validateCpuIs(StringRef Name) const { return false; }
+
+ // Validate a cpu_dispatch/cpu_specific CPU option, which is a different list
+ // from cpu_is, since it checks via features rather than CPUs directly.
+ virtual bool validateCPUSpecificCPUDispatch(StringRef Name) const {
+ return false;
+ }
+
+ // Get the character to be added for mangling purposes for cpu_specific.
+ virtual char CPUSpecificManglingCharacter(StringRef Name) const {
+ llvm_unreachable(
+ "cpu_specific Multiversioning not implemented on this target");
+ }
+
+ // Get a list of the features that make up the CPU option for
+ // cpu_specific/cpu_dispatch so that it can be passed to llvm as optimization
+ // options.
+ virtual void getCPUSpecificCPUDispatchFeatures(
+ StringRef Name, llvm::SmallVectorImpl<StringRef> &Features) const {
+ llvm_unreachable(
+ "cpu_specific Multiversioning not implemented on this target");
+ }
+
+ // Returns maximal number of args passed in registers.
+ unsigned getRegParmMax() const {
+ assert(RegParmMax < 7 && "RegParmMax value is larger than AST can handle");
+ return RegParmMax;
+ }
+
+ /// Whether the target supports thread-local storage.
+ bool isTLSSupported() const {
+ return TLSSupported;
+ }
+
+ /// Return the maximum alignment (in bits) of a TLS variable
+ ///
+ /// Gets the maximum alignment (in bits) of a TLS variable on this target.
+ /// Returns zero if there is no such constraint.
+ unsigned short getMaxTLSAlign() const {
+ return MaxTLSAlign;
+ }
+
+ /// Whether target supports variable-length arrays.
+ bool isVLASupported() const { return VLASupported; }
+
+ /// Whether the target supports SEH __try.
+ bool isSEHTrySupported() const {
+ return getTriple().isOSWindows() &&
+ (getTriple().getArch() == llvm::Triple::x86 ||
+ getTriple().getArch() == llvm::Triple::x86_64 ||
+ getTriple().getArch() == llvm::Triple::aarch64);
+ }
+
+ /// Return true if {|} are normal characters in the asm string.
+ ///
+ /// If this returns false (the default), then {abc|xyz} is syntax
+ /// that says that when compiling for asm variant #0, "abc" should be
+ /// generated, but when compiling for asm variant #1, "xyz" should be
+ /// generated.
+ bool hasNoAsmVariants() const {
+ return NoAsmVariants;
+ }
+
+ /// Return the register number that __builtin_eh_return_regno would
+ /// return with the specified argument.
+ /// This corresponds with TargetLowering's getExceptionPointerRegister
+ /// and getExceptionSelectorRegister in the backend.
+ virtual int getEHDataRegisterNumber(unsigned RegNo) const {
+ return -1;
+ }
+
+ /// Return the section to use for C++ static initialization functions.
+ virtual const char *getStaticInitSectionSpecifier() const {
+ return nullptr;
+ }
+
+ const LangASMap &getAddressSpaceMap() const { return *AddrSpaceMap; }
+
+ /// Map from the address space field in builtin description strings to the
+ /// language address space.
+ virtual LangAS getOpenCLBuiltinAddressSpace(unsigned AS) const {
+ return getLangASFromTargetAS(AS);
+ }
+
+ /// Map from the address space field in builtin description strings to the
+ /// language address space.
+ virtual LangAS getCUDABuiltinAddressSpace(unsigned AS) const {
+ return getLangASFromTargetAS(AS);
+ }
+
+ /// Return an AST address space which can be used opportunistically
+ /// for constant global memory. It must be possible to convert pointers into
+ /// this address space to LangAS::Default. If no such address space exists,
+ /// this may return None, and such optimizations will be disabled.
+ virtual llvm::Optional<LangAS> getConstantAddressSpace() const {
+ return LangAS::Default;
+ }
+
+ /// Retrieve the name of the platform as it is used in the
+ /// availability attribute.
+ StringRef getPlatformName() const { return PlatformName; }
+
+ /// Retrieve the minimum desired version of the platform, to
+ /// which the program should be compiled.
+ VersionTuple getPlatformMinVersion() const { return PlatformMinVersion; }
+
+ bool isBigEndian() const { return BigEndian; }
+ bool isLittleEndian() const { return !BigEndian; }
+
+ enum CallingConvMethodType {
+ CCMT_Unknown,
+ CCMT_Member,
+ CCMT_NonMember
+ };
+
+ /// Gets the default calling convention for the given target and
+ /// declaration context.
+ virtual CallingConv getDefaultCallingConv(CallingConvMethodType MT) const {
+ // Not all targets will specify an explicit calling convention that we can
+ // express. This will always do the right thing, even though it's not
+ // an explicit calling convention.
+ return CC_C;
+ }
+
+ enum CallingConvCheckResult {
+ CCCR_OK,
+ CCCR_Warning,
+ CCCR_Ignore,
+ };
+
+ /// Determines whether a given calling convention is valid for the
+ /// target. A calling convention can either be accepted, produce a warning
+ /// and be substituted with the default calling convention, or (someday)
+ /// produce an error (such as using thiscall on a non-instance function).
+ virtual CallingConvCheckResult checkCallingConvention(CallingConv CC) const {
+ switch (CC) {
+ default:
+ return CCCR_Warning;
+ case CC_C:
+ return CCCR_OK;
+ }
+ }
+
+ enum CallingConvKind {
+ CCK_Default,
+ CCK_ClangABI4OrPS4,
+ CCK_MicrosoftWin64
+ };
+
+ virtual CallingConvKind getCallingConvKind(bool ClangABICompat4) const;
+
+ /// Controls if __builtin_longjmp / __builtin_setjmp can be lowered to
+ /// llvm.eh.sjlj.longjmp / llvm.eh.sjlj.setjmp.
+ virtual bool hasSjLjLowering() const {
+ return false;
+ }
+
+ /// Check if the target supports CFProtection branch.
+ virtual bool
+ checkCFProtectionBranchSupported(DiagnosticsEngine &Diags) const;
+
+ /// Check if the target supports CFProtection branch.
+ virtual bool
+ checkCFProtectionReturnSupported(DiagnosticsEngine &Diags) const;
+
+ /// Whether target allows to overalign ABI-specified preferred alignment
+ virtual bool allowsLargerPreferedTypeAlignment() const { return true; }
+
+ /// Set supported OpenCL extensions and optional core features.
+ virtual void setSupportedOpenCLOpts() {}
+
+ /// Set supported OpenCL extensions as written on command line
+ virtual void setOpenCLExtensionOpts() {
+ for (const auto &Ext : getTargetOpts().OpenCLExtensionsAsWritten) {
+ getTargetOpts().SupportedOpenCLOptions.support(Ext);
+ }
+ }
+
+ /// Get supported OpenCL extensions and optional core features.
+ OpenCLOptions &getSupportedOpenCLOpts() {
+ return getTargetOpts().SupportedOpenCLOptions;
+ }
+
+ /// Get const supported OpenCL extensions and optional core features.
+ const OpenCLOptions &getSupportedOpenCLOpts() const {
+ return getTargetOpts().SupportedOpenCLOptions;
+ }
+
+ enum OpenCLTypeKind {
+ OCLTK_Default,
+ OCLTK_ClkEvent,
+ OCLTK_Event,
+ OCLTK_Image,
+ OCLTK_Pipe,
+ OCLTK_Queue,
+ OCLTK_ReserveID,
+ OCLTK_Sampler,
+ };
+
+ /// Get address space for OpenCL type.
+ virtual LangAS getOpenCLTypeAddrSpace(OpenCLTypeKind TK) const;
+
+ /// \returns Target specific vtbl ptr address space.
+ virtual unsigned getVtblPtrAddressSpace() const {
+ return 0;
+ }
+
+ /// \returns If a target requires an address within a target specific address
+ /// space \p AddressSpace to be converted in order to be used, then return the
+ /// corresponding target specific DWARF address space.
+ ///
+ /// \returns Otherwise return None and no conversion will be emitted in the
+ /// DWARF.
+ virtual Optional<unsigned> getDWARFAddressSpace(unsigned AddressSpace) const {
+ return None;
+ }
+
+ /// \returns The version of the SDK which was used during the compilation if
+ /// one was specified, or an empty version otherwise.
+ const llvm::VersionTuple &getSDKVersion() const {
+ return getTargetOpts().SDKVersion;
+ }
+
+ /// Check the target is valid after it is fully initialized.
+ virtual bool validateTarget(DiagnosticsEngine &Diags) const {
+ return true;
+ }
+
+ virtual void setAuxTarget(const TargetInfo *Aux) {}
+
+protected:
+ /// Copy type and layout related info.
+ void copyAuxTarget(const TargetInfo *Aux);
+ virtual uint64_t getPointerWidthV(unsigned AddrSpace) const {
+ return PointerWidth;
+ }
+ virtual uint64_t getPointerAlignV(unsigned AddrSpace) const {
+ return PointerAlign;
+ }
+ virtual enum IntType getPtrDiffTypeV(unsigned AddrSpace) const {
+ return PtrDiffType;
+ }
+ virtual ArrayRef<const char *> getGCCRegNames() const = 0;
+ virtual ArrayRef<GCCRegAlias> getGCCRegAliases() const = 0;
+ virtual ArrayRef<AddlRegName> getGCCAddlRegNames() const {
+ return None;
+ }
+
+ private:
+ // Assert the values for the fractional and integral bits for each fixed point
+ // type follow the restrictions given in clause 6.2.6.3 of N1169.
+ void CheckFixedPointBits() const;
+};
+
+} // end namespace clang
+
+#endif
diff --git a/clang-r353983/include/clang/Basic/TargetOptions.h b/clang-r353983/include/clang/Basic/TargetOptions.h
new file mode 100644
index 00000000..bbe86aeb
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/TargetOptions.h
@@ -0,0 +1,88 @@
+//===--- TargetOptions.h ----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Defines the clang::TargetOptions class.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_TARGETOPTIONS_H
+#define LLVM_CLANG_BASIC_TARGETOPTIONS_H
+
+#include "clang/Basic/OpenCLOptions.h"
+#include "llvm/Support/VersionTuple.h"
+#include "llvm/Target/TargetOptions.h"
+#include <string>
+#include <vector>
+
+namespace clang {
+
+/// Options for controlling the target.
+class TargetOptions {
+public:
+ /// The name of the target triple to compile for.
+ std::string Triple;
+
+ /// When compiling for the device side, contains the triple used to compile
+ /// for the host.
+ std::string HostTriple;
+
+ /// If given, the name of the target CPU to generate code for.
+ std::string CPU;
+
+ /// If given, the unit to use for floating point math.
+ std::string FPMath;
+
+ /// If given, the name of the target ABI to use.
+ std::string ABI;
+
+ /// The EABI version to use
+ llvm::EABI EABIVersion;
+
+ /// If given, the version string of the linker in use.
+ std::string LinkerVersion;
+
+ /// The list of target specific features to enable or disable, as written on the command line.
+ std::vector<std::string> FeaturesAsWritten;
+
+ /// The list of target specific features to enable or disable -- this should
+ /// be a list of strings starting with by '+' or '-'.
+ std::vector<std::string> Features;
+
+ /// Supported OpenCL extensions and optional core features.
+ OpenCLOptions SupportedOpenCLOptions;
+
+ /// The list of OpenCL extensions to enable or disable, as written on
+ /// the command line.
+ std::vector<std::string> OpenCLExtensionsAsWritten;
+
+ /// If given, enables support for __int128_t and __uint128_t types.
+ bool ForceEnableInt128 = false;
+
+ /// \brief If enabled, use 32-bit pointers for accessing const/local/shared
+ /// address space.
+ bool NVPTXUseShortPointers = false;
+
+ // The code model to be used as specified by the user. Corresponds to
+ // CodeModel::Model enum defined in include/llvm/Support/CodeGen.h, plus
+ // "default" for the case when the user has not explicitly specified a
+ // code model.
+ std::string CodeModel;
+
+ /// The version of the SDK which was used during the compilation.
+ /// The option is used for two different purposes:
+ /// * on darwin the version is propagated to LLVM where it's used
+ /// to support SDK Version metadata (See D55673).
+ /// * CUDA compilation uses it to control parts of CUDA compilation
+ /// in clang that depend on specific version of the CUDA SDK.
+ llvm::VersionTuple SDKVersion;
+};
+
+} // end namespace clang
+
+#endif
diff --git a/clang-r353983/include/clang/Basic/TemplateKinds.h b/clang-r353983/include/clang/Basic/TemplateKinds.h
new file mode 100644
index 00000000..cfed09f2
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/TemplateKinds.h
@@ -0,0 +1,51 @@
+//===--- TemplateKinds.h - Enum values for C++ Template Kinds ---*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Defines the clang::TemplateNameKind enum.
+///
+//===----------------------------------------------------------------------===//
+#ifndef LLVM_CLANG_BASIC_TEMPLATEKINDS_H
+#define LLVM_CLANG_BASIC_TEMPLATEKINDS_H
+
+namespace clang {
+
+/// Specifies the kind of template name that an identifier refers to.
+/// Be careful when changing this: this enumeration is used in diagnostics.
+enum TemplateNameKind {
+ /// The name does not refer to a template.
+ TNK_Non_template = 0,
+ /// The name refers to a function template or a set of overloaded
+ /// functions that includes at least one function template.
+ TNK_Function_template,
+ /// The name refers to a template whose specialization produces a
+ /// type. The template itself could be a class template, template
+ /// template parameter, or template alias.
+ TNK_Type_template,
+ /// The name refers to a variable template whose specialization produces a
+ /// variable.
+ TNK_Var_template,
+ /// The name refers to a dependent template name:
+ /// \code
+ /// template<typename MetaFun, typename T1, typename T2> struct apply2 {
+ /// typedef typename MetaFun::template apply<T1, T2>::type type;
+ /// };
+ /// \endcode
+ ///
+ /// Here, "apply" is a dependent template name within the typename
+ /// specifier in the typedef. "apply" is a nested template, and
+ /// whether the template name is assumed to refer to a type template or a
+ /// function template depends on the context in which the template
+ /// name occurs.
+ TNK_Dependent_template_name
+};
+
+}
+#endif
+
+
diff --git a/clang-r353983/include/clang/Basic/TokenKinds.def b/clang-r353983/include/clang/Basic/TokenKinds.def
new file mode 100644
index 00000000..2a41d109
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/TokenKinds.def
@@ -0,0 +1,840 @@
+//===--- TokenKinds.def - C Family Token Kind Database ----------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the TokenKind database. This includes normal tokens like
+// tok::ampamp (corresponding to the && token) as well as keywords for various
+// languages. Users of this file must optionally #define the TOK, KEYWORD,
+// CXX11_KEYWORD, CONCEPTS_KEYWORD, ALIAS, or PPKEYWORD macros to make use of
+// this file.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef TOK
+#define TOK(X)
+#endif
+#ifndef PUNCTUATOR
+#define PUNCTUATOR(X,Y) TOK(X)
+#endif
+#ifndef KEYWORD
+#define KEYWORD(X,Y) TOK(kw_ ## X)
+#endif
+#ifndef CXX11_KEYWORD
+#define CXX11_KEYWORD(X,Y) KEYWORD(X,KEYCXX11|(Y))
+#endif
+#ifndef CXX2A_KEYWORD
+#define CXX2A_KEYWORD(X,Y) KEYWORD(X,KEYCXX2A|(Y))
+#endif
+#ifndef CONCEPTS_KEYWORD
+#define CONCEPTS_KEYWORD(X) CXX2A_KEYWORD(X,KEYCONCEPTS)
+#endif
+#ifndef MODULES_KEYWORD
+#define MODULES_KEYWORD(X) KEYWORD(X,KEYMODULES)
+#endif
+#ifndef TYPE_TRAIT
+#define TYPE_TRAIT(N,I,K) KEYWORD(I,K)
+#endif
+#ifndef TYPE_TRAIT_1
+#define TYPE_TRAIT_1(I,E,K) TYPE_TRAIT(1,I,K)
+#endif
+#ifndef TYPE_TRAIT_2
+#define TYPE_TRAIT_2(I,E,K) TYPE_TRAIT(2,I,K)
+#endif
+#ifndef TYPE_TRAIT_N
+#define TYPE_TRAIT_N(I,E,K) TYPE_TRAIT(0,I,K)
+#endif
+#ifndef ALIAS
+#define ALIAS(X,Y,Z)
+#endif
+#ifndef PPKEYWORD
+#define PPKEYWORD(X)
+#endif
+#ifndef CXX_KEYWORD_OPERATOR
+#define CXX_KEYWORD_OPERATOR(X,Y)
+#endif
+#ifndef OBJC_AT_KEYWORD
+#define OBJC_AT_KEYWORD(X)
+#endif
+#ifndef TESTING_KEYWORD
+#define TESTING_KEYWORD(X, L) KEYWORD(X, L)
+#endif
+#ifndef ANNOTATION
+#define ANNOTATION(X) TOK(annot_ ## X)
+#endif
+
+//===----------------------------------------------------------------------===//
+// Preprocessor keywords.
+//===----------------------------------------------------------------------===//
+
+// These have meaning after a '#' at the start of a line. These define enums in
+// the tok::pp_* namespace. Note that IdentifierInfo::getPPKeywordID must be
+// manually updated if something is added here.
+PPKEYWORD(not_keyword)
+
+// C99 6.10.1 - Conditional Inclusion.
+PPKEYWORD(if)
+PPKEYWORD(ifdef)
+PPKEYWORD(ifndef)
+PPKEYWORD(elif)
+PPKEYWORD(else)
+PPKEYWORD(endif)
+PPKEYWORD(defined)
+
+// C99 6.10.2 - Source File Inclusion.
+PPKEYWORD(include)
+PPKEYWORD(__include_macros)
+
+// C99 6.10.3 - Macro Replacement.
+PPKEYWORD(define)
+PPKEYWORD(undef)
+
+// C99 6.10.4 - Line Control.
+PPKEYWORD(line)
+
+// C99 6.10.5 - Error Directive.
+PPKEYWORD(error)
+
+// C99 6.10.6 - Pragma Directive.
+PPKEYWORD(pragma)
+
+// GNU Extensions.
+PPKEYWORD(import)
+PPKEYWORD(include_next)
+PPKEYWORD(warning)
+PPKEYWORD(ident)
+PPKEYWORD(sccs)
+PPKEYWORD(assert)
+PPKEYWORD(unassert)
+
+// Clang extensions
+PPKEYWORD(__public_macro)
+PPKEYWORD(__private_macro)
+
+//===----------------------------------------------------------------------===//
+// Language keywords.
+//===----------------------------------------------------------------------===//
+
+// These define members of the tok::* namespace.
+
+TOK(unknown) // Not a token.
+TOK(eof) // End of file.
+TOK(eod) // End of preprocessing directive (end of line inside a
+ // directive).
+TOK(code_completion) // Code completion marker
+
+// C99 6.4.9: Comments.
+TOK(comment) // Comment (only in -E -C[C] mode)
+
+// C99 6.4.2: Identifiers.
+TOK(identifier) // abcde123
+TOK(raw_identifier) // Used only in raw lexing mode.
+
+// C99 6.4.4.1: Integer Constants
+// C99 6.4.4.2: Floating Constants
+TOK(numeric_constant) // 0x123
+
+// C99 6.4.4: Character Constants
+TOK(char_constant) // 'a'
+TOK(wide_char_constant) // L'b'
+
+// C++17 Character Constants
+TOK(utf8_char_constant) // u8'a'
+
+// C++11 Character Constants
+TOK(utf16_char_constant) // u'a'
+TOK(utf32_char_constant) // U'a'
+
+// C99 6.4.5: String Literals.
+TOK(string_literal) // "foo"
+TOK(wide_string_literal) // L"foo"
+TOK(angle_string_literal)// <foo>
+
+// C++11 String Literals.
+TOK(utf8_string_literal) // u8"foo"
+TOK(utf16_string_literal)// u"foo"
+TOK(utf32_string_literal)// U"foo"
+
+// C99 6.4.6: Punctuators.
+PUNCTUATOR(l_square, "[")
+PUNCTUATOR(r_square, "]")
+PUNCTUATOR(l_paren, "(")
+PUNCTUATOR(r_paren, ")")
+PUNCTUATOR(l_brace, "{")
+PUNCTUATOR(r_brace, "}")
+PUNCTUATOR(period, ".")
+PUNCTUATOR(ellipsis, "...")
+PUNCTUATOR(amp, "&")
+PUNCTUATOR(ampamp, "&&")
+PUNCTUATOR(ampequal, "&=")
+PUNCTUATOR(star, "*")
+PUNCTUATOR(starequal, "*=")
+PUNCTUATOR(plus, "+")
+PUNCTUATOR(plusplus, "++")
+PUNCTUATOR(plusequal, "+=")
+PUNCTUATOR(minus, "-")
+PUNCTUATOR(arrow, "->")
+PUNCTUATOR(minusminus, "--")
+PUNCTUATOR(minusequal, "-=")
+PUNCTUATOR(tilde, "~")
+PUNCTUATOR(exclaim, "!")
+PUNCTUATOR(exclaimequal, "!=")
+PUNCTUATOR(slash, "/")
+PUNCTUATOR(slashequal, "/=")
+PUNCTUATOR(percent, "%")
+PUNCTUATOR(percentequal, "%=")
+PUNCTUATOR(less, "<")
+PUNCTUATOR(lessless, "<<")
+PUNCTUATOR(lessequal, "<=")
+PUNCTUATOR(lesslessequal, "<<=")
+PUNCTUATOR(spaceship, "<=>")
+PUNCTUATOR(greater, ">")
+PUNCTUATOR(greatergreater, ">>")
+PUNCTUATOR(greaterequal, ">=")
+PUNCTUATOR(greatergreaterequal, ">>=")
+PUNCTUATOR(caret, "^")
+PUNCTUATOR(caretequal, "^=")
+PUNCTUATOR(pipe, "|")
+PUNCTUATOR(pipepipe, "||")
+PUNCTUATOR(pipeequal, "|=")
+PUNCTUATOR(question, "?")
+PUNCTUATOR(colon, ":")
+PUNCTUATOR(semi, ";")
+PUNCTUATOR(equal, "=")
+PUNCTUATOR(equalequal, "==")
+PUNCTUATOR(comma, ",")
+PUNCTUATOR(hash, "#")
+PUNCTUATOR(hashhash, "##")
+PUNCTUATOR(hashat, "#@")
+
+// C++ Support
+PUNCTUATOR(periodstar, ".*")
+PUNCTUATOR(arrowstar, "->*")
+PUNCTUATOR(coloncolon, "::")
+
+// Objective C support.
+PUNCTUATOR(at, "@")
+
+// CUDA support.
+PUNCTUATOR(lesslessless, "<<<")
+PUNCTUATOR(greatergreatergreater, ">>>")
+
+// CL support
+PUNCTUATOR(caretcaret, "^^")
+
+// C99 6.4.1: Keywords. These turn into kw_* tokens.
+// Flags allowed:
+// KEYALL - This is a keyword in all variants of C and C++, or it
+// is a keyword in the implementation namespace that should
+// always be treated as a keyword
+// KEYC99 - This is a keyword introduced to C in C99
+// KEYC11 - This is a keyword introduced to C in C11
+// KEYCXX - This is a C++ keyword, or a C++-specific keyword in the
+// implementation namespace
+// KEYNOCXX - This is a keyword in every non-C++ dialect.
+// KEYCXX11 - This is a C++ keyword introduced to C++ in C++11
+// KEYCXX2A - This is a C++ keyword introduced to C++ in C++2a
+// KEYCONCEPTS - This is a keyword if the C++ extensions for concepts
+// are enabled.
+// KEYMODULES - This is a keyword if the C++ extensions for modules
+// are enabled.
+// KEYGNU - This is a keyword if GNU extensions are enabled
+// KEYMS - This is a keyword if Microsoft extensions are enabled
+// KEYNOMS18 - This is a keyword that must never be enabled under
+// MSVC <= v18.
+// KEYOPENCLC - This is a keyword in OpenCL C
+// KEYOPENCLCXX - This is a keyword in OpenCL C++
+// KEYNOOPENCL - This is a keyword that is not supported in OpenCL C
+// nor in OpenCL C++.
+// KEYALTIVEC - This is a keyword in AltiVec
+// KEYZVECTOR - This is a keyword for the System z vector extensions,
+// which are heavily based on AltiVec
+// KEYBORLAND - This is a keyword if Borland extensions are enabled
+// KEYCOROUTINES - This is a keyword if support for the C++ coroutines
+// TS is enabled
+// BOOLSUPPORT - This is a keyword if 'bool' is a built-in type
+// HALFSUPPORT - This is a keyword if 'half' is a built-in type
+// WCHARSUPPORT - This is a keyword if 'wchar_t' is a built-in type
+// CHAR8SUPPORT - This is a keyword if 'char8_t' is a built-in type
+//
+KEYWORD(auto , KEYALL)
+KEYWORD(break , KEYALL)
+KEYWORD(case , KEYALL)
+KEYWORD(char , KEYALL)
+KEYWORD(const , KEYALL)
+KEYWORD(continue , KEYALL)
+KEYWORD(default , KEYALL)
+KEYWORD(do , KEYALL)
+KEYWORD(double , KEYALL)
+KEYWORD(else , KEYALL)
+KEYWORD(enum , KEYALL)
+KEYWORD(extern , KEYALL)
+KEYWORD(float , KEYALL)
+KEYWORD(for , KEYALL)
+KEYWORD(goto , KEYALL)
+KEYWORD(if , KEYALL)
+KEYWORD(inline , KEYC99|KEYCXX|KEYGNU)
+KEYWORD(int , KEYALL)
+KEYWORD(long , KEYALL)
+KEYWORD(register , KEYALL)
+KEYWORD(restrict , KEYC99)
+KEYWORD(return , KEYALL)
+KEYWORD(short , KEYALL)
+KEYWORD(signed , KEYALL)
+KEYWORD(sizeof , KEYALL)
+KEYWORD(static , KEYALL)
+KEYWORD(struct , KEYALL)
+KEYWORD(switch , KEYALL)
+KEYWORD(typedef , KEYALL)
+KEYWORD(union , KEYALL)
+KEYWORD(unsigned , KEYALL)
+KEYWORD(void , KEYALL)
+KEYWORD(volatile , KEYALL)
+KEYWORD(while , KEYALL)
+KEYWORD(_Alignas , KEYALL)
+KEYWORD(_Alignof , KEYALL)
+KEYWORD(_Atomic , KEYALL|KEYNOOPENCL)
+KEYWORD(_Bool , KEYNOCXX)
+KEYWORD(_Complex , KEYALL)
+KEYWORD(_Generic , KEYALL)
+KEYWORD(_Imaginary , KEYALL)
+KEYWORD(_Noreturn , KEYALL)
+KEYWORD(_Static_assert , KEYALL)
+KEYWORD(_Thread_local , KEYALL)
+KEYWORD(__func__ , KEYALL)
+KEYWORD(__objc_yes , KEYALL)
+KEYWORD(__objc_no , KEYALL)
+
+
+// C++ 2.11p1: Keywords.
+KEYWORD(asm , KEYCXX|KEYGNU)
+KEYWORD(bool , BOOLSUPPORT)
+KEYWORD(catch , KEYCXX)
+KEYWORD(class , KEYCXX)
+KEYWORD(const_cast , KEYCXX)
+KEYWORD(delete , KEYCXX)
+KEYWORD(dynamic_cast , KEYCXX)
+KEYWORD(explicit , KEYCXX)
+KEYWORD(export , KEYCXX)
+KEYWORD(false , BOOLSUPPORT)
+KEYWORD(friend , KEYCXX)
+KEYWORD(mutable , KEYCXX)
+KEYWORD(namespace , KEYCXX)
+KEYWORD(new , KEYCXX)
+KEYWORD(operator , KEYCXX)
+KEYWORD(private , KEYCXX)
+KEYWORD(protected , KEYCXX)
+KEYWORD(public , KEYCXX)
+KEYWORD(reinterpret_cast , KEYCXX)
+KEYWORD(static_cast , KEYCXX)
+KEYWORD(template , KEYCXX)
+KEYWORD(this , KEYCXX)
+KEYWORD(throw , KEYCXX)
+KEYWORD(true , BOOLSUPPORT)
+KEYWORD(try , KEYCXX)
+KEYWORD(typename , KEYCXX)
+KEYWORD(typeid , KEYCXX)
+KEYWORD(using , KEYCXX)
+KEYWORD(virtual , KEYCXX)
+KEYWORD(wchar_t , WCHARSUPPORT)
+
+// C++ 2.5p2: Alternative Representations.
+CXX_KEYWORD_OPERATOR(and , ampamp)
+CXX_KEYWORD_OPERATOR(and_eq , ampequal)
+CXX_KEYWORD_OPERATOR(bitand , amp)
+CXX_KEYWORD_OPERATOR(bitor , pipe)
+CXX_KEYWORD_OPERATOR(compl , tilde)
+CXX_KEYWORD_OPERATOR(not , exclaim)
+CXX_KEYWORD_OPERATOR(not_eq , exclaimequal)
+CXX_KEYWORD_OPERATOR(or , pipepipe)
+CXX_KEYWORD_OPERATOR(or_eq , pipeequal)
+CXX_KEYWORD_OPERATOR(xor , caret)
+CXX_KEYWORD_OPERATOR(xor_eq , caretequal)
+
+// C++11 keywords
+CXX11_KEYWORD(alignas , 0)
+CXX11_KEYWORD(alignof , 0)
+CXX11_KEYWORD(char16_t , KEYNOMS18)
+CXX11_KEYWORD(char32_t , KEYNOMS18)
+CXX11_KEYWORD(constexpr , 0)
+CXX11_KEYWORD(decltype , 0)
+CXX11_KEYWORD(noexcept , 0)
+CXX11_KEYWORD(nullptr , 0)
+CXX11_KEYWORD(static_assert , 0)
+CXX11_KEYWORD(thread_local , 0)
+
+// C++2a / concepts TS keywords
+CONCEPTS_KEYWORD(concept)
+CONCEPTS_KEYWORD(requires)
+
+// C++ coroutines TS keywords
+KEYWORD(co_await , KEYCOROUTINES)
+KEYWORD(co_return , KEYCOROUTINES)
+KEYWORD(co_yield , KEYCOROUTINES)
+
+// C++ modules TS keywords
+MODULES_KEYWORD(module)
+MODULES_KEYWORD(import)
+
+// C++ char8_t proposal
+KEYWORD(char8_t , CHAR8SUPPORT)
+
+// C11 Extension
+KEYWORD(_Float16 , KEYALL)
+
+// ISO/IEC JTC1 SC22 WG14 N1169 Extension
+KEYWORD(_Accum , KEYNOCXX)
+KEYWORD(_Fract , KEYNOCXX)
+KEYWORD(_Sat , KEYNOCXX)
+
+// GNU Extensions (in impl-reserved namespace)
+KEYWORD(_Decimal32 , KEYALL)
+KEYWORD(_Decimal64 , KEYALL)
+KEYWORD(_Decimal128 , KEYALL)
+KEYWORD(__null , KEYCXX)
+KEYWORD(__alignof , KEYALL)
+KEYWORD(__attribute , KEYALL)
+KEYWORD(__builtin_choose_expr , KEYALL)
+KEYWORD(__builtin_offsetof , KEYALL)
+// __builtin_types_compatible_p is a GNU C extension that we handle like a C++
+// type trait.
+TYPE_TRAIT_2(__builtin_types_compatible_p, TypeCompatible, KEYNOCXX)
+KEYWORD(__builtin_va_arg , KEYALL)
+KEYWORD(__extension__ , KEYALL)
+KEYWORD(__float128 , KEYALL)
+KEYWORD(__imag , KEYALL)
+KEYWORD(__int128 , KEYALL)
+KEYWORD(__label__ , KEYALL)
+KEYWORD(__real , KEYALL)
+KEYWORD(__thread , KEYALL)
+KEYWORD(__FUNCTION__ , KEYALL)
+KEYWORD(__PRETTY_FUNCTION__ , KEYALL)
+KEYWORD(__auto_type , KEYALL)
+
+// GNU Extensions (outside impl-reserved namespace)
+KEYWORD(typeof , KEYGNU)
+
+// MS Extensions
+KEYWORD(__FUNCDNAME__ , KEYMS)
+KEYWORD(__FUNCSIG__ , KEYMS)
+KEYWORD(L__FUNCTION__ , KEYMS)
+KEYWORD(L__FUNCSIG__ , KEYMS)
+TYPE_TRAIT_1(__is_interface_class, IsInterfaceClass, KEYMS)
+TYPE_TRAIT_1(__is_sealed, IsSealed, KEYMS)
+
+// MSVC12.0 / VS2013 Type Traits
+TYPE_TRAIT_1(__is_destructible, IsDestructible, KEYMS)
+TYPE_TRAIT_1(__is_trivially_destructible, IsTriviallyDestructible, KEYCXX)
+TYPE_TRAIT_1(__is_nothrow_destructible, IsNothrowDestructible, KEYMS)
+TYPE_TRAIT_2(__is_nothrow_assignable, IsNothrowAssignable, KEYCXX)
+TYPE_TRAIT_N(__is_constructible, IsConstructible, KEYCXX)
+TYPE_TRAIT_N(__is_nothrow_constructible, IsNothrowConstructible, KEYCXX)
+
+// MSVC14.0 / VS2015 Type Traits
+TYPE_TRAIT_2(__is_assignable, IsAssignable, KEYCXX)
+
+// GNU and MS Type Traits
+TYPE_TRAIT_1(__has_nothrow_assign, HasNothrowAssign, KEYCXX)
+TYPE_TRAIT_1(__has_nothrow_move_assign, HasNothrowMoveAssign, KEYCXX)
+TYPE_TRAIT_1(__has_nothrow_copy, HasNothrowCopy, KEYCXX)
+TYPE_TRAIT_1(__has_nothrow_constructor, HasNothrowConstructor, KEYCXX)
+TYPE_TRAIT_1(__has_trivial_assign, HasTrivialAssign, KEYCXX)
+TYPE_TRAIT_1(__has_trivial_move_assign, HasTrivialMoveAssign, KEYCXX)
+TYPE_TRAIT_1(__has_trivial_copy, HasTrivialCopy, KEYCXX)
+TYPE_TRAIT_1(__has_trivial_constructor, HasTrivialDefaultConstructor, KEYCXX)
+TYPE_TRAIT_1(__has_trivial_move_constructor, HasTrivialMoveConstructor, KEYCXX)
+TYPE_TRAIT_1(__has_trivial_destructor, HasTrivialDestructor, KEYCXX)
+TYPE_TRAIT_1(__has_virtual_destructor, HasVirtualDestructor, KEYCXX)
+TYPE_TRAIT_1(__is_abstract, IsAbstract, KEYCXX)
+TYPE_TRAIT_1(__is_aggregate, IsAggregate, KEYCXX)
+TYPE_TRAIT_2(__is_base_of, IsBaseOf, KEYCXX)
+TYPE_TRAIT_1(__is_class, IsClass, KEYCXX)
+TYPE_TRAIT_2(__is_convertible_to, IsConvertibleTo, KEYCXX)
+TYPE_TRAIT_1(__is_empty, IsEmpty, KEYCXX)
+TYPE_TRAIT_1(__is_enum, IsEnum, KEYCXX)
+TYPE_TRAIT_1(__is_final, IsFinal, KEYCXX)
+TYPE_TRAIT_1(__is_literal, IsLiteral, KEYCXX)
+// Name for GCC 4.6 compatibility - people have already written libraries using
+// this name unfortunately.
+ALIAS("__is_literal_type", __is_literal, KEYCXX)
+TYPE_TRAIT_1(__is_pod, IsPOD, KEYCXX)
+TYPE_TRAIT_1(__is_polymorphic, IsPolymorphic, KEYCXX)
+TYPE_TRAIT_1(__is_trivial, IsTrivial, KEYCXX)
+TYPE_TRAIT_1(__is_union, IsUnion, KEYCXX)
+TYPE_TRAIT_1(__has_unique_object_representations,
+ HasUniqueObjectRepresentations, KEYCXX)
+
+// Clang-only C++ Type Traits
+TYPE_TRAIT_N(__is_trivially_constructible, IsTriviallyConstructible, KEYCXX)
+TYPE_TRAIT_1(__is_trivially_copyable, IsTriviallyCopyable, KEYCXX)
+TYPE_TRAIT_2(__is_trivially_assignable, IsTriviallyAssignable, KEYCXX)
+TYPE_TRAIT_2(__reference_binds_to_temporary, ReferenceBindsToTemporary, KEYCXX)
+KEYWORD(__underlying_type , KEYCXX)
+
+// Embarcadero Expression Traits
+KEYWORD(__is_lvalue_expr , KEYCXX)
+KEYWORD(__is_rvalue_expr , KEYCXX)
+
+// Embarcadero Unary Type Traits
+TYPE_TRAIT_1(__is_arithmetic, IsArithmetic, KEYCXX)
+TYPE_TRAIT_1(__is_floating_point, IsFloatingPoint, KEYCXX)
+TYPE_TRAIT_1(__is_integral, IsIntegral, KEYCXX)
+TYPE_TRAIT_1(__is_complete_type, IsCompleteType, KEYCXX)
+TYPE_TRAIT_1(__is_void, IsVoid, KEYCXX)
+TYPE_TRAIT_1(__is_array, IsArray, KEYCXX)
+TYPE_TRAIT_1(__is_function, IsFunction, KEYCXX)
+TYPE_TRAIT_1(__is_reference, IsReference, KEYCXX)
+TYPE_TRAIT_1(__is_lvalue_reference, IsLvalueReference, KEYCXX)
+TYPE_TRAIT_1(__is_rvalue_reference, IsRvalueReference, KEYCXX)
+TYPE_TRAIT_1(__is_fundamental, IsFundamental, KEYCXX)
+TYPE_TRAIT_1(__is_object, IsObject, KEYCXX)
+TYPE_TRAIT_1(__is_scalar, IsScalar, KEYCXX)
+TYPE_TRAIT_1(__is_compound, IsCompound, KEYCXX)
+TYPE_TRAIT_1(__is_pointer, IsPointer, KEYCXX)
+TYPE_TRAIT_1(__is_member_object_pointer, IsMemberObjectPointer, KEYCXX)
+TYPE_TRAIT_1(__is_member_function_pointer, IsMemberFunctionPointer, KEYCXX)
+TYPE_TRAIT_1(__is_member_pointer, IsMemberPointer, KEYCXX)
+TYPE_TRAIT_1(__is_const, IsConst, KEYCXX)
+TYPE_TRAIT_1(__is_volatile, IsVolatile, KEYCXX)
+TYPE_TRAIT_1(__is_standard_layout, IsStandardLayout, KEYCXX)
+TYPE_TRAIT_1(__is_signed, IsSigned, KEYCXX)
+TYPE_TRAIT_1(__is_unsigned, IsUnsigned, KEYCXX)
+
+// Embarcadero Binary Type Traits
+TYPE_TRAIT_2(__is_same, IsSame, KEYCXX)
+TYPE_TRAIT_2(__is_convertible, IsConvertible, KEYCXX)
+KEYWORD(__array_rank , KEYCXX)
+KEYWORD(__array_extent , KEYCXX)
+
+// Apple Extension.
+KEYWORD(__private_extern__ , KEYALL)
+KEYWORD(__module_private__ , KEYALL)
+
+// Extension that will be enabled for Microsoft, Borland and PS4, but can be
+// disabled via '-fno-declspec'.
+KEYWORD(__declspec , 0)
+
+// Microsoft Extension.
+KEYWORD(__cdecl , KEYALL)
+KEYWORD(__stdcall , KEYALL)
+KEYWORD(__fastcall , KEYALL)
+KEYWORD(__thiscall , KEYALL)
+KEYWORD(__regcall , KEYALL)
+KEYWORD(__vectorcall , KEYALL)
+KEYWORD(__forceinline , KEYMS)
+KEYWORD(__unaligned , KEYMS)
+KEYWORD(__super , KEYMS)
+
+// OpenCL address space qualifiers
+KEYWORD(__global , KEYOPENCLC | KEYOPENCLCXX)
+KEYWORD(__local , KEYOPENCLC | KEYOPENCLCXX)
+KEYWORD(__constant , KEYOPENCLC | KEYOPENCLCXX)
+KEYWORD(__private , KEYOPENCLC | KEYOPENCLCXX)
+KEYWORD(__generic , KEYOPENCLC | KEYOPENCLCXX)
+ALIAS("global", __global , KEYOPENCLC)
+ALIAS("local", __local , KEYOPENCLC)
+ALIAS("constant", __constant , KEYOPENCLC)
+ALIAS("private", __private , KEYOPENCLC)
+ALIAS("generic", __generic , KEYOPENCLC)
+// OpenCL function qualifiers
+KEYWORD(__kernel , KEYOPENCLC | KEYOPENCLCXX)
+ALIAS("kernel", __kernel , KEYOPENCLC | KEYOPENCLCXX)
+// OpenCL access qualifiers
+KEYWORD(__read_only , KEYOPENCLC | KEYOPENCLCXX)
+KEYWORD(__write_only , KEYOPENCLC | KEYOPENCLCXX)
+KEYWORD(__read_write , KEYOPENCLC | KEYOPENCLCXX)
+ALIAS("read_only", __read_only , KEYOPENCLC | KEYOPENCLCXX)
+ALIAS("write_only", __write_only , KEYOPENCLC | KEYOPENCLCXX)
+ALIAS("read_write", __read_write , KEYOPENCLC | KEYOPENCLCXX)
+// OpenCL builtins
+KEYWORD(__builtin_astype , KEYOPENCLC)
+KEYWORD(vec_step , KEYOPENCLC | KEYALTIVEC | KEYZVECTOR)
+#define GENERIC_IMAGE_TYPE(ImgType, Id) KEYWORD(ImgType##_t, KEYOPENCLC)
+#include "clang/Basic/OpenCLImageTypes.def"
+
+// OpenMP Type Traits
+KEYWORD(__builtin_omp_required_simd_align, KEYALL)
+
+KEYWORD(pipe , KEYOPENCLC)
+
+// Borland Extensions.
+KEYWORD(__pascal , KEYALL)
+
+// Altivec Extension.
+KEYWORD(__vector , KEYALTIVEC|KEYZVECTOR)
+KEYWORD(__pixel , KEYALTIVEC)
+KEYWORD(__bool , KEYALTIVEC|KEYZVECTOR)
+
+// ARM NEON extensions.
+ALIAS("__fp16", half , KEYALL)
+
+// OpenCL Extension.
+KEYWORD(half , HALFSUPPORT)
+
+// Objective-C ARC keywords.
+KEYWORD(__bridge , KEYOBJC)
+KEYWORD(__bridge_transfer , KEYOBJC)
+KEYWORD(__bridge_retained , KEYOBJC)
+KEYWORD(__bridge_retain , KEYOBJC)
+
+// Objective-C keywords.
+KEYWORD(__covariant , KEYOBJC)
+KEYWORD(__contravariant , KEYOBJC)
+KEYWORD(__kindof , KEYOBJC)
+
+// Alternate spelling for various tokens. There are GCC extensions in all
+// languages, but should not be disabled in strict conformance mode.
+ALIAS("__alignof__" , __alignof , KEYALL)
+ALIAS("__asm" , asm , KEYALL)
+ALIAS("__asm__" , asm , KEYALL)
+ALIAS("__attribute__", __attribute, KEYALL)
+ALIAS("__complex" , _Complex , KEYALL)
+ALIAS("__complex__" , _Complex , KEYALL)
+ALIAS("__const" , const , KEYALL)
+ALIAS("__const__" , const , KEYALL)
+ALIAS("__decltype" , decltype , KEYCXX)
+ALIAS("__imag__" , __imag , KEYALL)
+ALIAS("__inline" , inline , KEYALL)
+ALIAS("__inline__" , inline , KEYALL)
+ALIAS("__nullptr" , nullptr , KEYCXX)
+ALIAS("__real__" , __real , KEYALL)
+ALIAS("__restrict" , restrict , KEYALL)
+ALIAS("__restrict__" , restrict , KEYALL)
+ALIAS("__signed" , signed , KEYALL)
+ALIAS("__signed__" , signed , KEYALL)
+ALIAS("__typeof" , typeof , KEYALL)
+ALIAS("__typeof__" , typeof , KEYALL)
+ALIAS("__volatile" , volatile , KEYALL)
+ALIAS("__volatile__" , volatile , KEYALL)
+
+// Type nullability.
+KEYWORD(_Nonnull , KEYALL)
+KEYWORD(_Nullable , KEYALL)
+KEYWORD(_Null_unspecified , KEYALL)
+
+// Microsoft extensions which should be disabled in strict conformance mode
+KEYWORD(__ptr64 , KEYMS)
+KEYWORD(__ptr32 , KEYMS)
+KEYWORD(__sptr , KEYMS)
+KEYWORD(__uptr , KEYMS)
+KEYWORD(__w64 , KEYMS)
+KEYWORD(__uuidof , KEYMS | KEYBORLAND)
+KEYWORD(__try , KEYMS | KEYBORLAND)
+KEYWORD(__finally , KEYMS | KEYBORLAND)
+KEYWORD(__leave , KEYMS | KEYBORLAND)
+KEYWORD(__int64 , KEYMS)
+KEYWORD(__if_exists , KEYMS)
+KEYWORD(__if_not_exists , KEYMS)
+KEYWORD(__single_inheritance , KEYMS)
+KEYWORD(__multiple_inheritance , KEYMS)
+KEYWORD(__virtual_inheritance , KEYMS)
+KEYWORD(__interface , KEYMS)
+ALIAS("__int8" , char , KEYMS)
+ALIAS("_int8" , char , KEYMS)
+ALIAS("__int16" , short , KEYMS)
+ALIAS("_int16" , short , KEYMS)
+ALIAS("__int32" , int , KEYMS)
+ALIAS("_int32" , int , KEYMS)
+ALIAS("_int64" , __int64 , KEYMS)
+ALIAS("__wchar_t" , wchar_t , KEYMS)
+ALIAS("_asm" , asm , KEYMS)
+ALIAS("_alignof" , __alignof , KEYMS)
+ALIAS("__builtin_alignof", __alignof , KEYMS)
+ALIAS("_cdecl" , __cdecl , KEYMS | KEYBORLAND)
+ALIAS("_fastcall" , __fastcall , KEYMS | KEYBORLAND)
+ALIAS("_stdcall" , __stdcall , KEYMS | KEYBORLAND)
+ALIAS("_thiscall" , __thiscall , KEYMS)
+ALIAS("_vectorcall" , __vectorcall, KEYMS)
+ALIAS("_uuidof" , __uuidof , KEYMS | KEYBORLAND)
+ALIAS("_inline" , inline , KEYMS)
+ALIAS("_declspec" , __declspec , KEYMS)
+
+// Borland Extensions which should be disabled in strict conformance mode.
+ALIAS("_pascal" , __pascal , KEYBORLAND)
+
+// Clang Extensions.
+KEYWORD(__builtin_convertvector , KEYALL)
+ALIAS("__char16_t" , char16_t , KEYCXX)
+ALIAS("__char32_t" , char32_t , KEYCXX)
+
+KEYWORD(__builtin_available , KEYALL)
+
+// Clang-specific keywords enabled only in testing.
+TESTING_KEYWORD(__unknown_anytype , KEYALL)
+
+
+//===----------------------------------------------------------------------===//
+// Objective-C @-preceded keywords.
+//===----------------------------------------------------------------------===//
+
+// These have meaning after an '@' in Objective-C mode. These define enums in
+// the tok::objc_* namespace.
+
+OBJC_AT_KEYWORD(not_keyword)
+OBJC_AT_KEYWORD(class)
+OBJC_AT_KEYWORD(compatibility_alias)
+OBJC_AT_KEYWORD(defs)
+OBJC_AT_KEYWORD(encode)
+OBJC_AT_KEYWORD(end)
+OBJC_AT_KEYWORD(implementation)
+OBJC_AT_KEYWORD(interface)
+OBJC_AT_KEYWORD(private)
+OBJC_AT_KEYWORD(protected)
+OBJC_AT_KEYWORD(protocol)
+OBJC_AT_KEYWORD(public)
+OBJC_AT_KEYWORD(selector)
+OBJC_AT_KEYWORD(throw)
+OBJC_AT_KEYWORD(try)
+OBJC_AT_KEYWORD(catch)
+OBJC_AT_KEYWORD(finally)
+OBJC_AT_KEYWORD(synchronized)
+OBJC_AT_KEYWORD(autoreleasepool)
+
+OBJC_AT_KEYWORD(property)
+OBJC_AT_KEYWORD(package)
+OBJC_AT_KEYWORD(required)
+OBJC_AT_KEYWORD(optional)
+OBJC_AT_KEYWORD(synthesize)
+OBJC_AT_KEYWORD(dynamic)
+OBJC_AT_KEYWORD(import)
+OBJC_AT_KEYWORD(available)
+
+// TODO: What to do about context-sensitive keywords like:
+// bycopy/byref/in/inout/oneway/out?
+
+ANNOTATION(cxxscope) // annotation for a C++ scope spec, e.g. "::foo::bar::"
+ANNOTATION(typename) // annotation for a C typedef name, a C++ (possibly
+ // qualified) typename, e.g. "foo::MyClass", or
+ // template-id that names a type ("std::vector<int>")
+ANNOTATION(template_id) // annotation for a C++ template-id that names a
+ // function template specialization (not a type),
+ // e.g., "std::swap<int>"
+ANNOTATION(primary_expr) // annotation for a primary expression
+ANNOTATION(decltype) // annotation for a decltype expression,
+ // e.g., "decltype(foo.bar())"
+
+// Annotation for #pragma unused(...)
+// For each argument inside the parentheses the pragma handler will produce
+// one 'pragma_unused' annotation token followed by the argument token.
+ANNOTATION(pragma_unused)
+
+// Annotation for #pragma GCC visibility...
+// The lexer produces these so that they only take effect when the parser
+// handles them.
+ANNOTATION(pragma_vis)
+
+// Annotation for #pragma pack...
+// The lexer produces these so that they only take effect when the parser
+// handles them.
+ANNOTATION(pragma_pack)
+
+// Annotation for #pragma clang __debug parser_crash...
+// The lexer produces these so that they only take effect when the parser
+// handles them.
+ANNOTATION(pragma_parser_crash)
+
+// Annotation for #pragma clang __debug captured...
+// The lexer produces these so that they only take effect when the parser
+// handles them.
+ANNOTATION(pragma_captured)
+
+// Annotation for #pragma clang __debug dump...
+// The lexer produces these so that the parser and semantic analysis can
+// look up and dump the operand.
+ANNOTATION(pragma_dump)
+
+// Annotation for #pragma ms_struct...
+// The lexer produces these so that they only take effect when the parser
+// handles them.
+ANNOTATION(pragma_msstruct)
+
+// Annotation for #pragma align...
+// The lexer produces these so that they only take effect when the parser
+// handles them.
+ANNOTATION(pragma_align)
+
+// Annotation for #pragma weak id
+// The lexer produces these so that they only take effect when the parser
+// handles them.
+ANNOTATION(pragma_weak)
+
+// Annotation for #pragma weak id = id
+// The lexer produces these so that they only take effect when the parser
+// handles them.
+ANNOTATION(pragma_weakalias)
+
+// Annotation for #pragma redefine_extname...
+// The lexer produces these so that they only take effect when the parser
+// handles them.
+ANNOTATION(pragma_redefine_extname)
+
+// Annotation for #pragma STDC FP_CONTRACT...
+// The lexer produces these so that they only take effect when the parser
+// handles them.
+ANNOTATION(pragma_fp_contract)
+
+// Annotation for #pragma STDC FENV_ACCESS
+// The lexer produces these so that they only take effect when the parser
+// handles them.
+ANNOTATION(pragma_fenv_access)
+
+// Annotation for #pragma pointers_to_members...
+// The lexer produces these so that they only take effect when the parser
+// handles them.
+ANNOTATION(pragma_ms_pointers_to_members)
+
+// Annotation for #pragma vtordisp...
+// The lexer produces these so that they only take effect when the parser
+// handles them.
+ANNOTATION(pragma_ms_vtordisp)
+
+// Annotation for all microsoft #pragmas...
+// The lexer produces these so that they only take effect when the parser
+// handles them.
+ANNOTATION(pragma_ms_pragma)
+
+// Annotation for #pragma OPENCL EXTENSION...
+// The lexer produces these so that they only take effect when the parser
+// handles them.
+ANNOTATION(pragma_opencl_extension)
+
+// Annotations for OpenMP pragma directives - #pragma omp ...
+// The lexer produces these so that they only take effect when the parser
+// handles #pragma omp ... directives.
+ANNOTATION(pragma_openmp)
+ANNOTATION(pragma_openmp_end)
+
+// Annotations for loop pragma directives #pragma clang loop ...
+// The lexer produces these so that they only take effect when the parser
+// handles #pragma loop ... directives.
+ANNOTATION(pragma_loop_hint)
+
+ANNOTATION(pragma_fp)
+
+// Annotation for the attribute pragma directives - #pragma clang attribute ...
+ANNOTATION(pragma_attribute)
+
+// Annotations for module import translated from #include etc.
+ANNOTATION(module_include)
+ANNOTATION(module_begin)
+ANNOTATION(module_end)
+
+#undef ANNOTATION
+#undef TESTING_KEYWORD
+#undef OBJC_AT_KEYWORD
+#undef CXX_KEYWORD_OPERATOR
+#undef PPKEYWORD
+#undef ALIAS
+#undef TYPE_TRAIT_N
+#undef TYPE_TRAIT_2
+#undef TYPE_TRAIT_1
+#undef TYPE_TRAIT
+#undef CONCEPTS_KEYWORD
+#undef CXX2A_KEYWORD
+#undef CXX11_KEYWORD
+#undef KEYWORD
+#undef PUNCTUATOR
+#undef TOK
diff --git a/clang-r353983/include/clang/Basic/TokenKinds.h b/clang-r353983/include/clang/Basic/TokenKinds.h
new file mode 100644
index 00000000..264a8e23
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/TokenKinds.h
@@ -0,0 +1,104 @@
+//===--- TokenKinds.h - Enum values for C Token Kinds -----------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Defines the clang::TokenKind enum and support functions.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_TOKENKINDS_H
+#define LLVM_CLANG_BASIC_TOKENKINDS_H
+
+#include "llvm/Support/Compiler.h"
+
+namespace clang {
+
+namespace tok {
+
+/// Provides a simple uniform namespace for tokens from all C languages.
+enum TokenKind : unsigned short {
+#define TOK(X) X,
+#include "clang/Basic/TokenKinds.def"
+ NUM_TOKENS
+};
+
+/// Provides a namespace for preprocessor keywords which start with a
+/// '#' at the beginning of the line.
+enum PPKeywordKind {
+#define PPKEYWORD(X) pp_##X,
+#include "clang/Basic/TokenKinds.def"
+ NUM_PP_KEYWORDS
+};
+
+/// Provides a namespace for Objective-C keywords which start with
+/// an '@'.
+enum ObjCKeywordKind {
+#define OBJC_AT_KEYWORD(X) objc_##X,
+#include "clang/Basic/TokenKinds.def"
+ NUM_OBJC_KEYWORDS
+};
+
+/// Defines the possible values of an on-off-switch (C99 6.10.6p2).
+enum OnOffSwitch {
+ OOS_ON, OOS_OFF, OOS_DEFAULT
+};
+
+/// Determines the name of a token as used within the front end.
+///
+/// The name of a token will be an internal name (such as "l_square")
+/// and should not be used as part of diagnostic messages.
+const char *getTokenName(TokenKind Kind) LLVM_READNONE;
+
+/// Determines the spelling of simple punctuation tokens like
+/// '!' or '%', and returns NULL for literal and annotation tokens.
+///
+/// This routine only retrieves the "simple" spelling of the token,
+/// and will not produce any alternative spellings (e.g., a
+/// digraph). For the actual spelling of a given Token, use
+/// Preprocessor::getSpelling().
+const char *getPunctuatorSpelling(TokenKind Kind) LLVM_READNONE;
+
+/// Determines the spelling of simple keyword and contextual keyword
+/// tokens like 'int' and 'dynamic_cast'. Returns NULL for other token kinds.
+const char *getKeywordSpelling(TokenKind Kind) LLVM_READNONE;
+
+/// Return true if this is a raw identifier or an identifier kind.
+inline bool isAnyIdentifier(TokenKind K) {
+ return (K == tok::identifier) || (K == tok::raw_identifier);
+}
+
+/// Return true if this is a C or C++ string-literal (or
+/// C++11 user-defined-string-literal) token.
+inline bool isStringLiteral(TokenKind K) {
+ return K == tok::string_literal || K == tok::wide_string_literal ||
+ K == tok::utf8_string_literal || K == tok::utf16_string_literal ||
+ K == tok::utf32_string_literal;
+}
+
+/// Return true if this is a "literal" kind, like a numeric
+/// constant, string, etc.
+inline bool isLiteral(TokenKind K) {
+ return K == tok::numeric_constant || K == tok::char_constant ||
+ K == tok::wide_char_constant || K == tok::utf8_char_constant ||
+ K == tok::utf16_char_constant || K == tok::utf32_char_constant ||
+ isStringLiteral(K) || K == tok::angle_string_literal;
+}
+
+/// Return true if this is any of tok::annot_* kinds.
+inline bool isAnnotation(TokenKind K) {
+#define ANNOTATION(NAME) \
+ if (K == tok::annot_##NAME) \
+ return true;
+#include "clang/Basic/TokenKinds.def"
+ return false;
+}
+
+} // end namespace tok
+} // end namespace clang
+
+#endif
diff --git a/clang-r353983/include/clang/Basic/TypeTraits.h b/clang-r353983/include/clang/Basic/TypeTraits.h
new file mode 100644
index 00000000..7c1b571f
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/TypeTraits.h
@@ -0,0 +1,110 @@
+//===--- TypeTraits.h - C++ Type Traits Support Enumerations ----*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Defines enumerations for the type traits support.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_TYPETRAITS_H
+#define LLVM_CLANG_BASIC_TYPETRAITS_H
+
+namespace clang {
+
+ /// Names for traits that operate specifically on types.
+ enum TypeTrait {
+ UTT_HasNothrowAssign,
+ UTT_HasNothrowMoveAssign,
+ UTT_HasNothrowCopy,
+ UTT_HasNothrowConstructor,
+ UTT_HasTrivialAssign,
+ UTT_HasTrivialMoveAssign,
+ UTT_HasTrivialCopy,
+ UTT_HasTrivialDefaultConstructor,
+ UTT_HasTrivialMoveConstructor,
+ UTT_HasTrivialDestructor,
+ UTT_HasVirtualDestructor,
+ UTT_IsAbstract,
+ UTT_IsAggregate,
+ UTT_IsArithmetic,
+ UTT_IsArray,
+ UTT_IsClass,
+ UTT_IsCompleteType,
+ UTT_IsCompound,
+ UTT_IsConst,
+ UTT_IsDestructible,
+ UTT_IsEmpty,
+ UTT_IsEnum,
+ UTT_IsFinal,
+ UTT_IsFloatingPoint,
+ UTT_IsFunction,
+ UTT_IsFundamental,
+ UTT_IsIntegral,
+ UTT_IsInterfaceClass,
+ UTT_IsLiteral,
+ UTT_IsLvalueReference,
+ UTT_IsMemberFunctionPointer,
+ UTT_IsMemberObjectPointer,
+ UTT_IsMemberPointer,
+ UTT_IsNothrowDestructible,
+ UTT_IsObject,
+ UTT_IsPOD,
+ UTT_IsPointer,
+ UTT_IsPolymorphic,
+ UTT_IsReference,
+ UTT_IsRvalueReference,
+ UTT_IsScalar,
+ UTT_IsSealed,
+ UTT_IsSigned,
+ UTT_IsStandardLayout,
+ UTT_IsTrivial,
+ UTT_IsTriviallyCopyable,
+ UTT_IsTriviallyDestructible,
+ UTT_IsUnion,
+ UTT_IsUnsigned,
+ UTT_IsVoid,
+ UTT_IsVolatile,
+ UTT_HasUniqueObjectRepresentations,
+ UTT_Last = UTT_HasUniqueObjectRepresentations,
+ BTT_IsBaseOf,
+ BTT_IsConvertible,
+ BTT_IsConvertibleTo,
+ BTT_IsSame,
+ BTT_TypeCompatible,
+ BTT_IsAssignable,
+ BTT_IsNothrowAssignable,
+ BTT_IsTriviallyAssignable,
+ BTT_ReferenceBindsToTemporary,
+ BTT_Last = BTT_ReferenceBindsToTemporary,
+ TT_IsConstructible,
+ TT_IsNothrowConstructible,
+ TT_IsTriviallyConstructible
+ };
+
+ /// Names for the array type traits.
+ enum ArrayTypeTrait {
+ ATT_ArrayRank,
+ ATT_ArrayExtent
+ };
+
+ /// Names for the "expression or type" traits.
+ enum UnaryExprOrTypeTrait {
+ UETT_SizeOf,
+ /// Used for C's _Alignof and C++'s alignof.
+ /// _Alignof and alignof return the required ABI alignment.
+ UETT_AlignOf,
+ UETT_VecStep,
+ UETT_OpenMPRequiredSimdAlign,
+ /// Used for GCC's __alignof.
+ /// __alignof returns the preferred alignment of a type, the alignment
+ /// clang will attempt to give an object of the type if allowed by ABI.
+ UETT_PreferredAlignOf,
+ };
+}
+
+#endif
diff --git a/clang-r353983/include/clang/Basic/Version.h b/clang-r353983/include/clang/Basic/Version.h
new file mode 100644
index 00000000..2881d8db
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/Version.h
@@ -0,0 +1,61 @@
+//===- Version.h - Clang Version Number -------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Defines version macros and version-related utility functions
+/// for Clang.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_VERSION_H
+#define LLVM_CLANG_BASIC_VERSION_H
+
+#include "clang/Basic/Version.inc"
+#include "llvm/ADT/StringRef.h"
+
+namespace clang {
+ /// Retrieves the repository path (e.g., Subversion path) that
+ /// identifies the particular Clang branch, tag, or trunk from which this
+ /// Clang was built.
+ std::string getClangRepositoryPath();
+
+ /// Retrieves the repository path from which LLVM was built.
+ ///
+ /// This supports LLVM residing in a separate repository from clang.
+ std::string getLLVMRepositoryPath();
+
+ /// Retrieves the repository revision number (or identifier) from which
+ /// this Clang was built.
+ std::string getClangRevision();
+
+ /// Retrieves the repository revision number (or identifier) from which
+ /// LLVM was built.
+ ///
+ /// If Clang and LLVM are in the same repository, this returns the same
+ /// string as getClangRevision.
+ std::string getLLVMRevision();
+
+ /// Retrieves the full repository version that is an amalgamation of
+ /// the information in getClangRepositoryPath() and getClangRevision().
+ std::string getClangFullRepositoryVersion();
+
+ /// Retrieves a string representing the complete clang version,
+ /// which includes the clang version number, the repository version,
+ /// and the vendor tag.
+ std::string getClangFullVersion();
+
+ /// Like getClangFullVersion(), but with a custom tool name.
+ std::string getClangToolFullVersion(llvm::StringRef ToolName);
+
+ /// Retrieves a string representing the complete clang version suitable
+ /// for use in the CPP __VERSION__ macro, which includes the clang version
+ /// number, the repository version, and the vendor tag.
+ std::string getClangFullCPPVersion();
+}
+
+#endif // LLVM_CLANG_BASIC_VERSION_H
diff --git a/clang-r353983/include/clang/Basic/Version.inc b/clang-r353983/include/clang/Basic/Version.inc
new file mode 100644
index 00000000..370ff209
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/Version.inc
@@ -0,0 +1,5 @@
+#define CLANG_VERSION 9.0.1
+#define CLANG_VERSION_STRING "9.0.1"
+#define CLANG_VERSION_MAJOR 9
+#define CLANG_VERSION_MINOR 0
+#define CLANG_VERSION_PATCHLEVEL 1
diff --git a/clang-r353983/include/clang/Basic/Visibility.h b/clang-r353983/include/clang/Basic/Visibility.h
new file mode 100644
index 00000000..57d9754a
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/Visibility.h
@@ -0,0 +1,145 @@
+//===--- Visibility.h - Visibility enumeration and utilities ----*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Defines the clang::Visibility enumeration and various utility
+/// functions.
+///
+//===----------------------------------------------------------------------===//
+#ifndef LLVM_CLANG_BASIC_VISIBILITY_H
+#define LLVM_CLANG_BASIC_VISIBILITY_H
+
+#include "clang/Basic/Linkage.h"
+#include <cassert>
+#include <cstdint>
+
+namespace clang {
+
+/// Describes the different kinds of visibility that a declaration
+/// may have.
+///
+/// Visibility determines how a declaration interacts with the dynamic
+/// linker. It may also affect whether the symbol can be found by runtime
+/// symbol lookup APIs.
+///
+/// Visibility is not described in any language standard and
+/// (nonetheless) sometimes has odd behavior. Not all platforms
+/// support all visibility kinds.
+enum Visibility {
+ /// Objects with "hidden" visibility are not seen by the dynamic
+ /// linker.
+ HiddenVisibility,
+
+ /// Objects with "protected" visibility are seen by the dynamic
+ /// linker but always dynamically resolve to an object within this
+ /// shared object.
+ ProtectedVisibility,
+
+ /// Objects with "default" visibility are seen by the dynamic linker
+ /// and act like normal objects.
+ DefaultVisibility
+};
+
+inline Visibility minVisibility(Visibility L, Visibility R) {
+ return L < R ? L : R;
+}
+
+class LinkageInfo {
+ uint8_t linkage_ : 3;
+ uint8_t visibility_ : 2;
+ uint8_t explicit_ : 1;
+
+ void setVisibility(Visibility V, bool E) { visibility_ = V; explicit_ = E; }
+public:
+ LinkageInfo() : linkage_(ExternalLinkage), visibility_(DefaultVisibility),
+ explicit_(false) {}
+ LinkageInfo(Linkage L, Visibility V, bool E)
+ : linkage_(L), visibility_(V), explicit_(E) {
+ assert(getLinkage() == L && getVisibility() == V &&
+ isVisibilityExplicit() == E && "Enum truncated!");
+ }
+
+ static LinkageInfo external() {
+ return LinkageInfo();
+ }
+ static LinkageInfo internal() {
+ return LinkageInfo(InternalLinkage, DefaultVisibility, false);
+ }
+ static LinkageInfo uniqueExternal() {
+ return LinkageInfo(UniqueExternalLinkage, DefaultVisibility, false);
+ }
+ static LinkageInfo none() {
+ return LinkageInfo(NoLinkage, DefaultVisibility, false);
+ }
+ static LinkageInfo visible_none() {
+ return LinkageInfo(VisibleNoLinkage, DefaultVisibility, false);
+ }
+
+ Linkage getLinkage() const { return (Linkage)linkage_; }
+ Visibility getVisibility() const { return (Visibility)visibility_; }
+ bool isVisibilityExplicit() const { return explicit_; }
+
+ void setLinkage(Linkage L) { linkage_ = L; }
+
+ void mergeLinkage(Linkage L) {
+ setLinkage(minLinkage(getLinkage(), L));
+ }
+ void mergeLinkage(LinkageInfo other) {
+ mergeLinkage(other.getLinkage());
+ }
+
+ void mergeExternalVisibility(Linkage L) {
+ Linkage ThisL = getLinkage();
+ if (!isExternallyVisible(L)) {
+ if (ThisL == VisibleNoLinkage)
+ ThisL = NoLinkage;
+ else if (ThisL == ExternalLinkage)
+ ThisL = UniqueExternalLinkage;
+ }
+ setLinkage(ThisL);
+ }
+ void mergeExternalVisibility(LinkageInfo Other) {
+ mergeExternalVisibility(Other.getLinkage());
+ }
+
+ /// Merge in the visibility 'newVis'.
+ void mergeVisibility(Visibility newVis, bool newExplicit) {
+ Visibility oldVis = getVisibility();
+
+ // Never increase visibility.
+ if (oldVis < newVis)
+ return;
+
+ // If the new visibility is the same as the old and the new
+ // visibility isn't explicit, we have nothing to add.
+ if (oldVis == newVis && !newExplicit)
+ return;
+
+ // Otherwise, we're either decreasing visibility or making our
+ // existing visibility explicit.
+ setVisibility(newVis, newExplicit);
+ }
+ void mergeVisibility(LinkageInfo other) {
+ mergeVisibility(other.getVisibility(), other.isVisibilityExplicit());
+ }
+
+ /// Merge both linkage and visibility.
+ void merge(LinkageInfo other) {
+ mergeLinkage(other);
+ mergeVisibility(other);
+ }
+
+ /// Merge linkage and conditionally merge visibility.
+ void mergeMaybeWithVisibility(LinkageInfo other, bool withVis) {
+ mergeLinkage(other);
+ if (withVis) mergeVisibility(other);
+ }
+};
+}
+
+#endif // LLVM_CLANG_BASIC_VISIBILITY_H
diff --git a/clang-r353983/include/clang/Basic/X86Target.def b/clang-r353983/include/clang/Basic/X86Target.def
new file mode 100644
index 00000000..c6719ff2
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/X86Target.def
@@ -0,0 +1,339 @@
+//===--- X86Target.def - X86 Feature/Processor Database ---------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the X86-specific Features and Processors, as used by
+// the X86 Targets.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef PROC_WITH_FEAT
+#define PROC_WITH_FEAT(ENUM, STRING, IS64BIT, KEYFEATURE) \
+ PROC(ENUM, STRING, IS64BIT)
+#endif
+
+#ifndef PROC
+#define PROC(ENUM, STRING, IS64BIT)
+#endif
+
+#ifndef PROC_ALIAS
+#define PROC_ALIAS(ENUM, ALIAS)
+#endif
+
+#ifndef FEATURE
+#define FEATURE(ENUM)
+#endif
+
+#ifndef CPU_SPECIFIC
+#define CPU_SPECIFIC(NAME, MANGLING, FEATURES)
+#endif
+
+#ifndef CPU_SPECIFIC_ALIAS
+#define CPU_SPECIFIC_ALIAS(NEW_NAME, NAME)
+#endif
+
+#define PROC_64_BIT true
+#define PROC_32_BIT false
+
+/// \name i386
+/// i386-generation processors.
+//@{
+PROC(i386, "i386", PROC_32_BIT)
+//@}
+
+/// \name i486
+/// i486-generation processors.
+//@{
+PROC(i486, "i486", PROC_32_BIT)
+PROC(WinChipC6, "winchip-c6", PROC_32_BIT)
+PROC(WinChip2, "winchip2", PROC_32_BIT)
+PROC(C3, "c3", PROC_32_BIT)
+//@}
+
+/// \name i586
+/// i586-generation processors, P5 microarchitecture based.
+//@{
+PROC(i586, "i586", PROC_32_BIT)
+PROC(Pentium, "pentium", PROC_32_BIT)
+PROC(PentiumMMX, "pentium-mmx", PROC_32_BIT)
+//@}
+
+/// \name i686
+/// i686-generation processors, P6 / Pentium M microarchitecture based.
+//@{
+PROC(PentiumPro, "pentiumpro", PROC_32_BIT)
+PROC_ALIAS(PentiumPro, "i686")
+PROC(Pentium2, "pentium2", PROC_32_BIT)
+PROC(Pentium3, "pentium3", PROC_32_BIT)
+PROC_ALIAS(Pentium3, "pentium3m")
+PROC(PentiumM, "pentium-m", PROC_32_BIT)
+PROC(C3_2, "c3-2", PROC_32_BIT)
+
+/// This enumerator is a bit odd, as GCC no longer accepts -march=yonah.
+/// Clang however has some logic to support this.
+// FIXME: Warn, deprecate, and potentially remove this.
+PROC(Yonah, "yonah", PROC_32_BIT)
+//@}
+
+/// \name Netburst
+/// Netburst microarchitecture based processors.
+//@{
+PROC(Pentium4, "pentium4", PROC_32_BIT)
+PROC_ALIAS(Pentium4, "pentium4m")
+
+PROC(Prescott, "prescott", PROC_32_BIT)
+PROC(Nocona, "nocona", PROC_64_BIT)
+//@}
+
+/// \name Core
+/// Core microarchitecture based processors.
+//@{
+PROC_WITH_FEAT(Core2, "core2", PROC_64_BIT, FEATURE_SSSE3)
+
+/// This enumerator, like Yonah, is a bit odd. It is another
+/// codename which GCC no longer accepts as an option to -march, but Clang
+/// has some logic for recognizing it.
+// FIXME: Warn, deprecate, and potentially remove this.
+PROC(Penryn, "penryn", PROC_64_BIT)
+//@}
+
+/// \name Atom
+/// Atom processors
+//@{
+PROC_WITH_FEAT(Bonnell, "bonnell", PROC_64_BIT, FEATURE_SSSE3)
+PROC_ALIAS(Bonnell, "atom")
+
+PROC_WITH_FEAT(Silvermont, "silvermont", PROC_64_BIT, FEATURE_SSE4_2)
+PROC_ALIAS(Silvermont, "slm")
+
+PROC(Goldmont, "goldmont", PROC_64_BIT)
+PROC(GoldmontPlus, "goldmont-plus", PROC_64_BIT)
+
+PROC(Tremont, "tremont", PROC_64_BIT)
+//@}
+
+/// \name Nehalem
+/// Nehalem microarchitecture based processors.
+PROC_WITH_FEAT(Nehalem, "nehalem", PROC_64_BIT, FEATURE_SSE4_2)
+PROC_ALIAS(Nehalem, "corei7")
+
+/// \name Westmere
+/// Westmere microarchitecture based processors.
+PROC_WITH_FEAT(Westmere, "westmere", PROC_64_BIT, FEATURE_PCLMUL)
+
+/// \name Sandy Bridge
+/// Sandy Bridge microarchitecture based processors.
+PROC_WITH_FEAT(SandyBridge, "sandybridge", PROC_64_BIT, FEATURE_AVX)
+PROC_ALIAS(SandyBridge, "corei7-avx")
+
+/// \name Ivy Bridge
+/// Ivy Bridge microarchitecture based processors.
+PROC_WITH_FEAT(IvyBridge, "ivybridge", PROC_64_BIT, FEATURE_AVX)
+PROC_ALIAS(IvyBridge, "core-avx-i")
+
+/// \name Haswell
+/// Haswell microarchitecture based processors.
+PROC_WITH_FEAT(Haswell, "haswell", PROC_64_BIT, FEATURE_AVX2)
+PROC_ALIAS(Haswell, "core-avx2")
+
+/// \name Broadwell
+/// Broadwell microarchitecture based processors.
+PROC_WITH_FEAT(Broadwell, "broadwell", PROC_64_BIT, FEATURE_AVX2)
+
+/// \name Skylake Client
+/// Skylake client microarchitecture based processors.
+PROC_WITH_FEAT(SkylakeClient, "skylake", PROC_64_BIT, FEATURE_AVX2)
+
+/// \name Skylake Server
+/// Skylake server microarchitecture based processors.
+PROC_WITH_FEAT(SkylakeServer, "skylake-avx512", PROC_64_BIT, FEATURE_AVX512F)
+PROC_ALIAS(SkylakeServer, "skx")
+
+/// \name Cascadelake Server
+/// Cascadelake Server microarchitecture based processors.
+PROC_WITH_FEAT(Cascadelake, "cascadelake", PROC_64_BIT, FEATURE_AVX512VNNI)
+
+/// \name Cannonlake Client
+/// Cannonlake client microarchitecture based processors.
+PROC_WITH_FEAT(Cannonlake, "cannonlake", PROC_64_BIT, FEATURE_AVX512VBMI)
+
+/// \name Icelake Client
+/// Icelake client microarchitecture based processors.
+PROC(IcelakeClient, "icelake-client", PROC_64_BIT)
+
+/// \name Icelake Server
+/// Icelake server microarchitecture based processors.
+PROC(IcelakeServer, "icelake-server", PROC_64_BIT)
+
+/// \name Knights Landing
+/// Knights Landing processor.
+PROC_WITH_FEAT(KNL, "knl", PROC_64_BIT, FEATURE_AVX512F)
+
+/// \name Knights Mill
+/// Knights Mill processor.
+PROC_WITH_FEAT(KNM, "knm", PROC_64_BIT, FEATURE_AVX5124FMAPS)
+
+/// \name Lakemont
+/// Lakemont microarchitecture based processors.
+PROC(Lakemont, "lakemont", PROC_32_BIT)
+
+/// \name K6
+/// K6 architecture processors.
+//@{
+PROC(K6, "k6", PROC_32_BIT)
+PROC(K6_2, "k6-2", PROC_32_BIT)
+PROC(K6_3, "k6-3", PROC_32_BIT)
+//@}
+
+/// \name K7
+/// K7 architecture processors.
+//@{
+PROC(Athlon, "athlon", PROC_32_BIT)
+PROC_ALIAS(Athlon, "athlon-tbird")
+
+PROC(AthlonXP, "athlon-xp", PROC_32_BIT)
+PROC_ALIAS(AthlonXP, "athlon-mp")
+PROC_ALIAS(AthlonXP, "athlon-4")
+//@}
+
+/// \name K8
+/// K8 architecture processors.
+//@{
+PROC(K8, "k8", PROC_64_BIT)
+PROC_ALIAS(K8, "athlon64")
+PROC_ALIAS(K8, "athlon-fx")
+PROC_ALIAS(K8, "opteron")
+
+PROC(K8SSE3, "k8-sse3", PROC_64_BIT)
+PROC_ALIAS(K8SSE3, "athlon64-sse3")
+PROC_ALIAS(K8SSE3, "opteron-sse3")
+
+PROC_WITH_FEAT(AMDFAM10, "amdfam10", PROC_64_BIT, FEATURE_SSE4_A)
+PROC_ALIAS(AMDFAM10, "barcelona")
+//@}
+
+/// \name Bobcat
+/// Bobcat architecture processors.
+//@{
+PROC_WITH_FEAT(BTVER1, "btver1", PROC_64_BIT, FEATURE_SSE4_A)
+PROC_WITH_FEAT(BTVER2, "btver2", PROC_64_BIT, FEATURE_BMI)
+//@}
+
+/// \name Bulldozer
+/// Bulldozer architecture processors.
+//@{
+PROC_WITH_FEAT(BDVER1, "bdver1", PROC_64_BIT, FEATURE_XOP)
+PROC_WITH_FEAT(BDVER2, "bdver2", PROC_64_BIT, FEATURE_FMA)
+PROC_WITH_FEAT(BDVER3, "bdver3", PROC_64_BIT, FEATURE_FMA)
+PROC_WITH_FEAT(BDVER4, "bdver4", PROC_64_BIT, FEATURE_AVX2)
+//@}
+
+/// \name zen
+/// Zen architecture processors.
+//@{
+PROC_WITH_FEAT(ZNVER1, "znver1", PROC_64_BIT, FEATURE_AVX2)
+//@}
+
+/// This specification is deprecated and will be removed in the future.
+/// Users should prefer K8.
+// FIXME: Warn on this when the CPU is set to it.
+//@{
+PROC(x86_64, "x86-64", PROC_64_BIT)
+//@}
+
+/// \name Geode
+/// Geode processors.
+//@{
+PROC(Geode, "geode", PROC_32_BIT)
+//@}
+
+// List of CPU Supports features in order. These need to remain in the order
+// required by attribute 'target' checking. Note that not all are supported/
+// prioritized by GCC, so synchronization with GCC's implementation may require
+// changing some existing values.
+FEATURE(FEATURE_CMOV)
+FEATURE(FEATURE_MMX)
+FEATURE(FEATURE_SSE)
+FEATURE(FEATURE_SSE2)
+FEATURE(FEATURE_SSE3)
+FEATURE(FEATURE_SSSE3)
+FEATURE(FEATURE_SSE4_A)
+FEATURE(FEATURE_SSE4_1)
+FEATURE(FEATURE_SSE4_2)
+FEATURE(FEATURE_POPCNT)
+FEATURE(FEATURE_AES)
+FEATURE(FEATURE_PCLMUL)
+FEATURE(FEATURE_AVX)
+FEATURE(FEATURE_BMI)
+FEATURE(FEATURE_FMA4)
+FEATURE(FEATURE_XOP)
+FEATURE(FEATURE_FMA)
+FEATURE(FEATURE_BMI2)
+FEATURE(FEATURE_AVX2)
+FEATURE(FEATURE_AVX512F)
+FEATURE(FEATURE_AVX512VL)
+FEATURE(FEATURE_AVX512BW)
+FEATURE(FEATURE_AVX512DQ)
+FEATURE(FEATURE_AVX512CD)
+FEATURE(FEATURE_AVX512ER)
+FEATURE(FEATURE_AVX512PF)
+FEATURE(FEATURE_AVX512VBMI)
+FEATURE(FEATURE_AVX512IFMA)
+FEATURE(FEATURE_AVX5124VNNIW)
+FEATURE(FEATURE_AVX5124FMAPS)
+FEATURE(FEATURE_AVX512VPOPCNTDQ)
+FEATURE(FEATURE_AVX512VBMI2)
+FEATURE(FEATURE_GFNI)
+FEATURE(FEATURE_VPCLMULQDQ)
+FEATURE(FEATURE_AVX512VNNI)
+FEATURE(FEATURE_AVX512BITALG)
+
+
+// FIXME: When commented out features are supported in LLVM, enable them here.
+CPU_SPECIFIC("generic", 'A', "")
+CPU_SPECIFIC("pentium", 'B', "")
+CPU_SPECIFIC("pentium_pro", 'C', "+cmov")
+CPU_SPECIFIC("pentium_mmx", 'D', "+mmx")
+CPU_SPECIFIC("pentium_ii", 'E', "+cmov,+mmx")
+CPU_SPECIFIC("pentium_iii", 'H', "+cmov,+mmx,+sse")
+CPU_SPECIFIC_ALIAS("pentium_iii_no_xmm_regs", "pentium_iii")
+CPU_SPECIFIC("pentium_4", 'J', "+cmov,+mmx,+sse,+sse2")
+CPU_SPECIFIC("pentium_m", 'K', "+cmov,+mmx,+sse,+sse2")
+CPU_SPECIFIC("pentium_4_sse3", 'L', "+cmov,+mmx,+sse,+sse2,+sse3")
+CPU_SPECIFIC("core_2_duo_ssse3", 'M', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3")
+CPU_SPECIFIC("core_2_duo_sse4_1", 'N', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1")
+CPU_SPECIFIC("atom", 'O', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+movbe")
+CPU_SPECIFIC("atom_sse4_2", 'c', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+popcnt")
+CPU_SPECIFIC("core_i7_sse4_2", 'P', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+popcnt")
+CPU_SPECIFIC("core_aes_pclmulqdq", 'Q', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+popcnt")
+CPU_SPECIFIC("atom_sse4_2_movbe", 'd', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+movbe,+popcnt")
+CPU_SPECIFIC("goldmont", 'i', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+movbe,+popcnt")
+CPU_SPECIFIC("sandybridge", 'R', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+popcnt,+avx")
+CPU_SPECIFIC_ALIAS("core_2nd_gen_avx", "sandybridge")
+CPU_SPECIFIC("ivybridge", 'S', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+popcnt,+f16c,+avx")
+CPU_SPECIFIC_ALIAS("core_3rd_gen_avx", "ivybridge")
+CPU_SPECIFIC("haswell", 'V', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+movbe,+popcnt,+f16c,+avx,+fma,+bmi,+lzcnt,+avx2")
+CPU_SPECIFIC_ALIAS("core_4th_gen_avx", "haswell")
+CPU_SPECIFIC("core_4th_gen_avx_tsx", 'W', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+movbe,+popcnt,+f16c,+avx,+fma,+bmi,+lzcnt,+avx2")
+CPU_SPECIFIC("broadwell", 'X', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+movbe,+popcnt,+f16c,+avx,+fma,+bmi,+lzcnt,+avx2,+adx")
+CPU_SPECIFIC_ALIAS("core_5th_gen_avx", "broadwell")
+CPU_SPECIFIC("core_5th_gen_avx_tsx", 'Y', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+movbe,+popcnt,+f16c,+avx,+fma,+bmi,+lzcnt,+avx2,+adx")
+CPU_SPECIFIC("knl", 'Z', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+movbe,+popcnt,+f16c,+avx,+fma,+bmi,+lzcnt,+avx2,+avx512f,+adx,+avx512er,+avx512pf,+avx512cd")
+CPU_SPECIFIC_ALIAS("mic_avx512", "knl")
+CPU_SPECIFIC("skylake", 'b', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+movbe,+popcnt,+f16c,+avx,+fma,+bmi,+lzcnt,+avx2,+adx,+mpx")
+CPU_SPECIFIC( "skylake_avx512", 'a', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+movbe,+popcnt,+f16c,+avx,+fma,+bmi,+lzcnt,+avx2,+avx512dq,+avx512f,+adx,+avx512cd,+avx512bw,+avx512vl,+clwb")
+CPU_SPECIFIC("cannonlake", 'e', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+movbe,+popcnt,+f16c,+avx,+fma,+bmi,+lzcnt,+avx2,+avx512dq,+avx512f,+adx,+avx512ifma,+avx512cd,+avx512bw,+avx512vl,+avx512vbmi")
+CPU_SPECIFIC("knm", 'j', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+movbe,+popcnt,+f16c,+avx,+fma,+bmi,+lzcnt,+avx2,+avx512f,+adx,+avx512er,+avx512pf,+avx512cd,+avx5124fmaps,+avx5124vnniw,+avx512vpopcntdq")
+
+#undef CPU_SPECIFIC_ALIAS
+#undef CPU_SPECIFIC
+#undef PROC_64_BIT
+#undef PROC_32_BIT
+#undef FEATURE
+#undef PROC
+#undef PROC_ALIAS
+#undef PROC_WITH_FEAT
diff --git a/clang-r353983/include/clang/Basic/XRayInstr.h b/clang-r353983/include/clang/Basic/XRayInstr.h
new file mode 100644
index 00000000..48e88848
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/XRayInstr.h
@@ -0,0 +1,71 @@
+//===--- XRayInstr.h --------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+/// \file
+/// Defines the clang::XRayInstrKind enum.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_XRAYINSTR_H
+#define LLVM_CLANG_BASIC_XRAYINSTR_H
+
+#include "clang/Basic/LLVM.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/MathExtras.h"
+#include <cassert>
+#include <cstdint>
+
+namespace clang {
+
+using XRayInstrMask = uint32_t;
+
+namespace XRayInstrKind {
+
+// TODO: Auto-generate these as we add more instrumentation kinds.
+enum XRayInstrOrdinal : XRayInstrMask {
+ XRIO_Function,
+ XRIO_Custom,
+ XRIO_Typed,
+ XRIO_Count
+};
+
+constexpr XRayInstrMask None = 0;
+constexpr XRayInstrMask Function = 1U << XRIO_Function;
+constexpr XRayInstrMask Custom = 1U << XRIO_Custom;
+constexpr XRayInstrMask Typed = 1U << XRIO_Typed;
+constexpr XRayInstrMask All = Function | Custom | Typed;
+
+} // namespace XRayInstrKind
+
+struct XRayInstrSet {
+ bool has(XRayInstrMask K) const {
+ assert(llvm::isPowerOf2_32(K));
+ return Mask & K;
+ }
+
+ bool hasOneOf(XRayInstrMask K) const { return Mask & K; }
+
+ void set(XRayInstrMask K, bool Value) {
+ assert(llvm::isPowerOf2_32(K));
+ Mask = Value ? (Mask | K) : (Mask & ~K);
+ }
+
+ void clear(XRayInstrMask K = XRayInstrKind::All) { Mask &= ~K; }
+
+ bool empty() const { return Mask == 0; }
+
+ bool full() const { return Mask == XRayInstrKind::All; }
+
+ XRayInstrMask Mask = 0;
+};
+
+XRayInstrMask parseXRayInstrValue(StringRef Value);
+
+} // namespace clang
+
+#endif // LLVM_CLANG_BASIC_XRAYINSTR_H
diff --git a/clang-r353983/include/clang/Basic/XRayLists.h b/clang-r353983/include/clang/Basic/XRayLists.h
new file mode 100644
index 00000000..cf464f9e
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/XRayLists.h
@@ -0,0 +1,55 @@
+//===--- XRayLists.h - XRay automatic attribution ---------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// User-provided filters for always/never XRay instrumenting certain functions.
+//
+//===----------------------------------------------------------------------===//
+#ifndef LLVM_CLANG_BASIC_XRAYLISTS_H
+#define LLVM_CLANG_BASIC_XRAYLISTS_H
+
+#include "clang/Basic/LLVM.h"
+#include "clang/Basic/SourceLocation.h"
+#include "clang/Basic/SourceManager.h"
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/SpecialCaseList.h"
+#include <memory>
+
+namespace clang {
+
+class XRayFunctionFilter {
+ std::unique_ptr<llvm::SpecialCaseList> AlwaysInstrument;
+ std::unique_ptr<llvm::SpecialCaseList> NeverInstrument;
+ std::unique_ptr<llvm::SpecialCaseList> AttrList;
+ SourceManager &SM;
+
+public:
+ XRayFunctionFilter(ArrayRef<std::string> AlwaysInstrumentPaths,
+ ArrayRef<std::string> NeverInstrumentPaths,
+ ArrayRef<std::string> AttrListPaths, SourceManager &SM);
+
+ enum class ImbueAttribute {
+ NONE,
+ ALWAYS,
+ NEVER,
+ ALWAYS_ARG1,
+ };
+
+ ImbueAttribute shouldImbueFunction(StringRef FunctionName) const;
+
+ ImbueAttribute
+ shouldImbueFunctionsInFile(StringRef Filename,
+ StringRef Category = StringRef()) const;
+
+ ImbueAttribute shouldImbueLocation(SourceLocation Loc,
+ StringRef Category = StringRef()) const;
+};
+
+} // namespace clang
+
+#endif
diff --git a/clang-r353983/include/clang/Basic/arm_fp16.inc b/clang-r353983/include/clang/Basic/arm_fp16.inc
new file mode 100644
index 00000000..a05142f2
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/arm_fp16.inc
@@ -0,0 +1,110 @@
+#ifdef GET_NEON_BUILTINS
+BUILTIN(__builtin_neon_vabdh_f16, "hhh", "n")
+BUILTIN(__builtin_neon_vabsh_f16, "hh", "n")
+BUILTIN(__builtin_neon_vaddh_f16, "hhh", "n")
+BUILTIN(__builtin_neon_vcageh_f16, "Ushh", "n")
+BUILTIN(__builtin_neon_vcagth_f16, "Ushh", "n")
+BUILTIN(__builtin_neon_vcaleh_f16, "Ushh", "n")
+BUILTIN(__builtin_neon_vcalth_f16, "Ushh", "n")
+BUILTIN(__builtin_neon_vceqh_f16, "Ushh", "n")
+BUILTIN(__builtin_neon_vceqzh_f16, "Ush", "n")
+BUILTIN(__builtin_neon_vcgeh_f16, "Ushh", "n")
+BUILTIN(__builtin_neon_vcgezh_f16, "Ush", "n")
+BUILTIN(__builtin_neon_vcgth_f16, "Ushh", "n")
+BUILTIN(__builtin_neon_vcgtzh_f16, "Ush", "n")
+BUILTIN(__builtin_neon_vcleh_f16, "Ushh", "n")
+BUILTIN(__builtin_neon_vclezh_f16, "Ush", "n")
+BUILTIN(__builtin_neon_vclth_f16, "Ushh", "n")
+BUILTIN(__builtin_neon_vcltzh_f16, "Ush", "n")
+BUILTIN(__builtin_neon_vcvtah_s16_f16, "sh", "n")
+BUILTIN(__builtin_neon_vcvtah_s32_f16, "ih", "n")
+BUILTIN(__builtin_neon_vcvtah_s64_f16, "Wih", "n")
+BUILTIN(__builtin_neon_vcvtah_u16_f16, "Ush", "n")
+BUILTIN(__builtin_neon_vcvtah_u32_f16, "Uih", "n")
+BUILTIN(__builtin_neon_vcvtah_u64_f16, "UWih", "n")
+BUILTIN(__builtin_neon_vcvth_f16_s16, "hs", "n")
+BUILTIN(__builtin_neon_vcvth_f16_s32, "hi", "n")
+BUILTIN(__builtin_neon_vcvth_f16_s64, "hWi", "n")
+BUILTIN(__builtin_neon_vcvth_f16_u16, "hUs", "n")
+BUILTIN(__builtin_neon_vcvth_f16_u32, "hUi", "n")
+BUILTIN(__builtin_neon_vcvth_f16_u64, "hUWi", "n")
+BUILTIN(__builtin_neon_vcvth_n_f16_s16, "hsIi", "n")
+BUILTIN(__builtin_neon_vcvth_n_f16_s32, "hiIi", "n")
+BUILTIN(__builtin_neon_vcvth_n_f16_s64, "hWiIi", "n")
+BUILTIN(__builtin_neon_vcvth_n_f16_u16, "hUsIi", "n")
+BUILTIN(__builtin_neon_vcvth_n_f16_u32, "hUiIi", "n")
+BUILTIN(__builtin_neon_vcvth_n_f16_u64, "hUWiIi", "n")
+BUILTIN(__builtin_neon_vcvth_n_s16_f16, "shIi", "n")
+BUILTIN(__builtin_neon_vcvth_n_s32_f16, "ihIi", "n")
+BUILTIN(__builtin_neon_vcvth_n_s64_f16, "WihIi", "n")
+BUILTIN(__builtin_neon_vcvth_n_u16_f16, "UshIi", "n")
+BUILTIN(__builtin_neon_vcvth_n_u32_f16, "UihIi", "n")
+BUILTIN(__builtin_neon_vcvth_n_u64_f16, "UWihIi", "n")
+BUILTIN(__builtin_neon_vcvth_s16_f16, "sh", "n")
+BUILTIN(__builtin_neon_vcvth_s32_f16, "ih", "n")
+BUILTIN(__builtin_neon_vcvth_s64_f16, "Wih", "n")
+BUILTIN(__builtin_neon_vcvth_u16_f16, "Ush", "n")
+BUILTIN(__builtin_neon_vcvth_u32_f16, "Uih", "n")
+BUILTIN(__builtin_neon_vcvth_u64_f16, "UWih", "n")
+BUILTIN(__builtin_neon_vcvtmh_s16_f16, "sh", "n")
+BUILTIN(__builtin_neon_vcvtmh_s32_f16, "ih", "n")
+BUILTIN(__builtin_neon_vcvtmh_s64_f16, "Wih", "n")
+BUILTIN(__builtin_neon_vcvtmh_u16_f16, "Ush", "n")
+BUILTIN(__builtin_neon_vcvtmh_u32_f16, "Uih", "n")
+BUILTIN(__builtin_neon_vcvtmh_u64_f16, "UWih", "n")
+BUILTIN(__builtin_neon_vcvtnh_s16_f16, "sh", "n")
+BUILTIN(__builtin_neon_vcvtnh_s32_f16, "ih", "n")
+BUILTIN(__builtin_neon_vcvtnh_s64_f16, "Wih", "n")
+BUILTIN(__builtin_neon_vcvtnh_u16_f16, "Ush", "n")
+BUILTIN(__builtin_neon_vcvtnh_u32_f16, "Uih", "n")
+BUILTIN(__builtin_neon_vcvtnh_u64_f16, "UWih", "n")
+BUILTIN(__builtin_neon_vcvtph_s16_f16, "sh", "n")
+BUILTIN(__builtin_neon_vcvtph_s32_f16, "ih", "n")
+BUILTIN(__builtin_neon_vcvtph_s64_f16, "Wih", "n")
+BUILTIN(__builtin_neon_vcvtph_u16_f16, "Ush", "n")
+BUILTIN(__builtin_neon_vcvtph_u32_f16, "Uih", "n")
+BUILTIN(__builtin_neon_vcvtph_u64_f16, "UWih", "n")
+BUILTIN(__builtin_neon_vdivh_f16, "hhh", "n")
+BUILTIN(__builtin_neon_vfmah_f16, "hhhh", "n")
+BUILTIN(__builtin_neon_vfmsh_f16, "hhhh", "n")
+BUILTIN(__builtin_neon_vmaxh_f16, "hhh", "n")
+BUILTIN(__builtin_neon_vmaxnmh_f16, "hhh", "n")
+BUILTIN(__builtin_neon_vminh_f16, "hhh", "n")
+BUILTIN(__builtin_neon_vminnmh_f16, "hhh", "n")
+BUILTIN(__builtin_neon_vmulh_f16, "hhh", "n")
+BUILTIN(__builtin_neon_vmulxh_f16, "hhh", "n")
+BUILTIN(__builtin_neon_vnegh_f16, "hh", "n")
+BUILTIN(__builtin_neon_vrecpeh_f16, "hh", "n")
+BUILTIN(__builtin_neon_vrecpsh_f16, "hhh", "n")
+BUILTIN(__builtin_neon_vrecpxh_f16, "hh", "n")
+BUILTIN(__builtin_neon_vrndah_f16, "hh", "n")
+BUILTIN(__builtin_neon_vrndh_f16, "hh", "n")
+BUILTIN(__builtin_neon_vrndih_f16, "hh", "n")
+BUILTIN(__builtin_neon_vrndmh_f16, "hh", "n")
+BUILTIN(__builtin_neon_vrndnh_f16, "hh", "n")
+BUILTIN(__builtin_neon_vrndph_f16, "hh", "n")
+BUILTIN(__builtin_neon_vrndxh_f16, "hh", "n")
+BUILTIN(__builtin_neon_vrsqrteh_f16, "hh", "n")
+BUILTIN(__builtin_neon_vrsqrtsh_f16, "hhh", "n")
+BUILTIN(__builtin_neon_vsqrth_f16, "hh", "n")
+BUILTIN(__builtin_neon_vsubh_f16, "hhh", "n")
+#endif
+
+#ifdef GET_NEON_OVERLOAD_CHECK
+#endif
+
+#ifdef GET_NEON_IMMEDIATE_CHECK
+case NEON::BI__builtin_neon_vcvth_n_s32_f16: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vcvth_n_s64_f16: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vcvth_n_s16_f16: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vcvth_n_u32_f16: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vcvth_n_u64_f16: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vcvth_n_u16_f16: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vcvth_n_f16_u32: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vcvth_n_f16_u64: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vcvth_n_f16_u16: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vcvth_n_f16_s32: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vcvth_n_f16_s64: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vcvth_n_f16_s16: i = 1; l = 1; u = 15; break;
+#endif
+
diff --git a/clang-r353983/include/clang/Basic/arm_neon.inc b/clang-r353983/include/clang/Basic/arm_neon.inc
new file mode 100644
index 00000000..d62c1c65
--- /dev/null
+++ b/clang-r353983/include/clang/Basic/arm_neon.inc
@@ -0,0 +1,1248 @@
+#ifdef GET_NEON_BUILTINS
+BUILTIN(__builtin_neon_vabd_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vabdd_f64, "ddd", "n")
+BUILTIN(__builtin_neon_vabdq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vabds_f32, "fff", "n")
+BUILTIN(__builtin_neon_vabs_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vabsd_s64, "WiWi", "n")
+BUILTIN(__builtin_neon_vabsq_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vaddd_s64, "WiWiWi", "n")
+BUILTIN(__builtin_neon_vaddd_u64, "UWiUWiUWi", "n")
+BUILTIN(__builtin_neon_vaddhn_v, "V8ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vaddlv_s16, "iV4s", "n")
+BUILTIN(__builtin_neon_vaddlv_s32, "WiV2i", "n")
+BUILTIN(__builtin_neon_vaddlv_s8, "sV8Sc", "n")
+BUILTIN(__builtin_neon_vaddlv_u16, "UiV4Us", "n")
+BUILTIN(__builtin_neon_vaddlv_u32, "UWiV2Ui", "n")
+BUILTIN(__builtin_neon_vaddlv_u8, "UsV8Sc", "n")
+BUILTIN(__builtin_neon_vaddlvq_s16, "iV8s", "n")
+BUILTIN(__builtin_neon_vaddlvq_s32, "WiV4i", "n")
+BUILTIN(__builtin_neon_vaddlvq_s8, "sV16Sc", "n")
+BUILTIN(__builtin_neon_vaddlvq_u16, "UiV8Us", "n")
+BUILTIN(__builtin_neon_vaddlvq_u32, "UWiV4Ui", "n")
+BUILTIN(__builtin_neon_vaddlvq_u8, "UsV16Sc", "n")
+BUILTIN(__builtin_neon_vaddv_f32, "fV2f", "n")
+BUILTIN(__builtin_neon_vaddv_s16, "sV4s", "n")
+BUILTIN(__builtin_neon_vaddv_s32, "iV2i", "n")
+BUILTIN(__builtin_neon_vaddv_s8, "ScV8Sc", "n")
+BUILTIN(__builtin_neon_vaddv_u16, "UsV4Us", "n")
+BUILTIN(__builtin_neon_vaddv_u32, "UiV2Ui", "n")
+BUILTIN(__builtin_neon_vaddv_u8, "ScV8Sc", "n")
+BUILTIN(__builtin_neon_vaddvq_f32, "fV4f", "n")
+BUILTIN(__builtin_neon_vaddvq_f64, "dV2d", "n")
+BUILTIN(__builtin_neon_vaddvq_s16, "sV8s", "n")
+BUILTIN(__builtin_neon_vaddvq_s32, "iV4i", "n")
+BUILTIN(__builtin_neon_vaddvq_s64, "WiV2Wi", "n")
+BUILTIN(__builtin_neon_vaddvq_s8, "ScV16Sc", "n")
+BUILTIN(__builtin_neon_vaddvq_u16, "UsV8Us", "n")
+BUILTIN(__builtin_neon_vaddvq_u32, "UiV4Ui", "n")
+BUILTIN(__builtin_neon_vaddvq_u64, "UWiV2UWi", "n")
+BUILTIN(__builtin_neon_vaddvq_u8, "ScV16Sc", "n")
+BUILTIN(__builtin_neon_vaesdq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vaeseq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vaesimcq_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vaesmcq_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vbsl_v, "V8ScV8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vbslq_v, "V16ScV16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcage_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcaged_f64, "UWidd", "n")
+BUILTIN(__builtin_neon_vcageq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcages_f32, "Uiff", "n")
+BUILTIN(__builtin_neon_vcagt_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcagtd_f64, "UWidd", "n")
+BUILTIN(__builtin_neon_vcagtq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcagts_f32, "Uiff", "n")
+BUILTIN(__builtin_neon_vcale_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcaled_f64, "UWidd", "n")
+BUILTIN(__builtin_neon_vcaleq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcales_f32, "Uiff", "n")
+BUILTIN(__builtin_neon_vcalt_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcaltd_f64, "UWidd", "n")
+BUILTIN(__builtin_neon_vcaltq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcalts_f32, "Uiff", "n")
+BUILTIN(__builtin_neon_vceqd_f64, "UWidd", "n")
+BUILTIN(__builtin_neon_vceqd_s64, "WiWiWi", "n")
+BUILTIN(__builtin_neon_vceqd_u64, "UWiUWiUWi", "n")
+BUILTIN(__builtin_neon_vceqs_f32, "Uiff", "n")
+BUILTIN(__builtin_neon_vceqz_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vceqzd_f64, "UWid", "n")
+BUILTIN(__builtin_neon_vceqzd_s64, "WiWi", "n")
+BUILTIN(__builtin_neon_vceqzd_u64, "UWiUWi", "n")
+BUILTIN(__builtin_neon_vceqzq_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vceqzs_f32, "Uif", "n")
+BUILTIN(__builtin_neon_vcged_f64, "UWidd", "n")
+BUILTIN(__builtin_neon_vcged_s64, "WiWiWi", "n")
+BUILTIN(__builtin_neon_vcged_u64, "UWiUWiUWi", "n")
+BUILTIN(__builtin_neon_vcges_f32, "Uiff", "n")
+BUILTIN(__builtin_neon_vcgez_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcgezd_f64, "UWid", "n")
+BUILTIN(__builtin_neon_vcgezd_s64, "WiWi", "n")
+BUILTIN(__builtin_neon_vcgezq_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcgezs_f32, "Uif", "n")
+BUILTIN(__builtin_neon_vcgtd_f64, "UWidd", "n")
+BUILTIN(__builtin_neon_vcgtd_s64, "WiWiWi", "n")
+BUILTIN(__builtin_neon_vcgtd_u64, "UWiUWiUWi", "n")
+BUILTIN(__builtin_neon_vcgts_f32, "Uiff", "n")
+BUILTIN(__builtin_neon_vcgtz_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcgtzd_f64, "UWid", "n")
+BUILTIN(__builtin_neon_vcgtzd_s64, "WiWi", "n")
+BUILTIN(__builtin_neon_vcgtzq_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcgtzs_f32, "Uif", "n")
+BUILTIN(__builtin_neon_vcled_f64, "UWidd", "n")
+BUILTIN(__builtin_neon_vcled_s64, "WiWiWi", "n")
+BUILTIN(__builtin_neon_vcled_u64, "UWiUWiUWi", "n")
+BUILTIN(__builtin_neon_vcles_f32, "Uiff", "n")
+BUILTIN(__builtin_neon_vclez_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vclezd_f64, "UWid", "n")
+BUILTIN(__builtin_neon_vclezd_s64, "WiWi", "n")
+BUILTIN(__builtin_neon_vclezq_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vclezs_f32, "Uif", "n")
+BUILTIN(__builtin_neon_vcls_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vclsq_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcltd_f64, "UWidd", "n")
+BUILTIN(__builtin_neon_vcltd_s64, "WiWiWi", "n")
+BUILTIN(__builtin_neon_vcltd_u64, "UWiUWiUWi", "n")
+BUILTIN(__builtin_neon_vclts_f32, "Uiff", "n")
+BUILTIN(__builtin_neon_vcltz_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcltzd_f64, "UWid", "n")
+BUILTIN(__builtin_neon_vcltzd_s64, "WiWi", "n")
+BUILTIN(__builtin_neon_vcltzq_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcltzs_f32, "Uif", "n")
+BUILTIN(__builtin_neon_vclz_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vclzq_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcnt_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcntq_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvt_f16_f32, "V8ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvt_f16_v, "V4hV8Sci", "n")
+BUILTIN(__builtin_neon_vcvt_f32_f16, "V16ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcvt_f32_f64, "V8ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvt_f32_v, "V2fV8Sci", "n")
+BUILTIN(__builtin_neon_vcvt_f64_f32, "V16ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcvt_f64_v, "V1dV8Sci", "n")
+BUILTIN(__builtin_neon_vcvt_n_f16_v, "V4hV8ScIii", "n")
+BUILTIN(__builtin_neon_vcvt_n_f32_v, "V2fV8ScIii", "n")
+BUILTIN(__builtin_neon_vcvt_n_f64_v, "V1dV8ScIii", "n")
+BUILTIN(__builtin_neon_vcvt_n_s16_v, "V8ScV8ScIii", "n")
+BUILTIN(__builtin_neon_vcvt_n_s32_v, "V8ScV8ScIii", "n")
+BUILTIN(__builtin_neon_vcvt_n_s64_v, "V8ScV8ScIii", "n")
+BUILTIN(__builtin_neon_vcvt_n_u16_v, "V8ScV8ScIii", "n")
+BUILTIN(__builtin_neon_vcvt_n_u32_v, "V8ScV8ScIii", "n")
+BUILTIN(__builtin_neon_vcvt_n_u64_v, "V8ScV8ScIii", "n")
+BUILTIN(__builtin_neon_vcvt_s16_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcvt_s32_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcvt_s64_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcvt_u16_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcvt_u32_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcvt_u64_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcvta_s16_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcvta_s32_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcvta_s64_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcvta_u16_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcvta_u32_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcvta_u64_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcvtad_s64_f64, "Wid", "n")
+BUILTIN(__builtin_neon_vcvtad_u64_f64, "UWid", "n")
+BUILTIN(__builtin_neon_vcvtaq_s16_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtaq_s32_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtaq_s64_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtaq_u16_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtaq_u32_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtaq_u64_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtas_s32_f32, "if", "n")
+BUILTIN(__builtin_neon_vcvtas_u32_f32, "Uif", "n")
+BUILTIN(__builtin_neon_vcvtd_f64_s64, "dWi", "n")
+BUILTIN(__builtin_neon_vcvtd_f64_u64, "dUWi", "n")
+BUILTIN(__builtin_neon_vcvtd_n_f64_s64, "dWiIi", "n")
+BUILTIN(__builtin_neon_vcvtd_n_f64_u64, "dUWiIi", "n")
+BUILTIN(__builtin_neon_vcvtd_n_s64_f64, "WidIi", "n")
+BUILTIN(__builtin_neon_vcvtd_n_u64_f64, "UWidIi", "n")
+BUILTIN(__builtin_neon_vcvtd_s64_f64, "Wid", "n")
+BUILTIN(__builtin_neon_vcvtd_u64_f64, "UWid", "n")
+BUILTIN(__builtin_neon_vcvtm_s16_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcvtm_s32_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcvtm_s64_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcvtm_u16_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcvtm_u32_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcvtm_u64_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcvtmd_s64_f64, "Wid", "n")
+BUILTIN(__builtin_neon_vcvtmd_u64_f64, "UWid", "n")
+BUILTIN(__builtin_neon_vcvtmq_s16_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtmq_s32_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtmq_s64_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtmq_u16_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtmq_u32_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtmq_u64_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtms_s32_f32, "if", "n")
+BUILTIN(__builtin_neon_vcvtms_u32_f32, "Uif", "n")
+BUILTIN(__builtin_neon_vcvtn_s16_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcvtn_s32_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcvtn_s64_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcvtn_u16_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcvtn_u32_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcvtn_u64_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcvtnd_s64_f64, "Wid", "n")
+BUILTIN(__builtin_neon_vcvtnd_u64_f64, "UWid", "n")
+BUILTIN(__builtin_neon_vcvtnq_s16_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtnq_s32_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtnq_s64_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtnq_u16_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtnq_u32_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtnq_u64_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtns_s32_f32, "if", "n")
+BUILTIN(__builtin_neon_vcvtns_u32_f32, "Uif", "n")
+BUILTIN(__builtin_neon_vcvtp_s16_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcvtp_s32_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcvtp_s64_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcvtp_u16_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcvtp_u32_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcvtp_u64_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vcvtpd_s64_f64, "Wid", "n")
+BUILTIN(__builtin_neon_vcvtpd_u64_f64, "UWid", "n")
+BUILTIN(__builtin_neon_vcvtpq_s16_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtpq_s32_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtpq_s64_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtpq_u16_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtpq_u32_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtpq_u64_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtps_s32_f32, "if", "n")
+BUILTIN(__builtin_neon_vcvtps_u32_f32, "Uif", "n")
+BUILTIN(__builtin_neon_vcvtq_f16_v, "V8hV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtq_f32_v, "V4fV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtq_f64_v, "V2dV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtq_n_f16_v, "V8hV16ScIii", "n")
+BUILTIN(__builtin_neon_vcvtq_n_f32_v, "V4fV16ScIii", "n")
+BUILTIN(__builtin_neon_vcvtq_n_f64_v, "V2dV16ScIii", "n")
+BUILTIN(__builtin_neon_vcvtq_n_s16_v, "V16ScV16ScIii", "n")
+BUILTIN(__builtin_neon_vcvtq_n_s32_v, "V16ScV16ScIii", "n")
+BUILTIN(__builtin_neon_vcvtq_n_s64_v, "V16ScV16ScIii", "n")
+BUILTIN(__builtin_neon_vcvtq_n_u16_v, "V16ScV16ScIii", "n")
+BUILTIN(__builtin_neon_vcvtq_n_u32_v, "V16ScV16ScIii", "n")
+BUILTIN(__builtin_neon_vcvtq_n_u64_v, "V16ScV16ScIii", "n")
+BUILTIN(__builtin_neon_vcvtq_s16_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtq_s32_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtq_s64_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtq_u16_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtq_u32_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtq_u64_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vcvts_f32_s32, "fi", "n")
+BUILTIN(__builtin_neon_vcvts_f32_u32, "fUi", "n")
+BUILTIN(__builtin_neon_vcvts_n_f32_s32, "fiIi", "n")
+BUILTIN(__builtin_neon_vcvts_n_f32_u32, "fUiIi", "n")
+BUILTIN(__builtin_neon_vcvts_n_s32_f32, "ifIi", "n")
+BUILTIN(__builtin_neon_vcvts_n_u32_f32, "UifIi", "n")
+BUILTIN(__builtin_neon_vcvts_s32_f32, "if", "n")
+BUILTIN(__builtin_neon_vcvts_u32_f32, "Uif", "n")
+BUILTIN(__builtin_neon_vcvtx_f32_v, "V2fV16Sci", "n")
+BUILTIN(__builtin_neon_vcvtxd_f32_f64, "fd", "n")
+BUILTIN(__builtin_neon_vdot_v, "V8ScV8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vdotq_v, "V16ScV16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vdupb_lane_i8, "ScV8ScIi", "n")
+BUILTIN(__builtin_neon_vdupb_laneq_i8, "ScV16ScIi", "n")
+BUILTIN(__builtin_neon_vdupd_lane_f64, "dV1dIi", "n")
+BUILTIN(__builtin_neon_vdupd_lane_i64, "UWiV1WiIi", "n")
+BUILTIN(__builtin_neon_vdupd_laneq_f64, "dV2dIi", "n")
+BUILTIN(__builtin_neon_vdupd_laneq_i64, "UWiV2WiIi", "n")
+BUILTIN(__builtin_neon_vduph_lane_f16, "hV4hIi", "n")
+BUILTIN(__builtin_neon_vduph_lane_i16, "UsV4sIi", "n")
+BUILTIN(__builtin_neon_vduph_laneq_f16, "hV8hIi", "n")
+BUILTIN(__builtin_neon_vduph_laneq_i16, "UsV8sIi", "n")
+BUILTIN(__builtin_neon_vdups_lane_f32, "fV2fIi", "n")
+BUILTIN(__builtin_neon_vdups_lane_i32, "UiV2iIi", "n")
+BUILTIN(__builtin_neon_vdups_laneq_f32, "fV4fIi", "n")
+BUILTIN(__builtin_neon_vdups_laneq_i32, "UiV4iIi", "n")
+BUILTIN(__builtin_neon_vext_v, "V8ScV8ScV8ScIii", "n")
+BUILTIN(__builtin_neon_vextq_v, "V16ScV16ScV16ScIii", "n")
+BUILTIN(__builtin_neon_vfma_lane_v, "V8ScV8ScV8ScV8ScIii", "n")
+BUILTIN(__builtin_neon_vfma_laneq_v, "V8ScV8ScV8ScV16ScIii", "n")
+BUILTIN(__builtin_neon_vfma_v, "V8ScV8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vfmad_lane_f64, "dddV1dIi", "n")
+BUILTIN(__builtin_neon_vfmad_laneq_f64, "dddV2dIi", "n")
+BUILTIN(__builtin_neon_vfmah_lane_f16, "hhhV4hIi", "n")
+BUILTIN(__builtin_neon_vfmah_laneq_f16, "hhhV8hIi", "n")
+BUILTIN(__builtin_neon_vfmaq_lane_v, "V16ScV16ScV16ScV8ScIii", "n")
+BUILTIN(__builtin_neon_vfmaq_laneq_v, "V16ScV16ScV16ScV16ScIii", "n")
+BUILTIN(__builtin_neon_vfmaq_v, "V16ScV16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vfmas_lane_f32, "fffV2fIi", "n")
+BUILTIN(__builtin_neon_vfmas_laneq_f32, "fffV4fIi", "n")
+BUILTIN(__builtin_neon_vfmlal_high_v, "V2fV2fV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vfmlal_low_v, "V2fV2fV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vfmlalq_high_v, "V4fV4fV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vfmlalq_low_v, "V4fV4fV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vfmlsl_high_v, "V2fV2fV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vfmlsl_low_v, "V2fV2fV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vfmlslq_high_v, "V4fV4fV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vfmlslq_low_v, "V4fV4fV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vget_lane_f32, "fV2fIi", "n")
+BUILTIN(__builtin_neon_vget_lane_f64, "dV1dIi", "n")
+BUILTIN(__builtin_neon_vget_lane_i16, "UsV4sIi", "n")
+BUILTIN(__builtin_neon_vget_lane_i32, "UiV2iIi", "n")
+BUILTIN(__builtin_neon_vget_lane_i64, "UWiV1WiIi", "n")
+BUILTIN(__builtin_neon_vget_lane_i8, "ScV8ScIi", "n")
+BUILTIN(__builtin_neon_vgetq_lane_f32, "fV4fIi", "n")
+BUILTIN(__builtin_neon_vgetq_lane_f64, "dV2dIi", "n")
+BUILTIN(__builtin_neon_vgetq_lane_i16, "UsV8sIi", "n")
+BUILTIN(__builtin_neon_vgetq_lane_i32, "UiV4iIi", "n")
+BUILTIN(__builtin_neon_vgetq_lane_i64, "UWiV2WiIi", "n")
+BUILTIN(__builtin_neon_vgetq_lane_i8, "ScV16ScIi", "n")
+BUILTIN(__builtin_neon_vhadd_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vhaddq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vhsub_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vhsubq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vld1_dup_v, "V8ScvC*i", "n")
+BUILTIN(__builtin_neon_vld1_lane_v, "V8ScvC*V8ScIii", "n")
+BUILTIN(__builtin_neon_vld1_v, "V8ScvC*i", "n")
+BUILTIN(__builtin_neon_vld1_x2_v, "vv*vC*i", "n")
+BUILTIN(__builtin_neon_vld1_x3_v, "vv*vC*i", "n")
+BUILTIN(__builtin_neon_vld1_x4_v, "vv*vC*i", "n")
+BUILTIN(__builtin_neon_vld1q_dup_v, "V16ScvC*i", "n")
+BUILTIN(__builtin_neon_vld1q_lane_v, "V16ScvC*V16ScIii", "n")
+BUILTIN(__builtin_neon_vld1q_v, "V16ScvC*i", "n")
+BUILTIN(__builtin_neon_vld1q_x2_v, "vv*vC*i", "n")
+BUILTIN(__builtin_neon_vld1q_x3_v, "vv*vC*i", "n")
+BUILTIN(__builtin_neon_vld1q_x4_v, "vv*vC*i", "n")
+BUILTIN(__builtin_neon_vld2_dup_v, "vv*vC*i", "n")
+BUILTIN(__builtin_neon_vld2_lane_v, "vv*vC*V8ScV8ScIii", "n")
+BUILTIN(__builtin_neon_vld2_v, "vv*vC*i", "n")
+BUILTIN(__builtin_neon_vld2q_dup_v, "vv*vC*i", "n")
+BUILTIN(__builtin_neon_vld2q_lane_v, "vv*vC*V16ScV16ScIii", "n")
+BUILTIN(__builtin_neon_vld2q_v, "vv*vC*i", "n")
+BUILTIN(__builtin_neon_vld3_dup_v, "vv*vC*i", "n")
+BUILTIN(__builtin_neon_vld3_lane_v, "vv*vC*V8ScV8ScV8ScIii", "n")
+BUILTIN(__builtin_neon_vld3_v, "vv*vC*i", "n")
+BUILTIN(__builtin_neon_vld3q_dup_v, "vv*vC*i", "n")
+BUILTIN(__builtin_neon_vld3q_lane_v, "vv*vC*V16ScV16ScV16ScIii", "n")
+BUILTIN(__builtin_neon_vld3q_v, "vv*vC*i", "n")
+BUILTIN(__builtin_neon_vld4_dup_v, "vv*vC*i", "n")
+BUILTIN(__builtin_neon_vld4_lane_v, "vv*vC*V8ScV8ScV8ScV8ScIii", "n")
+BUILTIN(__builtin_neon_vld4_v, "vv*vC*i", "n")
+BUILTIN(__builtin_neon_vld4q_dup_v, "vv*vC*i", "n")
+BUILTIN(__builtin_neon_vld4q_lane_v, "vv*vC*V16ScV16ScV16ScV16ScIii", "n")
+BUILTIN(__builtin_neon_vld4q_v, "vv*vC*i", "n")
+BUILTIN(__builtin_neon_vldrq_p128, "ULLLivC*", "n")
+BUILTIN(__builtin_neon_vmax_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vmaxnm_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vmaxnmq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vmaxnmv_f16, "hV8Sc", "n")
+BUILTIN(__builtin_neon_vmaxnmv_f32, "fV2f", "n")
+BUILTIN(__builtin_neon_vmaxnmvq_f16, "hV16Sc", "n")
+BUILTIN(__builtin_neon_vmaxnmvq_f32, "fV4f", "n")
+BUILTIN(__builtin_neon_vmaxnmvq_f64, "dV2d", "n")
+BUILTIN(__builtin_neon_vmaxq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vmaxv_f16, "hV8Sc", "n")
+BUILTIN(__builtin_neon_vmaxv_f32, "fV2f", "n")
+BUILTIN(__builtin_neon_vmaxv_s16, "sV4s", "n")
+BUILTIN(__builtin_neon_vmaxv_s32, "iV2i", "n")
+BUILTIN(__builtin_neon_vmaxv_s8, "ScV8Sc", "n")
+BUILTIN(__builtin_neon_vmaxv_u16, "UsV4Us", "n")
+BUILTIN(__builtin_neon_vmaxv_u32, "UiV2Ui", "n")
+BUILTIN(__builtin_neon_vmaxv_u8, "ScV8Sc", "n")
+BUILTIN(__builtin_neon_vmaxvq_f16, "hV16Sc", "n")
+BUILTIN(__builtin_neon_vmaxvq_f32, "fV4f", "n")
+BUILTIN(__builtin_neon_vmaxvq_f64, "dV2d", "n")
+BUILTIN(__builtin_neon_vmaxvq_s16, "sV8s", "n")
+BUILTIN(__builtin_neon_vmaxvq_s32, "iV4i", "n")
+BUILTIN(__builtin_neon_vmaxvq_s8, "ScV16Sc", "n")
+BUILTIN(__builtin_neon_vmaxvq_u16, "UsV8Us", "n")
+BUILTIN(__builtin_neon_vmaxvq_u32, "UiV4Ui", "n")
+BUILTIN(__builtin_neon_vmaxvq_u8, "ScV16Sc", "n")
+BUILTIN(__builtin_neon_vmin_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vminnm_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vminnmq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vminnmv_f16, "hV8Sc", "n")
+BUILTIN(__builtin_neon_vminnmv_f32, "fV2f", "n")
+BUILTIN(__builtin_neon_vminnmvq_f16, "hV16Sc", "n")
+BUILTIN(__builtin_neon_vminnmvq_f32, "fV4f", "n")
+BUILTIN(__builtin_neon_vminnmvq_f64, "dV2d", "n")
+BUILTIN(__builtin_neon_vminq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vminv_f16, "hV8Sc", "n")
+BUILTIN(__builtin_neon_vminv_f32, "fV2f", "n")
+BUILTIN(__builtin_neon_vminv_s16, "sV4s", "n")
+BUILTIN(__builtin_neon_vminv_s32, "iV2i", "n")
+BUILTIN(__builtin_neon_vminv_s8, "ScV8Sc", "n")
+BUILTIN(__builtin_neon_vminv_u16, "UsV4Us", "n")
+BUILTIN(__builtin_neon_vminv_u32, "UiV2Ui", "n")
+BUILTIN(__builtin_neon_vminv_u8, "ScV8Sc", "n")
+BUILTIN(__builtin_neon_vminvq_f16, "hV16Sc", "n")
+BUILTIN(__builtin_neon_vminvq_f32, "fV4f", "n")
+BUILTIN(__builtin_neon_vminvq_f64, "dV2d", "n")
+BUILTIN(__builtin_neon_vminvq_s16, "sV8s", "n")
+BUILTIN(__builtin_neon_vminvq_s32, "iV4i", "n")
+BUILTIN(__builtin_neon_vminvq_s8, "ScV16Sc", "n")
+BUILTIN(__builtin_neon_vminvq_u16, "UsV8Us", "n")
+BUILTIN(__builtin_neon_vminvq_u32, "UiV4Ui", "n")
+BUILTIN(__builtin_neon_vminvq_u8, "ScV16Sc", "n")
+BUILTIN(__builtin_neon_vmovl_v, "V16ScV8Sci", "n")
+BUILTIN(__builtin_neon_vmovn_v, "V8ScV16Sci", "n")
+BUILTIN(__builtin_neon_vmul_lane_v, "V8ScV8ScV8ScIii", "n")
+BUILTIN(__builtin_neon_vmul_laneq_v, "V8ScV8ScV16ScIii", "n")
+BUILTIN(__builtin_neon_vmul_n_f64, "V1dV1dd", "n")
+BUILTIN(__builtin_neon_vmul_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vmull_p64, "ULLLiUWiUWi", "n")
+BUILTIN(__builtin_neon_vmull_v, "V16ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vmulq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vmulx_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vmulxd_f64, "ddd", "n")
+BUILTIN(__builtin_neon_vmulxh_lane_f16, "hhV4hIi", "n")
+BUILTIN(__builtin_neon_vmulxh_laneq_f16, "hhV8hIi", "n")
+BUILTIN(__builtin_neon_vmulxq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vmulxs_f32, "fff", "n")
+BUILTIN(__builtin_neon_vnegd_s64, "WiWi", "n")
+BUILTIN(__builtin_neon_vpadal_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vpadalq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vpadd_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vpaddd_f64, "dV2d", "n")
+BUILTIN(__builtin_neon_vpaddd_s64, "WiV2Wi", "n")
+BUILTIN(__builtin_neon_vpaddd_u64, "UWiV2UWi", "n")
+BUILTIN(__builtin_neon_vpaddl_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vpaddlq_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vpaddq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vpadds_f32, "fV2f", "n")
+BUILTIN(__builtin_neon_vpmax_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vpmaxnm_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vpmaxnmq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vpmaxnmqd_f64, "dV2d", "n")
+BUILTIN(__builtin_neon_vpmaxnms_f32, "fV2f", "n")
+BUILTIN(__builtin_neon_vpmaxq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vpmaxqd_f64, "dV2d", "n")
+BUILTIN(__builtin_neon_vpmaxs_f32, "fV2f", "n")
+BUILTIN(__builtin_neon_vpmin_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vpminnm_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vpminnmq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vpminnmqd_f64, "dV2d", "n")
+BUILTIN(__builtin_neon_vpminnms_f32, "fV2f", "n")
+BUILTIN(__builtin_neon_vpminq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vpminqd_f64, "dV2d", "n")
+BUILTIN(__builtin_neon_vpmins_f32, "fV2f", "n")
+BUILTIN(__builtin_neon_vqabs_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vqabsb_s8, "ScSc", "n")
+BUILTIN(__builtin_neon_vqabsd_s64, "WiWi", "n")
+BUILTIN(__builtin_neon_vqabsh_s16, "ss", "n")
+BUILTIN(__builtin_neon_vqabsq_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vqabss_s32, "ii", "n")
+BUILTIN(__builtin_neon_vqadd_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vqaddb_s8, "ScScSc", "n")
+BUILTIN(__builtin_neon_vqaddb_u8, "ScScSc", "n")
+BUILTIN(__builtin_neon_vqaddd_s64, "WiWiWi", "n")
+BUILTIN(__builtin_neon_vqaddd_u64, "UWiUWiUWi", "n")
+BUILTIN(__builtin_neon_vqaddh_s16, "sss", "n")
+BUILTIN(__builtin_neon_vqaddh_u16, "UsUsUs", "n")
+BUILTIN(__builtin_neon_vqaddq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vqadds_s32, "iii", "n")
+BUILTIN(__builtin_neon_vqadds_u32, "UiUiUi", "n")
+BUILTIN(__builtin_neon_vqdmlal_v, "V16ScV16ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vqdmlalh_lane_s16, "iisV4sIi", "n")
+BUILTIN(__builtin_neon_vqdmlalh_laneq_s16, "iisV8sIi", "n")
+BUILTIN(__builtin_neon_vqdmlalh_s16, "iiss", "n")
+BUILTIN(__builtin_neon_vqdmlals_lane_s32, "WiWiiV2iIi", "n")
+BUILTIN(__builtin_neon_vqdmlals_laneq_s32, "WiWiiV4iIi", "n")
+BUILTIN(__builtin_neon_vqdmlals_s32, "WiWiii", "n")
+BUILTIN(__builtin_neon_vqdmlsl_v, "V16ScV16ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vqdmlslh_lane_s16, "iisV4sIi", "n")
+BUILTIN(__builtin_neon_vqdmlslh_laneq_s16, "iisV8sIi", "n")
+BUILTIN(__builtin_neon_vqdmlslh_s16, "iiss", "n")
+BUILTIN(__builtin_neon_vqdmlsls_lane_s32, "WiWiiV2iIi", "n")
+BUILTIN(__builtin_neon_vqdmlsls_laneq_s32, "WiWiiV4iIi", "n")
+BUILTIN(__builtin_neon_vqdmlsls_s32, "WiWiii", "n")
+BUILTIN(__builtin_neon_vqdmulh_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vqdmulhh_s16, "sss", "n")
+BUILTIN(__builtin_neon_vqdmulhq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vqdmulhs_s32, "iii", "n")
+BUILTIN(__builtin_neon_vqdmull_v, "V16ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vqdmullh_s16, "iss", "n")
+BUILTIN(__builtin_neon_vqdmulls_s32, "Wiii", "n")
+BUILTIN(__builtin_neon_vqmovn_v, "V8ScV16Sci", "n")
+BUILTIN(__builtin_neon_vqmovnd_s64, "iWi", "n")
+BUILTIN(__builtin_neon_vqmovnd_u64, "UiUWi", "n")
+BUILTIN(__builtin_neon_vqmovnh_s16, "Scs", "n")
+BUILTIN(__builtin_neon_vqmovnh_u16, "ScUs", "n")
+BUILTIN(__builtin_neon_vqmovns_s32, "si", "n")
+BUILTIN(__builtin_neon_vqmovns_u32, "UsUi", "n")
+BUILTIN(__builtin_neon_vqmovun_v, "V8ScV16Sci", "n")
+BUILTIN(__builtin_neon_vqmovund_s64, "iWi", "n")
+BUILTIN(__builtin_neon_vqmovunh_s16, "Scs", "n")
+BUILTIN(__builtin_neon_vqmovuns_s32, "si", "n")
+BUILTIN(__builtin_neon_vqneg_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vqnegb_s8, "ScSc", "n")
+BUILTIN(__builtin_neon_vqnegd_s64, "WiWi", "n")
+BUILTIN(__builtin_neon_vqnegh_s16, "ss", "n")
+BUILTIN(__builtin_neon_vqnegq_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vqnegs_s32, "ii", "n")
+BUILTIN(__builtin_neon_vqrdmulh_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vqrdmulhh_s16, "sss", "n")
+BUILTIN(__builtin_neon_vqrdmulhq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vqrdmulhs_s32, "iii", "n")
+BUILTIN(__builtin_neon_vqrshl_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vqrshlb_s8, "ScScSc", "n")
+BUILTIN(__builtin_neon_vqrshlb_u8, "ScScSc", "n")
+BUILTIN(__builtin_neon_vqrshld_s64, "WiWiWi", "n")
+BUILTIN(__builtin_neon_vqrshld_u64, "UWiUWiUWi", "n")
+BUILTIN(__builtin_neon_vqrshlh_s16, "sss", "n")
+BUILTIN(__builtin_neon_vqrshlh_u16, "UsUsUs", "n")
+BUILTIN(__builtin_neon_vqrshlq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vqrshls_s32, "iii", "n")
+BUILTIN(__builtin_neon_vqrshls_u32, "UiUiUi", "n")
+BUILTIN(__builtin_neon_vqrshrn_n_v, "V8ScV16ScIii", "n")
+BUILTIN(__builtin_neon_vqrshrnd_n_s64, "iWiIi", "n")
+BUILTIN(__builtin_neon_vqrshrnd_n_u64, "UiUWiIi", "n")
+BUILTIN(__builtin_neon_vqrshrnh_n_s16, "ScsIi", "n")
+BUILTIN(__builtin_neon_vqrshrnh_n_u16, "ScUsIi", "n")
+BUILTIN(__builtin_neon_vqrshrns_n_s32, "siIi", "n")
+BUILTIN(__builtin_neon_vqrshrns_n_u32, "UsUiIi", "n")
+BUILTIN(__builtin_neon_vqrshrun_n_v, "V8ScV16ScIii", "n")
+BUILTIN(__builtin_neon_vqrshrund_n_s64, "iWiIi", "n")
+BUILTIN(__builtin_neon_vqrshrunh_n_s16, "ScsIi", "n")
+BUILTIN(__builtin_neon_vqrshruns_n_s32, "siIi", "n")
+BUILTIN(__builtin_neon_vqshl_n_v, "V8ScV8ScIii", "n")
+BUILTIN(__builtin_neon_vqshl_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vqshlb_n_s8, "ScScIi", "n")
+BUILTIN(__builtin_neon_vqshlb_n_u8, "ScScIi", "n")
+BUILTIN(__builtin_neon_vqshlb_s8, "ScScSc", "n")
+BUILTIN(__builtin_neon_vqshlb_u8, "ScScSc", "n")
+BUILTIN(__builtin_neon_vqshld_n_s64, "WiWiIi", "n")
+BUILTIN(__builtin_neon_vqshld_n_u64, "UWiUWiIi", "n")
+BUILTIN(__builtin_neon_vqshld_s64, "WiWiWi", "n")
+BUILTIN(__builtin_neon_vqshld_u64, "UWiUWiUWi", "n")
+BUILTIN(__builtin_neon_vqshlh_n_s16, "ssIi", "n")
+BUILTIN(__builtin_neon_vqshlh_n_u16, "UsUsIi", "n")
+BUILTIN(__builtin_neon_vqshlh_s16, "sss", "n")
+BUILTIN(__builtin_neon_vqshlh_u16, "UsUsUs", "n")
+BUILTIN(__builtin_neon_vqshlq_n_v, "V16ScV16ScIii", "n")
+BUILTIN(__builtin_neon_vqshlq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vqshls_n_s32, "iiIi", "n")
+BUILTIN(__builtin_neon_vqshls_n_u32, "UiUiIi", "n")
+BUILTIN(__builtin_neon_vqshls_s32, "iii", "n")
+BUILTIN(__builtin_neon_vqshls_u32, "UiUiUi", "n")
+BUILTIN(__builtin_neon_vqshlu_n_v, "V8ScV8ScIii", "n")
+BUILTIN(__builtin_neon_vqshlub_n_s8, "ScScIi", "n")
+BUILTIN(__builtin_neon_vqshlud_n_s64, "WiWiIi", "n")
+BUILTIN(__builtin_neon_vqshluh_n_s16, "ssIi", "n")
+BUILTIN(__builtin_neon_vqshluq_n_v, "V16ScV16ScIii", "n")
+BUILTIN(__builtin_neon_vqshlus_n_s32, "iiIi", "n")
+BUILTIN(__builtin_neon_vqshrn_n_v, "V8ScV16ScIii", "n")
+BUILTIN(__builtin_neon_vqshrnd_n_s64, "iWiIi", "n")
+BUILTIN(__builtin_neon_vqshrnd_n_u64, "UiUWiIi", "n")
+BUILTIN(__builtin_neon_vqshrnh_n_s16, "ScsIi", "n")
+BUILTIN(__builtin_neon_vqshrnh_n_u16, "ScUsIi", "n")
+BUILTIN(__builtin_neon_vqshrns_n_s32, "siIi", "n")
+BUILTIN(__builtin_neon_vqshrns_n_u32, "UsUiIi", "n")
+BUILTIN(__builtin_neon_vqshrun_n_v, "V8ScV16ScIii", "n")
+BUILTIN(__builtin_neon_vqshrund_n_s64, "iWiIi", "n")
+BUILTIN(__builtin_neon_vqshrunh_n_s16, "ScsIi", "n")
+BUILTIN(__builtin_neon_vqshruns_n_s32, "siIi", "n")
+BUILTIN(__builtin_neon_vqsub_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vqsubb_s8, "ScScSc", "n")
+BUILTIN(__builtin_neon_vqsubb_u8, "ScScSc", "n")
+BUILTIN(__builtin_neon_vqsubd_s64, "WiWiWi", "n")
+BUILTIN(__builtin_neon_vqsubd_u64, "UWiUWiUWi", "n")
+BUILTIN(__builtin_neon_vqsubh_s16, "sss", "n")
+BUILTIN(__builtin_neon_vqsubh_u16, "UsUsUs", "n")
+BUILTIN(__builtin_neon_vqsubq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vqsubs_s32, "iii", "n")
+BUILTIN(__builtin_neon_vqsubs_u32, "UiUiUi", "n")
+BUILTIN(__builtin_neon_vqtbl1_v, "V8ScV16ScV8Sci", "n")
+BUILTIN(__builtin_neon_vqtbl1q_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vqtbl2_v, "V8ScV16ScV16ScV8Sci", "n")
+BUILTIN(__builtin_neon_vqtbl2q_v, "V16ScV16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vqtbl3_v, "V8ScV16ScV16ScV16ScV8Sci", "n")
+BUILTIN(__builtin_neon_vqtbl3q_v, "V16ScV16ScV16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vqtbl4_v, "V8ScV16ScV16ScV16ScV16ScV8Sci", "n")
+BUILTIN(__builtin_neon_vqtbl4q_v, "V16ScV16ScV16ScV16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vqtbx1_v, "V8ScV8ScV16ScV8Sci", "n")
+BUILTIN(__builtin_neon_vqtbx1q_v, "V16ScV16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vqtbx2_v, "V8ScV8ScV16ScV16ScV8Sci", "n")
+BUILTIN(__builtin_neon_vqtbx2q_v, "V16ScV16ScV16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vqtbx3_v, "V8ScV8ScV16ScV16ScV16ScV8Sci", "n")
+BUILTIN(__builtin_neon_vqtbx3q_v, "V16ScV16ScV16ScV16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vqtbx4_v, "V8ScV8ScV16ScV16ScV16ScV16ScV8Sci", "n")
+BUILTIN(__builtin_neon_vqtbx4q_v, "V16ScV16ScV16ScV16ScV16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vraddhn_v, "V8ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vrbit_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vrbitq_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vrecpe_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vrecped_f64, "dd", "n")
+BUILTIN(__builtin_neon_vrecpeq_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vrecpes_f32, "ff", "n")
+BUILTIN(__builtin_neon_vrecps_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vrecpsd_f64, "ddd", "n")
+BUILTIN(__builtin_neon_vrecpsq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vrecpss_f32, "fff", "n")
+BUILTIN(__builtin_neon_vrecpxd_f64, "dd", "n")
+BUILTIN(__builtin_neon_vrecpxs_f32, "ff", "n")
+BUILTIN(__builtin_neon_vrhadd_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vrhaddq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vrnd_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vrnda_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vrndaq_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vrndi_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vrndiq_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vrndm_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vrndmq_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vrndn_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vrndnq_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vrndns_f32, "ff", "n")
+BUILTIN(__builtin_neon_vrndp_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vrndpq_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vrndq_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vrndx_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vrndxq_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vrshl_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vrshld_s64, "WiWiWi", "n")
+BUILTIN(__builtin_neon_vrshld_u64, "UWiUWiUWi", "n")
+BUILTIN(__builtin_neon_vrshlq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vrshr_n_v, "V8ScV8ScIii", "n")
+BUILTIN(__builtin_neon_vrshrd_n_s64, "WiWiIi", "n")
+BUILTIN(__builtin_neon_vrshrd_n_u64, "UWiUWiIi", "n")
+BUILTIN(__builtin_neon_vrshrn_n_v, "V8ScV16ScIii", "n")
+BUILTIN(__builtin_neon_vrshrq_n_v, "V16ScV16ScIii", "n")
+BUILTIN(__builtin_neon_vrsqrte_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vrsqrted_f64, "dd", "n")
+BUILTIN(__builtin_neon_vrsqrteq_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vrsqrtes_f32, "ff", "n")
+BUILTIN(__builtin_neon_vrsqrts_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vrsqrtsd_f64, "ddd", "n")
+BUILTIN(__builtin_neon_vrsqrtsq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vrsqrtss_f32, "fff", "n")
+BUILTIN(__builtin_neon_vrsra_n_v, "V8ScV8ScV8ScIii", "n")
+BUILTIN(__builtin_neon_vrsrad_n_s64, "WiWiWiIi", "n")
+BUILTIN(__builtin_neon_vrsrad_n_u64, "UWiUWiUWiIi", "n")
+BUILTIN(__builtin_neon_vrsraq_n_v, "V16ScV16ScV16ScIii", "n")
+BUILTIN(__builtin_neon_vrsubhn_v, "V8ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vset_lane_f32, "V2ffV2fIi", "n")
+BUILTIN(__builtin_neon_vset_lane_f64, "V1ddV1dIi", "n")
+BUILTIN(__builtin_neon_vset_lane_i16, "V4ssV4sIi", "n")
+BUILTIN(__builtin_neon_vset_lane_i32, "V2iiV2iIi", "n")
+BUILTIN(__builtin_neon_vset_lane_i64, "V1WiWiV1WiIi", "n")
+BUILTIN(__builtin_neon_vset_lane_i8, "V8ScScV8ScIi", "n")
+BUILTIN(__builtin_neon_vsetq_lane_f32, "V4ffV4fIi", "n")
+BUILTIN(__builtin_neon_vsetq_lane_f64, "V2ddV2dIi", "n")
+BUILTIN(__builtin_neon_vsetq_lane_i16, "V8ssV8sIi", "n")
+BUILTIN(__builtin_neon_vsetq_lane_i32, "V4iiV4iIi", "n")
+BUILTIN(__builtin_neon_vsetq_lane_i64, "V2WiWiV2WiIi", "n")
+BUILTIN(__builtin_neon_vsetq_lane_i8, "V16ScScV16ScIi", "n")
+BUILTIN(__builtin_neon_vsha1cq_u32, "V4iV4UiUiV4Ui", "n")
+BUILTIN(__builtin_neon_vsha1h_u32, "UiUi", "n")
+BUILTIN(__builtin_neon_vsha1mq_u32, "V4iV4UiUiV4Ui", "n")
+BUILTIN(__builtin_neon_vsha1pq_u32, "V4iV4UiUiV4Ui", "n")
+BUILTIN(__builtin_neon_vsha1su0q_v, "V16ScV16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vsha1su1q_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vsha256h2q_v, "V16ScV16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vsha256hq_v, "V16ScV16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vsha256su0q_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vsha256su1q_v, "V16ScV16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vshl_n_v, "V8ScV8ScIii", "n")
+BUILTIN(__builtin_neon_vshl_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vshld_n_s64, "WiWiIi", "n")
+BUILTIN(__builtin_neon_vshld_n_u64, "UWiUWiIi", "n")
+BUILTIN(__builtin_neon_vshld_s64, "WiWiWi", "n")
+BUILTIN(__builtin_neon_vshld_u64, "UWiUWiUWi", "n")
+BUILTIN(__builtin_neon_vshll_n_v, "V16ScV8ScIii", "n")
+BUILTIN(__builtin_neon_vshlq_n_v, "V16ScV16ScIii", "n")
+BUILTIN(__builtin_neon_vshlq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vshr_n_v, "V8ScV8ScIii", "n")
+BUILTIN(__builtin_neon_vshrd_n_s64, "WiWiIi", "n")
+BUILTIN(__builtin_neon_vshrd_n_u64, "UWiUWiIi", "n")
+BUILTIN(__builtin_neon_vshrn_n_v, "V8ScV16ScIii", "n")
+BUILTIN(__builtin_neon_vshrq_n_v, "V16ScV16ScIii", "n")
+BUILTIN(__builtin_neon_vsli_n_v, "V8ScV8ScV8ScIii", "n")
+BUILTIN(__builtin_neon_vslid_n_s64, "WiWiWiIi", "n")
+BUILTIN(__builtin_neon_vslid_n_u64, "UWiUWiUWiIi", "n")
+BUILTIN(__builtin_neon_vsliq_n_v, "V16ScV16ScV16ScIii", "n")
+BUILTIN(__builtin_neon_vsqadd_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vsqaddb_u8, "ScScSc", "n")
+BUILTIN(__builtin_neon_vsqaddd_u64, "UWiUWiUWi", "n")
+BUILTIN(__builtin_neon_vsqaddh_u16, "UsUsUs", "n")
+BUILTIN(__builtin_neon_vsqaddq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vsqadds_u32, "UiUiUi", "n")
+BUILTIN(__builtin_neon_vsqrt_v, "V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vsqrtq_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vsra_n_v, "V8ScV8ScV8ScIii", "n")
+BUILTIN(__builtin_neon_vsrad_n_s64, "WiWiWiIi", "n")
+BUILTIN(__builtin_neon_vsrad_n_u64, "UWiUWiUWiIi", "n")
+BUILTIN(__builtin_neon_vsraq_n_v, "V16ScV16ScV16ScIii", "n")
+BUILTIN(__builtin_neon_vsri_n_v, "V8ScV8ScV8ScIii", "n")
+BUILTIN(__builtin_neon_vsrid_n_s64, "WiWiWiIi", "n")
+BUILTIN(__builtin_neon_vsrid_n_u64, "UWiUWiUWiIi", "n")
+BUILTIN(__builtin_neon_vsriq_n_v, "V16ScV16ScV16ScIii", "n")
+BUILTIN(__builtin_neon_vst1_lane_v, "vv*V8ScIii", "n")
+BUILTIN(__builtin_neon_vst1_v, "vv*V8Sci", "n")
+BUILTIN(__builtin_neon_vst1_x2_v, "vv*V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vst1_x3_v, "vv*V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vst1_x4_v, "vv*V8ScV8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vst1q_lane_v, "vv*V16ScIii", "n")
+BUILTIN(__builtin_neon_vst1q_v, "vv*V16Sci", "n")
+BUILTIN(__builtin_neon_vst1q_x2_v, "vv*V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vst1q_x3_v, "vv*V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vst1q_x4_v, "vv*V16ScV16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vst2_lane_v, "vv*V8ScV8ScIii", "n")
+BUILTIN(__builtin_neon_vst2_v, "vv*V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vst2q_lane_v, "vv*V16ScV16ScIii", "n")
+BUILTIN(__builtin_neon_vst2q_v, "vv*V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vst3_lane_v, "vv*V8ScV8ScV8ScIii", "n")
+BUILTIN(__builtin_neon_vst3_v, "vv*V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vst3q_lane_v, "vv*V16ScV16ScV16ScIii", "n")
+BUILTIN(__builtin_neon_vst3q_v, "vv*V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vst4_lane_v, "vv*V8ScV8ScV8ScV8ScIii", "n")
+BUILTIN(__builtin_neon_vst4_v, "vv*V8ScV8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vst4q_lane_v, "vv*V16ScV16ScV16ScV16ScIii", "n")
+BUILTIN(__builtin_neon_vst4q_v, "vv*V16ScV16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vstrq_p128, "vv*ULLLi", "n")
+BUILTIN(__builtin_neon_vsubd_s64, "WiWiWi", "n")
+BUILTIN(__builtin_neon_vsubd_u64, "UWiUWiUWi", "n")
+BUILTIN(__builtin_neon_vsubhn_v, "V8ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vtbl1_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vtbl2_v, "V8ScV8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vtbl3_v, "V8ScV8ScV8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vtbl4_v, "V8ScV8ScV8ScV8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vtbx1_v, "V8ScV8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vtbx2_v, "V8ScV8ScV8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vtbx3_v, "V8ScV8ScV8ScV8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vtbx4_v, "V8ScV8ScV8ScV8ScV8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vtrn_v, "vv*V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vtrnq_v, "vv*V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vtst_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vtstd_s64, "WiWiWi", "n")
+BUILTIN(__builtin_neon_vtstd_u64, "UWiUWiUWi", "n")
+BUILTIN(__builtin_neon_vtstq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vuqadd_v, "V8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vuqaddb_s8, "ScScSc", "n")
+BUILTIN(__builtin_neon_vuqaddd_s64, "WiWiWi", "n")
+BUILTIN(__builtin_neon_vuqaddh_s16, "sss", "n")
+BUILTIN(__builtin_neon_vuqaddq_v, "V16ScV16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vuqadds_s32, "iii", "n")
+BUILTIN(__builtin_neon_vuzp_v, "vv*V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vuzpq_v, "vv*V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vzip_v, "vv*V8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vzipq_v, "vv*V16ScV16Sci", "n")
+#endif
+
+#ifdef GET_NEON_OVERLOAD_CHECK
+case NEON::BI__builtin_neon_vabd_v: mask = 0x70707ULL; break;
+case NEON::BI__builtin_neon_vabdq_v: mask = 0x7070700000000ULL; break;
+case NEON::BI__builtin_neon_vabs_v: mask = 0x70fULL; break;
+case NEON::BI__builtin_neon_vabsq_v: mask = 0x70f00000000ULL; break;
+case NEON::BI__builtin_neon_vaddhn_v: mask = 0x70007ULL; break;
+case NEON::BI__builtin_neon_vaesdq_v: mask = 0x1000000000000ULL; break;
+case NEON::BI__builtin_neon_vaeseq_v: mask = 0x1000000000000ULL; break;
+case NEON::BI__builtin_neon_vaesimcq_v: mask = 0x1000000000000ULL; break;
+case NEON::BI__builtin_neon_vaesmcq_v: mask = 0x1000000000000ULL; break;
+case NEON::BI__builtin_neon_vbsl_v: mask = 0xf077fULL; break;
+case NEON::BI__builtin_neon_vbslq_v: mask = 0xf077f00000000ULL; break;
+case NEON::BI__builtin_neon_vcage_v: mask = 0xe0000ULL; break;
+case NEON::BI__builtin_neon_vcageq_v: mask = 0xe000000000000ULL; break;
+case NEON::BI__builtin_neon_vcagt_v: mask = 0xe0000ULL; break;
+case NEON::BI__builtin_neon_vcagtq_v: mask = 0xe000000000000ULL; break;
+case NEON::BI__builtin_neon_vcale_v: mask = 0xe0000ULL; break;
+case NEON::BI__builtin_neon_vcaleq_v: mask = 0xe000000000000ULL; break;
+case NEON::BI__builtin_neon_vcalt_v: mask = 0xe0000ULL; break;
+case NEON::BI__builtin_neon_vcaltq_v: mask = 0xe000000000000ULL; break;
+case NEON::BI__builtin_neon_vceqz_v: mask = 0xf0000ULL; break;
+case NEON::BI__builtin_neon_vceqzq_v: mask = 0xf000000000000ULL; break;
+case NEON::BI__builtin_neon_vcgez_v: mask = 0xf0000ULL; break;
+case NEON::BI__builtin_neon_vcgezq_v: mask = 0xf000000000000ULL; break;
+case NEON::BI__builtin_neon_vcgtz_v: mask = 0xf0000ULL; break;
+case NEON::BI__builtin_neon_vcgtzq_v: mask = 0xf000000000000ULL; break;
+case NEON::BI__builtin_neon_vclez_v: mask = 0xf0000ULL; break;
+case NEON::BI__builtin_neon_vclezq_v: mask = 0xf000000000000ULL; break;
+case NEON::BI__builtin_neon_vcls_v: mask = 0x7ULL; break;
+case NEON::BI__builtin_neon_vclsq_v: mask = 0x700000000ULL; break;
+case NEON::BI__builtin_neon_vcltz_v: mask = 0xf0000ULL; break;
+case NEON::BI__builtin_neon_vcltzq_v: mask = 0xf000000000000ULL; break;
+case NEON::BI__builtin_neon_vclz_v: mask = 0x70007ULL; break;
+case NEON::BI__builtin_neon_vclzq_v: mask = 0x7000700000000ULL; break;
+case NEON::BI__builtin_neon_vcnt_v: mask = 0x10011ULL; break;
+case NEON::BI__builtin_neon_vcntq_v: mask = 0x1001100000000ULL; break;
+case NEON::BI__builtin_neon_vcvt_f16_f32: mask = 0x100ULL; break;
+case NEON::BI__builtin_neon_vcvt_f16_v: mask = 0x20002ULL; break;
+case NEON::BI__builtin_neon_vcvt_f32_f16: mask = 0x20000000000ULL; break;
+case NEON::BI__builtin_neon_vcvt_f32_f64: mask = 0x200ULL; break;
+case NEON::BI__builtin_neon_vcvt_f32_v: mask = 0x40004ULL; break;
+case NEON::BI__builtin_neon_vcvt_f64_f32: mask = 0x40000000000ULL; break;
+case NEON::BI__builtin_neon_vcvt_f64_v: mask = 0x80008ULL; break;
+case NEON::BI__builtin_neon_vcvt_n_f16_v: mask = 0x20002ULL; break;
+case NEON::BI__builtin_neon_vcvt_n_f32_v: mask = 0x40004ULL; break;
+case NEON::BI__builtin_neon_vcvt_n_f64_v: mask = 0x80008ULL; break;
+case NEON::BI__builtin_neon_vcvt_n_s16_v: mask = 0x2ULL; break;
+case NEON::BI__builtin_neon_vcvt_n_s32_v: mask = 0x4ULL; break;
+case NEON::BI__builtin_neon_vcvt_n_s64_v: mask = 0x8ULL; break;
+case NEON::BI__builtin_neon_vcvt_n_u16_v: mask = 0x20000ULL; break;
+case NEON::BI__builtin_neon_vcvt_n_u32_v: mask = 0x40000ULL; break;
+case NEON::BI__builtin_neon_vcvt_n_u64_v: mask = 0x80000ULL; break;
+case NEON::BI__builtin_neon_vcvt_s16_v: mask = 0x2ULL; break;
+case NEON::BI__builtin_neon_vcvt_s32_v: mask = 0x4ULL; break;
+case NEON::BI__builtin_neon_vcvt_s64_v: mask = 0x8ULL; break;
+case NEON::BI__builtin_neon_vcvt_u16_v: mask = 0x20000ULL; break;
+case NEON::BI__builtin_neon_vcvt_u32_v: mask = 0x40000ULL; break;
+case NEON::BI__builtin_neon_vcvt_u64_v: mask = 0x80000ULL; break;
+case NEON::BI__builtin_neon_vcvta_s16_v: mask = 0x2ULL; break;
+case NEON::BI__builtin_neon_vcvta_s32_v: mask = 0x4ULL; break;
+case NEON::BI__builtin_neon_vcvta_s64_v: mask = 0x8ULL; break;
+case NEON::BI__builtin_neon_vcvta_u16_v: mask = 0x20000ULL; break;
+case NEON::BI__builtin_neon_vcvta_u32_v: mask = 0x40000ULL; break;
+case NEON::BI__builtin_neon_vcvta_u64_v: mask = 0x80000ULL; break;
+case NEON::BI__builtin_neon_vcvtaq_s16_v: mask = 0x200000000ULL; break;
+case NEON::BI__builtin_neon_vcvtaq_s32_v: mask = 0x400000000ULL; break;
+case NEON::BI__builtin_neon_vcvtaq_s64_v: mask = 0x800000000ULL; break;
+case NEON::BI__builtin_neon_vcvtaq_u16_v: mask = 0x2000000000000ULL; break;
+case NEON::BI__builtin_neon_vcvtaq_u32_v: mask = 0x4000000000000ULL; break;
+case NEON::BI__builtin_neon_vcvtaq_u64_v: mask = 0x8000000000000ULL; break;
+case NEON::BI__builtin_neon_vcvtm_s16_v: mask = 0x2ULL; break;
+case NEON::BI__builtin_neon_vcvtm_s32_v: mask = 0x4ULL; break;
+case NEON::BI__builtin_neon_vcvtm_s64_v: mask = 0x8ULL; break;
+case NEON::BI__builtin_neon_vcvtm_u16_v: mask = 0x20000ULL; break;
+case NEON::BI__builtin_neon_vcvtm_u32_v: mask = 0x40000ULL; break;
+case NEON::BI__builtin_neon_vcvtm_u64_v: mask = 0x80000ULL; break;
+case NEON::BI__builtin_neon_vcvtmq_s16_v: mask = 0x200000000ULL; break;
+case NEON::BI__builtin_neon_vcvtmq_s32_v: mask = 0x400000000ULL; break;
+case NEON::BI__builtin_neon_vcvtmq_s64_v: mask = 0x800000000ULL; break;
+case NEON::BI__builtin_neon_vcvtmq_u16_v: mask = 0x2000000000000ULL; break;
+case NEON::BI__builtin_neon_vcvtmq_u32_v: mask = 0x4000000000000ULL; break;
+case NEON::BI__builtin_neon_vcvtmq_u64_v: mask = 0x8000000000000ULL; break;
+case NEON::BI__builtin_neon_vcvtn_s16_v: mask = 0x2ULL; break;
+case NEON::BI__builtin_neon_vcvtn_s32_v: mask = 0x4ULL; break;
+case NEON::BI__builtin_neon_vcvtn_s64_v: mask = 0x8ULL; break;
+case NEON::BI__builtin_neon_vcvtn_u16_v: mask = 0x20000ULL; break;
+case NEON::BI__builtin_neon_vcvtn_u32_v: mask = 0x40000ULL; break;
+case NEON::BI__builtin_neon_vcvtn_u64_v: mask = 0x80000ULL; break;
+case NEON::BI__builtin_neon_vcvtnq_s16_v: mask = 0x200000000ULL; break;
+case NEON::BI__builtin_neon_vcvtnq_s32_v: mask = 0x400000000ULL; break;
+case NEON::BI__builtin_neon_vcvtnq_s64_v: mask = 0x800000000ULL; break;
+case NEON::BI__builtin_neon_vcvtnq_u16_v: mask = 0x2000000000000ULL; break;
+case NEON::BI__builtin_neon_vcvtnq_u32_v: mask = 0x4000000000000ULL; break;
+case NEON::BI__builtin_neon_vcvtnq_u64_v: mask = 0x8000000000000ULL; break;
+case NEON::BI__builtin_neon_vcvtp_s16_v: mask = 0x2ULL; break;
+case NEON::BI__builtin_neon_vcvtp_s32_v: mask = 0x4ULL; break;
+case NEON::BI__builtin_neon_vcvtp_s64_v: mask = 0x8ULL; break;
+case NEON::BI__builtin_neon_vcvtp_u16_v: mask = 0x20000ULL; break;
+case NEON::BI__builtin_neon_vcvtp_u32_v: mask = 0x40000ULL; break;
+case NEON::BI__builtin_neon_vcvtp_u64_v: mask = 0x80000ULL; break;
+case NEON::BI__builtin_neon_vcvtpq_s16_v: mask = 0x200000000ULL; break;
+case NEON::BI__builtin_neon_vcvtpq_s32_v: mask = 0x400000000ULL; break;
+case NEON::BI__builtin_neon_vcvtpq_s64_v: mask = 0x800000000ULL; break;
+case NEON::BI__builtin_neon_vcvtpq_u16_v: mask = 0x2000000000000ULL; break;
+case NEON::BI__builtin_neon_vcvtpq_u32_v: mask = 0x4000000000000ULL; break;
+case NEON::BI__builtin_neon_vcvtpq_u64_v: mask = 0x8000000000000ULL; break;
+case NEON::BI__builtin_neon_vcvtq_f16_v: mask = 0x2000200000000ULL; break;
+case NEON::BI__builtin_neon_vcvtq_f32_v: mask = 0x4000400000000ULL; break;
+case NEON::BI__builtin_neon_vcvtq_f64_v: mask = 0x8000800000000ULL; break;
+case NEON::BI__builtin_neon_vcvtq_n_f16_v: mask = 0x2000200000000ULL; break;
+case NEON::BI__builtin_neon_vcvtq_n_f32_v: mask = 0x4000400000000ULL; break;
+case NEON::BI__builtin_neon_vcvtq_n_f64_v: mask = 0x8000800000000ULL; break;
+case NEON::BI__builtin_neon_vcvtq_n_s16_v: mask = 0x200000000ULL; break;
+case NEON::BI__builtin_neon_vcvtq_n_s32_v: mask = 0x400000000ULL; break;
+case NEON::BI__builtin_neon_vcvtq_n_s64_v: mask = 0x800000000ULL; break;
+case NEON::BI__builtin_neon_vcvtq_n_u16_v: mask = 0x2000000000000ULL; break;
+case NEON::BI__builtin_neon_vcvtq_n_u32_v: mask = 0x4000000000000ULL; break;
+case NEON::BI__builtin_neon_vcvtq_n_u64_v: mask = 0x8000000000000ULL; break;
+case NEON::BI__builtin_neon_vcvtq_s16_v: mask = 0x200000000ULL; break;
+case NEON::BI__builtin_neon_vcvtq_s32_v: mask = 0x400000000ULL; break;
+case NEON::BI__builtin_neon_vcvtq_s64_v: mask = 0x800000000ULL; break;
+case NEON::BI__builtin_neon_vcvtq_u16_v: mask = 0x2000000000000ULL; break;
+case NEON::BI__builtin_neon_vcvtq_u32_v: mask = 0x4000000000000ULL; break;
+case NEON::BI__builtin_neon_vcvtq_u64_v: mask = 0x8000000000000ULL; break;
+case NEON::BI__builtin_neon_vcvtx_f32_v: mask = 0x40000000000ULL; break;
+case NEON::BI__builtin_neon_vdot_v: mask = 0x40004ULL; break;
+case NEON::BI__builtin_neon_vdotq_v: mask = 0x4000400000000ULL; break;
+case NEON::BI__builtin_neon_vext_v: mask = 0xf077fULL; break;
+case NEON::BI__builtin_neon_vextq_v: mask = 0xf077f00000000ULL; break;
+case NEON::BI__builtin_neon_vfma_lane_v: mask = 0x700ULL; break;
+case NEON::BI__builtin_neon_vfma_laneq_v: mask = 0x700ULL; break;
+case NEON::BI__builtin_neon_vfma_v: mask = 0x700ULL; break;
+case NEON::BI__builtin_neon_vfmaq_lane_v: mask = 0x70000000000ULL; break;
+case NEON::BI__builtin_neon_vfmaq_laneq_v: mask = 0x70000000000ULL; break;
+case NEON::BI__builtin_neon_vfmaq_v: mask = 0x70000000000ULL; break;
+case NEON::BI__builtin_neon_vfmlal_high_v: mask = 0x200ULL; break;
+case NEON::BI__builtin_neon_vfmlal_low_v: mask = 0x200ULL; break;
+case NEON::BI__builtin_neon_vfmlalq_high_v: mask = 0x20000000000ULL; break;
+case NEON::BI__builtin_neon_vfmlalq_low_v: mask = 0x20000000000ULL; break;
+case NEON::BI__builtin_neon_vfmlsl_high_v: mask = 0x200ULL; break;
+case NEON::BI__builtin_neon_vfmlsl_low_v: mask = 0x200ULL; break;
+case NEON::BI__builtin_neon_vfmlslq_high_v: mask = 0x20000000000ULL; break;
+case NEON::BI__builtin_neon_vfmlslq_low_v: mask = 0x20000000000ULL; break;
+case NEON::BI__builtin_neon_vhadd_v: mask = 0x70007ULL; break;
+case NEON::BI__builtin_neon_vhaddq_v: mask = 0x7000700000000ULL; break;
+case NEON::BI__builtin_neon_vhsub_v: mask = 0x70007ULL; break;
+case NEON::BI__builtin_neon_vhsubq_v: mask = 0x7000700000000ULL; break;
+case NEON::BI__builtin_neon_vld1_dup_v: mask = 0xf077fULL; break;
+case NEON::BI__builtin_neon_vld1_lane_v: mask = 0xf077fULL; break;
+case NEON::BI__builtin_neon_vld1_v: mask = 0xf077fULL; PtrArgNum = 0; HasConstPtr = true; break;
+case NEON::BI__builtin_neon_vld1_x2_v: mask = 0xf077fULL; PtrArgNum = 1; HasConstPtr = true; break;
+case NEON::BI__builtin_neon_vld1_x3_v: mask = 0xf077fULL; PtrArgNum = 1; HasConstPtr = true; break;
+case NEON::BI__builtin_neon_vld1_x4_v: mask = 0xf077fULL; PtrArgNum = 1; HasConstPtr = true; break;
+case NEON::BI__builtin_neon_vld1q_dup_v: mask = 0xf077f00000000ULL; break;
+case NEON::BI__builtin_neon_vld1q_lane_v: mask = 0xf077f00000000ULL; break;
+case NEON::BI__builtin_neon_vld1q_v: mask = 0xf077f00000000ULL; PtrArgNum = 0; HasConstPtr = true; break;
+case NEON::BI__builtin_neon_vld1q_x2_v: mask = 0xf077f00000000ULL; PtrArgNum = 1; HasConstPtr = true; break;
+case NEON::BI__builtin_neon_vld1q_x3_v: mask = 0xf077f00000000ULL; PtrArgNum = 1; HasConstPtr = true; break;
+case NEON::BI__builtin_neon_vld1q_x4_v: mask = 0xf077f00000000ULL; PtrArgNum = 1; HasConstPtr = true; break;
+case NEON::BI__builtin_neon_vld2_dup_v: mask = 0xf077fULL; PtrArgNum = 1; HasConstPtr = true; break;
+case NEON::BI__builtin_neon_vld2_lane_v: mask = 0xf077fULL; PtrArgNum = 1; HasConstPtr = true; break;
+case NEON::BI__builtin_neon_vld2_v: mask = 0xf077fULL; PtrArgNum = 1; HasConstPtr = true; break;
+case NEON::BI__builtin_neon_vld2q_dup_v: mask = 0xf077f00000000ULL; PtrArgNum = 1; HasConstPtr = true; break;
+case NEON::BI__builtin_neon_vld2q_lane_v: mask = 0xf077f00000000ULL; PtrArgNum = 1; HasConstPtr = true; break;
+case NEON::BI__builtin_neon_vld2q_v: mask = 0xf077f00000000ULL; PtrArgNum = 1; HasConstPtr = true; break;
+case NEON::BI__builtin_neon_vld3_dup_v: mask = 0xf077fULL; PtrArgNum = 1; HasConstPtr = true; break;
+case NEON::BI__builtin_neon_vld3_lane_v: mask = 0xf077fULL; PtrArgNum = 1; HasConstPtr = true; break;
+case NEON::BI__builtin_neon_vld3_v: mask = 0xf077fULL; PtrArgNum = 1; HasConstPtr = true; break;
+case NEON::BI__builtin_neon_vld3q_dup_v: mask = 0xf077f00000000ULL; PtrArgNum = 1; HasConstPtr = true; break;
+case NEON::BI__builtin_neon_vld3q_lane_v: mask = 0xf077f00000000ULL; PtrArgNum = 1; HasConstPtr = true; break;
+case NEON::BI__builtin_neon_vld3q_v: mask = 0xf077f00000000ULL; PtrArgNum = 1; HasConstPtr = true; break;
+case NEON::BI__builtin_neon_vld4_dup_v: mask = 0xf077fULL; PtrArgNum = 1; HasConstPtr = true; break;
+case NEON::BI__builtin_neon_vld4_lane_v: mask = 0xf077fULL; PtrArgNum = 1; HasConstPtr = true; break;
+case NEON::BI__builtin_neon_vld4_v: mask = 0xf077fULL; PtrArgNum = 1; HasConstPtr = true; break;
+case NEON::BI__builtin_neon_vld4q_dup_v: mask = 0xf077f00000000ULL; PtrArgNum = 1; HasConstPtr = true; break;
+case NEON::BI__builtin_neon_vld4q_lane_v: mask = 0xf077f00000000ULL; PtrArgNum = 1; HasConstPtr = true; break;
+case NEON::BI__builtin_neon_vld4q_v: mask = 0xf077f00000000ULL; PtrArgNum = 1; HasConstPtr = true; break;
+case NEON::BI__builtin_neon_vmax_v: mask = 0x70707ULL; break;
+case NEON::BI__builtin_neon_vmaxnm_v: mask = 0x700ULL; break;
+case NEON::BI__builtin_neon_vmaxnmq_v: mask = 0x70000000000ULL; break;
+case NEON::BI__builtin_neon_vmaxq_v: mask = 0x7070700000000ULL; break;
+case NEON::BI__builtin_neon_vmin_v: mask = 0x70707ULL; break;
+case NEON::BI__builtin_neon_vminnm_v: mask = 0x700ULL; break;
+case NEON::BI__builtin_neon_vminnmq_v: mask = 0x70000000000ULL; break;
+case NEON::BI__builtin_neon_vminq_v: mask = 0x7070700000000ULL; break;
+case NEON::BI__builtin_neon_vmovl_v: mask = 0xe000e00000000ULL; break;
+case NEON::BI__builtin_neon_vmovn_v: mask = 0x70007ULL; break;
+case NEON::BI__builtin_neon_vmul_lane_v: mask = 0x400ULL; break;
+case NEON::BI__builtin_neon_vmul_laneq_v: mask = 0x400ULL; break;
+case NEON::BI__builtin_neon_vmul_v: mask = 0x10ULL; break;
+case NEON::BI__builtin_neon_vmull_v: mask = 0xe002e00000000ULL; break;
+case NEON::BI__builtin_neon_vmulq_v: mask = 0x1000000000ULL; break;
+case NEON::BI__builtin_neon_vmulx_v: mask = 0x700ULL; break;
+case NEON::BI__builtin_neon_vmulxq_v: mask = 0x70000000000ULL; break;
+case NEON::BI__builtin_neon_vpadal_v: mask = 0xe000eULL; break;
+case NEON::BI__builtin_neon_vpadalq_v: mask = 0xe000e00000000ULL; break;
+case NEON::BI__builtin_neon_vpadd_v: mask = 0x70307ULL; break;
+case NEON::BI__builtin_neon_vpaddl_v: mask = 0xe000eULL; break;
+case NEON::BI__builtin_neon_vpaddlq_v: mask = 0xe000e00000000ULL; break;
+case NEON::BI__builtin_neon_vpaddq_v: mask = 0xf070f00000000ULL; break;
+case NEON::BI__builtin_neon_vpmax_v: mask = 0x70307ULL; break;
+case NEON::BI__builtin_neon_vpmaxnm_v: mask = 0x300ULL; break;
+case NEON::BI__builtin_neon_vpmaxnmq_v: mask = 0x70000000000ULL; break;
+case NEON::BI__builtin_neon_vpmaxq_v: mask = 0x7070700000000ULL; break;
+case NEON::BI__builtin_neon_vpmin_v: mask = 0x70307ULL; break;
+case NEON::BI__builtin_neon_vpminnm_v: mask = 0x300ULL; break;
+case NEON::BI__builtin_neon_vpminnmq_v: mask = 0x70000000000ULL; break;
+case NEON::BI__builtin_neon_vpminq_v: mask = 0x7070700000000ULL; break;
+case NEON::BI__builtin_neon_vqabs_v: mask = 0xfULL; break;
+case NEON::BI__builtin_neon_vqabsq_v: mask = 0xf00000000ULL; break;
+case NEON::BI__builtin_neon_vqadd_v: mask = 0xf000fULL; break;
+case NEON::BI__builtin_neon_vqaddq_v: mask = 0xf000f00000000ULL; break;
+case NEON::BI__builtin_neon_vqdmlal_v: mask = 0xc00000000ULL; break;
+case NEON::BI__builtin_neon_vqdmlsl_v: mask = 0xc00000000ULL; break;
+case NEON::BI__builtin_neon_vqdmulh_v: mask = 0x6ULL; break;
+case NEON::BI__builtin_neon_vqdmulhq_v: mask = 0x600000000ULL; break;
+case NEON::BI__builtin_neon_vqdmull_v: mask = 0xc00000000ULL; break;
+case NEON::BI__builtin_neon_vqmovn_v: mask = 0x70007ULL; break;
+case NEON::BI__builtin_neon_vqmovun_v: mask = 0x70000ULL; break;
+case NEON::BI__builtin_neon_vqneg_v: mask = 0xfULL; break;
+case NEON::BI__builtin_neon_vqnegq_v: mask = 0xf00000000ULL; break;
+case NEON::BI__builtin_neon_vqrdmulh_v: mask = 0x6ULL; break;
+case NEON::BI__builtin_neon_vqrdmulhq_v: mask = 0x600000000ULL; break;
+case NEON::BI__builtin_neon_vqrshl_v: mask = 0xf000fULL; break;
+case NEON::BI__builtin_neon_vqrshlq_v: mask = 0xf000f00000000ULL; break;
+case NEON::BI__builtin_neon_vqrshrn_n_v: mask = 0x70007ULL; break;
+case NEON::BI__builtin_neon_vqrshrun_n_v: mask = 0x70000ULL; break;
+case NEON::BI__builtin_neon_vqshl_n_v: mask = 0xf000fULL; break;
+case NEON::BI__builtin_neon_vqshl_v: mask = 0xf000fULL; break;
+case NEON::BI__builtin_neon_vqshlq_n_v: mask = 0xf000f00000000ULL; break;
+case NEON::BI__builtin_neon_vqshlq_v: mask = 0xf000f00000000ULL; break;
+case NEON::BI__builtin_neon_vqshlu_n_v: mask = 0xf0000ULL; break;
+case NEON::BI__builtin_neon_vqshluq_n_v: mask = 0xf000000000000ULL; break;
+case NEON::BI__builtin_neon_vqshrn_n_v: mask = 0x70007ULL; break;
+case NEON::BI__builtin_neon_vqshrun_n_v: mask = 0x70000ULL; break;
+case NEON::BI__builtin_neon_vqsub_v: mask = 0xf000fULL; break;
+case NEON::BI__builtin_neon_vqsubq_v: mask = 0xf000f00000000ULL; break;
+case NEON::BI__builtin_neon_vqtbl1_v: mask = 0x10011ULL; break;
+case NEON::BI__builtin_neon_vqtbl1q_v: mask = 0x1001100000000ULL; break;
+case NEON::BI__builtin_neon_vqtbl2_v: mask = 0x10011ULL; break;
+case NEON::BI__builtin_neon_vqtbl2q_v: mask = 0x1001100000000ULL; break;
+case NEON::BI__builtin_neon_vqtbl3_v: mask = 0x10011ULL; break;
+case NEON::BI__builtin_neon_vqtbl3q_v: mask = 0x1001100000000ULL; break;
+case NEON::BI__builtin_neon_vqtbl4_v: mask = 0x10011ULL; break;
+case NEON::BI__builtin_neon_vqtbl4q_v: mask = 0x1001100000000ULL; break;
+case NEON::BI__builtin_neon_vqtbx1_v: mask = 0x10011ULL; break;
+case NEON::BI__builtin_neon_vqtbx1q_v: mask = 0x1001100000000ULL; break;
+case NEON::BI__builtin_neon_vqtbx2_v: mask = 0x10011ULL; break;
+case NEON::BI__builtin_neon_vqtbx2q_v: mask = 0x1001100000000ULL; break;
+case NEON::BI__builtin_neon_vqtbx3_v: mask = 0x10011ULL; break;
+case NEON::BI__builtin_neon_vqtbx3q_v: mask = 0x1001100000000ULL; break;
+case NEON::BI__builtin_neon_vqtbx4_v: mask = 0x10011ULL; break;
+case NEON::BI__builtin_neon_vqtbx4q_v: mask = 0x1001100000000ULL; break;
+case NEON::BI__builtin_neon_vraddhn_v: mask = 0x70007ULL; break;
+case NEON::BI__builtin_neon_vrbit_v: mask = 0x10011ULL; break;
+case NEON::BI__builtin_neon_vrbitq_v: mask = 0x1001100000000ULL; break;
+case NEON::BI__builtin_neon_vrecpe_v: mask = 0x40700ULL; break;
+case NEON::BI__builtin_neon_vrecpeq_v: mask = 0x4070000000000ULL; break;
+case NEON::BI__builtin_neon_vrecps_v: mask = 0x700ULL; break;
+case NEON::BI__builtin_neon_vrecpsq_v: mask = 0x70000000000ULL; break;
+case NEON::BI__builtin_neon_vrhadd_v: mask = 0x70007ULL; break;
+case NEON::BI__builtin_neon_vrhaddq_v: mask = 0x7000700000000ULL; break;
+case NEON::BI__builtin_neon_vrnd_v: mask = 0x700ULL; break;
+case NEON::BI__builtin_neon_vrnda_v: mask = 0x700ULL; break;
+case NEON::BI__builtin_neon_vrndaq_v: mask = 0x70000000000ULL; break;
+case NEON::BI__builtin_neon_vrndi_v: mask = 0x700ULL; break;
+case NEON::BI__builtin_neon_vrndiq_v: mask = 0x70000000000ULL; break;
+case NEON::BI__builtin_neon_vrndm_v: mask = 0x700ULL; break;
+case NEON::BI__builtin_neon_vrndmq_v: mask = 0x70000000000ULL; break;
+case NEON::BI__builtin_neon_vrndn_v: mask = 0x700ULL; break;
+case NEON::BI__builtin_neon_vrndnq_v: mask = 0x70000000000ULL; break;
+case NEON::BI__builtin_neon_vrndp_v: mask = 0x700ULL; break;
+case NEON::BI__builtin_neon_vrndpq_v: mask = 0x70000000000ULL; break;
+case NEON::BI__builtin_neon_vrndq_v: mask = 0x70000000000ULL; break;
+case NEON::BI__builtin_neon_vrndx_v: mask = 0x700ULL; break;
+case NEON::BI__builtin_neon_vrndxq_v: mask = 0x70000000000ULL; break;
+case NEON::BI__builtin_neon_vrshl_v: mask = 0xf000fULL; break;
+case NEON::BI__builtin_neon_vrshlq_v: mask = 0xf000f00000000ULL; break;
+case NEON::BI__builtin_neon_vrshr_n_v: mask = 0xf000fULL; break;
+case NEON::BI__builtin_neon_vrshrn_n_v: mask = 0x70007ULL; break;
+case NEON::BI__builtin_neon_vrshrq_n_v: mask = 0xf000f00000000ULL; break;
+case NEON::BI__builtin_neon_vrsqrte_v: mask = 0x40700ULL; break;
+case NEON::BI__builtin_neon_vrsqrteq_v: mask = 0x4070000000000ULL; break;
+case NEON::BI__builtin_neon_vrsqrts_v: mask = 0x700ULL; break;
+case NEON::BI__builtin_neon_vrsqrtsq_v: mask = 0x70000000000ULL; break;
+case NEON::BI__builtin_neon_vrsra_n_v: mask = 0xf000fULL; break;
+case NEON::BI__builtin_neon_vrsraq_n_v: mask = 0xf000f00000000ULL; break;
+case NEON::BI__builtin_neon_vrsubhn_v: mask = 0x70007ULL; break;
+case NEON::BI__builtin_neon_vsha1su0q_v: mask = 0x4000000000000ULL; break;
+case NEON::BI__builtin_neon_vsha1su1q_v: mask = 0x4000000000000ULL; break;
+case NEON::BI__builtin_neon_vsha256h2q_v: mask = 0x4000000000000ULL; break;
+case NEON::BI__builtin_neon_vsha256hq_v: mask = 0x4000000000000ULL; break;
+case NEON::BI__builtin_neon_vsha256su0q_v: mask = 0x4000000000000ULL; break;
+case NEON::BI__builtin_neon_vsha256su1q_v: mask = 0x4000000000000ULL; break;
+case NEON::BI__builtin_neon_vshl_n_v: mask = 0xf000fULL; break;
+case NEON::BI__builtin_neon_vshl_v: mask = 0xf000fULL; break;
+case NEON::BI__builtin_neon_vshll_n_v: mask = 0xe000e00000000ULL; break;
+case NEON::BI__builtin_neon_vshlq_n_v: mask = 0xf000f00000000ULL; break;
+case NEON::BI__builtin_neon_vshlq_v: mask = 0xf000f00000000ULL; break;
+case NEON::BI__builtin_neon_vshr_n_v: mask = 0xf000fULL; break;
+case NEON::BI__builtin_neon_vshrn_n_v: mask = 0x70007ULL; break;
+case NEON::BI__builtin_neon_vshrq_n_v: mask = 0xf000f00000000ULL; break;
+case NEON::BI__builtin_neon_vsli_n_v: mask = 0xf007fULL; break;
+case NEON::BI__builtin_neon_vsliq_n_v: mask = 0xf007f00000000ULL; break;
+case NEON::BI__builtin_neon_vsqadd_v: mask = 0xf0000ULL; break;
+case NEON::BI__builtin_neon_vsqaddq_v: mask = 0xf000000000000ULL; break;
+case NEON::BI__builtin_neon_vsqrt_v: mask = 0x700ULL; break;
+case NEON::BI__builtin_neon_vsqrtq_v: mask = 0x70000000000ULL; break;
+case NEON::BI__builtin_neon_vsra_n_v: mask = 0xf000fULL; break;
+case NEON::BI__builtin_neon_vsraq_n_v: mask = 0xf000f00000000ULL; break;
+case NEON::BI__builtin_neon_vsri_n_v: mask = 0xf007fULL; break;
+case NEON::BI__builtin_neon_vsriq_n_v: mask = 0xf007f00000000ULL; break;
+case NEON::BI__builtin_neon_vst1_lane_v: mask = 0xf077fULL; break;
+case NEON::BI__builtin_neon_vst1_v: mask = 0xf077fULL; PtrArgNum = 0; break;
+case NEON::BI__builtin_neon_vst1_x2_v: mask = 0xf077fULL; PtrArgNum = 0; break;
+case NEON::BI__builtin_neon_vst1_x3_v: mask = 0xf077fULL; PtrArgNum = 0; break;
+case NEON::BI__builtin_neon_vst1_x4_v: mask = 0xf077fULL; PtrArgNum = 0; break;
+case NEON::BI__builtin_neon_vst1q_lane_v: mask = 0xf077f00000000ULL; break;
+case NEON::BI__builtin_neon_vst1q_v: mask = 0xf077f00000000ULL; PtrArgNum = 0; break;
+case NEON::BI__builtin_neon_vst1q_x2_v: mask = 0xf077f00000000ULL; PtrArgNum = 0; break;
+case NEON::BI__builtin_neon_vst1q_x3_v: mask = 0xf077f00000000ULL; PtrArgNum = 0; break;
+case NEON::BI__builtin_neon_vst1q_x4_v: mask = 0xf077f00000000ULL; PtrArgNum = 0; break;
+case NEON::BI__builtin_neon_vst2_lane_v: mask = 0xf077fULL; PtrArgNum = 0; break;
+case NEON::BI__builtin_neon_vst2_v: mask = 0xf077fULL; PtrArgNum = 0; break;
+case NEON::BI__builtin_neon_vst2q_lane_v: mask = 0xf077f00000000ULL; PtrArgNum = 0; break;
+case NEON::BI__builtin_neon_vst2q_v: mask = 0xf077f00000000ULL; PtrArgNum = 0; break;
+case NEON::BI__builtin_neon_vst3_lane_v: mask = 0xf077fULL; PtrArgNum = 0; break;
+case NEON::BI__builtin_neon_vst3_v: mask = 0xf077fULL; PtrArgNum = 0; break;
+case NEON::BI__builtin_neon_vst3q_lane_v: mask = 0xf077f00000000ULL; PtrArgNum = 0; break;
+case NEON::BI__builtin_neon_vst3q_v: mask = 0xf077f00000000ULL; PtrArgNum = 0; break;
+case NEON::BI__builtin_neon_vst4_lane_v: mask = 0xf077fULL; PtrArgNum = 0; break;
+case NEON::BI__builtin_neon_vst4_v: mask = 0xf077fULL; PtrArgNum = 0; break;
+case NEON::BI__builtin_neon_vst4q_lane_v: mask = 0xf077f00000000ULL; PtrArgNum = 0; break;
+case NEON::BI__builtin_neon_vst4q_v: mask = 0xf077f00000000ULL; PtrArgNum = 0; break;
+case NEON::BI__builtin_neon_vsubhn_v: mask = 0x70007ULL; break;
+case NEON::BI__builtin_neon_vtbl1_v: mask = 0x10011ULL; break;
+case NEON::BI__builtin_neon_vtbl2_v: mask = 0x10011ULL; break;
+case NEON::BI__builtin_neon_vtbl3_v: mask = 0x10011ULL; break;
+case NEON::BI__builtin_neon_vtbl4_v: mask = 0x10011ULL; break;
+case NEON::BI__builtin_neon_vtbx1_v: mask = 0x10011ULL; break;
+case NEON::BI__builtin_neon_vtbx2_v: mask = 0x10011ULL; break;
+case NEON::BI__builtin_neon_vtbx3_v: mask = 0x10011ULL; break;
+case NEON::BI__builtin_neon_vtbx4_v: mask = 0x10011ULL; break;
+case NEON::BI__builtin_neon_vtrn_v: mask = 0x70337ULL; break;
+case NEON::BI__builtin_neon_vtrnq_v: mask = 0x7033700000000ULL; break;
+case NEON::BI__builtin_neon_vtst_v: mask = 0xf0000ULL; break;
+case NEON::BI__builtin_neon_vtstq_v: mask = 0xf000000000000ULL; break;
+case NEON::BI__builtin_neon_vuqadd_v: mask = 0xfULL; break;
+case NEON::BI__builtin_neon_vuqaddq_v: mask = 0xf00000000ULL; break;
+case NEON::BI__builtin_neon_vuzp_v: mask = 0x70337ULL; break;
+case NEON::BI__builtin_neon_vuzpq_v: mask = 0x7033700000000ULL; break;
+case NEON::BI__builtin_neon_vzip_v: mask = 0x70337ULL; break;
+case NEON::BI__builtin_neon_vzipq_v: mask = 0x7033700000000ULL; break;
+#endif
+
+#ifdef GET_NEON_IMMEDIATE_CHECK
+case NEON::BI__builtin_neon_vcvtq_n_f64_v: i = 1; l = 1; u = 63; break;
+case NEON::BI__builtin_neon_vcvt_n_f64_v: i = 1; l = 1; u = 63; break;
+case NEON::BI__builtin_neon_vcvtq_n_s64_v: i = 1; l = 1; u = 63; break;
+case NEON::BI__builtin_neon_vcvt_n_s64_v: i = 1; l = 1; u = 63; break;
+case NEON::BI__builtin_neon_vcvtq_n_u64_v: i = 1; l = 1; u = 63; break;
+case NEON::BI__builtin_neon_vcvt_n_u64_v: i = 1; l = 1; u = 63; break;
+case NEON::BI__builtin_neon_vget_lane_i64: i = 1; u = 0; break;
+case NEON::BI__builtin_neon_vgetq_lane_i64: i = 1; u = 1; break;
+case NEON::BI__builtin_neon_vgetq_lane_f64: i = 1; u = 1; break;
+case NEON::BI__builtin_neon_vget_lane_f64: i = 1; u = 0; break;
+case NEON::BI__builtin_neon_vld1_lane_v: i = 2; u = RFT(TV, false, false); break;
+case NEON::BI__builtin_neon_vld1q_lane_v: i = 2; u = RFT(TV, false, false); break;
+case NEON::BI__builtin_neon_vld2_lane_v: i = 4; u = RFT(TV, false, false); break;
+case NEON::BI__builtin_neon_vld2q_lane_v: i = 4; u = RFT(TV, false, false); break;
+case NEON::BI__builtin_neon_vld3_lane_v: i = 5; u = RFT(TV, false, false); break;
+case NEON::BI__builtin_neon_vld3q_lane_v: i = 5; u = RFT(TV, false, false); break;
+case NEON::BI__builtin_neon_vld4_lane_v: i = 6; u = RFT(TV, false, false); break;
+case NEON::BI__builtin_neon_vld4q_lane_v: i = 6; u = RFT(TV, false, false); break;
+case NEON::BI__builtin_neon_vcvts_n_s32_f32: i = 1; l = 1; u = 31; break;
+case NEON::BI__builtin_neon_vcvtd_n_s64_f64: i = 1; l = 1; u = 63; break;
+case NEON::BI__builtin_neon_vcvts_n_u32_f32: i = 1; l = 1; u = 31; break;
+case NEON::BI__builtin_neon_vcvtd_n_u64_f64: i = 1; l = 1; u = 63; break;
+case NEON::BI__builtin_neon_vfmad_lane_f64: i = 3; u = 0; break;
+case NEON::BI__builtin_neon_vfmas_lane_f32: i = 3; u = 1; break;
+case NEON::BI__builtin_neon_vfmah_lane_f16: i = 3; u = 3; break;
+case NEON::BI__builtin_neon_vfmad_laneq_f64: i = 3; u = 1; break;
+case NEON::BI__builtin_neon_vfmas_laneq_f32: i = 3; u = 3; break;
+case NEON::BI__builtin_neon_vfmah_laneq_f16: i = 3; u = 7; break;
+case NEON::BI__builtin_neon_vmulxh_lane_f16: i = 2; u = 3; break;
+case NEON::BI__builtin_neon_vmulxh_laneq_f16: i = 2; u = 7; break;
+case NEON::BI__builtin_neon_vcvts_n_f32_u32: i = 1; l = 1; u = 31; break;
+case NEON::BI__builtin_neon_vcvts_n_f32_s32: i = 1; l = 1; u = 31; break;
+case NEON::BI__builtin_neon_vcvtd_n_f64_u64: i = 1; l = 1; u = 63; break;
+case NEON::BI__builtin_neon_vcvtd_n_f64_s64: i = 1; l = 1; u = 63; break;
+case NEON::BI__builtin_neon_vshld_n_u64: i = 1; u = 63; break;
+case NEON::BI__builtin_neon_vshld_n_s64: i = 1; u = 63; break;
+case NEON::BI__builtin_neon_vslid_n_u64: i = 2; u = 63; break;
+case NEON::BI__builtin_neon_vslid_n_s64: i = 2; u = 63; break;
+case NEON::BI__builtin_neon_vqdmlals_lane_s32: i = 3; u = 1; break;
+case NEON::BI__builtin_neon_vqdmlalh_lane_s16: i = 3; u = 3; break;
+case NEON::BI__builtin_neon_vqdmlals_laneq_s32: i = 3; u = 3; break;
+case NEON::BI__builtin_neon_vqdmlalh_laneq_s16: i = 3; u = 7; break;
+case NEON::BI__builtin_neon_vqdmlsls_lane_s32: i = 3; u = 1; break;
+case NEON::BI__builtin_neon_vqdmlslh_lane_s16: i = 3; u = 3; break;
+case NEON::BI__builtin_neon_vqdmlsls_laneq_s32: i = 3; u = 3; break;
+case NEON::BI__builtin_neon_vqdmlslh_laneq_s16: i = 3; u = 7; break;
+case NEON::BI__builtin_neon_vqrshrns_n_u32: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vqrshrnd_n_u64: i = 1; l = 1; u = 31; break;
+case NEON::BI__builtin_neon_vqrshrnh_n_u16: i = 1; l = 1; u = 7; break;
+case NEON::BI__builtin_neon_vqrshrns_n_s32: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vqrshrnd_n_s64: i = 1; l = 1; u = 31; break;
+case NEON::BI__builtin_neon_vqrshrnh_n_s16: i = 1; l = 1; u = 7; break;
+case NEON::BI__builtin_neon_vqrshruns_n_s32: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vqrshrund_n_s64: i = 1; l = 1; u = 31; break;
+case NEON::BI__builtin_neon_vqrshrunh_n_s16: i = 1; l = 1; u = 7; break;
+case NEON::BI__builtin_neon_vqshlub_n_s8: i = 1; u = 7; break;
+case NEON::BI__builtin_neon_vqshlus_n_s32: i = 1; u = 31; break;
+case NEON::BI__builtin_neon_vqshlud_n_s64: i = 1; u = 63; break;
+case NEON::BI__builtin_neon_vqshluh_n_s16: i = 1; u = 15; break;
+case NEON::BI__builtin_neon_vqshlb_n_u8: i = 1; u = 7; break;
+case NEON::BI__builtin_neon_vqshls_n_u32: i = 1; u = 31; break;
+case NEON::BI__builtin_neon_vqshld_n_u64: i = 1; u = 63; break;
+case NEON::BI__builtin_neon_vqshlh_n_u16: i = 1; u = 15; break;
+case NEON::BI__builtin_neon_vqshlb_n_s8: i = 1; u = 7; break;
+case NEON::BI__builtin_neon_vqshls_n_s32: i = 1; u = 31; break;
+case NEON::BI__builtin_neon_vqshld_n_s64: i = 1; u = 63; break;
+case NEON::BI__builtin_neon_vqshlh_n_s16: i = 1; u = 15; break;
+case NEON::BI__builtin_neon_vqshrns_n_u32: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vqshrnd_n_u64: i = 1; l = 1; u = 31; break;
+case NEON::BI__builtin_neon_vqshrnh_n_u16: i = 1; l = 1; u = 7; break;
+case NEON::BI__builtin_neon_vqshrns_n_s32: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vqshrnd_n_s64: i = 1; l = 1; u = 31; break;
+case NEON::BI__builtin_neon_vqshrnh_n_s16: i = 1; l = 1; u = 7; break;
+case NEON::BI__builtin_neon_vqshruns_n_s32: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vqshrund_n_s64: i = 1; l = 1; u = 31; break;
+case NEON::BI__builtin_neon_vqshrunh_n_s16: i = 1; l = 1; u = 7; break;
+case NEON::BI__builtin_neon_vsrid_n_u64: i = 2; l = 1; u = 63; break;
+case NEON::BI__builtin_neon_vsrid_n_s64: i = 2; l = 1; u = 63; break;
+case NEON::BI__builtin_neon_vrshrd_n_u64: i = 1; l = 1; u = 63; break;
+case NEON::BI__builtin_neon_vrshrd_n_s64: i = 1; l = 1; u = 63; break;
+case NEON::BI__builtin_neon_vrsrad_n_u64: i = 2; l = 1; u = 63; break;
+case NEON::BI__builtin_neon_vrsrad_n_s64: i = 2; l = 1; u = 63; break;
+case NEON::BI__builtin_neon_vshrd_n_u64: i = 1; l = 1; u = 63; break;
+case NEON::BI__builtin_neon_vshrd_n_s64: i = 1; l = 1; u = 63; break;
+case NEON::BI__builtin_neon_vsrad_n_u64: i = 2; l = 1; u = 63; break;
+case NEON::BI__builtin_neon_vsrad_n_s64: i = 2; l = 1; u = 63; break;
+case NEON::BI__builtin_neon_vdupb_lane_i8: i = 1; u = 7; break;
+case NEON::BI__builtin_neon_vduph_lane_i16: i = 1; u = 3; break;
+case NEON::BI__builtin_neon_vdups_lane_i32: i = 1; u = 1; break;
+case NEON::BI__builtin_neon_vdupd_lane_i64: i = 1; u = 0; break;
+case NEON::BI__builtin_neon_vdupd_lane_f64: i = 1; u = 0; break;
+case NEON::BI__builtin_neon_vdups_lane_f32: i = 1; u = 1; break;
+case NEON::BI__builtin_neon_vduph_lane_f16: i = 1; u = 3; break;
+case NEON::BI__builtin_neon_vdupb_laneq_i8: i = 1; u = 15; break;
+case NEON::BI__builtin_neon_vduph_laneq_i16: i = 1; u = 7; break;
+case NEON::BI__builtin_neon_vdups_laneq_i32: i = 1; u = 3; break;
+case NEON::BI__builtin_neon_vdupd_laneq_i64: i = 1; u = 1; break;
+case NEON::BI__builtin_neon_vdupd_laneq_f64: i = 1; u = 1; break;
+case NEON::BI__builtin_neon_vdups_laneq_f32: i = 1; u = 3; break;
+case NEON::BI__builtin_neon_vduph_laneq_f16: i = 1; u = 7; break;
+case NEON::BI__builtin_neon_vmul_lane_v: i = 2; u = RFT(TV, false, false); break;
+case NEON::BI__builtin_neon_vmul_laneq_v: i = 2; u = RFT(TV, false, true); break;
+case NEON::BI__builtin_neon_vset_lane_i64: i = 2; u = 0; break;
+case NEON::BI__builtin_neon_vsetq_lane_i64: i = 2; u = 1; break;
+case NEON::BI__builtin_neon_vsetq_lane_f64: i = 2; u = 1; break;
+case NEON::BI__builtin_neon_vset_lane_f64: i = 2; u = 0; break;
+case NEON::BI__builtin_neon_vsli_n_v: i = 2; u = RFT(TV, true); break;
+case NEON::BI__builtin_neon_vsliq_n_v: i = 2; u = RFT(TV, true); break;
+case NEON::BI__builtin_neon_vsri_n_v: i = 2; l = 1; u = RFT(TV, true); break;
+case NEON::BI__builtin_neon_vsriq_n_v: i = 2; l = 1; u = RFT(TV, true); break;
+case NEON::BI__builtin_neon_vst1_lane_v: i = 2; u = RFT(TV, false, false); break;
+case NEON::BI__builtin_neon_vst1q_lane_v: i = 2; u = RFT(TV, false, false); break;
+case NEON::BI__builtin_neon_vst2_lane_v: i = 3; u = RFT(TV, false, false); break;
+case NEON::BI__builtin_neon_vst2q_lane_v: i = 3; u = RFT(TV, false, false); break;
+case NEON::BI__builtin_neon_vst3_lane_v: i = 4; u = RFT(TV, false, false); break;
+case NEON::BI__builtin_neon_vst3q_lane_v: i = 4; u = RFT(TV, false, false); break;
+case NEON::BI__builtin_neon_vst4_lane_v: i = 5; u = RFT(TV, false, false); break;
+case NEON::BI__builtin_neon_vst4q_lane_v: i = 5; u = RFT(TV, false, false); break;
+case NEON::BI__builtin_neon_vcvtq_n_f16_v: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vcvt_n_f16_v: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vcvtq_n_f32_v: i = 1; l = 1; u = 31; break;
+case NEON::BI__builtin_neon_vcvt_n_f32_v: i = 1; l = 1; u = 31; break;
+case NEON::BI__builtin_neon_vcvtq_n_s16_v: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vcvt_n_s16_v: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vcvtq_n_s32_v: i = 1; l = 1; u = 31; break;
+case NEON::BI__builtin_neon_vcvt_n_s32_v: i = 1; l = 1; u = 31; break;
+case NEON::BI__builtin_neon_vcvtq_n_u16_v: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vcvt_n_u16_v: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vcvtq_n_u32_v: i = 1; l = 1; u = 31; break;
+case NEON::BI__builtin_neon_vcvt_n_u32_v: i = 1; l = 1; u = 31; break;
+case NEON::BI__builtin_neon_vext_v: i = 2; u = RFT(TV, false, false); break;
+case NEON::BI__builtin_neon_vextq_v: i = 2; u = RFT(TV, false, false); break;
+case NEON::BI__builtin_neon_vfmaq_lane_v: i = 3; u = RFT(TV, false, false); break;
+case NEON::BI__builtin_neon_vfma_lane_v: i = 3; u = RFT(TV, false, false); break;
+case NEON::BI__builtin_neon_vfmaq_laneq_v: i = 3; u = RFT(TV, false, true); break;
+case NEON::BI__builtin_neon_vfma_laneq_v: i = 3; u = RFT(TV, false, true); break;
+case NEON::BI__builtin_neon_vget_lane_i8: i = 1; u = 7; break;
+case NEON::BI__builtin_neon_vget_lane_i16: i = 1; u = 3; break;
+case NEON::BI__builtin_neon_vgetq_lane_i8: i = 1; u = 15; break;
+case NEON::BI__builtin_neon_vgetq_lane_i16: i = 1; u = 7; break;
+case NEON::BI__builtin_neon_vgetq_lane_i32: i = 1; u = 3; break;
+case NEON::BI__builtin_neon_vgetq_lane_f32: i = 1; u = 3; break;
+case NEON::BI__builtin_neon_vget_lane_i32: i = 1; u = 1; break;
+case NEON::BI__builtin_neon_vget_lane_f32: i = 1; u = 1; break;
+case NEON::BI__builtin_neon_vqrshrn_n_v: i = 1; l = 1; u = RFT(TV, true); break;
+case NEON::BI__builtin_neon_vqrshrun_n_v: i = 1; l = 1; u = RFT(TV, true); break;
+case NEON::BI__builtin_neon_vqshluq_n_v: i = 1; u = RFT(TV, true); break;
+case NEON::BI__builtin_neon_vqshlu_n_v: i = 1; u = RFT(TV, true); break;
+case NEON::BI__builtin_neon_vqshlq_n_v: i = 1; u = RFT(TV, true); break;
+case NEON::BI__builtin_neon_vqshl_n_v: i = 1; u = RFT(TV, true); break;
+case NEON::BI__builtin_neon_vqshrn_n_v: i = 1; l = 1; u = RFT(TV, true); break;
+case NEON::BI__builtin_neon_vqshrun_n_v: i = 1; l = 1; u = RFT(TV, true); break;
+case NEON::BI__builtin_neon_vrshrn_n_v: i = 1; l = 1; u = RFT(TV, true); break;
+case NEON::BI__builtin_neon_vrshrq_n_v: i = 1; l = 1; u = RFT(TV, true); break;
+case NEON::BI__builtin_neon_vrshr_n_v: i = 1; l = 1; u = RFT(TV, true); break;
+case NEON::BI__builtin_neon_vrsraq_n_v: i = 2; l = 1; u = RFT(TV, true); break;
+case NEON::BI__builtin_neon_vrsra_n_v: i = 2; l = 1; u = RFT(TV, true); break;
+case NEON::BI__builtin_neon_vset_lane_i8: i = 2; u = 7; break;
+case NEON::BI__builtin_neon_vset_lane_i16: i = 2; u = 3; break;
+case NEON::BI__builtin_neon_vsetq_lane_i8: i = 2; u = 15; break;
+case NEON::BI__builtin_neon_vsetq_lane_i16: i = 2; u = 7; break;
+case NEON::BI__builtin_neon_vsetq_lane_i32: i = 2; u = 3; break;
+case NEON::BI__builtin_neon_vsetq_lane_f32: i = 2; u = 3; break;
+case NEON::BI__builtin_neon_vset_lane_i32: i = 2; u = 1; break;
+case NEON::BI__builtin_neon_vset_lane_f32: i = 2; u = 1; break;
+case NEON::BI__builtin_neon_vshll_n_v: i = 1; u = RFT(TV, true); break;
+case NEON::BI__builtin_neon_vshlq_n_v: i = 1; u = RFT(TV, true); break;
+case NEON::BI__builtin_neon_vshl_n_v: i = 1; u = RFT(TV, true); break;
+case NEON::BI__builtin_neon_vshrn_n_v: i = 1; l = 1; u = RFT(TV, true); break;
+case NEON::BI__builtin_neon_vshrq_n_v: i = 1; l = 1; u = RFT(TV, true); break;
+case NEON::BI__builtin_neon_vshr_n_v: i = 1; l = 1; u = RFT(TV, true); break;
+case NEON::BI__builtin_neon_vsraq_n_v: i = 2; l = 1; u = RFT(TV, true); break;
+case NEON::BI__builtin_neon_vsra_n_v: i = 2; l = 1; u = RFT(TV, true); break;
+#endif
+