summaryrefslogtreecommitdiff
path: root/clang-r353983/include/clang/Serialization/AttrPCHWrite.inc
diff options
context:
space:
mode:
Diffstat (limited to 'clang-r353983/include/clang/Serialization/AttrPCHWrite.inc')
-rw-r--r--clang-r353983/include/clang/Serialization/AttrPCHWrite.inc2096
1 files changed, 2096 insertions, 0 deletions
diff --git a/clang-r353983/include/clang/Serialization/AttrPCHWrite.inc b/clang-r353983/include/clang/Serialization/AttrPCHWrite.inc
new file mode 100644
index 00000000..09a9af01
--- /dev/null
+++ b/clang-r353983/include/clang/Serialization/AttrPCHWrite.inc
@@ -0,0 +1,2096 @@
+/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
+|* *|
+|* Attribute serialization code *|
+|* *|
+|* Automatically generated file, do not edit! *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+ switch (A->getKind()) {
+ case attr::AArch64VectorPcs: {
+ const auto *SA = cast<AArch64VectorPcsAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::AMDGPUFlatWorkGroupSize: {
+ const auto *SA = cast<AMDGPUFlatWorkGroupSizeAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->getMin());
+ Record.push_back(SA->getMax());
+ break;
+ }
+ case attr::AMDGPUNumSGPR: {
+ const auto *SA = cast<AMDGPUNumSGPRAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->getNumSGPR());
+ break;
+ }
+ case attr::AMDGPUNumVGPR: {
+ const auto *SA = cast<AMDGPUNumVGPRAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->getNumVGPR());
+ break;
+ }
+ case attr::AMDGPUWavesPerEU: {
+ const auto *SA = cast<AMDGPUWavesPerEUAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->getMin());
+ Record.push_back(SA->getMax());
+ break;
+ }
+ case attr::ARMInterrupt: {
+ const auto *SA = cast<ARMInterruptAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+Record.push_back(SA->getInterrupt());
+ break;
+ }
+ case attr::AVRInterrupt: {
+ const auto *SA = cast<AVRInterruptAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::AVRSignal: {
+ const auto *SA = cast<AVRSignalAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::AbiTag: {
+ const auto *SA = cast<AbiTagAttr>(A);
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->tags_size());
+ for (auto &Val : SA->tags())
+ Record.AddString(Val);
+ break;
+ }
+ case attr::AcquireCapability: {
+ const auto *SA = cast<AcquireCapabilityAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->args_size());
+ for (auto &Val : SA->args())
+ Record.AddStmt(Val);
+ break;
+ }
+ case attr::AcquiredAfter: {
+ const auto *SA = cast<AcquiredAfterAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->args_size());
+ for (auto &Val : SA->args())
+ Record.AddStmt(Val);
+ break;
+ }
+ case attr::AcquiredBefore: {
+ const auto *SA = cast<AcquiredBeforeAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->args_size());
+ for (auto &Val : SA->args())
+ Record.AddStmt(Val);
+ break;
+ }
+ case attr::AddressSpace: {
+ const auto *SA = cast<AddressSpaceAttr>(A);
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->getAddressSpace());
+ break;
+ }
+ case attr::Alias: {
+ const auto *SA = cast<AliasAttr>(A);
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddString(SA->getAliasee());
+ break;
+ }
+ case attr::AlignMac68k: {
+ const auto *SA = cast<AlignMac68kAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::AlignValue: {
+ const auto *SA = cast<AlignValueAttr>(A);
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddStmt(SA->getAlignment());
+ break;
+ }
+ case attr::Aligned: {
+ const auto *SA = cast<AlignedAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->isAlignmentExpr());
+ if (SA->isAlignmentExpr())
+ Record.AddStmt(SA->getAlignmentExpr());
+ else
+ Record.AddTypeSourceInfo(SA->getAlignmentType());
+ break;
+ }
+ case attr::AllocAlign: {
+ const auto *SA = cast<AllocAlignAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->getParamIndex().serialize());
+ break;
+ }
+ case attr::AllocSize: {
+ const auto *SA = cast<AllocSizeAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->getElemSizeParam().serialize());
+ Record.push_back(SA->getNumElemsParam().serialize());
+ break;
+ }
+ case attr::AlwaysDestroy: {
+ const auto *SA = cast<AlwaysDestroyAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::AlwaysInline: {
+ const auto *SA = cast<AlwaysInlineAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::AnalyzerNoReturn: {
+ const auto *SA = cast<AnalyzerNoReturnAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::Annotate: {
+ const auto *SA = cast<AnnotateAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddString(SA->getAnnotation());
+ break;
+ }
+ case attr::AnyX86Interrupt: {
+ const auto *SA = cast<AnyX86InterruptAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::AnyX86NoCallerSavedRegisters: {
+ const auto *SA = cast<AnyX86NoCallerSavedRegistersAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::AnyX86NoCfCheck: {
+ const auto *SA = cast<AnyX86NoCfCheckAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::ArcWeakrefUnavailable: {
+ const auto *SA = cast<ArcWeakrefUnavailableAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::ArgumentWithTypeTag: {
+ const auto *SA = cast<ArgumentWithTypeTagAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddIdentifierRef(SA->getArgumentKind());
+ Record.push_back(SA->getArgumentIdx().serialize());
+ Record.push_back(SA->getTypeTagIdx().serialize());
+ Record.push_back(SA->getIsPointer());
+ break;
+ }
+ case attr::Artificial: {
+ const auto *SA = cast<ArtificialAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::AsmLabel: {
+ const auto *SA = cast<AsmLabelAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddString(SA->getLabel());
+ break;
+ }
+ case attr::AssertCapability: {
+ const auto *SA = cast<AssertCapabilityAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->args_size());
+ for (auto &Val : SA->args())
+ Record.AddStmt(Val);
+ break;
+ }
+ case attr::AssertExclusiveLock: {
+ const auto *SA = cast<AssertExclusiveLockAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->args_size());
+ for (auto &Val : SA->args())
+ Record.AddStmt(Val);
+ break;
+ }
+ case attr::AssertSharedLock: {
+ const auto *SA = cast<AssertSharedLockAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->args_size());
+ for (auto &Val : SA->args())
+ Record.AddStmt(Val);
+ break;
+ }
+ case attr::AssumeAligned: {
+ const auto *SA = cast<AssumeAlignedAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddStmt(SA->getAlignment());
+ Record.AddStmt(SA->getOffset());
+ break;
+ }
+ case attr::Availability: {
+ const auto *SA = cast<AvailabilityAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddIdentifierRef(SA->getPlatform());
+ Record.AddVersionTuple(SA->getIntroduced());
+ Record.AddVersionTuple(SA->getDeprecated());
+ Record.AddVersionTuple(SA->getObsoleted());
+ Record.push_back(SA->getUnavailable());
+ Record.AddString(SA->getMessage());
+ Record.push_back(SA->getStrict());
+ Record.AddString(SA->getReplacement());
+ Record.push_back(SA->getPriority());
+ break;
+ }
+ case attr::Blocks: {
+ const auto *SA = cast<BlocksAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+Record.push_back(SA->getType());
+ break;
+ }
+ case attr::C11NoReturn: {
+ const auto *SA = cast<C11NoReturnAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::CDecl: {
+ const auto *SA = cast<CDeclAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::CFAuditedTransfer: {
+ const auto *SA = cast<CFAuditedTransferAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::CFConsumed: {
+ const auto *SA = cast<CFConsumedAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::CFReturnsNotRetained: {
+ const auto *SA = cast<CFReturnsNotRetainedAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::CFReturnsRetained: {
+ const auto *SA = cast<CFReturnsRetainedAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::CFUnknownTransfer: {
+ const auto *SA = cast<CFUnknownTransferAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::CPUDispatch: {
+ const auto *SA = cast<CPUDispatchAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->cpus_size());
+ for (auto &Val : SA->cpus())
+ Record.AddIdentifierRef(Val);
+ break;
+ }
+ case attr::CPUSpecific: {
+ const auto *SA = cast<CPUSpecificAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->cpus_size());
+ for (auto &Val : SA->cpus())
+ Record.AddIdentifierRef(Val);
+ break;
+ }
+ case attr::CUDAConstant: {
+ const auto *SA = cast<CUDAConstantAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::CUDADevice: {
+ const auto *SA = cast<CUDADeviceAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::CUDAGlobal: {
+ const auto *SA = cast<CUDAGlobalAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::CUDAHost: {
+ const auto *SA = cast<CUDAHostAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::CUDAInvalidTarget: {
+ const auto *SA = cast<CUDAInvalidTargetAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::CUDALaunchBounds: {
+ const auto *SA = cast<CUDALaunchBoundsAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddStmt(SA->getMaxThreads());
+ Record.AddStmt(SA->getMinBlocks());
+ break;
+ }
+ case attr::CUDAShared: {
+ const auto *SA = cast<CUDASharedAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::CXX11NoReturn: {
+ const auto *SA = cast<CXX11NoReturnAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::CallableWhen: {
+ const auto *SA = cast<CallableWhenAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->callableStates_size());
+ for (CallableWhenAttr::callableStates_iterator i = SA->callableStates_begin(), e = SA->callableStates_end(); i != e; ++i)
+ Record.push_back((*i));
+ break;
+ }
+ case attr::Callback: {
+ const auto *SA = cast<CallbackAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->encoding_size());
+ for (auto &Val : SA->encoding())
+ Record.push_back(Val);
+ break;
+ }
+ case attr::Capability: {
+ const auto *SA = cast<CapabilityAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddString(SA->getName());
+ break;
+ }
+ case attr::CapturedRecord: {
+ const auto *SA = cast<CapturedRecordAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::CarriesDependency: {
+ const auto *SA = cast<CarriesDependencyAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::Cleanup: {
+ const auto *SA = cast<CleanupAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddDeclRef(SA->getFunctionDecl());
+ break;
+ }
+ case attr::CodeSeg: {
+ const auto *SA = cast<CodeSegAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddString(SA->getName());
+ break;
+ }
+ case attr::Cold: {
+ const auto *SA = cast<ColdAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::Common: {
+ const auto *SA = cast<CommonAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::Const: {
+ const auto *SA = cast<ConstAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::Constructor: {
+ const auto *SA = cast<ConstructorAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->getPriority());
+ break;
+ }
+ case attr::Consumable: {
+ const auto *SA = cast<ConsumableAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+Record.push_back(SA->getDefaultState());
+ break;
+ }
+ case attr::ConsumableAutoCast: {
+ const auto *SA = cast<ConsumableAutoCastAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::ConsumableSetOnRead: {
+ const auto *SA = cast<ConsumableSetOnReadAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::Convergent: {
+ const auto *SA = cast<ConvergentAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::DLLExport: {
+ const auto *SA = cast<DLLExportAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::DLLExportStaticLocal: {
+ const auto *SA = cast<DLLExportStaticLocalAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::DLLImport: {
+ const auto *SA = cast<DLLImportAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::DLLImportStaticLocal: {
+ const auto *SA = cast<DLLImportStaticLocalAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::Deprecated: {
+ const auto *SA = cast<DeprecatedAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddString(SA->getMessage());
+ Record.AddString(SA->getReplacement());
+ break;
+ }
+ case attr::Destructor: {
+ const auto *SA = cast<DestructorAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->getPriority());
+ break;
+ }
+ case attr::DiagnoseIf: {
+ const auto *SA = cast<DiagnoseIfAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddStmt(SA->getCond());
+ Record.AddString(SA->getMessage());
+Record.push_back(SA->getDiagnosticType());
+ Record.push_back(SA->getArgDependent());
+ Record.AddDeclRef(SA->getParent());
+ break;
+ }
+ case attr::DisableTailCalls: {
+ const auto *SA = cast<DisableTailCallsAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::EmptyBases: {
+ const auto *SA = cast<EmptyBasesAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::EnableIf: {
+ const auto *SA = cast<EnableIfAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddStmt(SA->getCond());
+ Record.AddString(SA->getMessage());
+ break;
+ }
+ case attr::EnumExtensibility: {
+ const auto *SA = cast<EnumExtensibilityAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+Record.push_back(SA->getExtensibility());
+ break;
+ }
+ case attr::ExcludeFromExplicitInstantiation: {
+ const auto *SA = cast<ExcludeFromExplicitInstantiationAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::ExclusiveTrylockFunction: {
+ const auto *SA = cast<ExclusiveTrylockFunctionAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddStmt(SA->getSuccessValue());
+ Record.push_back(SA->args_size());
+ for (auto &Val : SA->args())
+ Record.AddStmt(Val);
+ break;
+ }
+ case attr::ExternalSourceSymbol: {
+ const auto *SA = cast<ExternalSourceSymbolAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddString(SA->getLanguage());
+ Record.AddString(SA->getDefinedIn());
+ Record.push_back(SA->getGeneratedDeclaration());
+ break;
+ }
+ case attr::FallThrough: {
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::FastCall: {
+ const auto *SA = cast<FastCallAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::Final: {
+ const auto *SA = cast<FinalAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::FlagEnum: {
+ const auto *SA = cast<FlagEnumAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::Flatten: {
+ const auto *SA = cast<FlattenAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::Format: {
+ const auto *SA = cast<FormatAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddIdentifierRef(SA->getType());
+ Record.push_back(SA->getFormatIdx());
+ Record.push_back(SA->getFirstArg());
+ break;
+ }
+ case attr::FormatArg: {
+ const auto *SA = cast<FormatArgAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->getFormatIdx().serialize());
+ break;
+ }
+ case attr::FortifyStdLib: {
+ const auto *SA = cast<FortifyStdLibAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->getType());
+ Record.push_back(SA->getFlag());
+ break;
+ }
+ case attr::GNUInline: {
+ const auto *SA = cast<GNUInlineAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::GuardedBy: {
+ const auto *SA = cast<GuardedByAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddStmt(SA->getArg());
+ break;
+ }
+ case attr::GuardedVar: {
+ const auto *SA = cast<GuardedVarAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::Hot: {
+ const auto *SA = cast<HotAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::IBAction: {
+ const auto *SA = cast<IBActionAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::IBOutlet: {
+ const auto *SA = cast<IBOutletAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::IBOutletCollection: {
+ const auto *SA = cast<IBOutletCollectionAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddTypeSourceInfo(SA->getInterfaceLoc());
+ break;
+ }
+ case attr::IFunc: {
+ const auto *SA = cast<IFuncAttr>(A);
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddString(SA->getResolver());
+ break;
+ }
+ case attr::InitPriority: {
+ const auto *SA = cast<InitPriorityAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->getPriority());
+ break;
+ }
+ case attr::InitSeg: {
+ const auto *SA = cast<InitSegAttr>(A);
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddString(SA->getSection());
+ break;
+ }
+ case attr::IntelOclBicc: {
+ const auto *SA = cast<IntelOclBiccAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::InternalLinkage: {
+ const auto *SA = cast<InternalLinkageAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::LTOVisibilityPublic: {
+ const auto *SA = cast<LTOVisibilityPublicAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::LayoutVersion: {
+ const auto *SA = cast<LayoutVersionAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->getVersion());
+ break;
+ }
+ case attr::LifetimeBound: {
+ const auto *SA = cast<LifetimeBoundAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::LockReturned: {
+ const auto *SA = cast<LockReturnedAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddStmt(SA->getArg());
+ break;
+ }
+ case attr::LocksExcluded: {
+ const auto *SA = cast<LocksExcludedAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->args_size());
+ for (auto &Val : SA->args())
+ Record.AddStmt(Val);
+ break;
+ }
+ case attr::LoopHint: {
+ const auto *SA = cast<LoopHintAttr>(A);
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+Record.push_back(SA->getOption());
+Record.push_back(SA->getState());
+ Record.AddStmt(SA->getValue());
+ break;
+ }
+ case attr::MSABI: {
+ const auto *SA = cast<MSABIAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::MSInheritance: {
+ const auto *SA = cast<MSInheritanceAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->getBestCase());
+ break;
+ }
+ case attr::MSNoVTable: {
+ const auto *SA = cast<MSNoVTableAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::MSP430Interrupt: {
+ const auto *SA = cast<MSP430InterruptAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->getNumber());
+ break;
+ }
+ case attr::MSStruct: {
+ const auto *SA = cast<MSStructAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::MSVtorDisp: {
+ const auto *SA = cast<MSVtorDispAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->getVdm());
+ break;
+ }
+ case attr::MaxFieldAlignment: {
+ const auto *SA = cast<MaxFieldAlignmentAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->getAlignment());
+ break;
+ }
+ case attr::MayAlias: {
+ const auto *SA = cast<MayAliasAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::MicroMips: {
+ const auto *SA = cast<MicroMipsAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::MinSize: {
+ const auto *SA = cast<MinSizeAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::MinVectorWidth: {
+ const auto *SA = cast<MinVectorWidthAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->getVectorWidth());
+ break;
+ }
+ case attr::Mips16: {
+ const auto *SA = cast<Mips16Attr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::MipsInterrupt: {
+ const auto *SA = cast<MipsInterruptAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+Record.push_back(SA->getInterrupt());
+ break;
+ }
+ case attr::MipsLongCall: {
+ const auto *SA = cast<MipsLongCallAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::MipsShortCall: {
+ const auto *SA = cast<MipsShortCallAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::Mode: {
+ const auto *SA = cast<ModeAttr>(A);
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddIdentifierRef(SA->getMode());
+ break;
+ }
+ case attr::NSConsumed: {
+ const auto *SA = cast<NSConsumedAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::NSConsumesSelf: {
+ const auto *SA = cast<NSConsumesSelfAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::NSReturnsAutoreleased: {
+ const auto *SA = cast<NSReturnsAutoreleasedAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::NSReturnsNotRetained: {
+ const auto *SA = cast<NSReturnsNotRetainedAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::NSReturnsRetained: {
+ const auto *SA = cast<NSReturnsRetainedAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::Naked: {
+ const auto *SA = cast<NakedAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::NoAlias: {
+ const auto *SA = cast<NoAliasAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::NoCommon: {
+ const auto *SA = cast<NoCommonAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::NoDebug: {
+ const auto *SA = cast<NoDebugAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::NoDeref: {
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::NoDestroy: {
+ const auto *SA = cast<NoDestroyAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::NoDuplicate: {
+ const auto *SA = cast<NoDuplicateAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::NoEscape: {
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::NoInline: {
+ const auto *SA = cast<NoInlineAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::NoInstrumentFunction: {
+ const auto *SA = cast<NoInstrumentFunctionAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::NoMicroMips: {
+ const auto *SA = cast<NoMicroMipsAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::NoMips16: {
+ const auto *SA = cast<NoMips16Attr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::NoReturn: {
+ const auto *SA = cast<NoReturnAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::NoSanitize: {
+ const auto *SA = cast<NoSanitizeAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->sanitizers_size());
+ for (auto &Val : SA->sanitizers())
+ Record.AddString(Val);
+ break;
+ }
+ case attr::NoSpeculativeLoadHardening: {
+ const auto *SA = cast<NoSpeculativeLoadHardeningAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::NoSplitStack: {
+ const auto *SA = cast<NoSplitStackAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::NoStackProtector: {
+ const auto *SA = cast<NoStackProtectorAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::NoThreadSafetyAnalysis: {
+ const auto *SA = cast<NoThreadSafetyAnalysisAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::NoThrow: {
+ const auto *SA = cast<NoThrowAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::NonNull: {
+ const auto *SA = cast<NonNullAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->args_size());
+ for (auto &Val : SA->args())
+ Record.push_back(Val.serialize());
+ break;
+ }
+ case attr::NotTailCalled: {
+ const auto *SA = cast<NotTailCalledAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::OMPCaptureKind: {
+ const auto *SA = cast<OMPCaptureKindAttr>(A);
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->getCaptureKind());
+ break;
+ }
+ case attr::OMPCaptureNoInit: {
+ const auto *SA = cast<OMPCaptureNoInitAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::OMPDeclareSimdDecl: {
+ const auto *SA = cast<OMPDeclareSimdDeclAttr>(A);
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+Record.push_back(SA->getBranchState());
+ Record.AddStmt(SA->getSimdlen());
+ Record.push_back(SA->uniforms_size());
+ for (auto &Val : SA->uniforms())
+ Record.AddStmt(Val);
+ Record.push_back(SA->aligneds_size());
+ for (auto &Val : SA->aligneds())
+ Record.AddStmt(Val);
+ Record.push_back(SA->alignments_size());
+ for (auto &Val : SA->alignments())
+ Record.AddStmt(Val);
+ Record.push_back(SA->linears_size());
+ for (auto &Val : SA->linears())
+ Record.AddStmt(Val);
+ Record.push_back(SA->modifiers_size());
+ for (auto &Val : SA->modifiers())
+ Record.push_back(Val);
+ Record.push_back(SA->steps_size());
+ for (auto &Val : SA->steps())
+ Record.AddStmt(Val);
+ break;
+ }
+ case attr::OMPDeclareTargetDecl: {
+ const auto *SA = cast<OMPDeclareTargetDeclAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+Record.push_back(SA->getMapType());
+ break;
+ }
+ case attr::OMPReferencedVar: {
+ const auto *SA = cast<OMPReferencedVarAttr>(A);
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddStmt(SA->getRef());
+ break;
+ }
+ case attr::OMPThreadPrivateDecl: {
+ const auto *SA = cast<OMPThreadPrivateDeclAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::OSConsumed: {
+ const auto *SA = cast<OSConsumedAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::OSConsumesThis: {
+ const auto *SA = cast<OSConsumesThisAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::OSReturnsNotRetained: {
+ const auto *SA = cast<OSReturnsNotRetainedAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::OSReturnsRetained: {
+ const auto *SA = cast<OSReturnsRetainedAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::OSReturnsRetainedOnNonZero: {
+ const auto *SA = cast<OSReturnsRetainedOnNonZeroAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::OSReturnsRetainedOnZero: {
+ const auto *SA = cast<OSReturnsRetainedOnZeroAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::ObjCBoxable: {
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::ObjCBridge: {
+ const auto *SA = cast<ObjCBridgeAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddIdentifierRef(SA->getBridgedType());
+ break;
+ }
+ case attr::ObjCBridgeMutable: {
+ const auto *SA = cast<ObjCBridgeMutableAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddIdentifierRef(SA->getBridgedType());
+ break;
+ }
+ case attr::ObjCBridgeRelated: {
+ const auto *SA = cast<ObjCBridgeRelatedAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddIdentifierRef(SA->getRelatedClass());
+ Record.AddIdentifierRef(SA->getClassMethod());
+ Record.AddIdentifierRef(SA->getInstanceMethod());
+ break;
+ }
+ case attr::ObjCDesignatedInitializer: {
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::ObjCException: {
+ const auto *SA = cast<ObjCExceptionAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::ObjCExplicitProtocolImpl: {
+ const auto *SA = cast<ObjCExplicitProtocolImplAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::ObjCExternallyRetained: {
+ const auto *SA = cast<ObjCExternallyRetainedAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::ObjCGC: {
+ const auto *SA = cast<ObjCGCAttr>(A);
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddIdentifierRef(SA->getKind());
+ break;
+ }
+ case attr::ObjCIndependentClass: {
+ const auto *SA = cast<ObjCIndependentClassAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::ObjCInertUnsafeUnretained: {
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::ObjCKindOf: {
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::ObjCMethodFamily: {
+ const auto *SA = cast<ObjCMethodFamilyAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+Record.push_back(SA->getFamily());
+ break;
+ }
+ case attr::ObjCNSObject: {
+ const auto *SA = cast<ObjCNSObjectAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::ObjCNonLazyClass: {
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::ObjCOwnership: {
+ const auto *SA = cast<ObjCOwnershipAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddIdentifierRef(SA->getKind());
+ break;
+ }
+ case attr::ObjCPreciseLifetime: {
+ const auto *SA = cast<ObjCPreciseLifetimeAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::ObjCRequiresPropertyDefs: {
+ const auto *SA = cast<ObjCRequiresPropertyDefsAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::ObjCRequiresSuper: {
+ const auto *SA = cast<ObjCRequiresSuperAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::ObjCReturnsInnerPointer: {
+ const auto *SA = cast<ObjCReturnsInnerPointerAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::ObjCRootClass: {
+ const auto *SA = cast<ObjCRootClassAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::ObjCRuntimeName: {
+ const auto *SA = cast<ObjCRuntimeNameAttr>(A);
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddString(SA->getMetadataName());
+ break;
+ }
+ case attr::ObjCRuntimeVisible: {
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::ObjCSubclassingRestricted: {
+ const auto *SA = cast<ObjCSubclassingRestrictedAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::OpenCLAccess: {
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::OpenCLConstantAddressSpace: {
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::OpenCLGenericAddressSpace: {
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::OpenCLGlobalAddressSpace: {
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::OpenCLIntelReqdSubGroupSize: {
+ const auto *SA = cast<OpenCLIntelReqdSubGroupSizeAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->getSubGroupSize());
+ break;
+ }
+ case attr::OpenCLKernel: {
+ const auto *SA = cast<OpenCLKernelAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::OpenCLLocalAddressSpace: {
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::OpenCLPrivateAddressSpace: {
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::OpenCLUnrollHint: {
+ const auto *SA = cast<OpenCLUnrollHintAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->getUnrollHint());
+ break;
+ }
+ case attr::OptimizeNone: {
+ const auto *SA = cast<OptimizeNoneAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::Overloadable: {
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::Override: {
+ const auto *SA = cast<OverrideAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::Ownership: {
+ const auto *SA = cast<OwnershipAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddIdentifierRef(SA->getModule());
+ Record.push_back(SA->args_size());
+ for (auto &Val : SA->args())
+ Record.push_back(Val.serialize());
+ break;
+ }
+ case attr::Packed: {
+ const auto *SA = cast<PackedAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::ParamTypestate: {
+ const auto *SA = cast<ParamTypestateAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+Record.push_back(SA->getParamState());
+ break;
+ }
+ case attr::Pascal: {
+ const auto *SA = cast<PascalAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::PassObjectSize: {
+ const auto *SA = cast<PassObjectSizeAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->getType());
+ break;
+ }
+ case attr::Pcs: {
+ const auto *SA = cast<PcsAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+Record.push_back(SA->getPCS());
+ break;
+ }
+ case attr::PragmaClangBSSSection: {
+ const auto *SA = cast<PragmaClangBSSSectionAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddString(SA->getName());
+ break;
+ }
+ case attr::PragmaClangDataSection: {
+ const auto *SA = cast<PragmaClangDataSectionAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddString(SA->getName());
+ break;
+ }
+ case attr::PragmaClangRodataSection: {
+ const auto *SA = cast<PragmaClangRodataSectionAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddString(SA->getName());
+ break;
+ }
+ case attr::PragmaClangTextSection: {
+ const auto *SA = cast<PragmaClangTextSectionAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddString(SA->getName());
+ break;
+ }
+ case attr::PreserveAll: {
+ const auto *SA = cast<PreserveAllAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::PreserveMost: {
+ const auto *SA = cast<PreserveMostAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::PtGuardedBy: {
+ const auto *SA = cast<PtGuardedByAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddStmt(SA->getArg());
+ break;
+ }
+ case attr::PtGuardedVar: {
+ const auto *SA = cast<PtGuardedVarAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::Ptr32: {
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::Ptr64: {
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::Pure: {
+ const auto *SA = cast<PureAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::RISCVInterrupt: {
+ const auto *SA = cast<RISCVInterruptAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+Record.push_back(SA->getInterrupt());
+ break;
+ }
+ case attr::RegCall: {
+ const auto *SA = cast<RegCallAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::Reinitializes: {
+ const auto *SA = cast<ReinitializesAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::ReleaseCapability: {
+ const auto *SA = cast<ReleaseCapabilityAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->args_size());
+ for (auto &Val : SA->args())
+ Record.AddStmt(Val);
+ break;
+ }
+ case attr::RenderScriptKernel: {
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::ReqdWorkGroupSize: {
+ const auto *SA = cast<ReqdWorkGroupSizeAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->getXDim());
+ Record.push_back(SA->getYDim());
+ Record.push_back(SA->getZDim());
+ break;
+ }
+ case attr::RequireConstantInit: {
+ const auto *SA = cast<RequireConstantInitAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::RequiresCapability: {
+ const auto *SA = cast<RequiresCapabilityAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->args_size());
+ for (auto &Val : SA->args())
+ Record.AddStmt(Val);
+ break;
+ }
+ case attr::Restrict: {
+ const auto *SA = cast<RestrictAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::ReturnTypestate: {
+ const auto *SA = cast<ReturnTypestateAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+Record.push_back(SA->getState());
+ break;
+ }
+ case attr::ReturnsNonNull: {
+ const auto *SA = cast<ReturnsNonNullAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::ReturnsTwice: {
+ const auto *SA = cast<ReturnsTwiceAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::SPtr: {
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::ScopedLockable: {
+ const auto *SA = cast<ScopedLockableAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::Section: {
+ const auto *SA = cast<SectionAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddString(SA->getName());
+ break;
+ }
+ case attr::SelectAny: {
+ const auto *SA = cast<SelectAnyAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::Sentinel: {
+ const auto *SA = cast<SentinelAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->getSentinel());
+ Record.push_back(SA->getNullPos());
+ break;
+ }
+ case attr::SetTypestate: {
+ const auto *SA = cast<SetTypestateAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+Record.push_back(SA->getNewState());
+ break;
+ }
+ case attr::SharedTrylockFunction: {
+ const auto *SA = cast<SharedTrylockFunctionAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddStmt(SA->getSuccessValue());
+ Record.push_back(SA->args_size());
+ for (auto &Val : SA->args())
+ Record.AddStmt(Val);
+ break;
+ }
+ case attr::SpeculativeLoadHardening: {
+ const auto *SA = cast<SpeculativeLoadHardeningAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::StdCall: {
+ const auto *SA = cast<StdCallAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::Suppress: {
+ const auto *SA = cast<SuppressAttr>(A);
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->diagnosticIdentifiers_size());
+ for (auto &Val : SA->diagnosticIdentifiers())
+ Record.AddString(Val);
+ break;
+ }
+ case attr::SwiftCall: {
+ const auto *SA = cast<SwiftCallAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::SwiftContext: {
+ const auto *SA = cast<SwiftContextAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::SwiftErrorResult: {
+ const auto *SA = cast<SwiftErrorResultAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::SwiftIndirectResult: {
+ const auto *SA = cast<SwiftIndirectResultAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::SysVABI: {
+ const auto *SA = cast<SysVABIAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::TLSModel: {
+ const auto *SA = cast<TLSModelAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddString(SA->getModel());
+ break;
+ }
+ case attr::Target: {
+ const auto *SA = cast<TargetAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddString(SA->getFeaturesStr());
+ break;
+ }
+ case attr::TestTypestate: {
+ const auto *SA = cast<TestTypestateAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+Record.push_back(SA->getTestState());
+ break;
+ }
+ case attr::ThisCall: {
+ const auto *SA = cast<ThisCallAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::Thread: {
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::TransparentUnion: {
+ const auto *SA = cast<TransparentUnionAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::TrivialABI: {
+ const auto *SA = cast<TrivialABIAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::TryAcquireCapability: {
+ const auto *SA = cast<TryAcquireCapabilityAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddStmt(SA->getSuccessValue());
+ Record.push_back(SA->args_size());
+ for (auto &Val : SA->args())
+ Record.AddStmt(Val);
+ break;
+ }
+ case attr::TypeNonNull: {
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::TypeNullUnspecified: {
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::TypeNullable: {
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::TypeTagForDatatype: {
+ const auto *SA = cast<TypeTagForDatatypeAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddIdentifierRef(SA->getArgumentKind());
+ Record.AddTypeSourceInfo(SA->getMatchingCTypeLoc());
+ Record.push_back(SA->getLayoutCompatible());
+ Record.push_back(SA->getMustBeNull());
+ break;
+ }
+ case attr::TypeVisibility: {
+ const auto *SA = cast<TypeVisibilityAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+Record.push_back(SA->getVisibility());
+ break;
+ }
+ case attr::UPtr: {
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::Unavailable: {
+ const auto *SA = cast<UnavailableAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddString(SA->getMessage());
+Record.push_back(SA->getImplicitReason());
+ break;
+ }
+ case attr::Uninitialized: {
+ const auto *SA = cast<UninitializedAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::Unused: {
+ const auto *SA = cast<UnusedAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::Used: {
+ const auto *SA = cast<UsedAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::Uuid: {
+ const auto *SA = cast<UuidAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddString(SA->getGuid());
+ break;
+ }
+ case attr::VecReturn: {
+ const auto *SA = cast<VecReturnAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::VecTypeHint: {
+ const auto *SA = cast<VecTypeHintAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddTypeSourceInfo(SA->getTypeHintLoc());
+ break;
+ }
+ case attr::VectorCall: {
+ const auto *SA = cast<VectorCallAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::Visibility: {
+ const auto *SA = cast<VisibilityAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+Record.push_back(SA->getVisibility());
+ break;
+ }
+ case attr::WarnUnused: {
+ const auto *SA = cast<WarnUnusedAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::WarnUnusedResult: {
+ const auto *SA = cast<WarnUnusedResultAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::Weak: {
+ const auto *SA = cast<WeakAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::WeakImport: {
+ const auto *SA = cast<WeakImportAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::WeakRef: {
+ const auto *SA = cast<WeakRefAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddString(SA->getAliasee());
+ break;
+ }
+ case attr::WebAssemblyImportModule: {
+ const auto *SA = cast<WebAssemblyImportModuleAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddString(SA->getImportModule());
+ break;
+ }
+ case attr::WebAssemblyImportName: {
+ const auto *SA = cast<WebAssemblyImportNameAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.AddString(SA->getImportName());
+ break;
+ }
+ case attr::WorkGroupSizeHint: {
+ const auto *SA = cast<WorkGroupSizeHintAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->getXDim());
+ Record.push_back(SA->getYDim());
+ Record.push_back(SA->getZDim());
+ break;
+ }
+ case attr::X86ForceAlignArgPointer: {
+ const auto *SA = cast<X86ForceAlignArgPointerAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::XRayInstrument: {
+ const auto *SA = cast<XRayInstrumentAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ break;
+ }
+ case attr::XRayLogArgs: {
+ const auto *SA = cast<XRayLogArgsAttr>(A);
+ Record.push_back(SA->isInherited());
+ Record.push_back(A->isImplicit());
+ Record.push_back(A->getSpellingListIndex());
+ Record.push_back(SA->getArgumentCount());
+ break;
+ }
+ }