/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\ |* *| |* Attribute deserialization code *| |* *| |* Automatically generated file, do not edit! *| |* *| \*===----------------------------------------------------------------------===*/ switch (Kind) { case attr::AArch64VectorPcs: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) AArch64VectorPcsAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::AMDGPUFlatWorkGroupSize: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); Expr * min = Record.readExpr(); Expr * max = Record.readExpr(); New = new (Context) AMDGPUFlatWorkGroupSizeAttr(Context, Info, min, max); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::AMDGPUNumSGPR: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); unsigned numSGPR = Record.readInt(); New = new (Context) AMDGPUNumSGPRAttr(Context, Info, numSGPR); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::AMDGPUNumVGPR: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); unsigned numVGPR = Record.readInt(); New = new (Context) AMDGPUNumVGPRAttr(Context, Info, numVGPR); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::AMDGPUWavesPerEU: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); Expr * min = Record.readExpr(); Expr * max = Record.readExpr(); New = new (Context) AMDGPUWavesPerEUAttr(Context, Info, min, max); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ARMInterrupt: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); ARMInterruptAttr::InterruptType interrupt(static_cast(Record.readInt())); New = new (Context) ARMInterruptAttr(Context, Info, interrupt); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::AVRInterrupt: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) AVRInterruptAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::AVRSignal: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) AVRSignalAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::AbiTag: { bool isImplicit = Record.readInt(); unsigned tagsSize = Record.readInt(); SmallVector tags; tags.reserve(tagsSize); SmallVector tagsStorage; tagsStorage.reserve(tagsSize); for (unsigned i = 0; i != tagsSize; ++i) tagsStorage.push_back(Record.readString()); for (unsigned i = 0; i != tagsSize; ++i) tags.push_back(tagsStorage[i]); New = new (Context) AbiTagAttr(Context, Info, tags.data(), tagsSize); New->setImplicit(isImplicit); break; } case attr::AcquireCapability: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); unsigned argsSize = Record.readInt(); SmallVector args; args.reserve(argsSize); for (unsigned i = 0; i != argsSize; ++i) args.push_back(Record.readExpr()); New = new (Context) AcquireCapabilityAttr(Context, Info, args.data(), argsSize); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::AcquireHandle: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); std::string handleType= Record.readString(); New = new (Context) AcquireHandleAttr(Context, Info, handleType); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::AcquiredAfter: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); unsigned argsSize = Record.readInt(); SmallVector args; args.reserve(argsSize); for (unsigned i = 0; i != argsSize; ++i) args.push_back(Record.readExpr()); New = new (Context) AcquiredAfterAttr(Context, Info, args.data(), argsSize); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::AcquiredBefore: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); unsigned argsSize = Record.readInt(); SmallVector args; args.reserve(argsSize); for (unsigned i = 0; i != argsSize; ++i) args.push_back(Record.readExpr()); New = new (Context) AcquiredBeforeAttr(Context, Info, args.data(), argsSize); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::AddressSpace: { bool isImplicit = Record.readInt(); int addressSpace = Record.readInt(); New = new (Context) AddressSpaceAttr(Context, Info, addressSpace); New->setImplicit(isImplicit); break; } case attr::Alias: { bool isImplicit = Record.readInt(); std::string aliasee= Record.readString(); New = new (Context) AliasAttr(Context, Info, aliasee); New->setImplicit(isImplicit); break; } case attr::AlignMac68k: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) AlignMac68kAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::AlignValue: { bool isImplicit = Record.readInt(); Expr * alignment = Record.readExpr(); New = new (Context) AlignValueAttr(Context, Info, alignment); New->setImplicit(isImplicit); break; } case attr::Aligned: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); bool isalignmentExpr = Record.readInt(); void *alignmentPtr; if (isalignmentExpr) alignmentPtr = Record.readExpr(); else alignmentPtr = Record.readTypeSourceInfo(); New = new (Context) AlignedAttr(Context, Info, isalignmentExpr, alignmentPtr); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::AllocAlign: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); ParamIdx paramIndex = ParamIdx::deserialize(Record.readInt()); New = new (Context) AllocAlignAttr(Context, Info, paramIndex); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::AllocSize: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); ParamIdx elemSizeParam = ParamIdx::deserialize(Record.readInt()); ParamIdx numElemsParam = ParamIdx::deserialize(Record.readInt()); New = new (Context) AllocSizeAttr(Context, Info, elemSizeParam, numElemsParam); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::AlwaysDestroy: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) AlwaysDestroyAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::AlwaysInline: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) AlwaysInlineAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::AnalyzerNoReturn: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) AnalyzerNoReturnAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Annotate: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); std::string annotation= Record.readString(); New = new (Context) AnnotateAttr(Context, Info, annotation); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::AnyX86Interrupt: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) AnyX86InterruptAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::AnyX86NoCallerSavedRegisters: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) AnyX86NoCallerSavedRegistersAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::AnyX86NoCfCheck: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) AnyX86NoCfCheckAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ArcWeakrefUnavailable: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) ArcWeakrefUnavailableAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ArgumentWithTypeTag: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); IdentifierInfo * argumentKind = Record.readIdentifier(); ParamIdx argumentIdx = ParamIdx::deserialize(Record.readInt()); ParamIdx typeTagIdx = ParamIdx::deserialize(Record.readInt()); bool isPointer = Record.readInt(); New = new (Context) ArgumentWithTypeTagAttr(Context, Info, argumentKind, argumentIdx, typeTagIdx, isPointer); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ArmMveAlias: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); IdentifierInfo * builtinName = Record.readIdentifier(); New = new (Context) ArmMveAliasAttr(Context, Info, builtinName); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Artificial: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) ArtificialAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::AsmLabel: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); std::string label= Record.readString(); bool isLiteralLabel = Record.readInt(); New = new (Context) AsmLabelAttr(Context, Info, label, isLiteralLabel); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::AssertCapability: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); unsigned argsSize = Record.readInt(); SmallVector args; args.reserve(argsSize); for (unsigned i = 0; i != argsSize; ++i) args.push_back(Record.readExpr()); New = new (Context) AssertCapabilityAttr(Context, Info, args.data(), argsSize); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::AssertExclusiveLock: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); unsigned argsSize = Record.readInt(); SmallVector args; args.reserve(argsSize); for (unsigned i = 0; i != argsSize; ++i) args.push_back(Record.readExpr()); New = new (Context) AssertExclusiveLockAttr(Context, Info, args.data(), argsSize); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::AssertSharedLock: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); unsigned argsSize = Record.readInt(); SmallVector args; args.reserve(argsSize); for (unsigned i = 0; i != argsSize; ++i) args.push_back(Record.readExpr()); New = new (Context) AssertSharedLockAttr(Context, Info, args.data(), argsSize); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::AssumeAligned: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); Expr * alignment = Record.readExpr(); Expr * offset = Record.readExpr(); New = new (Context) AssumeAlignedAttr(Context, Info, alignment, offset); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Availability: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); IdentifierInfo * platform = Record.readIdentifier(); VersionTuple introduced= Record.readVersionTuple(); VersionTuple deprecated= Record.readVersionTuple(); VersionTuple obsoleted= Record.readVersionTuple(); bool unavailable = Record.readInt(); std::string message= Record.readString(); bool strict = Record.readInt(); std::string replacement= Record.readString(); int priority = Record.readInt(); New = new (Context) AvailabilityAttr(Context, Info, platform, introduced, deprecated, obsoleted, unavailable, message, strict, replacement, priority); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::BPFPreserveAccessIndex: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) BPFPreserveAccessIndexAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Blocks: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); BlocksAttr::BlockType type(static_cast(Record.readInt())); New = new (Context) BlocksAttr(Context, Info, type); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::C11NoReturn: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) C11NoReturnAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::CDecl: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) CDeclAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::CFAuditedTransfer: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) CFAuditedTransferAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::CFConsumed: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) CFConsumedAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::CFGuard: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); CFGuardAttr::GuardArg guard(static_cast(Record.readInt())); New = new (Context) CFGuardAttr(Context, Info, guard); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::CFICanonicalJumpTable: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) CFICanonicalJumpTableAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::CFReturnsNotRetained: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) CFReturnsNotRetainedAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::CFReturnsRetained: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) CFReturnsRetainedAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::CFUnknownTransfer: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) CFUnknownTransferAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::CPUDispatch: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); unsigned cpusSize = Record.readInt(); SmallVector cpus; cpus.reserve(cpusSize); for (unsigned i = 0; i != cpusSize; ++i) cpus.push_back(Record.readIdentifier()); New = new (Context) CPUDispatchAttr(Context, Info, cpus.data(), cpusSize); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::CPUSpecific: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); unsigned cpusSize = Record.readInt(); SmallVector cpus; cpus.reserve(cpusSize); for (unsigned i = 0; i != cpusSize; ++i) cpus.push_back(Record.readIdentifier()); New = new (Context) CPUSpecificAttr(Context, Info, cpus.data(), cpusSize); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::CUDAConstant: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) CUDAConstantAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::CUDADevice: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) CUDADeviceAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::CUDAGlobal: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) CUDAGlobalAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::CUDAHost: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) CUDAHostAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::CUDAInvalidTarget: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) CUDAInvalidTargetAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::CUDALaunchBounds: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); Expr * maxThreads = Record.readExpr(); Expr * minBlocks = Record.readExpr(); New = new (Context) CUDALaunchBoundsAttr(Context, Info, maxThreads, minBlocks); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::CUDAShared: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) CUDASharedAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::CXX11NoReturn: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) CXX11NoReturnAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::CallableWhen: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); unsigned callableStatesSize = Record.readInt(); SmallVector callableStates; callableStates.reserve(callableStatesSize); for (unsigned i = callableStatesSize; i; --i) callableStates.push_back(static_cast(Record.readInt())); New = new (Context) CallableWhenAttr(Context, Info, callableStates.data(), callableStatesSize); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Callback: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); unsigned encodingSize = Record.readInt(); SmallVector encoding; encoding.reserve(encodingSize); for (unsigned i = 0; i != encodingSize; ++i) encoding.push_back(Record.readInt()); New = new (Context) CallbackAttr(Context, Info, encoding.data(), encodingSize); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Capability: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); std::string name= Record.readString(); New = new (Context) CapabilityAttr(Context, Info, name); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::CapturedRecord: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) CapturedRecordAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::CarriesDependency: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) CarriesDependencyAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Cleanup: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); FunctionDecl * functionDecl = Record.GetLocalDeclAs(Record.readInt()); New = new (Context) CleanupAttr(Context, Info, functionDecl); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::CodeSeg: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); std::string name= Record.readString(); New = new (Context) CodeSegAttr(Context, Info, name); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Cold: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) ColdAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Common: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) CommonAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Const: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) ConstAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ConstInit: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) ConstInitAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Constructor: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); int priority = Record.readInt(); New = new (Context) ConstructorAttr(Context, Info, priority); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Consumable: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); ConsumableAttr::ConsumedState defaultState(static_cast(Record.readInt())); New = new (Context) ConsumableAttr(Context, Info, defaultState); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ConsumableAutoCast: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) ConsumableAutoCastAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ConsumableSetOnRead: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) ConsumableSetOnReadAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Convergent: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) ConvergentAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::DLLExport: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) DLLExportAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::DLLExportStaticLocal: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) DLLExportStaticLocalAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::DLLImport: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) DLLImportAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::DLLImportStaticLocal: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) DLLImportStaticLocalAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Deprecated: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); std::string message= Record.readString(); std::string replacement= Record.readString(); New = new (Context) DeprecatedAttr(Context, Info, message, replacement); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Destructor: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); int priority = Record.readInt(); New = new (Context) DestructorAttr(Context, Info, priority); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::DiagnoseIf: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); Expr * cond = Record.readExpr(); std::string message= Record.readString(); DiagnoseIfAttr::DiagnosticType diagnosticType(static_cast(Record.readInt())); bool argDependent = Record.readInt(); NamedDecl * parent = Record.GetLocalDeclAs(Record.readInt()); New = new (Context) DiagnoseIfAttr(Context, Info, cond, message, diagnosticType, argDependent, parent); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::DisableTailCalls: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) DisableTailCallsAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::EmptyBases: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) EmptyBasesAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::EnableIf: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); Expr * cond = Record.readExpr(); std::string message= Record.readString(); New = new (Context) EnableIfAttr(Context, Info, cond, message); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::EnumExtensibility: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); EnumExtensibilityAttr::Kind extensibility(static_cast(Record.readInt())); New = new (Context) EnumExtensibilityAttr(Context, Info, extensibility); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ExcludeFromExplicitInstantiation: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) ExcludeFromExplicitInstantiationAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ExclusiveTrylockFunction: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); Expr * successValue = Record.readExpr(); unsigned argsSize = Record.readInt(); SmallVector args; args.reserve(argsSize); for (unsigned i = 0; i != argsSize; ++i) args.push_back(Record.readExpr()); New = new (Context) ExclusiveTrylockFunctionAttr(Context, Info, successValue, args.data(), argsSize); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ExternalSourceSymbol: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); std::string language= Record.readString(); std::string definedIn= Record.readString(); bool generatedDeclaration = Record.readInt(); New = new (Context) ExternalSourceSymbolAttr(Context, Info, language, definedIn, generatedDeclaration); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::FallThrough: { bool isImplicit = Record.readInt(); New = new (Context) FallThroughAttr(Context, Info); New->setImplicit(isImplicit); break; } case attr::FastCall: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) FastCallAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Final: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) FinalAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::FlagEnum: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) FlagEnumAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Flatten: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) FlattenAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Format: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); IdentifierInfo * type = Record.readIdentifier(); int formatIdx = Record.readInt(); int firstArg = Record.readInt(); New = new (Context) FormatAttr(Context, Info, type, formatIdx, firstArg); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::FormatArg: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); ParamIdx formatIdx = ParamIdx::deserialize(Record.readInt()); New = new (Context) FormatArgAttr(Context, Info, formatIdx); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::GNUInline: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) GNUInlineAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::GuardedBy: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); Expr * arg = Record.readExpr(); New = new (Context) GuardedByAttr(Context, Info, arg); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::GuardedVar: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) GuardedVarAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::HIPPinnedShadow: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) HIPPinnedShadowAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Hot: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) HotAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::IBAction: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) IBActionAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::IBOutlet: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) IBOutletAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::IBOutletCollection: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); TypeSourceInfo * interface_ = Record.readTypeSourceInfo(); New = new (Context) IBOutletCollectionAttr(Context, Info, interface_); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::IFunc: { bool isImplicit = Record.readInt(); std::string resolver= Record.readString(); New = new (Context) IFuncAttr(Context, Info, resolver); New->setImplicit(isImplicit); break; } case attr::InitPriority: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); unsigned priority = Record.readInt(); New = new (Context) InitPriorityAttr(Context, Info, priority); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::InitSeg: { bool isImplicit = Record.readInt(); std::string section= Record.readString(); New = new (Context) InitSegAttr(Context, Info, section); New->setImplicit(isImplicit); break; } case attr::IntelOclBicc: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) IntelOclBiccAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::InternalLinkage: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) InternalLinkageAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::LTOVisibilityPublic: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) LTOVisibilityPublicAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::LayoutVersion: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); unsigned version = Record.readInt(); New = new (Context) LayoutVersionAttr(Context, Info, version); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::LifetimeBound: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) LifetimeBoundAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::LockReturned: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); Expr * arg = Record.readExpr(); New = new (Context) LockReturnedAttr(Context, Info, arg); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::LocksExcluded: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); unsigned argsSize = Record.readInt(); SmallVector args; args.reserve(argsSize); for (unsigned i = 0; i != argsSize; ++i) args.push_back(Record.readExpr()); New = new (Context) LocksExcludedAttr(Context, Info, args.data(), argsSize); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::LoopHint: { bool isImplicit = Record.readInt(); LoopHintAttr::OptionType option(static_cast(Record.readInt())); LoopHintAttr::LoopHintState state(static_cast(Record.readInt())); Expr * value = Record.readExpr(); New = new (Context) LoopHintAttr(Context, Info, option, state, value); New->setImplicit(isImplicit); break; } case attr::MIGServerRoutine: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) MIGServerRoutineAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::MSABI: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) MSABIAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::MSAllocator: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) MSAllocatorAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::MSInheritance: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); bool bestCase = Record.readInt(); New = new (Context) MSInheritanceAttr(Context, Info, bestCase); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::MSNoVTable: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) MSNoVTableAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::MSP430Interrupt: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); unsigned number = Record.readInt(); New = new (Context) MSP430InterruptAttr(Context, Info, number); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::MSStruct: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) MSStructAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::MSVtorDisp: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); unsigned vdm = Record.readInt(); New = new (Context) MSVtorDispAttr(Context, Info, vdm); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::MaxFieldAlignment: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); unsigned alignment = Record.readInt(); New = new (Context) MaxFieldAlignmentAttr(Context, Info, alignment); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::MayAlias: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) MayAliasAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::MicroMips: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) MicroMipsAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::MinSize: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) MinSizeAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::MinVectorWidth: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); unsigned vectorWidth = Record.readInt(); New = new (Context) MinVectorWidthAttr(Context, Info, vectorWidth); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Mips16: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) Mips16Attr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::MipsInterrupt: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); MipsInterruptAttr::InterruptType interrupt(static_cast(Record.readInt())); New = new (Context) MipsInterruptAttr(Context, Info, interrupt); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::MipsLongCall: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) MipsLongCallAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::MipsShortCall: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) MipsShortCallAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Mode: { bool isImplicit = Record.readInt(); IdentifierInfo * mode = Record.readIdentifier(); New = new (Context) ModeAttr(Context, Info, mode); New->setImplicit(isImplicit); break; } case attr::NSConsumed: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) NSConsumedAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::NSConsumesSelf: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) NSConsumesSelfAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::NSReturnsAutoreleased: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) NSReturnsAutoreleasedAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::NSReturnsNotRetained: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) NSReturnsNotRetainedAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::NSReturnsRetained: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) NSReturnsRetainedAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Naked: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) NakedAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::NoAlias: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) NoAliasAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::NoBuiltin: { bool isImplicit = Record.readInt(); unsigned builtinNamesSize = Record.readInt(); SmallVector builtinNames; builtinNames.reserve(builtinNamesSize); SmallVector builtinNamesStorage; builtinNamesStorage.reserve(builtinNamesSize); for (unsigned i = 0; i != builtinNamesSize; ++i) builtinNamesStorage.push_back(Record.readString()); for (unsigned i = 0; i != builtinNamesSize; ++i) builtinNames.push_back(builtinNamesStorage[i]); New = new (Context) NoBuiltinAttr(Context, Info, builtinNames.data(), builtinNamesSize); New->setImplicit(isImplicit); break; } case attr::NoCommon: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) NoCommonAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::NoDebug: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) NoDebugAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::NoDeref: { bool isImplicit = Record.readInt(); New = new (Context) NoDerefAttr(Context, Info); New->setImplicit(isImplicit); break; } case attr::NoDestroy: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) NoDestroyAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::NoDuplicate: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) NoDuplicateAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::NoEscape: { bool isImplicit = Record.readInt(); New = new (Context) NoEscapeAttr(Context, Info); New->setImplicit(isImplicit); break; } case attr::NoInline: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) NoInlineAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::NoInstrumentFunction: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) NoInstrumentFunctionAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::NoMicroMips: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) NoMicroMipsAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::NoMips16: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) NoMips16Attr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::NoReturn: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) NoReturnAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::NoSanitize: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); unsigned sanitizersSize = Record.readInt(); SmallVector sanitizers; sanitizers.reserve(sanitizersSize); SmallVector sanitizersStorage; sanitizersStorage.reserve(sanitizersSize); for (unsigned i = 0; i != sanitizersSize; ++i) sanitizersStorage.push_back(Record.readString()); for (unsigned i = 0; i != sanitizersSize; ++i) sanitizers.push_back(sanitizersStorage[i]); New = new (Context) NoSanitizeAttr(Context, Info, sanitizers.data(), sanitizersSize); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::NoSpeculativeLoadHardening: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) NoSpeculativeLoadHardeningAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::NoSplitStack: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) NoSplitStackAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::NoStackProtector: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) NoStackProtectorAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::NoThreadSafetyAnalysis: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) NoThreadSafetyAnalysisAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::NoThrow: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) NoThrowAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::NoUniqueAddress: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) NoUniqueAddressAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::NonNull: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); unsigned argsSize = Record.readInt(); SmallVector args; args.reserve(argsSize); for (unsigned i = 0; i != argsSize; ++i) args.push_back(ParamIdx::deserialize(Record.readInt())); New = new (Context) NonNullAttr(Context, Info, args.data(), argsSize); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::NotTailCalled: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) NotTailCalledAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::OMPAllocateDecl: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); OMPAllocateDeclAttr::AllocatorTypeTy allocatorType(static_cast(Record.readInt())); Expr * allocator = Record.readExpr(); New = new (Context) OMPAllocateDeclAttr(Context, Info, allocatorType, allocator); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::OMPCaptureKind: { bool isImplicit = Record.readInt(); unsigned captureKind = Record.readInt(); New = new (Context) OMPCaptureKindAttr(Context, Info, captureKind); New->setImplicit(isImplicit); break; } case attr::OMPCaptureNoInit: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) OMPCaptureNoInitAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::OMPDeclareSimdDecl: { bool isImplicit = Record.readInt(); OMPDeclareSimdDeclAttr::BranchStateTy branchState(static_cast(Record.readInt())); Expr * simdlen = Record.readExpr(); unsigned uniformsSize = Record.readInt(); SmallVector uniforms; uniforms.reserve(uniformsSize); for (unsigned i = 0; i != uniformsSize; ++i) uniforms.push_back(Record.readExpr()); unsigned alignedsSize = Record.readInt(); SmallVector aligneds; aligneds.reserve(alignedsSize); for (unsigned i = 0; i != alignedsSize; ++i) aligneds.push_back(Record.readExpr()); unsigned alignmentsSize = Record.readInt(); SmallVector alignments; alignments.reserve(alignmentsSize); for (unsigned i = 0; i != alignmentsSize; ++i) alignments.push_back(Record.readExpr()); unsigned linearsSize = Record.readInt(); SmallVector linears; linears.reserve(linearsSize); for (unsigned i = 0; i != linearsSize; ++i) linears.push_back(Record.readExpr()); unsigned modifiersSize = Record.readInt(); SmallVector modifiers; modifiers.reserve(modifiersSize); for (unsigned i = 0; i != modifiersSize; ++i) modifiers.push_back(Record.readInt()); unsigned stepsSize = Record.readInt(); SmallVector steps; steps.reserve(stepsSize); for (unsigned i = 0; i != stepsSize; ++i) steps.push_back(Record.readExpr()); New = new (Context) OMPDeclareSimdDeclAttr(Context, Info, branchState, simdlen, uniforms.data(), uniformsSize, aligneds.data(), alignedsSize, alignments.data(), alignmentsSize, linears.data(), linearsSize, modifiers.data(), modifiersSize, steps.data(), stepsSize); New->setImplicit(isImplicit); break; } case attr::OMPDeclareTargetDecl: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); OMPDeclareTargetDeclAttr::MapTypeTy mapType(static_cast(Record.readInt())); OMPDeclareTargetDeclAttr::DevTypeTy devType(static_cast(Record.readInt())); New = new (Context) OMPDeclareTargetDeclAttr(Context, Info, mapType, devType); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::OMPDeclareVariant: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); Expr * variantFuncRef = Record.readExpr(); unsigned scoresSize = Record.readInt(); SmallVector scores; scores.reserve(scoresSize); for (unsigned i = 0; i != scoresSize; ++i) scores.push_back(Record.readExpr()); unsigned ctxSelectorSetsSize = Record.readInt(); SmallVector ctxSelectorSets; ctxSelectorSets.reserve(ctxSelectorSetsSize); for (unsigned i = 0; i != ctxSelectorSetsSize; ++i) ctxSelectorSets.push_back(Record.readInt()); unsigned ctxSelectorsSize = Record.readInt(); SmallVector ctxSelectors; ctxSelectors.reserve(ctxSelectorsSize); for (unsigned i = 0; i != ctxSelectorsSize; ++i) ctxSelectors.push_back(Record.readInt()); unsigned implVendorsSize = Record.readInt(); SmallVector implVendors; implVendors.reserve(implVendorsSize); SmallVector implVendorsStorage; implVendorsStorage.reserve(implVendorsSize); for (unsigned i = 0; i != implVendorsSize; ++i) implVendorsStorage.push_back(Record.readString()); for (unsigned i = 0; i != implVendorsSize; ++i) implVendors.push_back(implVendorsStorage[i]); unsigned deviceKindsSize = Record.readInt(); SmallVector deviceKinds; deviceKinds.reserve(deviceKindsSize); SmallVector deviceKindsStorage; deviceKindsStorage.reserve(deviceKindsSize); for (unsigned i = 0; i != deviceKindsSize; ++i) deviceKindsStorage.push_back(Record.readString()); for (unsigned i = 0; i != deviceKindsSize; ++i) deviceKinds.push_back(deviceKindsStorage[i]); New = new (Context) OMPDeclareVariantAttr(Context, Info, variantFuncRef, scores.data(), scoresSize, ctxSelectorSets.data(), ctxSelectorSetsSize, ctxSelectors.data(), ctxSelectorsSize, implVendors.data(), implVendorsSize, deviceKinds.data(), deviceKindsSize); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::OMPReferencedVar: { bool isImplicit = Record.readInt(); Expr * ref = Record.readExpr(); New = new (Context) OMPReferencedVarAttr(Context, Info, ref); New->setImplicit(isImplicit); break; } case attr::OMPThreadPrivateDecl: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) OMPThreadPrivateDeclAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::OSConsumed: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) OSConsumedAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::OSConsumesThis: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) OSConsumesThisAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::OSReturnsNotRetained: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) OSReturnsNotRetainedAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::OSReturnsRetained: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) OSReturnsRetainedAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::OSReturnsRetainedOnNonZero: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) OSReturnsRetainedOnNonZeroAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::OSReturnsRetainedOnZero: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) OSReturnsRetainedOnZeroAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ObjCBoxable: { bool isImplicit = Record.readInt(); New = new (Context) ObjCBoxableAttr(Context, Info); New->setImplicit(isImplicit); break; } case attr::ObjCBridge: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); IdentifierInfo * bridgedType = Record.readIdentifier(); New = new (Context) ObjCBridgeAttr(Context, Info, bridgedType); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ObjCBridgeMutable: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); IdentifierInfo * bridgedType = Record.readIdentifier(); New = new (Context) ObjCBridgeMutableAttr(Context, Info, bridgedType); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ObjCBridgeRelated: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); IdentifierInfo * relatedClass = Record.readIdentifier(); IdentifierInfo * classMethod = Record.readIdentifier(); IdentifierInfo * instanceMethod = Record.readIdentifier(); New = new (Context) ObjCBridgeRelatedAttr(Context, Info, relatedClass, classMethod, instanceMethod); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ObjCClassStub: { bool isImplicit = Record.readInt(); New = new (Context) ObjCClassStubAttr(Context, Info); New->setImplicit(isImplicit); break; } case attr::ObjCDesignatedInitializer: { bool isImplicit = Record.readInt(); New = new (Context) ObjCDesignatedInitializerAttr(Context, Info); New->setImplicit(isImplicit); break; } case attr::ObjCDirect: { bool isImplicit = Record.readInt(); New = new (Context) ObjCDirectAttr(Context, Info); New->setImplicit(isImplicit); break; } case attr::ObjCDirectMembers: { bool isImplicit = Record.readInt(); New = new (Context) ObjCDirectMembersAttr(Context, Info); New->setImplicit(isImplicit); break; } case attr::ObjCException: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) ObjCExceptionAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ObjCExplicitProtocolImpl: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) ObjCExplicitProtocolImplAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ObjCExternallyRetained: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) ObjCExternallyRetainedAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ObjCGC: { bool isImplicit = Record.readInt(); IdentifierInfo * kind = Record.readIdentifier(); New = new (Context) ObjCGCAttr(Context, Info, kind); New->setImplicit(isImplicit); break; } case attr::ObjCIndependentClass: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) ObjCIndependentClassAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ObjCInertUnsafeUnretained: { bool isImplicit = Record.readInt(); New = new (Context) ObjCInertUnsafeUnretainedAttr(Context, Info); New->setImplicit(isImplicit); break; } case attr::ObjCKindOf: { bool isImplicit = Record.readInt(); New = new (Context) ObjCKindOfAttr(Context, Info); New->setImplicit(isImplicit); break; } case attr::ObjCMethodFamily: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); ObjCMethodFamilyAttr::FamilyKind family(static_cast(Record.readInt())); New = new (Context) ObjCMethodFamilyAttr(Context, Info, family); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ObjCNSObject: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) ObjCNSObjectAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ObjCNonLazyClass: { bool isImplicit = Record.readInt(); New = new (Context) ObjCNonLazyClassAttr(Context, Info); New->setImplicit(isImplicit); break; } case attr::ObjCOwnership: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); IdentifierInfo * kind = Record.readIdentifier(); New = new (Context) ObjCOwnershipAttr(Context, Info, kind); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ObjCPreciseLifetime: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) ObjCPreciseLifetimeAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ObjCRequiresPropertyDefs: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) ObjCRequiresPropertyDefsAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ObjCRequiresSuper: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) ObjCRequiresSuperAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ObjCReturnsInnerPointer: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) ObjCReturnsInnerPointerAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ObjCRootClass: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) ObjCRootClassAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ObjCRuntimeName: { bool isImplicit = Record.readInt(); std::string metadataName= Record.readString(); New = new (Context) ObjCRuntimeNameAttr(Context, Info, metadataName); New->setImplicit(isImplicit); break; } case attr::ObjCRuntimeVisible: { bool isImplicit = Record.readInt(); New = new (Context) ObjCRuntimeVisibleAttr(Context, Info); New->setImplicit(isImplicit); break; } case attr::ObjCSubclassingRestricted: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) ObjCSubclassingRestrictedAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::OpenCLAccess: { bool isImplicit = Record.readInt(); New = new (Context) OpenCLAccessAttr(Context, Info); New->setImplicit(isImplicit); break; } case attr::OpenCLConstantAddressSpace: { bool isImplicit = Record.readInt(); New = new (Context) OpenCLConstantAddressSpaceAttr(Context, Info); New->setImplicit(isImplicit); break; } case attr::OpenCLGenericAddressSpace: { bool isImplicit = Record.readInt(); New = new (Context) OpenCLGenericAddressSpaceAttr(Context, Info); New->setImplicit(isImplicit); break; } case attr::OpenCLGlobalAddressSpace: { bool isImplicit = Record.readInt(); New = new (Context) OpenCLGlobalAddressSpaceAttr(Context, Info); New->setImplicit(isImplicit); break; } case attr::OpenCLIntelReqdSubGroupSize: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); unsigned subGroupSize = Record.readInt(); New = new (Context) OpenCLIntelReqdSubGroupSizeAttr(Context, Info, subGroupSize); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::OpenCLKernel: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) OpenCLKernelAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::OpenCLLocalAddressSpace: { bool isImplicit = Record.readInt(); New = new (Context) OpenCLLocalAddressSpaceAttr(Context, Info); New->setImplicit(isImplicit); break; } case attr::OpenCLPrivateAddressSpace: { bool isImplicit = Record.readInt(); New = new (Context) OpenCLPrivateAddressSpaceAttr(Context, Info); New->setImplicit(isImplicit); break; } case attr::OpenCLUnrollHint: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); unsigned unrollHint = Record.readInt(); New = new (Context) OpenCLUnrollHintAttr(Context, Info, unrollHint); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::OptimizeNone: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) OptimizeNoneAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Overloadable: { bool isImplicit = Record.readInt(); New = new (Context) OverloadableAttr(Context, Info); New->setImplicit(isImplicit); break; } case attr::Override: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) OverrideAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Owner: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); TypeSourceInfo * derefType = Record.readTypeSourceInfo(); New = new (Context) OwnerAttr(Context, Info, derefType); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Ownership: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); IdentifierInfo * module = Record.readIdentifier(); unsigned argsSize = Record.readInt(); SmallVector args; args.reserve(argsSize); for (unsigned i = 0; i != argsSize; ++i) args.push_back(ParamIdx::deserialize(Record.readInt())); New = new (Context) OwnershipAttr(Context, Info, module, args.data(), argsSize); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Packed: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) PackedAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ParamTypestate: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); ParamTypestateAttr::ConsumedState paramState(static_cast(Record.readInt())); New = new (Context) ParamTypestateAttr(Context, Info, paramState); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Pascal: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) PascalAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::PassObjectSize: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); int type = Record.readInt(); New = new (Context) PassObjectSizeAttr(Context, Info, type); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::PatchableFunctionEntry: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); unsigned count = Record.readInt(); int offset = Record.readInt(); New = new (Context) PatchableFunctionEntryAttr(Context, Info, count, offset); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Pcs: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); PcsAttr::PCSType pCS(static_cast(Record.readInt())); New = new (Context) PcsAttr(Context, Info, pCS); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Pointer: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); TypeSourceInfo * derefType = Record.readTypeSourceInfo(); New = new (Context) PointerAttr(Context, Info, derefType); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::PragmaClangBSSSection: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); std::string name= Record.readString(); New = new (Context) PragmaClangBSSSectionAttr(Context, Info, name); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::PragmaClangDataSection: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); std::string name= Record.readString(); New = new (Context) PragmaClangDataSectionAttr(Context, Info, name); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::PragmaClangRelroSection: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); std::string name= Record.readString(); New = new (Context) PragmaClangRelroSectionAttr(Context, Info, name); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::PragmaClangRodataSection: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); std::string name= Record.readString(); New = new (Context) PragmaClangRodataSectionAttr(Context, Info, name); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::PragmaClangTextSection: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); std::string name= Record.readString(); New = new (Context) PragmaClangTextSectionAttr(Context, Info, name); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::PreserveAll: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) PreserveAllAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::PreserveMost: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) PreserveMostAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::PtGuardedBy: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); Expr * arg = Record.readExpr(); New = new (Context) PtGuardedByAttr(Context, Info, arg); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::PtGuardedVar: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) PtGuardedVarAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Ptr32: { bool isImplicit = Record.readInt(); New = new (Context) Ptr32Attr(Context, Info); New->setImplicit(isImplicit); break; } case attr::Ptr64: { bool isImplicit = Record.readInt(); New = new (Context) Ptr64Attr(Context, Info); New->setImplicit(isImplicit); break; } case attr::Pure: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) PureAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::RISCVInterrupt: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); RISCVInterruptAttr::InterruptType interrupt(static_cast(Record.readInt())); New = new (Context) RISCVInterruptAttr(Context, Info, interrupt); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::RegCall: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) RegCallAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Reinitializes: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) ReinitializesAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ReleaseCapability: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); unsigned argsSize = Record.readInt(); SmallVector args; args.reserve(argsSize); for (unsigned i = 0; i != argsSize; ++i) args.push_back(Record.readExpr()); New = new (Context) ReleaseCapabilityAttr(Context, Info, args.data(), argsSize); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ReleaseHandle: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); std::string handleType= Record.readString(); New = new (Context) ReleaseHandleAttr(Context, Info, handleType); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::RenderScriptKernel: { bool isImplicit = Record.readInt(); New = new (Context) RenderScriptKernelAttr(Context, Info); New->setImplicit(isImplicit); break; } case attr::ReqdWorkGroupSize: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); unsigned xDim = Record.readInt(); unsigned yDim = Record.readInt(); unsigned zDim = Record.readInt(); New = new (Context) ReqdWorkGroupSizeAttr(Context, Info, xDim, yDim, zDim); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::RequiresCapability: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); unsigned argsSize = Record.readInt(); SmallVector args; args.reserve(argsSize); for (unsigned i = 0; i != argsSize; ++i) args.push_back(Record.readExpr()); New = new (Context) RequiresCapabilityAttr(Context, Info, args.data(), argsSize); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Restrict: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) RestrictAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ReturnTypestate: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); ReturnTypestateAttr::ConsumedState state(static_cast(Record.readInt())); New = new (Context) ReturnTypestateAttr(Context, Info, state); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ReturnsNonNull: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) ReturnsNonNullAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ReturnsTwice: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) ReturnsTwiceAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::SPtr: { bool isImplicit = Record.readInt(); New = new (Context) SPtrAttr(Context, Info); New->setImplicit(isImplicit); break; } case attr::SYCLKernel: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) SYCLKernelAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ScopedLockable: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) ScopedLockableAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Section: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); std::string name= Record.readString(); New = new (Context) SectionAttr(Context, Info, name); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::SelectAny: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) SelectAnyAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Sentinel: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); int sentinel = Record.readInt(); int nullPos = Record.readInt(); New = new (Context) SentinelAttr(Context, Info, sentinel, nullPos); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::SetTypestate: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); SetTypestateAttr::ConsumedState newState(static_cast(Record.readInt())); New = new (Context) SetTypestateAttr(Context, Info, newState); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::SharedTrylockFunction: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); Expr * successValue = Record.readExpr(); unsigned argsSize = Record.readInt(); SmallVector args; args.reserve(argsSize); for (unsigned i = 0; i != argsSize; ++i) args.push_back(Record.readExpr()); New = new (Context) SharedTrylockFunctionAttr(Context, Info, successValue, args.data(), argsSize); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::SpeculativeLoadHardening: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) SpeculativeLoadHardeningAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::StdCall: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) StdCallAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Suppress: { bool isImplicit = Record.readInt(); unsigned diagnosticIdentifiersSize = Record.readInt(); SmallVector diagnosticIdentifiers; diagnosticIdentifiers.reserve(diagnosticIdentifiersSize); SmallVector diagnosticIdentifiersStorage; diagnosticIdentifiersStorage.reserve(diagnosticIdentifiersSize); for (unsigned i = 0; i != diagnosticIdentifiersSize; ++i) diagnosticIdentifiersStorage.push_back(Record.readString()); for (unsigned i = 0; i != diagnosticIdentifiersSize; ++i) diagnosticIdentifiers.push_back(diagnosticIdentifiersStorage[i]); New = new (Context) SuppressAttr(Context, Info, diagnosticIdentifiers.data(), diagnosticIdentifiersSize); New->setImplicit(isImplicit); break; } case attr::SwiftCall: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) SwiftCallAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::SwiftContext: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) SwiftContextAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::SwiftErrorResult: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) SwiftErrorResultAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::SwiftIndirectResult: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) SwiftIndirectResultAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::SysVABI: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) SysVABIAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::TLSModel: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); std::string model= Record.readString(); New = new (Context) TLSModelAttr(Context, Info, model); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Target: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); std::string featuresStr= Record.readString(); New = new (Context) TargetAttr(Context, Info, featuresStr); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::TestTypestate: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); TestTypestateAttr::ConsumedState testState(static_cast(Record.readInt())); New = new (Context) TestTypestateAttr(Context, Info, testState); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::ThisCall: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) ThisCallAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Thread: { bool isImplicit = Record.readInt(); New = new (Context) ThreadAttr(Context, Info); New->setImplicit(isImplicit); break; } case attr::TransparentUnion: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) TransparentUnionAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::TrivialABI: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) TrivialABIAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::TryAcquireCapability: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); Expr * successValue = Record.readExpr(); unsigned argsSize = Record.readInt(); SmallVector args; args.reserve(argsSize); for (unsigned i = 0; i != argsSize; ++i) args.push_back(Record.readExpr()); New = new (Context) TryAcquireCapabilityAttr(Context, Info, successValue, args.data(), argsSize); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::TypeNonNull: { bool isImplicit = Record.readInt(); New = new (Context) TypeNonNullAttr(Context, Info); New->setImplicit(isImplicit); break; } case attr::TypeNullUnspecified: { bool isImplicit = Record.readInt(); New = new (Context) TypeNullUnspecifiedAttr(Context, Info); New->setImplicit(isImplicit); break; } case attr::TypeNullable: { bool isImplicit = Record.readInt(); New = new (Context) TypeNullableAttr(Context, Info); New->setImplicit(isImplicit); break; } case attr::TypeTagForDatatype: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); IdentifierInfo * argumentKind = Record.readIdentifier(); TypeSourceInfo * matchingCType = Record.readTypeSourceInfo(); bool layoutCompatible = Record.readInt(); bool mustBeNull = Record.readInt(); New = new (Context) TypeTagForDatatypeAttr(Context, Info, argumentKind, matchingCType, layoutCompatible, mustBeNull); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::TypeVisibility: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); TypeVisibilityAttr::VisibilityType visibility(static_cast(Record.readInt())); New = new (Context) TypeVisibilityAttr(Context, Info, visibility); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::UPtr: { bool isImplicit = Record.readInt(); New = new (Context) UPtrAttr(Context, Info); New->setImplicit(isImplicit); break; } case attr::Unavailable: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); std::string message= Record.readString(); UnavailableAttr::ImplicitReason implicitReason(static_cast(Record.readInt())); New = new (Context) UnavailableAttr(Context, Info, message, implicitReason); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Uninitialized: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) UninitializedAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Unused: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) UnusedAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::UseHandle: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); std::string handleType= Record.readString(); New = new (Context) UseHandleAttr(Context, Info, handleType); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Used: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) UsedAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Uuid: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); std::string guid= Record.readString(); New = new (Context) UuidAttr(Context, Info, guid); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::VecReturn: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) VecReturnAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::VecTypeHint: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); TypeSourceInfo * typeHint = Record.readTypeSourceInfo(); New = new (Context) VecTypeHintAttr(Context, Info, typeHint); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::VectorCall: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) VectorCallAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Visibility: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); VisibilityAttr::VisibilityType visibility(static_cast(Record.readInt())); New = new (Context) VisibilityAttr(Context, Info, visibility); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::WarnUnused: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) WarnUnusedAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::WarnUnusedResult: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); std::string message= Record.readString(); New = new (Context) WarnUnusedResultAttr(Context, Info, message); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::Weak: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) WeakAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::WeakImport: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) WeakImportAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::WeakRef: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); std::string aliasee= Record.readString(); New = new (Context) WeakRefAttr(Context, Info, aliasee); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::WebAssemblyExportName: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); std::string exportName= Record.readString(); New = new (Context) WebAssemblyExportNameAttr(Context, Info, exportName); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::WebAssemblyImportModule: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); std::string importModule= Record.readString(); New = new (Context) WebAssemblyImportModuleAttr(Context, Info, importModule); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::WebAssemblyImportName: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); std::string importName= Record.readString(); New = new (Context) WebAssemblyImportNameAttr(Context, Info, importName); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::WorkGroupSizeHint: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); unsigned xDim = Record.readInt(); unsigned yDim = Record.readInt(); unsigned zDim = Record.readInt(); New = new (Context) WorkGroupSizeHintAttr(Context, Info, xDim, yDim, zDim); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::X86ForceAlignArgPointer: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) X86ForceAlignArgPointerAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::XRayInstrument: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); New = new (Context) XRayInstrumentAttr(Context, Info); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } case attr::XRayLogArgs: { bool isInherited = Record.readInt(); bool isImplicit = Record.readInt(); unsigned argumentCount = Record.readInt(); New = new (Context) XRayLogArgsAttr(Context, Info, argumentCount); cast(New)->setInherited(isInherited); New->setImplicit(isImplicit); break; } }