| /*===- 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->isPackExpansion()); |
| break; |
| } |
| case attr::AMDGPUFlatWorkGroupSize: { |
| const auto *SA = cast<AMDGPUFlatWorkGroupSizeAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.AddStmt(SA->getMin()); |
| Record.AddStmt(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->isPackExpansion()); |
| 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->isPackExpansion()); |
| 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->isPackExpansion()); |
| Record.AddStmt(SA->getMin()); |
| Record.AddStmt(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->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::AVRSignal: { |
| const auto *SA = cast<AVRSignalAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::AbiTag: { |
| const auto *SA = cast<AbiTagAttr>(A); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| Record.push_back(SA->args_size()); |
| for (auto &Val : SA->args()) |
| Record.AddStmt(Val); |
| break; |
| } |
| case attr::AcquireHandle: { |
| const auto *SA = cast<AcquireHandleAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.AddString(SA->getHandleType()); |
| break; |
| } |
| case attr::AcquiredAfter: { |
| const auto *SA = cast<AcquiredAfterAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| 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->isPackExpansion()); |
| Record.push_back(SA->getAddressSpace()); |
| break; |
| } |
| case attr::Alias: { |
| const auto *SA = cast<AliasAttr>(A); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::AlignNatural: { |
| const auto *SA = cast<AlignNaturalAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::AlignValue: { |
| const auto *SA = cast<AlignValueAttr>(A); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| 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->isPackExpansion()); |
| 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->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::AlwaysInline: { |
| const auto *SA = cast<AlwaysInlineAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::AnalyzerNoReturn: { |
| const auto *SA = cast<AnalyzerNoReturnAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::Annotate: { |
| const auto *SA = cast<AnnotateAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.AddString(SA->getAnnotation()); |
| Record.push_back(SA->args_size()); |
| for (auto &Val : SA->args()) |
| Record.AddStmt(Val); |
| break; |
| } |
| case attr::AnyX86Interrupt: { |
| const auto *SA = cast<AnyX86InterruptAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::AnyX86NoCallerSavedRegisters: { |
| const auto *SA = cast<AnyX86NoCallerSavedRegistersAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::AnyX86NoCfCheck: { |
| const auto *SA = cast<AnyX86NoCfCheckAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::ArcWeakrefUnavailable: { |
| const auto *SA = cast<ArcWeakrefUnavailableAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::ArgumentWithTypeTag: { |
| const auto *SA = cast<ArgumentWithTypeTagAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.AddIdentifierRef(SA->getArgumentKind()); |
| Record.push_back(SA->getArgumentIdx().serialize()); |
| Record.push_back(SA->getTypeTagIdx().serialize()); |
| Record.push_back(SA->getIsPointer()); |
| break; |
| } |
| case attr::ArmBuiltinAlias: { |
| const auto *SA = cast<ArmBuiltinAliasAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.AddIdentifierRef(SA->getBuiltinName()); |
| break; |
| } |
| case attr::ArmMveStrictPolymorphism: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::Artificial: { |
| const auto *SA = cast<ArtificialAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::AsmLabel: { |
| const auto *SA = cast<AsmLabelAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.AddString(SA->getLabel()); |
| Record.push_back(SA->getIsLiteralLabel()); |
| break; |
| } |
| case attr::AssertCapability: { |
| const auto *SA = cast<AssertCapabilityAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| 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->isPackExpansion()); |
| 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->isPackExpansion()); |
| Record.AddStmt(SA->getAlignment()); |
| Record.AddStmt(SA->getOffset()); |
| break; |
| } |
| case attr::Assumption: { |
| const auto *SA = cast<AssumptionAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.AddString(SA->getAssumption()); |
| break; |
| } |
| case attr::Availability: { |
| const auto *SA = cast<AvailabilityAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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::BPFPreserveAccessIndex: { |
| const auto *SA = cast<BPFPreserveAccessIndexAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::BTFDeclTag: { |
| const auto *SA = cast<BTFDeclTagAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.AddString(SA->getBTFDeclTag()); |
| break; |
| } |
| case attr::BTFTypeTag: { |
| const auto *SA = cast<BTFTypeTagAttr>(A); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.AddString(SA->getBTFTypeTag()); |
| break; |
| } |
| case attr::Blocks: { |
| const auto *SA = cast<BlocksAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.push_back(SA->getType()); |
| break; |
| } |
| case attr::Builtin: { |
| const auto *SA = cast<BuiltinAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.push_back(SA->getID()); |
| break; |
| } |
| case attr::BuiltinAlias: { |
| const auto *SA = cast<BuiltinAliasAttr>(A); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.AddIdentifierRef(SA->getBuiltinName()); |
| break; |
| } |
| case attr::C11NoReturn: { |
| const auto *SA = cast<C11NoReturnAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::CDecl: { |
| const auto *SA = cast<CDeclAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::CFAuditedTransfer: { |
| const auto *SA = cast<CFAuditedTransferAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::CFConsumed: { |
| const auto *SA = cast<CFConsumedAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::CFGuard: { |
| const auto *SA = cast<CFGuardAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.push_back(SA->getGuard()); |
| break; |
| } |
| case attr::CFICanonicalJumpTable: { |
| const auto *SA = cast<CFICanonicalJumpTableAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::CFReturnsNotRetained: { |
| const auto *SA = cast<CFReturnsNotRetainedAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::CFReturnsRetained: { |
| const auto *SA = cast<CFReturnsRetainedAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::CFUnknownTransfer: { |
| const auto *SA = cast<CFUnknownTransferAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::CPUDispatch: { |
| const auto *SA = cast<CPUDispatchAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::CUDADevice: { |
| const auto *SA = cast<CUDADeviceAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::CUDADeviceBuiltinSurfaceType: { |
| const auto *SA = cast<CUDADeviceBuiltinSurfaceTypeAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::CUDADeviceBuiltinTextureType: { |
| const auto *SA = cast<CUDADeviceBuiltinTextureTypeAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::CUDAGlobal: { |
| const auto *SA = cast<CUDAGlobalAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::CUDAHost: { |
| const auto *SA = cast<CUDAHostAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::CUDAInvalidTarget: { |
| const auto *SA = cast<CUDAInvalidTargetAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::CUDALaunchBounds: { |
| const auto *SA = cast<CUDALaunchBoundsAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::CXX11NoReturn: { |
| const auto *SA = cast<CXX11NoReturnAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::CallableWhen: { |
| const auto *SA = cast<CallableWhenAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| Record.push_back(SA->encoding_size()); |
| for (auto &Val : SA->encoding()) |
| Record.push_back(Val); |
| break; |
| } |
| case attr::CalledOnce: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::Capability: { |
| const auto *SA = cast<CapabilityAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::CarriesDependency: { |
| const auto *SA = cast<CarriesDependencyAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::Cleanup: { |
| const auto *SA = cast<CleanupAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.AddDeclRef(SA->getFunctionDecl()); |
| break; |
| } |
| case attr::CmseNSCall: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::CmseNSEntry: { |
| const auto *SA = cast<CmseNSEntryAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::CodeSeg: { |
| const auto *SA = cast<CodeSegAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::Common: { |
| const auto *SA = cast<CommonAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::Const: { |
| const auto *SA = cast<ConstAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::ConstInit: { |
| const auto *SA = cast<ConstInitAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::Constructor: { |
| const auto *SA = cast<ConstructorAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::ConsumableSetOnRead: { |
| const auto *SA = cast<ConsumableSetOnReadAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::Convergent: { |
| const auto *SA = cast<ConvergentAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::DLLExport: { |
| const auto *SA = cast<DLLExportAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::DLLExportStaticLocal: { |
| const auto *SA = cast<DLLExportStaticLocalAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::DLLImport: { |
| const auto *SA = cast<DLLImportAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::DLLImportStaticLocal: { |
| const auto *SA = cast<DLLImportStaticLocalAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::Deprecated: { |
| const auto *SA = cast<DeprecatedAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| 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->isPackExpansion()); |
| 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::DisableSanitizerInstrumentation: { |
| const auto *SA = cast<DisableSanitizerInstrumentationAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::DisableTailCalls: { |
| const auto *SA = cast<DisableTailCallsAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::EmptyBases: { |
| const auto *SA = cast<EmptyBasesAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::EnableIf: { |
| const auto *SA = cast<EnableIfAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.AddStmt(SA->getCond()); |
| Record.AddString(SA->getMessage()); |
| break; |
| } |
| case attr::EnforceTCB: { |
| const auto *SA = cast<EnforceTCBAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.AddString(SA->getTCBName()); |
| break; |
| } |
| case attr::EnforceTCBLeaf: { |
| const auto *SA = cast<EnforceTCBLeafAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.AddString(SA->getTCBName()); |
| break; |
| } |
| case attr::EnumExtensibility: { |
| const auto *SA = cast<EnumExtensibilityAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.push_back(SA->getExtensibility()); |
| break; |
| } |
| case attr::Error: { |
| const auto *SA = cast<ErrorAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.AddString(SA->getUserDiagnostic()); |
| break; |
| } |
| case attr::ExcludeFromExplicitInstantiation: { |
| const auto *SA = cast<ExcludeFromExplicitInstantiationAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::ExclusiveTrylockFunction: { |
| const auto *SA = cast<ExclusiveTrylockFunctionAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::FastCall: { |
| const auto *SA = cast<FastCallAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::Final: { |
| const auto *SA = cast<FinalAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::FlagEnum: { |
| const auto *SA = cast<FlagEnumAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::Flatten: { |
| const auto *SA = cast<FlattenAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::Format: { |
| const auto *SA = cast<FormatAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| Record.push_back(SA->getFormatIdx().serialize()); |
| break; |
| } |
| case attr::GNUInline: { |
| const auto *SA = cast<GNUInlineAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::GuardedBy: { |
| const auto *SA = cast<GuardedByAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::HIPManaged: { |
| const auto *SA = cast<HIPManagedAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::Hot: { |
| const auto *SA = cast<HotAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::IBAction: { |
| const auto *SA = cast<IBActionAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::IBOutlet: { |
| const auto *SA = cast<IBOutletAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::IBOutletCollection: { |
| const auto *SA = cast<IBOutletCollectionAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.AddTypeSourceInfo(SA->getInterfaceLoc()); |
| break; |
| } |
| case attr::IFunc: { |
| const auto *SA = cast<IFuncAttr>(A); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| Record.push_back(SA->getPriority()); |
| break; |
| } |
| case attr::InitSeg: { |
| const auto *SA = cast<InitSegAttr>(A); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::InternalLinkage: { |
| const auto *SA = cast<InternalLinkageAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::LTOVisibilityPublic: { |
| const auto *SA = cast<LTOVisibilityPublicAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::LayoutVersion: { |
| const auto *SA = cast<LayoutVersionAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.push_back(SA->getVersion()); |
| break; |
| } |
| case attr::Leaf: { |
| const auto *SA = cast<LeafAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::LifetimeBound: { |
| const auto *SA = cast<LifetimeBoundAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::Likely: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::LoaderUninitialized: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::LockReturned: { |
| const auto *SA = cast<LockReturnedAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| 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->isPackExpansion()); |
| Record.push_back(SA->getOption()); |
| Record.push_back(SA->getState()); |
| Record.AddStmt(SA->getValue()); |
| break; |
| } |
| case attr::M68kInterrupt: { |
| const auto *SA = cast<M68kInterruptAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.push_back(SA->getNumber()); |
| break; |
| } |
| case attr::MIGServerRoutine: { |
| const auto *SA = cast<MIGServerRoutineAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::MSABI: { |
| const auto *SA = cast<MSABIAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::MSAllocator: { |
| const auto *SA = cast<MSAllocatorAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::MSInheritance: { |
| const auto *SA = cast<MSInheritanceAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::MSP430Interrupt: { |
| const auto *SA = cast<MSP430InterruptAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::MSVtorDisp: { |
| const auto *SA = cast<MSVtorDispAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::MicroMips: { |
| const auto *SA = cast<MicroMipsAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::MinSize: { |
| const auto *SA = cast<MinSizeAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::MinVectorWidth: { |
| const auto *SA = cast<MinVectorWidthAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::MipsInterrupt: { |
| const auto *SA = cast<MipsInterruptAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::MipsShortCall: { |
| const auto *SA = cast<MipsShortCallAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::Mode: { |
| const auto *SA = cast<ModeAttr>(A); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.AddIdentifierRef(SA->getMode()); |
| break; |
| } |
| case attr::MustTail: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::NSConsumed: { |
| const auto *SA = cast<NSConsumedAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::NSConsumesSelf: { |
| const auto *SA = cast<NSConsumesSelfAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::NSErrorDomain: { |
| const auto *SA = cast<NSErrorDomainAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.AddDeclRef(SA->getErrorDomain()); |
| break; |
| } |
| case attr::NSReturnsAutoreleased: { |
| const auto *SA = cast<NSReturnsAutoreleasedAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::NSReturnsNotRetained: { |
| const auto *SA = cast<NSReturnsNotRetainedAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::NSReturnsRetained: { |
| const auto *SA = cast<NSReturnsRetainedAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::Naked: { |
| const auto *SA = cast<NakedAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::NoAlias: { |
| const auto *SA = cast<NoAliasAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::NoBuiltin: { |
| const auto *SA = cast<NoBuiltinAttr>(A); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.push_back(SA->builtinNames_size()); |
| for (auto &Val : SA->builtinNames()) |
| Record.AddString(Val); |
| break; |
| } |
| case attr::NoCommon: { |
| const auto *SA = cast<NoCommonAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::NoDebug: { |
| const auto *SA = cast<NoDebugAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::NoDeref: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::NoDestroy: { |
| const auto *SA = cast<NoDestroyAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::NoDuplicate: { |
| const auto *SA = cast<NoDuplicateAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::NoEscape: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::NoInline: { |
| const auto *SA = cast<NoInlineAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::NoInstrumentFunction: { |
| const auto *SA = cast<NoInstrumentFunctionAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::NoMerge: { |
| const auto *SA = cast<NoMergeAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::NoMicroMips: { |
| const auto *SA = cast<NoMicroMipsAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::NoMips16: { |
| const auto *SA = cast<NoMips16Attr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::NoProfileFunction: { |
| const auto *SA = cast<NoProfileFunctionAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::NoReturn: { |
| const auto *SA = cast<NoReturnAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::NoSanitize: { |
| const auto *SA = cast<NoSanitizeAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::NoSplitStack: { |
| const auto *SA = cast<NoSplitStackAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::NoStackProtector: { |
| const auto *SA = cast<NoStackProtectorAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::NoThreadSafetyAnalysis: { |
| const auto *SA = cast<NoThreadSafetyAnalysisAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::NoThrow: { |
| const auto *SA = cast<NoThrowAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::NoUniqueAddress: { |
| const auto *SA = cast<NoUniqueAddressAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::NonNull: { |
| const auto *SA = cast<NonNullAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::OMPAllocateDecl: { |
| const auto *SA = cast<OMPAllocateDeclAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.push_back(SA->getAllocatorType()); |
| Record.AddStmt(SA->getAllocator()); |
| Record.AddStmt(SA->getAlignment()); |
| break; |
| } |
| case attr::OMPCaptureKind: { |
| const auto *SA = cast<OMPCaptureKindAttr>(A); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.push_back(SA->getCaptureKindVal()); |
| break; |
| } |
| case attr::OMPCaptureNoInit: { |
| const auto *SA = cast<OMPCaptureNoInitAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::OMPDeclareSimdDecl: { |
| const auto *SA = cast<OMPDeclareSimdDeclAttr>(A); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| Record.push_back(SA->getMapType()); |
| Record.push_back(SA->getDevType()); |
| Record.push_back(SA->getLevel()); |
| break; |
| } |
| case attr::OMPDeclareVariant: { |
| const auto *SA = cast<OMPDeclareVariantAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.AddStmt(SA->getVariantFuncRef()); |
| Record.writeOMPTraitInfo(SA->getTraitInfos()); |
| Record.push_back(SA->adjustArgsNothing_size()); |
| for (auto &Val : SA->adjustArgsNothing()) |
| Record.AddStmt(Val); |
| Record.push_back(SA->adjustArgsNeedDevicePtr_size()); |
| for (auto &Val : SA->adjustArgsNeedDevicePtr()) |
| Record.AddStmt(Val); |
| Record.push_back(SA->appendArgs_size()); |
| for (OMPDeclareVariantAttr::appendArgs_iterator i = SA->appendArgs_begin(), e = SA->appendArgs_end(); i != e; ++i) |
| Record.push_back((*i)); |
| break; |
| } |
| case attr::OMPReferencedVar: { |
| const auto *SA = cast<OMPReferencedVarAttr>(A); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::OSConsumed: { |
| const auto *SA = cast<OSConsumedAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::OSConsumesThis: { |
| const auto *SA = cast<OSConsumesThisAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::OSReturnsNotRetained: { |
| const auto *SA = cast<OSReturnsNotRetainedAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::OSReturnsRetained: { |
| const auto *SA = cast<OSReturnsRetainedAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::OSReturnsRetainedOnNonZero: { |
| const auto *SA = cast<OSReturnsRetainedOnNonZeroAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::OSReturnsRetainedOnZero: { |
| const auto *SA = cast<OSReturnsRetainedOnZeroAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::ObjCBoxable: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::ObjCBridge: { |
| const auto *SA = cast<ObjCBridgeAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| 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->isPackExpansion()); |
| Record.AddIdentifierRef(SA->getRelatedClass()); |
| Record.AddIdentifierRef(SA->getClassMethod()); |
| Record.AddIdentifierRef(SA->getInstanceMethod()); |
| break; |
| } |
| case attr::ObjCClassStub: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::ObjCDesignatedInitializer: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::ObjCDirect: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::ObjCDirectMembers: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::ObjCException: { |
| const auto *SA = cast<ObjCExceptionAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::ObjCExplicitProtocolImpl: { |
| const auto *SA = cast<ObjCExplicitProtocolImplAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::ObjCExternallyRetained: { |
| const auto *SA = cast<ObjCExternallyRetainedAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::ObjCGC: { |
| const auto *SA = cast<ObjCGCAttr>(A); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::ObjCInertUnsafeUnretained: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::ObjCKindOf: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::ObjCMethodFamily: { |
| const auto *SA = cast<ObjCMethodFamilyAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::ObjCNonLazyClass: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::ObjCNonRuntimeProtocol: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::ObjCOwnership: { |
| const auto *SA = cast<ObjCOwnershipAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::ObjCRequiresPropertyDefs: { |
| const auto *SA = cast<ObjCRequiresPropertyDefsAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::ObjCRequiresSuper: { |
| const auto *SA = cast<ObjCRequiresSuperAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::ObjCReturnsInnerPointer: { |
| const auto *SA = cast<ObjCReturnsInnerPointerAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::ObjCRootClass: { |
| const auto *SA = cast<ObjCRootClassAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::ObjCRuntimeName: { |
| const auto *SA = cast<ObjCRuntimeNameAttr>(A); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.AddString(SA->getMetadataName()); |
| break; |
| } |
| case attr::ObjCRuntimeVisible: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::ObjCSubclassingRestricted: { |
| const auto *SA = cast<ObjCSubclassingRestrictedAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::OpenCLAccess: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::OpenCLConstantAddressSpace: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::OpenCLGenericAddressSpace: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::OpenCLGlobalAddressSpace: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::OpenCLGlobalDeviceAddressSpace: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::OpenCLGlobalHostAddressSpace: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::OpenCLIntelReqdSubGroupSize: { |
| const auto *SA = cast<OpenCLIntelReqdSubGroupSizeAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::OpenCLLocalAddressSpace: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::OpenCLPrivateAddressSpace: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::OpenCLUnrollHint: { |
| const auto *SA = cast<OpenCLUnrollHintAttr>(A); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::Overloadable: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::Override: { |
| const auto *SA = cast<OverrideAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::Owner: { |
| const auto *SA = cast<OwnerAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.AddTypeSourceInfo(SA->getDerefTypeLoc()); |
| break; |
| } |
| case attr::Ownership: { |
| const auto *SA = cast<OwnershipAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::ParamTypestate: { |
| const auto *SA = cast<ParamTypestateAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::PassObjectSize: { |
| const auto *SA = cast<PassObjectSizeAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.push_back(SA->getType()); |
| break; |
| } |
| case attr::PatchableFunctionEntry: { |
| const auto *SA = cast<PatchableFunctionEntryAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.push_back(SA->getCount()); |
| Record.push_back(SA->getOffset()); |
| break; |
| } |
| case attr::Pcs: { |
| const auto *SA = cast<PcsAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.push_back(SA->getPCS()); |
| break; |
| } |
| case attr::Pointer: { |
| const auto *SA = cast<PointerAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.AddTypeSourceInfo(SA->getDerefTypeLoc()); |
| break; |
| } |
| case attr::PragmaClangBSSSection: { |
| const auto *SA = cast<PragmaClangBSSSectionAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| Record.AddString(SA->getName()); |
| break; |
| } |
| case attr::PragmaClangRelroSection: { |
| const auto *SA = cast<PragmaClangRelroSectionAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| 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->isPackExpansion()); |
| Record.AddString(SA->getName()); |
| break; |
| } |
| case attr::PreferredName: { |
| const auto *SA = cast<PreferredNameAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.AddTypeSourceInfo(SA->getTypedefTypeLoc()); |
| break; |
| } |
| case attr::PreserveAll: { |
| const auto *SA = cast<PreserveAllAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::PreserveMost: { |
| const auto *SA = cast<PreserveMostAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::PtGuardedBy: { |
| const auto *SA = cast<PtGuardedByAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::Ptr32: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::Ptr64: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::Pure: { |
| const auto *SA = cast<PureAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::RISCVInterrupt: { |
| const auto *SA = cast<RISCVInterruptAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::Reinitializes: { |
| const auto *SA = cast<ReinitializesAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::ReleaseCapability: { |
| const auto *SA = cast<ReleaseCapabilityAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.push_back(SA->args_size()); |
| for (auto &Val : SA->args()) |
| Record.AddStmt(Val); |
| break; |
| } |
| case attr::ReleaseHandle: { |
| const auto *SA = cast<ReleaseHandleAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.AddString(SA->getHandleType()); |
| break; |
| } |
| case attr::RenderScriptKernel: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::ReqdWorkGroupSize: { |
| const auto *SA = cast<ReqdWorkGroupSizeAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.push_back(SA->getXDim()); |
| Record.push_back(SA->getYDim()); |
| Record.push_back(SA->getZDim()); |
| break; |
| } |
| case attr::RequiresCapability: { |
| const auto *SA = cast<RequiresCapabilityAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::Retain: { |
| const auto *SA = cast<RetainAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::ReturnTypestate: { |
| const auto *SA = cast<ReturnTypestateAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::ReturnsTwice: { |
| const auto *SA = cast<ReturnsTwiceAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::SPtr: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::SYCLKernel: { |
| const auto *SA = cast<SYCLKernelAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::ScopedLockable: { |
| const auto *SA = cast<ScopedLockableAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::Section: { |
| const auto *SA = cast<SectionAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::Sentinel: { |
| const auto *SA = cast<SentinelAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| 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->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::StandaloneDebug: { |
| const auto *SA = cast<StandaloneDebugAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::StdCall: { |
| const auto *SA = cast<StdCallAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::StrictFP: { |
| const auto *SA = cast<StrictFPAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::Suppress: { |
| const auto *SA = cast<SuppressAttr>(A); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.push_back(SA->diagnosticIdentifiers_size()); |
| for (auto &Val : SA->diagnosticIdentifiers()) |
| Record.AddString(Val); |
| break; |
| } |
| case attr::SwiftAsync: { |
| const auto *SA = cast<SwiftAsyncAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.push_back(SA->getKind()); |
| Record.push_back(SA->getCompletionHandlerIndex().serialize()); |
| break; |
| } |
| case attr::SwiftAsyncCall: { |
| const auto *SA = cast<SwiftAsyncCallAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::SwiftAsyncContext: { |
| const auto *SA = cast<SwiftAsyncContextAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::SwiftAsyncError: { |
| const auto *SA = cast<SwiftAsyncErrorAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.push_back(SA->getConvention()); |
| Record.push_back(SA->getHandlerParamIdx()); |
| break; |
| } |
| case attr::SwiftAsyncName: { |
| const auto *SA = cast<SwiftAsyncNameAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.AddString(SA->getName()); |
| break; |
| } |
| case attr::SwiftAttr: { |
| const auto *SA = cast<SwiftAttrAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.AddString(SA->getAttribute()); |
| break; |
| } |
| case attr::SwiftBridge: { |
| const auto *SA = cast<SwiftBridgeAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.AddString(SA->getSwiftType()); |
| break; |
| } |
| case attr::SwiftBridgedTypedef: { |
| const auto *SA = cast<SwiftBridgedTypedefAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::SwiftCall: { |
| const auto *SA = cast<SwiftCallAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::SwiftContext: { |
| const auto *SA = cast<SwiftContextAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::SwiftError: { |
| const auto *SA = cast<SwiftErrorAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.push_back(SA->getConvention()); |
| break; |
| } |
| case attr::SwiftErrorResult: { |
| const auto *SA = cast<SwiftErrorResultAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::SwiftIndirectResult: { |
| const auto *SA = cast<SwiftIndirectResultAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::SwiftName: { |
| const auto *SA = cast<SwiftNameAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.AddString(SA->getName()); |
| break; |
| } |
| case attr::SwiftNewType: { |
| const auto *SA = cast<SwiftNewTypeAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.push_back(SA->getNewtypeKind()); |
| break; |
| } |
| case attr::SwiftObjCMembers: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::SwiftPrivate: { |
| const auto *SA = cast<SwiftPrivateAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::SysVABI: { |
| const auto *SA = cast<SysVABIAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::TLSModel: { |
| const auto *SA = cast<TLSModelAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| Record.AddString(SA->getFeaturesStr()); |
| break; |
| } |
| case attr::TargetClones: { |
| const auto *SA = cast<TargetClonesAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.push_back(SA->featuresStrs_size()); |
| for (auto &Val : SA->featuresStrs()) |
| Record.AddString(Val); |
| break; |
| } |
| case attr::TestTypestate: { |
| const auto *SA = cast<TestTypestateAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::Thread: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::TransparentUnion: { |
| const auto *SA = cast<TransparentUnionAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::TrivialABI: { |
| const auto *SA = cast<TrivialABIAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::TryAcquireCapability: { |
| const auto *SA = cast<TryAcquireCapabilityAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::TypeNullUnspecified: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::TypeNullable: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::TypeNullableResult: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::TypeTagForDatatype: { |
| const auto *SA = cast<TypeTagForDatatypeAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| Record.push_back(SA->getVisibility()); |
| break; |
| } |
| case attr::UPtr: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::Unavailable: { |
| const auto *SA = cast<UnavailableAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::Unlikely: { |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::Unused: { |
| const auto *SA = cast<UnusedAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::UseHandle: { |
| const auto *SA = cast<UseHandleAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.AddString(SA->getHandleType()); |
| break; |
| } |
| case attr::Used: { |
| const auto *SA = cast<UsedAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::UsingIfExists: { |
| const auto *SA = cast<UsingIfExistsAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::Uuid: { |
| const auto *SA = cast<UuidAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| Record.AddString(SA->getGuid()); |
| Record.AddDeclRef(SA->getGuidDecl()); |
| break; |
| } |
| case attr::VecReturn: { |
| const auto *SA = cast<VecReturnAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| break; |
| } |
| case attr::VecTypeHint: { |
| const auto *SA = cast<VecTypeHintAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| break; |
| } |
| case attr::Visibility: { |
| const auto *SA = cast<VisibilityAttr>(A); |
| Record.push_back(SA->isInherited()); |
| Record.push_back(A->isImplicit()); |
| Record.push_back(A->isPackExpansion()); |
| 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->isPackExpansion()); |
| |