Blame | Last modification | View Log | Download | RSS feed
/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\|* *||* Attribute classes' definitions *||* *||* Automatically generated file, do not edit! *||* *|\*===----------------------------------------------------------------------===*/#ifndef LLVM_CLANG_ATTR_CLASSES_INC#define LLVM_CLANG_ATTR_CLASSES_INCstatic inline void DelimitAttributeArgument(raw_ostream& OS, bool& IsFirst) {if (IsFirst) {IsFirst = false;OS << "(";} elseOS << ", ";}class AArch64SVEPcsAttr : public InheritableAttr {public:enum Spelling {GNU_aarch64_sve_pcs = 0,CXX11_clang_aarch64_sve_pcs = 1,C2x_clang_aarch64_sve_pcs = 2,SpellingNotCalculated = 15};// Factory methodsstatic AArch64SVEPcsAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AArch64SVEPcsAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static AArch64SVEPcsAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AArch64SVEPcsAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAArch64SVEPcsAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);AArch64SVEPcsAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::AArch64SVEPcs; }};class AArch64VectorPcsAttr : public InheritableAttr {public:enum Spelling {GNU_aarch64_vector_pcs = 0,CXX11_clang_aarch64_vector_pcs = 1,C2x_clang_aarch64_vector_pcs = 2,SpellingNotCalculated = 15};// Factory methodsstatic AArch64VectorPcsAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AArch64VectorPcsAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static AArch64VectorPcsAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AArch64VectorPcsAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAArch64VectorPcsAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);AArch64VectorPcsAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::AArch64VectorPcs; }};class AMDGPUFlatWorkGroupSizeAttr : public InheritableAttr {Expr * min;Expr * max;public:enum Spelling {GNU_amdgpu_flat_work_group_size = 0,CXX11_clang_amdgpu_flat_work_group_size = 1,SpellingNotCalculated = 15};// Factory methodsstatic AMDGPUFlatWorkGroupSizeAttr *CreateImplicit(ASTContext &Ctx, Expr * Min, Expr * Max, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AMDGPUFlatWorkGroupSizeAttr *Create(ASTContext &Ctx, Expr * Min, Expr * Max, const AttributeCommonInfo &CommonInfo);static AMDGPUFlatWorkGroupSizeAttr *CreateImplicit(ASTContext &Ctx, Expr * Min, Expr * Max, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AMDGPUFlatWorkGroupSizeAttr *Create(ASTContext &Ctx, Expr * Min, Expr * Max, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAMDGPUFlatWorkGroupSizeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Expr * Min, Expr * Max);AMDGPUFlatWorkGroupSizeAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Expr * getMin() const {return min;}Expr * getMax() const {return max;}static bool classof(const Attr *A) { return A->getKind() == attr::AMDGPUFlatWorkGroupSize; }};class AMDGPUKernelCallAttr : public InheritableAttr {public:enum Spelling {GNU_amdgpu_kernel = 0,CXX11_clang_amdgpu_kernel = 1,C2x_clang_amdgpu_kernel = 2,SpellingNotCalculated = 15};// Factory methodsstatic AMDGPUKernelCallAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AMDGPUKernelCallAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static AMDGPUKernelCallAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AMDGPUKernelCallAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAMDGPUKernelCallAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);AMDGPUKernelCallAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::AMDGPUKernelCall; }};class AMDGPUNumSGPRAttr : public InheritableAttr {unsigned numSGPR;public:enum Spelling {GNU_amdgpu_num_sgpr = 0,CXX11_clang_amdgpu_num_sgpr = 1,SpellingNotCalculated = 15};// Factory methodsstatic AMDGPUNumSGPRAttr *CreateImplicit(ASTContext &Ctx, unsigned NumSGPR, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AMDGPUNumSGPRAttr *Create(ASTContext &Ctx, unsigned NumSGPR, const AttributeCommonInfo &CommonInfo);static AMDGPUNumSGPRAttr *CreateImplicit(ASTContext &Ctx, unsigned NumSGPR, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AMDGPUNumSGPRAttr *Create(ASTContext &Ctx, unsigned NumSGPR, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAMDGPUNumSGPRAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, unsigned NumSGPR);AMDGPUNumSGPRAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;unsigned getNumSGPR() const {return numSGPR;}static bool classof(const Attr *A) { return A->getKind() == attr::AMDGPUNumSGPR; }};class AMDGPUNumVGPRAttr : public InheritableAttr {unsigned numVGPR;public:enum Spelling {GNU_amdgpu_num_vgpr = 0,CXX11_clang_amdgpu_num_vgpr = 1,SpellingNotCalculated = 15};// Factory methodsstatic AMDGPUNumVGPRAttr *CreateImplicit(ASTContext &Ctx, unsigned NumVGPR, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AMDGPUNumVGPRAttr *Create(ASTContext &Ctx, unsigned NumVGPR, const AttributeCommonInfo &CommonInfo);static AMDGPUNumVGPRAttr *CreateImplicit(ASTContext &Ctx, unsigned NumVGPR, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AMDGPUNumVGPRAttr *Create(ASTContext &Ctx, unsigned NumVGPR, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAMDGPUNumVGPRAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, unsigned NumVGPR);AMDGPUNumVGPRAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;unsigned getNumVGPR() const {return numVGPR;}static bool classof(const Attr *A) { return A->getKind() == attr::AMDGPUNumVGPR; }};class AMDGPUWavesPerEUAttr : public InheritableAttr {Expr * min;Expr * max;public:enum Spelling {GNU_amdgpu_waves_per_eu = 0,CXX11_clang_amdgpu_waves_per_eu = 1,SpellingNotCalculated = 15};// Factory methodsstatic AMDGPUWavesPerEUAttr *CreateImplicit(ASTContext &Ctx, Expr * Min, Expr * Max, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AMDGPUWavesPerEUAttr *Create(ASTContext &Ctx, Expr * Min, Expr * Max, const AttributeCommonInfo &CommonInfo);static AMDGPUWavesPerEUAttr *CreateImplicit(ASTContext &Ctx, Expr * Min, Expr * Max, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AMDGPUWavesPerEUAttr *Create(ASTContext &Ctx, Expr * Min, Expr * Max, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAMDGPUWavesPerEUAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Expr * Min, Expr * Max);AMDGPUWavesPerEUAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Expr * Min);AMDGPUWavesPerEUAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Expr * getMin() const {return min;}Expr * getMax() const {return max;}static bool classof(const Attr *A) { return A->getKind() == attr::AMDGPUWavesPerEU; }};class ARMInterruptAttr : public InheritableAttr {public:enum InterruptType {IRQ,FIQ,SWI,ABORT,UNDEF,Generic};private:InterruptType interrupt;public:enum Spelling {GNU_interrupt = 0,CXX11_gnu_interrupt = 1,C2x_gnu_interrupt = 2,SpellingNotCalculated = 15};// Factory methodsstatic ARMInterruptAttr *CreateImplicit(ASTContext &Ctx, InterruptType Interrupt, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ARMInterruptAttr *Create(ASTContext &Ctx, InterruptType Interrupt, const AttributeCommonInfo &CommonInfo);static ARMInterruptAttr *CreateImplicit(ASTContext &Ctx, InterruptType Interrupt, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ARMInterruptAttr *Create(ASTContext &Ctx, InterruptType Interrupt, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsARMInterruptAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, InterruptType Interrupt);ARMInterruptAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ARMInterruptAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;InterruptType getInterrupt() const {return interrupt;}static bool ConvertStrToInterruptType(StringRef Val, InterruptType &Out);static const char *ConvertInterruptTypeToStr(InterruptType Val);static bool classof(const Attr *A) { return A->getKind() == attr::ARMInterrupt; }};class AVRInterruptAttr : public InheritableAttr {public:enum Spelling {GNU_interrupt = 0,CXX11_gnu_interrupt = 1,C2x_gnu_interrupt = 2,SpellingNotCalculated = 15};// Factory methodsstatic AVRInterruptAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AVRInterruptAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static AVRInterruptAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AVRInterruptAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAVRInterruptAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);AVRInterruptAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::AVRInterrupt; }};class AVRSignalAttr : public InheritableAttr {public:enum Spelling {GNU_signal = 0,CXX11_gnu_signal = 1,C2x_gnu_signal = 2,SpellingNotCalculated = 15};// Factory methodsstatic AVRSignalAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AVRSignalAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static AVRSignalAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AVRSignalAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAVRSignalAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);AVRSignalAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::AVRSignal; }};class AbiTagAttr : public Attr {unsigned tags_Size;StringRef *tags_;public:enum Spelling {GNU_abi_tag = 0,CXX11_gnu_abi_tag = 1,SpellingNotCalculated = 15};// Factory methodsstatic AbiTagAttr *CreateImplicit(ASTContext &Ctx, StringRef *Tags, unsigned TagsSize, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AbiTagAttr *Create(ASTContext &Ctx, StringRef *Tags, unsigned TagsSize, const AttributeCommonInfo &CommonInfo);static AbiTagAttr *CreateImplicit(ASTContext &Ctx, StringRef *Tags, unsigned TagsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AbiTagAttr *Create(ASTContext &Ctx, StringRef *Tags, unsigned TagsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAbiTagAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, StringRef *Tags, unsigned TagsSize);AbiTagAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);AbiTagAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;typedef StringRef* tags_iterator;tags_iterator tags_begin() const { return tags_; }tags_iterator tags_end() const { return tags_ + tags_Size; }unsigned tags_size() const { return tags_Size; }llvm::iterator_range<tags_iterator> tags() const { return llvm::make_range(tags_begin(), tags_end()); }static bool classof(const Attr *A) { return A->getKind() == attr::AbiTag; }};class AcquireCapabilityAttr : public InheritableAttr {unsigned args_Size;Expr * *args_;public:enum Spelling {GNU_acquire_capability = 0,CXX11_clang_acquire_capability = 1,GNU_acquire_shared_capability = 2,CXX11_clang_acquire_shared_capability = 3,GNU_exclusive_lock_function = 4,GNU_shared_lock_function = 5,SpellingNotCalculated = 15};// Factory methodsstatic AcquireCapabilityAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AcquireCapabilityAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);static AcquireCapabilityAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax, AcquireCapabilityAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static AcquireCapabilityAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax, AcquireCapabilityAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsAcquireCapabilityAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Expr * *Args, unsigned ArgsSize);AcquireCapabilityAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);AcquireCapabilityAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;bool isShared() const { return getAttributeSpellingListIndex() == 2 ||getAttributeSpellingListIndex() == 3 ||getAttributeSpellingListIndex() == 5; }typedef Expr ** args_iterator;args_iterator args_begin() const { return args_; }args_iterator args_end() const { return args_ + args_Size; }unsigned args_size() const { return args_Size; }llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); }static bool classof(const Attr *A) { return A->getKind() == attr::AcquireCapability; }};class AcquireHandleAttr : public InheritableAttr {unsigned handleTypeLength;char *handleType;public:enum Spelling {GNU_acquire_handle = 0,CXX11_clang_acquire_handle = 1,C2x_clang_acquire_handle = 2,SpellingNotCalculated = 15};// Factory methodsstatic AcquireHandleAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef HandleType, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AcquireHandleAttr *Create(ASTContext &Ctx, llvm::StringRef HandleType, const AttributeCommonInfo &CommonInfo);static AcquireHandleAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef HandleType, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AcquireHandleAttr *Create(ASTContext &Ctx, llvm::StringRef HandleType, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAcquireHandleAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef HandleType);AcquireHandleAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getHandleType() const {return llvm::StringRef(handleType, handleTypeLength);}unsigned getHandleTypeLength() const {return handleTypeLength;}void setHandleType(ASTContext &C, llvm::StringRef S) {handleTypeLength = S.size();this->handleType = new (C, 1) char [handleTypeLength];if (!S.empty())std::memcpy(this->handleType, S.data(), handleTypeLength);}static bool classof(const Attr *A) { return A->getKind() == attr::AcquireHandle; }};class AcquiredAfterAttr : public InheritableAttr {unsigned args_Size;Expr * *args_;public:// Factory methodsstatic AcquiredAfterAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AcquiredAfterAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);static AcquiredAfterAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AcquiredAfterAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAcquiredAfterAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Expr * *Args, unsigned ArgsSize);AcquiredAfterAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);AcquiredAfterAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;typedef Expr ** args_iterator;args_iterator args_begin() const { return args_; }args_iterator args_end() const { return args_ + args_Size; }unsigned args_size() const { return args_Size; }llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); }static bool classof(const Attr *A) { return A->getKind() == attr::AcquiredAfter; }};class AcquiredBeforeAttr : public InheritableAttr {unsigned args_Size;Expr * *args_;public:// Factory methodsstatic AcquiredBeforeAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AcquiredBeforeAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);static AcquiredBeforeAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AcquiredBeforeAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAcquiredBeforeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Expr * *Args, unsigned ArgsSize);AcquiredBeforeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);AcquiredBeforeAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;typedef Expr ** args_iterator;args_iterator args_begin() const { return args_; }args_iterator args_end() const { return args_ + args_Size; }unsigned args_size() const { return args_Size; }llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); }static bool classof(const Attr *A) { return A->getKind() == attr::AcquiredBefore; }};class AddressSpaceAttr : public TypeAttr {int addressSpace;public:enum Spelling {GNU_address_space = 0,CXX11_clang_address_space = 1,C2x_clang_address_space = 2,SpellingNotCalculated = 15};// Factory methodsstatic AddressSpaceAttr *CreateImplicit(ASTContext &Ctx, int AddressSpace, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AddressSpaceAttr *Create(ASTContext &Ctx, int AddressSpace, const AttributeCommonInfo &CommonInfo);static AddressSpaceAttr *CreateImplicit(ASTContext &Ctx, int AddressSpace, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AddressSpaceAttr *Create(ASTContext &Ctx, int AddressSpace, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAddressSpaceAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, int AddressSpace);AddressSpaceAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;int getAddressSpace() const {return addressSpace;}static bool classof(const Attr *A) { return A->getKind() == attr::AddressSpace; }};class AliasAttr : public Attr {unsigned aliaseeLength;char *aliasee;public:enum Spelling {GNU_alias = 0,CXX11_gnu_alias = 1,C2x_gnu_alias = 2,SpellingNotCalculated = 15};// Factory methodsstatic AliasAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Aliasee, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AliasAttr *Create(ASTContext &Ctx, llvm::StringRef Aliasee, const AttributeCommonInfo &CommonInfo);static AliasAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Aliasee, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AliasAttr *Create(ASTContext &Ctx, llvm::StringRef Aliasee, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAliasAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef Aliasee);AliasAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getAliasee() const {return llvm::StringRef(aliasee, aliaseeLength);}unsigned getAliaseeLength() const {return aliaseeLength;}void setAliasee(ASTContext &C, llvm::StringRef S) {aliaseeLength = S.size();this->aliasee = new (C, 1) char [aliaseeLength];if (!S.empty())std::memcpy(this->aliasee, S.data(), aliaseeLength);}static bool classof(const Attr *A) { return A->getKind() == attr::Alias; }};class AlignMac68kAttr : public InheritableAttr {public:// Factory methodsstatic AlignMac68kAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AlignMac68kAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static AlignMac68kAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AlignMac68kAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAlignMac68kAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);AlignMac68kAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::AlignMac68k; }};class AlignNaturalAttr : public InheritableAttr {public:// Factory methodsstatic AlignNaturalAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AlignNaturalAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static AlignNaturalAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AlignNaturalAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAlignNaturalAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);AlignNaturalAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::AlignNatural; }};class AlignValueAttr : public Attr {Expr * alignment;public:// Factory methodsstatic AlignValueAttr *CreateImplicit(ASTContext &Ctx, Expr * Alignment, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AlignValueAttr *Create(ASTContext &Ctx, Expr * Alignment, const AttributeCommonInfo &CommonInfo);static AlignValueAttr *CreateImplicit(ASTContext &Ctx, Expr * Alignment, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AlignValueAttr *Create(ASTContext &Ctx, Expr * Alignment, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAlignValueAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Expr * Alignment);AlignValueAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Expr * getAlignment() const {return alignment;}static bool classof(const Attr *A) { return A->getKind() == attr::AlignValue; }};class AlignedAttr : public InheritableAttr {bool isalignmentExpr;union {Expr *alignmentExpr;TypeSourceInfo *alignmentType;};public:enum Spelling {GNU_aligned = 0,CXX11_gnu_aligned = 1,C2x_gnu_aligned = 2,Declspec_align = 3,Keyword_alignas = 4,Keyword_Alignas = 5,SpellingNotCalculated = 15};// Factory methodsstatic AlignedAttr *CreateImplicit(ASTContext &Ctx, bool IsAlignmentExpr, void *Alignment, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AlignedAttr *Create(ASTContext &Ctx, bool IsAlignmentExpr, void *Alignment, const AttributeCommonInfo &CommonInfo);static AlignedAttr *CreateImplicit(ASTContext &Ctx, bool IsAlignmentExpr, void *Alignment, SourceRange Range, AttributeCommonInfo::Syntax Syntax, AlignedAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static AlignedAttr *Create(ASTContext &Ctx, bool IsAlignmentExpr, void *Alignment, SourceRange Range, AttributeCommonInfo::Syntax Syntax, AlignedAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsAlignedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, bool IsAlignmentExpr, void *Alignment);AlignedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);AlignedAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;bool isGNU() const { return getAttributeSpellingListIndex() == 0 ||getAttributeSpellingListIndex() == 1 ||getAttributeSpellingListIndex() == 2; }bool isC11() const { return getAttributeSpellingListIndex() == 5; }bool isAlignas() const { return getAttributeSpellingListIndex() == 4 ||getAttributeSpellingListIndex() == 5; }bool isDeclspec() const { return getAttributeSpellingListIndex() == 3; }bool isAlignmentDependent() const;bool isAlignmentErrorDependent() const;unsigned getAlignment(ASTContext &Ctx) const;bool isAlignmentExpr() const {return isalignmentExpr;}Expr *getAlignmentExpr() const {assert(isalignmentExpr);return alignmentExpr;}TypeSourceInfo *getAlignmentType() const {assert(!isalignmentExpr);return alignmentType;}static bool classof(const Attr *A) { return A->getKind() == attr::Aligned; }};class AllocAlignAttr : public InheritableAttr {ParamIdx paramIndex;public:enum Spelling {GNU_alloc_align = 0,CXX11_gnu_alloc_align = 1,C2x_gnu_alloc_align = 2,SpellingNotCalculated = 15};// Factory methodsstatic AllocAlignAttr *CreateImplicit(ASTContext &Ctx, ParamIdx ParamIndex, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AllocAlignAttr *Create(ASTContext &Ctx, ParamIdx ParamIndex, const AttributeCommonInfo &CommonInfo);static AllocAlignAttr *CreateImplicit(ASTContext &Ctx, ParamIdx ParamIndex, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AllocAlignAttr *Create(ASTContext &Ctx, ParamIdx ParamIndex, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAllocAlignAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, ParamIdx ParamIndex);AllocAlignAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;ParamIdx getParamIndex() const {return paramIndex;}static bool classof(const Attr *A) { return A->getKind() == attr::AllocAlign; }};class AllocSizeAttr : public InheritableAttr {ParamIdx elemSizeParam;ParamIdx numElemsParam;public:enum Spelling {GNU_alloc_size = 0,CXX11_gnu_alloc_size = 1,C2x_gnu_alloc_size = 2,SpellingNotCalculated = 15};// Factory methodsstatic AllocSizeAttr *CreateImplicit(ASTContext &Ctx, ParamIdx ElemSizeParam, ParamIdx NumElemsParam, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AllocSizeAttr *Create(ASTContext &Ctx, ParamIdx ElemSizeParam, ParamIdx NumElemsParam, const AttributeCommonInfo &CommonInfo);static AllocSizeAttr *CreateImplicit(ASTContext &Ctx, ParamIdx ElemSizeParam, ParamIdx NumElemsParam, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AllocSizeAttr *Create(ASTContext &Ctx, ParamIdx ElemSizeParam, ParamIdx NumElemsParam, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAllocSizeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, ParamIdx ElemSizeParam, ParamIdx NumElemsParam);AllocSizeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, ParamIdx ElemSizeParam);AllocSizeAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;ParamIdx getElemSizeParam() const {return elemSizeParam;}ParamIdx getNumElemsParam() const {return numElemsParam;}static bool classof(const Attr *A) { return A->getKind() == attr::AllocSize; }};class AlwaysDestroyAttr : public InheritableAttr {public:enum Spelling {GNU_always_destroy = 0,CXX11_clang_always_destroy = 1,SpellingNotCalculated = 15};// Factory methodsstatic AlwaysDestroyAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AlwaysDestroyAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static AlwaysDestroyAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AlwaysDestroyAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAlwaysDestroyAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);AlwaysDestroyAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::AlwaysDestroy; }};class AlwaysInlineAttr : public DeclOrStmtAttr {public:enum Spelling {GNU_always_inline = 0,CXX11_gnu_always_inline = 1,C2x_gnu_always_inline = 2,CXX11_clang_always_inline = 3,C2x_clang_always_inline = 4,Keyword_forceinline = 5,SpellingNotCalculated = 15};// Factory methodsstatic AlwaysInlineAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AlwaysInlineAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static AlwaysInlineAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, AlwaysInlineAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static AlwaysInlineAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, AlwaysInlineAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsAlwaysInlineAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);AlwaysInlineAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;bool isClangAlwaysInline() const { return getAttributeSpellingListIndex() == 3 ||getAttributeSpellingListIndex() == 4; }static bool classof(const Attr *A) { return A->getKind() == attr::AlwaysInline; }};class AnalyzerNoReturnAttr : public InheritableAttr {public:// Factory methodsstatic AnalyzerNoReturnAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AnalyzerNoReturnAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static AnalyzerNoReturnAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AnalyzerNoReturnAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAnalyzerNoReturnAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);AnalyzerNoReturnAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::AnalyzerNoReturn; }};class AnnotateAttr : public InheritableParamAttr {unsigned annotationLength;char *annotation;unsigned args_Size;Expr * *args_;unsigned delayedArgs_Size;Expr * *delayedArgs_;public:enum Spelling {GNU_annotate = 0,CXX11_clang_annotate = 1,C2x_clang_annotate = 2,SpellingNotCalculated = 15};// Factory methodsstatic AnnotateAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Annotation, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AnnotateAttr *Create(ASTContext &Ctx, llvm::StringRef Annotation, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);static AnnotateAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Annotation, Expr * *Args, unsigned ArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AnnotateAttr *Create(ASTContext &Ctx, llvm::StringRef Annotation, Expr * *Args, unsigned ArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AnnotateAttr *CreateImplicitWithDelayedArgs(ASTContext &Ctx, Expr * *DelayedArgs, unsigned DelayedArgsSize, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AnnotateAttr *CreateWithDelayedArgs(ASTContext &Ctx, Expr * *DelayedArgs, unsigned DelayedArgsSize, const AttributeCommonInfo &CommonInfo);static AnnotateAttr *CreateImplicitWithDelayedArgs(ASTContext &Ctx, Expr * *DelayedArgs, unsigned DelayedArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AnnotateAttr *CreateWithDelayedArgs(ASTContext &Ctx, Expr * *DelayedArgs, unsigned DelayedArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAnnotateAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef Annotation, Expr * *Args, unsigned ArgsSize);AnnotateAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef Annotation);AnnotateAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);AnnotateAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getAnnotation() const {return llvm::StringRef(annotation, annotationLength);}unsigned getAnnotationLength() const {return annotationLength;}void setAnnotation(ASTContext &C, llvm::StringRef S) {annotationLength = S.size();this->annotation = new (C, 1) char [annotationLength];if (!S.empty())std::memcpy(this->annotation, S.data(), annotationLength);}typedef Expr ** args_iterator;args_iterator args_begin() const { return args_; }args_iterator args_end() const { return args_ + args_Size; }unsigned args_size() const { return args_Size; }llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); }typedef Expr ** delayedArgs_iterator;delayedArgs_iterator delayedArgs_begin() const { return delayedArgs_; }delayedArgs_iterator delayedArgs_end() const { return delayedArgs_ + delayedArgs_Size; }unsigned delayedArgs_size() const { return delayedArgs_Size; }llvm::iterator_range<delayedArgs_iterator> delayedArgs() const { return llvm::make_range(delayedArgs_begin(), delayedArgs_end()); }void setDelayedArgs(ASTContext &Ctx, Expr * *DelayedArgs, unsigned DelayedArgsSize) {delayedArgs_Size = DelayedArgsSize;delayedArgs_ = new (Ctx, 16) Expr *[delayedArgs_Size];std::copy(DelayedArgs, DelayedArgs + delayedArgs_Size, delayedArgs_);}static AnnotateAttr *Create(ASTContext &Ctx, llvm::StringRef Annotation, \const AttributeCommonInfo &CommonInfo) {return AnnotateAttr::Create(Ctx, Annotation, nullptr, 0, CommonInfo);}static AnnotateAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Annotation, \const AttributeCommonInfo &CommonInfo = {SourceRange{}}) {return AnnotateAttr::CreateImplicit(Ctx, Annotation, nullptr, 0, CommonInfo);}static bool classof(const Attr *A) { return A->getKind() == attr::Annotate; }};class AnnotateTypeAttr : public TypeAttr {unsigned annotationLength;char *annotation;unsigned args_Size;Expr * *args_;unsigned delayedArgs_Size;Expr * *delayedArgs_;public:enum Spelling {CXX11_clang_annotate_type = 0,C2x_clang_annotate_type = 1,SpellingNotCalculated = 15};// Factory methodsstatic AnnotateTypeAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Annotation, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AnnotateTypeAttr *Create(ASTContext &Ctx, llvm::StringRef Annotation, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);static AnnotateTypeAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Annotation, Expr * *Args, unsigned ArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AnnotateTypeAttr *Create(ASTContext &Ctx, llvm::StringRef Annotation, Expr * *Args, unsigned ArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AnnotateTypeAttr *CreateImplicitWithDelayedArgs(ASTContext &Ctx, Expr * *DelayedArgs, unsigned DelayedArgsSize, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AnnotateTypeAttr *CreateWithDelayedArgs(ASTContext &Ctx, Expr * *DelayedArgs, unsigned DelayedArgsSize, const AttributeCommonInfo &CommonInfo);static AnnotateTypeAttr *CreateImplicitWithDelayedArgs(ASTContext &Ctx, Expr * *DelayedArgs, unsigned DelayedArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AnnotateTypeAttr *CreateWithDelayedArgs(ASTContext &Ctx, Expr * *DelayedArgs, unsigned DelayedArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAnnotateTypeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef Annotation, Expr * *Args, unsigned ArgsSize);AnnotateTypeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef Annotation);AnnotateTypeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);AnnotateTypeAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getAnnotation() const {return llvm::StringRef(annotation, annotationLength);}unsigned getAnnotationLength() const {return annotationLength;}void setAnnotation(ASTContext &C, llvm::StringRef S) {annotationLength = S.size();this->annotation = new (C, 1) char [annotationLength];if (!S.empty())std::memcpy(this->annotation, S.data(), annotationLength);}typedef Expr ** args_iterator;args_iterator args_begin() const { return args_; }args_iterator args_end() const { return args_ + args_Size; }unsigned args_size() const { return args_Size; }llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); }typedef Expr ** delayedArgs_iterator;delayedArgs_iterator delayedArgs_begin() const { return delayedArgs_; }delayedArgs_iterator delayedArgs_end() const { return delayedArgs_ + delayedArgs_Size; }unsigned delayedArgs_size() const { return delayedArgs_Size; }llvm::iterator_range<delayedArgs_iterator> delayedArgs() const { return llvm::make_range(delayedArgs_begin(), delayedArgs_end()); }void setDelayedArgs(ASTContext &Ctx, Expr * *DelayedArgs, unsigned DelayedArgsSize) {delayedArgs_Size = DelayedArgsSize;delayedArgs_ = new (Ctx, 16) Expr *[delayedArgs_Size];std::copy(DelayedArgs, DelayedArgs + delayedArgs_Size, delayedArgs_);}static bool classof(const Attr *A) { return A->getKind() == attr::AnnotateType; }};class AnyX86InterruptAttr : public InheritableAttr {public:enum Spelling {GNU_interrupt = 0,CXX11_gnu_interrupt = 1,C2x_gnu_interrupt = 2,SpellingNotCalculated = 15};// Factory methodsstatic AnyX86InterruptAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AnyX86InterruptAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static AnyX86InterruptAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AnyX86InterruptAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAnyX86InterruptAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);AnyX86InterruptAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::AnyX86Interrupt; }};class AnyX86NoCallerSavedRegistersAttr : public InheritableAttr {public:enum Spelling {GNU_no_caller_saved_registers = 0,CXX11_gnu_no_caller_saved_registers = 1,C2x_gnu_no_caller_saved_registers = 2,SpellingNotCalculated = 15};// Factory methodsstatic AnyX86NoCallerSavedRegistersAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AnyX86NoCallerSavedRegistersAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static AnyX86NoCallerSavedRegistersAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AnyX86NoCallerSavedRegistersAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAnyX86NoCallerSavedRegistersAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);AnyX86NoCallerSavedRegistersAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::AnyX86NoCallerSavedRegisters; }};class AnyX86NoCfCheckAttr : public InheritableAttr {public:enum Spelling {GNU_nocf_check = 0,CXX11_gnu_nocf_check = 1,C2x_gnu_nocf_check = 2,SpellingNotCalculated = 15};// Factory methodsstatic AnyX86NoCfCheckAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AnyX86NoCfCheckAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static AnyX86NoCfCheckAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AnyX86NoCfCheckAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAnyX86NoCfCheckAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);AnyX86NoCfCheckAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::AnyX86NoCfCheck; }};class ArcWeakrefUnavailableAttr : public InheritableAttr {public:enum Spelling {GNU_objc_arc_weak_reference_unavailable = 0,CXX11_clang_objc_arc_weak_reference_unavailable = 1,C2x_clang_objc_arc_weak_reference_unavailable = 2,SpellingNotCalculated = 15};// Factory methodsstatic ArcWeakrefUnavailableAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ArcWeakrefUnavailableAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ArcWeakrefUnavailableAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ArcWeakrefUnavailableAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsArcWeakrefUnavailableAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ArcWeakrefUnavailableAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::ArcWeakrefUnavailable; }};class ArgumentWithTypeTagAttr : public InheritableAttr {IdentifierInfo * argumentKind;ParamIdx argumentIdx;ParamIdx typeTagIdx;bool isPointer;public:enum Spelling {GNU_argument_with_type_tag = 0,CXX11_clang_argument_with_type_tag = 1,C2x_clang_argument_with_type_tag = 2,GNU_pointer_with_type_tag = 3,CXX11_clang_pointer_with_type_tag = 4,C2x_clang_pointer_with_type_tag = 5,SpellingNotCalculated = 15};// Factory methodsstatic ArgumentWithTypeTagAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * ArgumentKind, ParamIdx ArgumentIdx, ParamIdx TypeTagIdx, bool IsPointer, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ArgumentWithTypeTagAttr *Create(ASTContext &Ctx, IdentifierInfo * ArgumentKind, ParamIdx ArgumentIdx, ParamIdx TypeTagIdx, bool IsPointer, const AttributeCommonInfo &CommonInfo);static ArgumentWithTypeTagAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * ArgumentKind, ParamIdx ArgumentIdx, ParamIdx TypeTagIdx, bool IsPointer, SourceRange Range, AttributeCommonInfo::Syntax Syntax, ArgumentWithTypeTagAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static ArgumentWithTypeTagAttr *Create(ASTContext &Ctx, IdentifierInfo * ArgumentKind, ParamIdx ArgumentIdx, ParamIdx TypeTagIdx, bool IsPointer, SourceRange Range, AttributeCommonInfo::Syntax Syntax, ArgumentWithTypeTagAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static ArgumentWithTypeTagAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * ArgumentKind, ParamIdx ArgumentIdx, ParamIdx TypeTagIdx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ArgumentWithTypeTagAttr *Create(ASTContext &Ctx, IdentifierInfo * ArgumentKind, ParamIdx ArgumentIdx, ParamIdx TypeTagIdx, const AttributeCommonInfo &CommonInfo);static ArgumentWithTypeTagAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * ArgumentKind, ParamIdx ArgumentIdx, ParamIdx TypeTagIdx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, ArgumentWithTypeTagAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static ArgumentWithTypeTagAttr *Create(ASTContext &Ctx, IdentifierInfo * ArgumentKind, ParamIdx ArgumentIdx, ParamIdx TypeTagIdx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, ArgumentWithTypeTagAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsArgumentWithTypeTagAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, IdentifierInfo * ArgumentKind, ParamIdx ArgumentIdx, ParamIdx TypeTagIdx, bool IsPointer);ArgumentWithTypeTagAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, IdentifierInfo * ArgumentKind, ParamIdx ArgumentIdx, ParamIdx TypeTagIdx);ArgumentWithTypeTagAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;IdentifierInfo * getArgumentKind() const {return argumentKind;}ParamIdx getArgumentIdx() const {return argumentIdx;}ParamIdx getTypeTagIdx() const {return typeTagIdx;}bool getIsPointer() const {return isPointer;}static bool classof(const Attr *A) { return A->getKind() == attr::ArgumentWithTypeTag; }};class ArmBuiltinAliasAttr : public InheritableAttr {IdentifierInfo * builtinName;public:enum Spelling {GNU_clang_arm_builtin_alias = 0,CXX11_clang_clang_arm_builtin_alias = 1,C2x_clang_clang_arm_builtin_alias = 2,SpellingNotCalculated = 15};// Factory methodsstatic ArmBuiltinAliasAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * BuiltinName, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ArmBuiltinAliasAttr *Create(ASTContext &Ctx, IdentifierInfo * BuiltinName, const AttributeCommonInfo &CommonInfo);static ArmBuiltinAliasAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * BuiltinName, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ArmBuiltinAliasAttr *Create(ASTContext &Ctx, IdentifierInfo * BuiltinName, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsArmBuiltinAliasAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, IdentifierInfo * BuiltinName);ArmBuiltinAliasAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;IdentifierInfo * getBuiltinName() const {return builtinName;}static bool classof(const Attr *A) { return A->getKind() == attr::ArmBuiltinAlias; }};class ArmMveStrictPolymorphismAttr : public TypeAttr {public:enum Spelling {GNU_clang_arm_mve_strict_polymorphism = 0,CXX11_clang_clang_arm_mve_strict_polymorphism = 1,C2x_clang_clang_arm_mve_strict_polymorphism = 2,SpellingNotCalculated = 15};// Factory methodsstatic ArmMveStrictPolymorphismAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ArmMveStrictPolymorphismAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ArmMveStrictPolymorphismAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ArmMveStrictPolymorphismAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsArmMveStrictPolymorphismAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ArmMveStrictPolymorphismAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::ArmMveStrictPolymorphism; }};class ArtificialAttr : public InheritableAttr {public:enum Spelling {GNU_artificial = 0,CXX11_gnu_artificial = 1,C2x_gnu_artificial = 2,SpellingNotCalculated = 15};// Factory methodsstatic ArtificialAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ArtificialAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ArtificialAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ArtificialAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsArtificialAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ArtificialAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::Artificial; }};class AsmLabelAttr : public InheritableAttr {unsigned labelLength;char *label;bool isLiteralLabel;public:enum Spelling {Keyword_asm = 0,SpellingNotCalculated = 15};// Factory methodsstatic AsmLabelAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Label, bool IsLiteralLabel, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AsmLabelAttr *Create(ASTContext &Ctx, llvm::StringRef Label, bool IsLiteralLabel, const AttributeCommonInfo &CommonInfo);static AsmLabelAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Label, bool IsLiteralLabel, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AsmLabelAttr *Create(ASTContext &Ctx, llvm::StringRef Label, bool IsLiteralLabel, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AsmLabelAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Label, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AsmLabelAttr *Create(ASTContext &Ctx, llvm::StringRef Label, const AttributeCommonInfo &CommonInfo);static AsmLabelAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Label, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AsmLabelAttr *Create(ASTContext &Ctx, llvm::StringRef Label, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAsmLabelAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef Label, bool IsLiteralLabel);AsmLabelAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef Label);AsmLabelAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getLabel() const {return llvm::StringRef(label, labelLength);}unsigned getLabelLength() const {return labelLength;}void setLabel(ASTContext &C, llvm::StringRef S) {labelLength = S.size();this->label = new (C, 1) char [labelLength];if (!S.empty())std::memcpy(this->label, S.data(), labelLength);}bool getIsLiteralLabel() const {return isLiteralLabel;}bool isEquivalent(AsmLabelAttr *Other) const {return getLabel() == Other->getLabel() && getIsLiteralLabel() == Other->getIsLiteralLabel();}static bool classof(const Attr *A) { return A->getKind() == attr::AsmLabel; }};class AssertCapabilityAttr : public InheritableAttr {unsigned args_Size;Expr * *args_;public:enum Spelling {GNU_assert_capability = 0,CXX11_clang_assert_capability = 1,GNU_assert_shared_capability = 2,CXX11_clang_assert_shared_capability = 3,SpellingNotCalculated = 15};// Factory methodsstatic AssertCapabilityAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AssertCapabilityAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);static AssertCapabilityAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax, AssertCapabilityAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static AssertCapabilityAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax, AssertCapabilityAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsAssertCapabilityAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Expr * *Args, unsigned ArgsSize);AssertCapabilityAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);AssertCapabilityAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;bool isShared() const { return getAttributeSpellingListIndex() == 2 ||getAttributeSpellingListIndex() == 3; }typedef Expr ** args_iterator;args_iterator args_begin() const { return args_; }args_iterator args_end() const { return args_ + args_Size; }unsigned args_size() const { return args_Size; }llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); }static bool classof(const Attr *A) { return A->getKind() == attr::AssertCapability; }};class AssertExclusiveLockAttr : public InheritableAttr {unsigned args_Size;Expr * *args_;public:// Factory methodsstatic AssertExclusiveLockAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AssertExclusiveLockAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);static AssertExclusiveLockAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AssertExclusiveLockAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAssertExclusiveLockAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Expr * *Args, unsigned ArgsSize);AssertExclusiveLockAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);AssertExclusiveLockAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;typedef Expr ** args_iterator;args_iterator args_begin() const { return args_; }args_iterator args_end() const { return args_ + args_Size; }unsigned args_size() const { return args_Size; }llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); }static bool classof(const Attr *A) { return A->getKind() == attr::AssertExclusiveLock; }};class AssertSharedLockAttr : public InheritableAttr {unsigned args_Size;Expr * *args_;public:// Factory methodsstatic AssertSharedLockAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AssertSharedLockAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);static AssertSharedLockAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AssertSharedLockAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAssertSharedLockAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Expr * *Args, unsigned ArgsSize);AssertSharedLockAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);AssertSharedLockAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;typedef Expr ** args_iterator;args_iterator args_begin() const { return args_; }args_iterator args_end() const { return args_ + args_Size; }unsigned args_size() const { return args_Size; }llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); }static bool classof(const Attr *A) { return A->getKind() == attr::AssertSharedLock; }};class AssumeAlignedAttr : public InheritableAttr {Expr * alignment;Expr * offset;public:enum Spelling {GNU_assume_aligned = 0,CXX11_gnu_assume_aligned = 1,C2x_gnu_assume_aligned = 2,SpellingNotCalculated = 15};// Factory methodsstatic AssumeAlignedAttr *CreateImplicit(ASTContext &Ctx, Expr * Alignment, Expr * Offset, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AssumeAlignedAttr *Create(ASTContext &Ctx, Expr * Alignment, Expr * Offset, const AttributeCommonInfo &CommonInfo);static AssumeAlignedAttr *CreateImplicit(ASTContext &Ctx, Expr * Alignment, Expr * Offset, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AssumeAlignedAttr *Create(ASTContext &Ctx, Expr * Alignment, Expr * Offset, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAssumeAlignedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Expr * Alignment, Expr * Offset);AssumeAlignedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Expr * Alignment);AssumeAlignedAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Expr * getAlignment() const {return alignment;}Expr * getOffset() const {return offset;}static bool classof(const Attr *A) { return A->getKind() == attr::AssumeAligned; }};class AssumptionAttr : public InheritableAttr {unsigned assumptionLength;char *assumption;public:enum Spelling {GNU_assume = 0,CXX11_clang_assume = 1,C2x_clang_assume = 2,SpellingNotCalculated = 15};// Factory methodsstatic AssumptionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Assumption, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AssumptionAttr *Create(ASTContext &Ctx, llvm::StringRef Assumption, const AttributeCommonInfo &CommonInfo);static AssumptionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Assumption, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AssumptionAttr *Create(ASTContext &Ctx, llvm::StringRef Assumption, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAssumptionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef Assumption);AssumptionAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getAssumption() const {return llvm::StringRef(assumption, assumptionLength);}unsigned getAssumptionLength() const {return assumptionLength;}void setAssumption(ASTContext &C, llvm::StringRef S) {assumptionLength = S.size();this->assumption = new (C, 1) char [assumptionLength];if (!S.empty())std::memcpy(this->assumption, S.data(), assumptionLength);}static bool classof(const Attr *A) { return A->getKind() == attr::Assumption; }};class AvailabilityAttr : public InheritableAttr {IdentifierInfo * platform;VersionTuple introduced;VersionTuple deprecated;VersionTuple obsoleted;bool unavailable;unsigned messageLength;char *message;bool strict;unsigned replacementLength;char *replacement;int priority;public:enum Spelling {GNU_availability = 0,CXX11_clang_availability = 1,C2x_clang_availability = 2,SpellingNotCalculated = 15};// Factory methodsstatic AvailabilityAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * Platform, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted, bool Unavailable, llvm::StringRef Message, bool Strict, llvm::StringRef Replacement, int Priority, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static AvailabilityAttr *Create(ASTContext &Ctx, IdentifierInfo * Platform, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted, bool Unavailable, llvm::StringRef Message, bool Strict, llvm::StringRef Replacement, int Priority, const AttributeCommonInfo &CommonInfo);static AvailabilityAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * Platform, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted, bool Unavailable, llvm::StringRef Message, bool Strict, llvm::StringRef Replacement, int Priority, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static AvailabilityAttr *Create(ASTContext &Ctx, IdentifierInfo * Platform, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted, bool Unavailable, llvm::StringRef Message, bool Strict, llvm::StringRef Replacement, int Priority, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsAvailabilityAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, IdentifierInfo * Platform, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted, bool Unavailable, llvm::StringRef Message, bool Strict, llvm::StringRef Replacement, int Priority);AvailabilityAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;IdentifierInfo * getPlatform() const {return platform;}VersionTuple getIntroduced() const {return introduced;}void setIntroduced(ASTContext &C, VersionTuple V) {introduced = V;}VersionTuple getDeprecated() const {return deprecated;}void setDeprecated(ASTContext &C, VersionTuple V) {deprecated = V;}VersionTuple getObsoleted() const {return obsoleted;}void setObsoleted(ASTContext &C, VersionTuple V) {obsoleted = V;}bool getUnavailable() const {return unavailable;}llvm::StringRef getMessage() const {return llvm::StringRef(message, messageLength);}unsigned getMessageLength() const {return messageLength;}void setMessage(ASTContext &C, llvm::StringRef S) {messageLength = S.size();this->message = new (C, 1) char [messageLength];if (!S.empty())std::memcpy(this->message, S.data(), messageLength);}bool getStrict() const {return strict;}llvm::StringRef getReplacement() const {return llvm::StringRef(replacement, replacementLength);}unsigned getReplacementLength() const {return replacementLength;}void setReplacement(ASTContext &C, llvm::StringRef S) {replacementLength = S.size();this->replacement = new (C, 1) char [replacementLength];if (!S.empty())std::memcpy(this->replacement, S.data(), replacementLength);}int getPriority() const {return priority;}static llvm::StringRef getPrettyPlatformName(llvm::StringRef Platform) {return llvm::StringSwitch<llvm::StringRef>(Platform).Case("android", "Android").Case("fuchsia", "Fuchsia").Case("ios", "iOS").Case("macos", "macOS").Case("tvos", "tvOS").Case("watchos", "watchOS").Case("driverkit", "DriverKit").Case("ios_app_extension", "iOS (App Extension)").Case("macos_app_extension", "macOS (App Extension)").Case("tvos_app_extension", "tvOS (App Extension)").Case("watchos_app_extension", "watchOS (App Extension)").Case("maccatalyst", "macCatalyst").Case("maccatalyst_app_extension", "macCatalyst (App Extension)").Case("swift", "Swift").Case("shadermodel", "HLSL ShaderModel").Default(llvm::StringRef());}static llvm::StringRef getPlatformNameSourceSpelling(llvm::StringRef Platform) {return llvm::StringSwitch<llvm::StringRef>(Platform).Case("ios", "iOS").Case("macos", "macOS").Case("tvos", "tvOS").Case("watchos", "watchOS").Case("ios_app_extension", "iOSApplicationExtension").Case("macos_app_extension", "macOSApplicationExtension").Case("tvos_app_extension", "tvOSApplicationExtension").Case("watchos_app_extension", "watchOSApplicationExtension").Case("maccatalyst", "macCatalyst").Case("maccatalyst_app_extension", "macCatalystApplicationExtension").Case("zos", "z/OS").Case("shadermodel", "ShaderModel").Default(Platform);}static llvm::StringRef canonicalizePlatformName(llvm::StringRef Platform) {return llvm::StringSwitch<llvm::StringRef>(Platform).Case("iOS", "ios").Case("macOS", "macos").Case("tvOS", "tvos").Case("watchOS", "watchos").Case("iOSApplicationExtension", "ios_app_extension").Case("macOSApplicationExtension", "macos_app_extension").Case("tvOSApplicationExtension", "tvos_app_extension").Case("watchOSApplicationExtension", "watchos_app_extension").Case("macCatalyst", "maccatalyst").Case("macCatalystApplicationExtension", "maccatalyst_app_extension").Case("ShaderModel", "shadermodel").Default(Platform);}static bool classof(const Attr *A) { return A->getKind() == attr::Availability; }};class BPFPreserveAccessIndexAttr : public InheritableAttr {public:enum Spelling {GNU_preserve_access_index = 0,CXX11_clang_preserve_access_index = 1,C2x_clang_preserve_access_index = 2,SpellingNotCalculated = 15};// Factory methodsstatic BPFPreserveAccessIndexAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static BPFPreserveAccessIndexAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static BPFPreserveAccessIndexAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static BPFPreserveAccessIndexAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsBPFPreserveAccessIndexAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);BPFPreserveAccessIndexAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::BPFPreserveAccessIndex; }};class BTFDeclTagAttr : public InheritableAttr {unsigned bTFDeclTagLength;char *bTFDeclTag;public:enum Spelling {GNU_btf_decl_tag = 0,CXX11_clang_btf_decl_tag = 1,C2x_clang_btf_decl_tag = 2,SpellingNotCalculated = 15};// Factory methodsstatic BTFDeclTagAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef BTFDeclTag, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static BTFDeclTagAttr *Create(ASTContext &Ctx, llvm::StringRef BTFDeclTag, const AttributeCommonInfo &CommonInfo);static BTFDeclTagAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef BTFDeclTag, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static BTFDeclTagAttr *Create(ASTContext &Ctx, llvm::StringRef BTFDeclTag, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsBTFDeclTagAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef BTFDeclTag);BTFDeclTagAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getBTFDeclTag() const {return llvm::StringRef(bTFDeclTag, bTFDeclTagLength);}unsigned getBTFDeclTagLength() const {return bTFDeclTagLength;}void setBTFDeclTag(ASTContext &C, llvm::StringRef S) {bTFDeclTagLength = S.size();this->bTFDeclTag = new (C, 1) char [bTFDeclTagLength];if (!S.empty())std::memcpy(this->bTFDeclTag, S.data(), bTFDeclTagLength);}static bool classof(const Attr *A) { return A->getKind() == attr::BTFDeclTag; }};class BTFTypeTagAttr : public TypeAttr {unsigned bTFTypeTagLength;char *bTFTypeTag;public:enum Spelling {GNU_btf_type_tag = 0,CXX11_clang_btf_type_tag = 1,C2x_clang_btf_type_tag = 2,SpellingNotCalculated = 15};// Factory methodsstatic BTFTypeTagAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef BTFTypeTag, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static BTFTypeTagAttr *Create(ASTContext &Ctx, llvm::StringRef BTFTypeTag, const AttributeCommonInfo &CommonInfo);static BTFTypeTagAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef BTFTypeTag, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static BTFTypeTagAttr *Create(ASTContext &Ctx, llvm::StringRef BTFTypeTag, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsBTFTypeTagAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef BTFTypeTag);BTFTypeTagAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getBTFTypeTag() const {return llvm::StringRef(bTFTypeTag, bTFTypeTagLength);}unsigned getBTFTypeTagLength() const {return bTFTypeTagLength;}void setBTFTypeTag(ASTContext &C, llvm::StringRef S) {bTFTypeTagLength = S.size();this->bTFTypeTag = new (C, 1) char [bTFTypeTagLength];if (!S.empty())std::memcpy(this->bTFTypeTag, S.data(), bTFTypeTagLength);}static bool classof(const Attr *A) { return A->getKind() == attr::BTFTypeTag; }};class BlocksAttr : public InheritableAttr {public:enum BlockType {ByRef};private:BlockType type;public:enum Spelling {GNU_blocks = 0,CXX11_clang_blocks = 1,C2x_clang_blocks = 2,SpellingNotCalculated = 15};// Factory methodsstatic BlocksAttr *CreateImplicit(ASTContext &Ctx, BlockType Type, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static BlocksAttr *Create(ASTContext &Ctx, BlockType Type, const AttributeCommonInfo &CommonInfo);static BlocksAttr *CreateImplicit(ASTContext &Ctx, BlockType Type, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static BlocksAttr *Create(ASTContext &Ctx, BlockType Type, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsBlocksAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, BlockType Type);BlocksAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;BlockType getType() const {return type;}static bool ConvertStrToBlockType(StringRef Val, BlockType &Out);static const char *ConvertBlockTypeToStr(BlockType Val);static bool classof(const Attr *A) { return A->getKind() == attr::Blocks; }};class BuiltinAttr : public InheritableAttr {unsigned iD;public:// Factory methodsstatic BuiltinAttr *CreateImplicit(ASTContext &Ctx, unsigned ID, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static BuiltinAttr *Create(ASTContext &Ctx, unsigned ID, const AttributeCommonInfo &CommonInfo);static BuiltinAttr *CreateImplicit(ASTContext &Ctx, unsigned ID, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static BuiltinAttr *Create(ASTContext &Ctx, unsigned ID, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsBuiltinAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, unsigned ID);BuiltinAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;unsigned getID() const {return iD;}static bool classof(const Attr *A) { return A->getKind() == attr::Builtin; }};class BuiltinAliasAttr : public Attr {IdentifierInfo * builtinName;public:enum Spelling {CXX11_clang_builtin_alias = 0,C2x_clang_builtin_alias = 1,GNU_clang_builtin_alias = 2,SpellingNotCalculated = 15};// Factory methodsstatic BuiltinAliasAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * BuiltinName, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static BuiltinAliasAttr *Create(ASTContext &Ctx, IdentifierInfo * BuiltinName, const AttributeCommonInfo &CommonInfo);static BuiltinAliasAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * BuiltinName, SourceRange Range, AttributeCommonInfo::Syntax Syntax, BuiltinAliasAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static BuiltinAliasAttr *Create(ASTContext &Ctx, IdentifierInfo * BuiltinName, SourceRange Range, AttributeCommonInfo::Syntax Syntax, BuiltinAliasAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsBuiltinAliasAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, IdentifierInfo * BuiltinName);BuiltinAliasAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;IdentifierInfo * getBuiltinName() const {return builtinName;}static bool classof(const Attr *A) { return A->getKind() == attr::BuiltinAlias; }};class C11NoReturnAttr : public InheritableAttr {public:// Factory methodsstatic C11NoReturnAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static C11NoReturnAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static C11NoReturnAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static C11NoReturnAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsC11NoReturnAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);C11NoReturnAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::C11NoReturn; }};class CDeclAttr : public InheritableAttr {public:enum Spelling {GNU_cdecl = 0,CXX11_gnu_cdecl = 1,C2x_gnu_cdecl = 2,Keyword_cdecl = 3,SpellingNotCalculated = 15};// Factory methodsstatic CDeclAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static CDeclAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static CDeclAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static CDeclAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsCDeclAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);CDeclAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::CDecl; }};class CFAuditedTransferAttr : public InheritableAttr {public:enum Spelling {GNU_cf_audited_transfer = 0,CXX11_clang_cf_audited_transfer = 1,C2x_clang_cf_audited_transfer = 2,SpellingNotCalculated = 15};// Factory methodsstatic CFAuditedTransferAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static CFAuditedTransferAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static CFAuditedTransferAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static CFAuditedTransferAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsCFAuditedTransferAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);CFAuditedTransferAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::CFAuditedTransfer; }};class CFConsumedAttr : public InheritableParamAttr {public:enum Spelling {GNU_cf_consumed = 0,CXX11_clang_cf_consumed = 1,C2x_clang_cf_consumed = 2,SpellingNotCalculated = 15};// Factory methodsstatic CFConsumedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static CFConsumedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static CFConsumedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static CFConsumedAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsCFConsumedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);CFConsumedAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::CFConsumed; }};class CFGuardAttr : public InheritableAttr {public:enum GuardArg {nocf};private:GuardArg guard;public:enum Spelling {Declspec_guard = 0,GNU_guard = 1,CXX11_clang_guard = 2,C2x_clang_guard = 3,SpellingNotCalculated = 15};// Factory methodsstatic CFGuardAttr *CreateImplicit(ASTContext &Ctx, GuardArg Guard, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static CFGuardAttr *Create(ASTContext &Ctx, GuardArg Guard, const AttributeCommonInfo &CommonInfo);static CFGuardAttr *CreateImplicit(ASTContext &Ctx, GuardArg Guard, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static CFGuardAttr *Create(ASTContext &Ctx, GuardArg Guard, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsCFGuardAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, GuardArg Guard);CFGuardAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;GuardArg getGuard() const {return guard;}static bool ConvertStrToGuardArg(StringRef Val, GuardArg &Out);static const char *ConvertGuardArgToStr(GuardArg Val);static bool classof(const Attr *A) { return A->getKind() == attr::CFGuard; }};class CFICanonicalJumpTableAttr : public InheritableAttr {public:enum Spelling {GNU_cfi_canonical_jump_table = 0,CXX11_clang_cfi_canonical_jump_table = 1,C2x_clang_cfi_canonical_jump_table = 2,SpellingNotCalculated = 15};// Factory methodsstatic CFICanonicalJumpTableAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static CFICanonicalJumpTableAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static CFICanonicalJumpTableAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static CFICanonicalJumpTableAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsCFICanonicalJumpTableAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);CFICanonicalJumpTableAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::CFICanonicalJumpTable; }};class CFReturnsNotRetainedAttr : public InheritableAttr {public:enum Spelling {GNU_cf_returns_not_retained = 0,CXX11_clang_cf_returns_not_retained = 1,C2x_clang_cf_returns_not_retained = 2,SpellingNotCalculated = 15};// Factory methodsstatic CFReturnsNotRetainedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static CFReturnsNotRetainedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static CFReturnsNotRetainedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static CFReturnsNotRetainedAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsCFReturnsNotRetainedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);CFReturnsNotRetainedAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::CFReturnsNotRetained; }};class CFReturnsRetainedAttr : public InheritableAttr {public:enum Spelling {GNU_cf_returns_retained = 0,CXX11_clang_cf_returns_retained = 1,C2x_clang_cf_returns_retained = 2,SpellingNotCalculated = 15};// Factory methodsstatic CFReturnsRetainedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static CFReturnsRetainedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static CFReturnsRetainedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static CFReturnsRetainedAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsCFReturnsRetainedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);CFReturnsRetainedAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::CFReturnsRetained; }};class CFUnknownTransferAttr : public InheritableAttr {public:enum Spelling {GNU_cf_unknown_transfer = 0,CXX11_clang_cf_unknown_transfer = 1,C2x_clang_cf_unknown_transfer = 2,SpellingNotCalculated = 15};// Factory methodsstatic CFUnknownTransferAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static CFUnknownTransferAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static CFUnknownTransferAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static CFUnknownTransferAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsCFUnknownTransferAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);CFUnknownTransferAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::CFUnknownTransfer; }};class CPUDispatchAttr : public InheritableAttr {unsigned cpus_Size;IdentifierInfo * *cpus_;public:enum Spelling {GNU_cpu_dispatch = 0,CXX11_clang_cpu_dispatch = 1,C2x_clang_cpu_dispatch = 2,Declspec_cpu_dispatch = 3,SpellingNotCalculated = 15};// Factory methodsstatic CPUDispatchAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * *Cpus, unsigned CpusSize, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static CPUDispatchAttr *Create(ASTContext &Ctx, IdentifierInfo * *Cpus, unsigned CpusSize, const AttributeCommonInfo &CommonInfo);static CPUDispatchAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * *Cpus, unsigned CpusSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static CPUDispatchAttr *Create(ASTContext &Ctx, IdentifierInfo * *Cpus, unsigned CpusSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsCPUDispatchAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, IdentifierInfo * *Cpus, unsigned CpusSize);CPUDispatchAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);CPUDispatchAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;typedef IdentifierInfo ** cpus_iterator;cpus_iterator cpus_begin() const { return cpus_; }cpus_iterator cpus_end() const { return cpus_ + cpus_Size; }unsigned cpus_size() const { return cpus_Size; }llvm::iterator_range<cpus_iterator> cpus() const { return llvm::make_range(cpus_begin(), cpus_end()); }static bool classof(const Attr *A) { return A->getKind() == attr::CPUDispatch; }};class CPUSpecificAttr : public InheritableAttr {unsigned cpus_Size;IdentifierInfo * *cpus_;public:enum Spelling {GNU_cpu_specific = 0,CXX11_clang_cpu_specific = 1,C2x_clang_cpu_specific = 2,Declspec_cpu_specific = 3,SpellingNotCalculated = 15};// Factory methodsstatic CPUSpecificAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * *Cpus, unsigned CpusSize, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static CPUSpecificAttr *Create(ASTContext &Ctx, IdentifierInfo * *Cpus, unsigned CpusSize, const AttributeCommonInfo &CommonInfo);static CPUSpecificAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * *Cpus, unsigned CpusSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static CPUSpecificAttr *Create(ASTContext &Ctx, IdentifierInfo * *Cpus, unsigned CpusSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsCPUSpecificAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, IdentifierInfo * *Cpus, unsigned CpusSize);CPUSpecificAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);CPUSpecificAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;typedef IdentifierInfo ** cpus_iterator;cpus_iterator cpus_begin() const { return cpus_; }cpus_iterator cpus_end() const { return cpus_ + cpus_Size; }unsigned cpus_size() const { return cpus_Size; }llvm::iterator_range<cpus_iterator> cpus() const { return llvm::make_range(cpus_begin(), cpus_end()); }IdentifierInfo *getCPUName(unsigned Index) const {return *(cpus_begin() + Index);}static bool classof(const Attr *A) { return A->getKind() == attr::CPUSpecific; }};class CUDAConstantAttr : public InheritableAttr {public:enum Spelling {GNU_constant = 0,Declspec_constant = 1,SpellingNotCalculated = 15};// Factory methodsstatic CUDAConstantAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static CUDAConstantAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static CUDAConstantAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static CUDAConstantAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsCUDAConstantAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);CUDAConstantAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::CUDAConstant; }};class CUDADeviceAttr : public InheritableAttr {public:enum Spelling {GNU_device = 0,Declspec_device = 1,SpellingNotCalculated = 15};// Factory methodsstatic CUDADeviceAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static CUDADeviceAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static CUDADeviceAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static CUDADeviceAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsCUDADeviceAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);CUDADeviceAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::CUDADevice; }};class CUDADeviceBuiltinSurfaceTypeAttr : public InheritableAttr {public:enum Spelling {GNU_device_builtin_surface_type = 0,Declspec_device_builtin_surface_type = 1,SpellingNotCalculated = 15};// Factory methodsstatic CUDADeviceBuiltinSurfaceTypeAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static CUDADeviceBuiltinSurfaceTypeAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static CUDADeviceBuiltinSurfaceTypeAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static CUDADeviceBuiltinSurfaceTypeAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsCUDADeviceBuiltinSurfaceTypeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);CUDADeviceBuiltinSurfaceTypeAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::CUDADeviceBuiltinSurfaceType; }};class CUDADeviceBuiltinTextureTypeAttr : public InheritableAttr {public:enum Spelling {GNU_device_builtin_texture_type = 0,Declspec_device_builtin_texture_type = 1,SpellingNotCalculated = 15};// Factory methodsstatic CUDADeviceBuiltinTextureTypeAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static CUDADeviceBuiltinTextureTypeAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static CUDADeviceBuiltinTextureTypeAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static CUDADeviceBuiltinTextureTypeAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsCUDADeviceBuiltinTextureTypeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);CUDADeviceBuiltinTextureTypeAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::CUDADeviceBuiltinTextureType; }};class CUDAGlobalAttr : public InheritableAttr {public:enum Spelling {GNU_global = 0,Declspec_global = 1,SpellingNotCalculated = 15};// Factory methodsstatic CUDAGlobalAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static CUDAGlobalAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static CUDAGlobalAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static CUDAGlobalAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsCUDAGlobalAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);CUDAGlobalAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::CUDAGlobal; }};class CUDAHostAttr : public InheritableAttr {public:enum Spelling {GNU_host = 0,Declspec_host = 1,SpellingNotCalculated = 15};// Factory methodsstatic CUDAHostAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static CUDAHostAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static CUDAHostAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static CUDAHostAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsCUDAHostAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);CUDAHostAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::CUDAHost; }};class CUDAInvalidTargetAttr : public InheritableAttr {public:// Factory methodsstatic CUDAInvalidTargetAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static CUDAInvalidTargetAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static CUDAInvalidTargetAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static CUDAInvalidTargetAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsCUDAInvalidTargetAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);CUDAInvalidTargetAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::CUDAInvalidTarget; }};class CUDALaunchBoundsAttr : public InheritableAttr {Expr * maxThreads;Expr * minBlocks;public:enum Spelling {GNU_launch_bounds = 0,Declspec_launch_bounds = 1,SpellingNotCalculated = 15};// Factory methodsstatic CUDALaunchBoundsAttr *CreateImplicit(ASTContext &Ctx, Expr * MaxThreads, Expr * MinBlocks, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static CUDALaunchBoundsAttr *Create(ASTContext &Ctx, Expr * MaxThreads, Expr * MinBlocks, const AttributeCommonInfo &CommonInfo);static CUDALaunchBoundsAttr *CreateImplicit(ASTContext &Ctx, Expr * MaxThreads, Expr * MinBlocks, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static CUDALaunchBoundsAttr *Create(ASTContext &Ctx, Expr * MaxThreads, Expr * MinBlocks, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsCUDALaunchBoundsAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Expr * MaxThreads, Expr * MinBlocks);CUDALaunchBoundsAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Expr * MaxThreads);CUDALaunchBoundsAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Expr * getMaxThreads() const {return maxThreads;}Expr * getMinBlocks() const {return minBlocks;}static bool classof(const Attr *A) { return A->getKind() == attr::CUDALaunchBounds; }};class CUDASharedAttr : public InheritableAttr {public:enum Spelling {GNU_shared = 0,Declspec_shared = 1,SpellingNotCalculated = 15};// Factory methodsstatic CUDASharedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static CUDASharedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static CUDASharedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static CUDASharedAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsCUDASharedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);CUDASharedAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::CUDAShared; }};class CXX11NoReturnAttr : public InheritableAttr {public:enum Spelling {CXX11_noreturn = 0,C2x_noreturn = 1,C2x_Noreturn = 2,SpellingNotCalculated = 15};// Factory methodsstatic CXX11NoReturnAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static CXX11NoReturnAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static CXX11NoReturnAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, CXX11NoReturnAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static CXX11NoReturnAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, CXX11NoReturnAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsCXX11NoReturnAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);CXX11NoReturnAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::CXX11NoReturn; }};class CallableWhenAttr : public InheritableAttr {public:enum ConsumedState {Unknown,Consumed,Unconsumed};private:unsigned callableStates_Size;ConsumedState *callableStates_;public:enum Spelling {GNU_callable_when = 0,CXX11_clang_callable_when = 1,SpellingNotCalculated = 15};// Factory methodsstatic CallableWhenAttr *CreateImplicit(ASTContext &Ctx, ConsumedState *CallableStates, unsigned CallableStatesSize, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static CallableWhenAttr *Create(ASTContext &Ctx, ConsumedState *CallableStates, unsigned CallableStatesSize, const AttributeCommonInfo &CommonInfo);static CallableWhenAttr *CreateImplicit(ASTContext &Ctx, ConsumedState *CallableStates, unsigned CallableStatesSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static CallableWhenAttr *Create(ASTContext &Ctx, ConsumedState *CallableStates, unsigned CallableStatesSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsCallableWhenAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, ConsumedState *CallableStates, unsigned CallableStatesSize);CallableWhenAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);CallableWhenAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;typedef ConsumedState* callableStates_iterator;callableStates_iterator callableStates_begin() const { return callableStates_; }callableStates_iterator callableStates_end() const { return callableStates_ + callableStates_Size; }unsigned callableStates_size() const { return callableStates_Size; }llvm::iterator_range<callableStates_iterator> callableStates() const { return llvm::make_range(callableStates_begin(), callableStates_end()); }static bool ConvertStrToConsumedState(StringRef Val, ConsumedState &Out);static const char *ConvertConsumedStateToStr(ConsumedState Val);static bool classof(const Attr *A) { return A->getKind() == attr::CallableWhen; }};class CallbackAttr : public InheritableAttr {unsigned encoding_Size;int *encoding_;public:enum Spelling {GNU_callback = 0,CXX11_clang_callback = 1,C2x_clang_callback = 2,SpellingNotCalculated = 15};// Factory methodsstatic CallbackAttr *CreateImplicit(ASTContext &Ctx, int *Encoding, unsigned EncodingSize, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static CallbackAttr *Create(ASTContext &Ctx, int *Encoding, unsigned EncodingSize, const AttributeCommonInfo &CommonInfo);static CallbackAttr *CreateImplicit(ASTContext &Ctx, int *Encoding, unsigned EncodingSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static CallbackAttr *Create(ASTContext &Ctx, int *Encoding, unsigned EncodingSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsCallbackAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, int *Encoding, unsigned EncodingSize);CallbackAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);CallbackAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;typedef int* encoding_iterator;encoding_iterator encoding_begin() const { return encoding_; }encoding_iterator encoding_end() const { return encoding_ + encoding_Size; }unsigned encoding_size() const { return encoding_Size; }llvm::iterator_range<encoding_iterator> encoding() const { return llvm::make_range(encoding_begin(), encoding_end()); }static bool classof(const Attr *A) { return A->getKind() == attr::Callback; }};class CalledOnceAttr : public Attr {public:enum Spelling {GNU_called_once = 0,CXX11_clang_called_once = 1,C2x_clang_called_once = 2,SpellingNotCalculated = 15};// Factory methodsstatic CalledOnceAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static CalledOnceAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static CalledOnceAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static CalledOnceAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsCalledOnceAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);CalledOnceAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::CalledOnce; }};class CapabilityAttr : public InheritableAttr {unsigned nameLength;char *name;public:enum Spelling {GNU_capability = 0,CXX11_clang_capability = 1,GNU_shared_capability = 2,CXX11_clang_shared_capability = 3,SpellingNotCalculated = 15};// Factory methodsstatic CapabilityAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static CapabilityAttr *Create(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo);static CapabilityAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range, AttributeCommonInfo::Syntax Syntax, CapabilityAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static CapabilityAttr *Create(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range, AttributeCommonInfo::Syntax Syntax, CapabilityAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsCapabilityAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef Name);CapabilityAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;bool isShared() const { return getAttributeSpellingListIndex() == 2 ||getAttributeSpellingListIndex() == 3; }llvm::StringRef getName() const {return llvm::StringRef(name, nameLength);}unsigned getNameLength() const {return nameLength;}void setName(ASTContext &C, llvm::StringRef S) {nameLength = S.size();this->name = new (C, 1) char [nameLength];if (!S.empty())std::memcpy(this->name, S.data(), nameLength);}static bool classof(const Attr *A) { return A->getKind() == attr::Capability; }};class CapturedRecordAttr : public InheritableAttr {public:// Factory methodsstatic CapturedRecordAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static CapturedRecordAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static CapturedRecordAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static CapturedRecordAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsCapturedRecordAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);CapturedRecordAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::CapturedRecord; }};class CarriesDependencyAttr : public InheritableParamAttr {public:enum Spelling {GNU_carries_dependency = 0,CXX11_carries_dependency = 1,SpellingNotCalculated = 15};// Factory methodsstatic CarriesDependencyAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static CarriesDependencyAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static CarriesDependencyAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static CarriesDependencyAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsCarriesDependencyAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);CarriesDependencyAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::CarriesDependency; }};class CleanupAttr : public InheritableAttr {FunctionDecl * functionDecl;public:enum Spelling {GNU_cleanup = 0,CXX11_gnu_cleanup = 1,C2x_gnu_cleanup = 2,SpellingNotCalculated = 15};// Factory methodsstatic CleanupAttr *CreateImplicit(ASTContext &Ctx, FunctionDecl * FunctionDecl, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static CleanupAttr *Create(ASTContext &Ctx, FunctionDecl * FunctionDecl, const AttributeCommonInfo &CommonInfo);static CleanupAttr *CreateImplicit(ASTContext &Ctx, FunctionDecl * FunctionDecl, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static CleanupAttr *Create(ASTContext &Ctx, FunctionDecl * FunctionDecl, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsCleanupAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, FunctionDecl * FunctionDecl);CleanupAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;FunctionDecl * getFunctionDecl() const {return functionDecl;}static bool classof(const Attr *A) { return A->getKind() == attr::Cleanup; }};class CmseNSCallAttr : public TypeAttr {public:// Factory methodsstatic CmseNSCallAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static CmseNSCallAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static CmseNSCallAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static CmseNSCallAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsCmseNSCallAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);CmseNSCallAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::CmseNSCall; }};class CmseNSEntryAttr : public InheritableAttr {public:// Factory methodsstatic CmseNSEntryAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static CmseNSEntryAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static CmseNSEntryAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static CmseNSEntryAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsCmseNSEntryAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);CmseNSEntryAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::CmseNSEntry; }};class CodeSegAttr : public InheritableAttr {unsigned nameLength;char *name;public:// Factory methodsstatic CodeSegAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static CodeSegAttr *Create(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo);static CodeSegAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static CodeSegAttr *Create(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsCodeSegAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef Name);CodeSegAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getName() const {return llvm::StringRef(name, nameLength);}unsigned getNameLength() const {return nameLength;}void setName(ASTContext &C, llvm::StringRef S) {nameLength = S.size();this->name = new (C, 1) char [nameLength];if (!S.empty())std::memcpy(this->name, S.data(), nameLength);}static bool classof(const Attr *A) { return A->getKind() == attr::CodeSeg; }};class ColdAttr : public InheritableAttr {public:enum Spelling {GNU_cold = 0,CXX11_gnu_cold = 1,C2x_gnu_cold = 2,SpellingNotCalculated = 15};// Factory methodsstatic ColdAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ColdAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ColdAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ColdAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsColdAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ColdAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::Cold; }};class CommonAttr : public InheritableAttr {public:enum Spelling {GNU_common = 0,CXX11_gnu_common = 1,C2x_gnu_common = 2,SpellingNotCalculated = 15};// Factory methodsstatic CommonAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static CommonAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static CommonAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static CommonAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsCommonAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);CommonAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::Common; }};class ConstAttr : public InheritableAttr {public:enum Spelling {GNU_const = 0,CXX11_gnu_const = 1,C2x_gnu_const = 2,SpellingNotCalculated = 15};// Factory methodsstatic ConstAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ConstAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ConstAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ConstAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsConstAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ConstAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::Const; }};class ConstInitAttr : public InheritableAttr {public:enum Spelling {Keyword_constinit = 0,GNU_require_constant_initialization = 1,CXX11_clang_require_constant_initialization = 2,SpellingNotCalculated = 15};// Factory methodsstatic ConstInitAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ConstInitAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ConstInitAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, ConstInitAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static ConstInitAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, ConstInitAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsConstInitAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ConstInitAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;bool isConstinit() const { return getAttributeSpellingListIndex() == 0; }static bool classof(const Attr *A) { return A->getKind() == attr::ConstInit; }};class ConstructorAttr : public InheritableAttr {int priority;public:enum Spelling {GNU_constructor = 0,CXX11_gnu_constructor = 1,C2x_gnu_constructor = 2,SpellingNotCalculated = 15};// Factory methodsstatic ConstructorAttr *CreateImplicit(ASTContext &Ctx, int Priority, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ConstructorAttr *Create(ASTContext &Ctx, int Priority, const AttributeCommonInfo &CommonInfo);static ConstructorAttr *CreateImplicit(ASTContext &Ctx, int Priority, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ConstructorAttr *Create(ASTContext &Ctx, int Priority, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsConstructorAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, int Priority);ConstructorAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ConstructorAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;int getPriority() const {return priority;}static const int DefaultPriority = 65535;static bool classof(const Attr *A) { return A->getKind() == attr::Constructor; }};class ConsumableAttr : public InheritableAttr {public:enum ConsumedState {Unknown,Consumed,Unconsumed};private:ConsumedState defaultState;public:enum Spelling {GNU_consumable = 0,CXX11_clang_consumable = 1,SpellingNotCalculated = 15};// Factory methodsstatic ConsumableAttr *CreateImplicit(ASTContext &Ctx, ConsumedState DefaultState, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ConsumableAttr *Create(ASTContext &Ctx, ConsumedState DefaultState, const AttributeCommonInfo &CommonInfo);static ConsumableAttr *CreateImplicit(ASTContext &Ctx, ConsumedState DefaultState, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ConsumableAttr *Create(ASTContext &Ctx, ConsumedState DefaultState, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsConsumableAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, ConsumedState DefaultState);ConsumableAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;ConsumedState getDefaultState() const {return defaultState;}static bool ConvertStrToConsumedState(StringRef Val, ConsumedState &Out);static const char *ConvertConsumedStateToStr(ConsumedState Val);static bool classof(const Attr *A) { return A->getKind() == attr::Consumable; }};class ConsumableAutoCastAttr : public InheritableAttr {public:enum Spelling {GNU_consumable_auto_cast_state = 0,CXX11_clang_consumable_auto_cast_state = 1,SpellingNotCalculated = 15};// Factory methodsstatic ConsumableAutoCastAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ConsumableAutoCastAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ConsumableAutoCastAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ConsumableAutoCastAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsConsumableAutoCastAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ConsumableAutoCastAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::ConsumableAutoCast; }};class ConsumableSetOnReadAttr : public InheritableAttr {public:enum Spelling {GNU_consumable_set_state_on_read = 0,CXX11_clang_consumable_set_state_on_read = 1,SpellingNotCalculated = 15};// Factory methodsstatic ConsumableSetOnReadAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ConsumableSetOnReadAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ConsumableSetOnReadAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ConsumableSetOnReadAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsConsumableSetOnReadAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ConsumableSetOnReadAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::ConsumableSetOnRead; }};class ConvergentAttr : public InheritableAttr {public:enum Spelling {GNU_convergent = 0,CXX11_clang_convergent = 1,C2x_clang_convergent = 2,SpellingNotCalculated = 15};// Factory methodsstatic ConvergentAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ConvergentAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ConvergentAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ConvergentAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsConvergentAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ConvergentAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::Convergent; }};class DLLExportAttr : public InheritableAttr {public:enum Spelling {Declspec_dllexport = 0,GNU_dllexport = 1,CXX11_gnu_dllexport = 2,C2x_gnu_dllexport = 3,SpellingNotCalculated = 15};// Factory methodsstatic DLLExportAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static DLLExportAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static DLLExportAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static DLLExportAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsDLLExportAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);DLLExportAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::DLLExport; }};class DLLExportStaticLocalAttr : public InheritableAttr {public:// Factory methodsstatic DLLExportStaticLocalAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static DLLExportStaticLocalAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static DLLExportStaticLocalAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static DLLExportStaticLocalAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsDLLExportStaticLocalAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);DLLExportStaticLocalAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::DLLExportStaticLocal; }};class DLLImportAttr : public InheritableAttr {public:enum Spelling {Declspec_dllimport = 0,GNU_dllimport = 1,CXX11_gnu_dllimport = 2,C2x_gnu_dllimport = 3,SpellingNotCalculated = 15};// Factory methodsstatic DLLImportAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static DLLImportAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static DLLImportAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static DLLImportAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsDLLImportAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);DLLImportAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;private:bool PropagatedToBaseTemplate = false;public:void setPropagatedToBaseTemplate() { PropagatedToBaseTemplate = true; }bool wasPropagatedToBaseTemplate() { return PropagatedToBaseTemplate; }static bool classof(const Attr *A) { return A->getKind() == attr::DLLImport; }};class DLLImportStaticLocalAttr : public InheritableAttr {public:// Factory methodsstatic DLLImportStaticLocalAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static DLLImportStaticLocalAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static DLLImportStaticLocalAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static DLLImportStaticLocalAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsDLLImportStaticLocalAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);DLLImportStaticLocalAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::DLLImportStaticLocal; }};class DeprecatedAttr : public InheritableAttr {unsigned messageLength;char *message;unsigned replacementLength;char *replacement;public:enum Spelling {GNU_deprecated = 0,CXX11_gnu_deprecated = 1,C2x_gnu_deprecated = 2,Declspec_deprecated = 3,CXX11_deprecated = 4,C2x_deprecated = 5,SpellingNotCalculated = 15};// Factory methodsstatic DeprecatedAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Message, llvm::StringRef Replacement, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static DeprecatedAttr *Create(ASTContext &Ctx, llvm::StringRef Message, llvm::StringRef Replacement, const AttributeCommonInfo &CommonInfo);static DeprecatedAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Message, llvm::StringRef Replacement, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static DeprecatedAttr *Create(ASTContext &Ctx, llvm::StringRef Message, llvm::StringRef Replacement, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsDeprecatedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef Message, llvm::StringRef Replacement);DeprecatedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);DeprecatedAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getMessage() const {return llvm::StringRef(message, messageLength);}unsigned getMessageLength() const {return messageLength;}void setMessage(ASTContext &C, llvm::StringRef S) {messageLength = S.size();this->message = new (C, 1) char [messageLength];if (!S.empty())std::memcpy(this->message, S.data(), messageLength);}llvm::StringRef getReplacement() const {return llvm::StringRef(replacement, replacementLength);}unsigned getReplacementLength() const {return replacementLength;}void setReplacement(ASTContext &C, llvm::StringRef S) {replacementLength = S.size();this->replacement = new (C, 1) char [replacementLength];if (!S.empty())std::memcpy(this->replacement, S.data(), replacementLength);}static bool classof(const Attr *A) { return A->getKind() == attr::Deprecated; }};class DestructorAttr : public InheritableAttr {int priority;public:enum Spelling {GNU_destructor = 0,CXX11_gnu_destructor = 1,C2x_gnu_destructor = 2,SpellingNotCalculated = 15};// Factory methodsstatic DestructorAttr *CreateImplicit(ASTContext &Ctx, int Priority, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static DestructorAttr *Create(ASTContext &Ctx, int Priority, const AttributeCommonInfo &CommonInfo);static DestructorAttr *CreateImplicit(ASTContext &Ctx, int Priority, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static DestructorAttr *Create(ASTContext &Ctx, int Priority, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsDestructorAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, int Priority);DestructorAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);DestructorAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;int getPriority() const {return priority;}static const int DefaultPriority = 65535;static bool classof(const Attr *A) { return A->getKind() == attr::Destructor; }};class DiagnoseAsBuiltinAttr : public InheritableAttr {FunctionDecl * function;unsigned argIndices_Size;unsigned *argIndices_;public:enum Spelling {GNU_diagnose_as_builtin = 0,CXX11_clang_diagnose_as_builtin = 1,C2x_clang_diagnose_as_builtin = 2,SpellingNotCalculated = 15};// Factory methodsstatic DiagnoseAsBuiltinAttr *CreateImplicit(ASTContext &Ctx, FunctionDecl * Function, unsigned *ArgIndices, unsigned ArgIndicesSize, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static DiagnoseAsBuiltinAttr *Create(ASTContext &Ctx, FunctionDecl * Function, unsigned *ArgIndices, unsigned ArgIndicesSize, const AttributeCommonInfo &CommonInfo);static DiagnoseAsBuiltinAttr *CreateImplicit(ASTContext &Ctx, FunctionDecl * Function, unsigned *ArgIndices, unsigned ArgIndicesSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static DiagnoseAsBuiltinAttr *Create(ASTContext &Ctx, FunctionDecl * Function, unsigned *ArgIndices, unsigned ArgIndicesSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsDiagnoseAsBuiltinAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, FunctionDecl * Function, unsigned *ArgIndices, unsigned ArgIndicesSize);DiagnoseAsBuiltinAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, FunctionDecl * Function);DiagnoseAsBuiltinAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;FunctionDecl * getFunction() const {return function;}typedef unsigned* argIndices_iterator;argIndices_iterator argIndices_begin() const { return argIndices_; }argIndices_iterator argIndices_end() const { return argIndices_ + argIndices_Size; }unsigned argIndices_size() const { return argIndices_Size; }llvm::iterator_range<argIndices_iterator> argIndices() const { return llvm::make_range(argIndices_begin(), argIndices_end()); }static bool classof(const Attr *A) { return A->getKind() == attr::DiagnoseAsBuiltin; }};class DiagnoseIfAttr : public InheritableAttr {Expr * cond;unsigned messageLength;char *message;public:enum DiagnosticType {DT_Error,DT_Warning};private:DiagnosticType diagnosticType;bool argDependent;NamedDecl * parent;public:// Factory methodsstatic DiagnoseIfAttr *CreateImplicit(ASTContext &Ctx, Expr * Cond, llvm::StringRef Message, DiagnosticType DiagnosticType, bool ArgDependent, NamedDecl * Parent, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static DiagnoseIfAttr *Create(ASTContext &Ctx, Expr * Cond, llvm::StringRef Message, DiagnosticType DiagnosticType, bool ArgDependent, NamedDecl * Parent, const AttributeCommonInfo &CommonInfo);static DiagnoseIfAttr *CreateImplicit(ASTContext &Ctx, Expr * Cond, llvm::StringRef Message, DiagnosticType DiagnosticType, bool ArgDependent, NamedDecl * Parent, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static DiagnoseIfAttr *Create(ASTContext &Ctx, Expr * Cond, llvm::StringRef Message, DiagnosticType DiagnosticType, bool ArgDependent, NamedDecl * Parent, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static DiagnoseIfAttr *CreateImplicit(ASTContext &Ctx, Expr * Cond, llvm::StringRef Message, DiagnosticType DiagnosticType, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static DiagnoseIfAttr *Create(ASTContext &Ctx, Expr * Cond, llvm::StringRef Message, DiagnosticType DiagnosticType, const AttributeCommonInfo &CommonInfo);static DiagnoseIfAttr *CreateImplicit(ASTContext &Ctx, Expr * Cond, llvm::StringRef Message, DiagnosticType DiagnosticType, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static DiagnoseIfAttr *Create(ASTContext &Ctx, Expr * Cond, llvm::StringRef Message, DiagnosticType DiagnosticType, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsDiagnoseIfAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Expr * Cond, llvm::StringRef Message, DiagnosticType DiagnosticType, bool ArgDependent, NamedDecl * Parent);DiagnoseIfAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Expr * Cond, llvm::StringRef Message, DiagnosticType DiagnosticType);DiagnoseIfAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Expr * getCond() const {return cond;}llvm::StringRef getMessage() const {return llvm::StringRef(message, messageLength);}unsigned getMessageLength() const {return messageLength;}void setMessage(ASTContext &C, llvm::StringRef S) {messageLength = S.size();this->message = new (C, 1) char [messageLength];if (!S.empty())std::memcpy(this->message, S.data(), messageLength);}DiagnosticType getDiagnosticType() const {return diagnosticType;}static bool ConvertStrToDiagnosticType(StringRef Val, DiagnosticType &Out);static const char *ConvertDiagnosticTypeToStr(DiagnosticType Val);bool getArgDependent() const {return argDependent;}NamedDecl * getParent() const {return parent;}bool isError() const { return diagnosticType == DT_Error; }bool isWarning() const { return diagnosticType == DT_Warning; }static bool classof(const Attr *A) { return A->getKind() == attr::DiagnoseIf; }};class DisableSanitizerInstrumentationAttr : public InheritableAttr {public:enum Spelling {GNU_disable_sanitizer_instrumentation = 0,CXX11_clang_disable_sanitizer_instrumentation = 1,C2x_clang_disable_sanitizer_instrumentation = 2,SpellingNotCalculated = 15};// Factory methodsstatic DisableSanitizerInstrumentationAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static DisableSanitizerInstrumentationAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static DisableSanitizerInstrumentationAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static DisableSanitizerInstrumentationAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsDisableSanitizerInstrumentationAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);DisableSanitizerInstrumentationAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::DisableSanitizerInstrumentation; }};class DisableTailCallsAttr : public InheritableAttr {public:enum Spelling {GNU_disable_tail_calls = 0,CXX11_clang_disable_tail_calls = 1,C2x_clang_disable_tail_calls = 2,SpellingNotCalculated = 15};// Factory methodsstatic DisableTailCallsAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static DisableTailCallsAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static DisableTailCallsAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static DisableTailCallsAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsDisableTailCallsAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);DisableTailCallsAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::DisableTailCalls; }};class EmptyBasesAttr : public InheritableAttr {public:// Factory methodsstatic EmptyBasesAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static EmptyBasesAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static EmptyBasesAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static EmptyBasesAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsEmptyBasesAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);EmptyBasesAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::EmptyBases; }};class EnableIfAttr : public InheritableAttr {Expr * cond;unsigned messageLength;char *message;public:// Factory methodsstatic EnableIfAttr *CreateImplicit(ASTContext &Ctx, Expr * Cond, llvm::StringRef Message, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static EnableIfAttr *Create(ASTContext &Ctx, Expr * Cond, llvm::StringRef Message, const AttributeCommonInfo &CommonInfo);static EnableIfAttr *CreateImplicit(ASTContext &Ctx, Expr * Cond, llvm::StringRef Message, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static EnableIfAttr *Create(ASTContext &Ctx, Expr * Cond, llvm::StringRef Message, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsEnableIfAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Expr * Cond, llvm::StringRef Message);EnableIfAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Expr * getCond() const {return cond;}llvm::StringRef getMessage() const {return llvm::StringRef(message, messageLength);}unsigned getMessageLength() const {return messageLength;}void setMessage(ASTContext &C, llvm::StringRef S) {messageLength = S.size();this->message = new (C, 1) char [messageLength];if (!S.empty())std::memcpy(this->message, S.data(), messageLength);}static bool classof(const Attr *A) { return A->getKind() == attr::EnableIf; }};class EnforceTCBAttr : public InheritableAttr {unsigned tCBNameLength;char *tCBName;public:enum Spelling {GNU_enforce_tcb = 0,CXX11_clang_enforce_tcb = 1,C2x_clang_enforce_tcb = 2,SpellingNotCalculated = 15};// Factory methodsstatic EnforceTCBAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef TCBName, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static EnforceTCBAttr *Create(ASTContext &Ctx, llvm::StringRef TCBName, const AttributeCommonInfo &CommonInfo);static EnforceTCBAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef TCBName, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static EnforceTCBAttr *Create(ASTContext &Ctx, llvm::StringRef TCBName, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsEnforceTCBAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef TCBName);EnforceTCBAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getTCBName() const {return llvm::StringRef(tCBName, tCBNameLength);}unsigned getTCBNameLength() const {return tCBNameLength;}void setTCBName(ASTContext &C, llvm::StringRef S) {tCBNameLength = S.size();this->tCBName = new (C, 1) char [tCBNameLength];if (!S.empty())std::memcpy(this->tCBName, S.data(), tCBNameLength);}static bool classof(const Attr *A) { return A->getKind() == attr::EnforceTCB; }};class EnforceTCBLeafAttr : public InheritableAttr {unsigned tCBNameLength;char *tCBName;public:enum Spelling {GNU_enforce_tcb_leaf = 0,CXX11_clang_enforce_tcb_leaf = 1,C2x_clang_enforce_tcb_leaf = 2,SpellingNotCalculated = 15};// Factory methodsstatic EnforceTCBLeafAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef TCBName, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static EnforceTCBLeafAttr *Create(ASTContext &Ctx, llvm::StringRef TCBName, const AttributeCommonInfo &CommonInfo);static EnforceTCBLeafAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef TCBName, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static EnforceTCBLeafAttr *Create(ASTContext &Ctx, llvm::StringRef TCBName, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsEnforceTCBLeafAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef TCBName);EnforceTCBLeafAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getTCBName() const {return llvm::StringRef(tCBName, tCBNameLength);}unsigned getTCBNameLength() const {return tCBNameLength;}void setTCBName(ASTContext &C, llvm::StringRef S) {tCBNameLength = S.size();this->tCBName = new (C, 1) char [tCBNameLength];if (!S.empty())std::memcpy(this->tCBName, S.data(), tCBNameLength);}static bool classof(const Attr *A) { return A->getKind() == attr::EnforceTCBLeaf; }};class EnumExtensibilityAttr : public InheritableAttr {public:enum Kind {Closed,Open};private:Kind extensibility;public:enum Spelling {GNU_enum_extensibility = 0,CXX11_clang_enum_extensibility = 1,C2x_clang_enum_extensibility = 2,SpellingNotCalculated = 15};// Factory methodsstatic EnumExtensibilityAttr *CreateImplicit(ASTContext &Ctx, Kind Extensibility, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static EnumExtensibilityAttr *Create(ASTContext &Ctx, Kind Extensibility, const AttributeCommonInfo &CommonInfo);static EnumExtensibilityAttr *CreateImplicit(ASTContext &Ctx, Kind Extensibility, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static EnumExtensibilityAttr *Create(ASTContext &Ctx, Kind Extensibility, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsEnumExtensibilityAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Kind Extensibility);EnumExtensibilityAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Kind getExtensibility() const {return extensibility;}static bool ConvertStrToKind(StringRef Val, Kind &Out);static const char *ConvertKindToStr(Kind Val);static bool classof(const Attr *A) { return A->getKind() == attr::EnumExtensibility; }};class ErrorAttr : public InheritableAttr {unsigned userDiagnosticLength;char *userDiagnostic;public:enum Spelling {GNU_error = 0,CXX11_gnu_error = 1,C2x_gnu_error = 2,GNU_warning = 3,CXX11_gnu_warning = 4,C2x_gnu_warning = 5,SpellingNotCalculated = 15};// Factory methodsstatic ErrorAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef UserDiagnostic, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ErrorAttr *Create(ASTContext &Ctx, llvm::StringRef UserDiagnostic, const AttributeCommonInfo &CommonInfo);static ErrorAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef UserDiagnostic, SourceRange Range, AttributeCommonInfo::Syntax Syntax, ErrorAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static ErrorAttr *Create(ASTContext &Ctx, llvm::StringRef UserDiagnostic, SourceRange Range, AttributeCommonInfo::Syntax Syntax, ErrorAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsErrorAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef UserDiagnostic);ErrorAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;bool isError() const { return getAttributeSpellingListIndex() == 0 ||getAttributeSpellingListIndex() == 1 ||getAttributeSpellingListIndex() == 2; }bool isWarning() const { return getAttributeSpellingListIndex() == 3 ||getAttributeSpellingListIndex() == 4 ||getAttributeSpellingListIndex() == 5; }llvm::StringRef getUserDiagnostic() const {return llvm::StringRef(userDiagnostic, userDiagnosticLength);}unsigned getUserDiagnosticLength() const {return userDiagnosticLength;}void setUserDiagnostic(ASTContext &C, llvm::StringRef S) {userDiagnosticLength = S.size();this->userDiagnostic = new (C, 1) char [userDiagnosticLength];if (!S.empty())std::memcpy(this->userDiagnostic, S.data(), userDiagnosticLength);}static bool classof(const Attr *A) { return A->getKind() == attr::Error; }};class ExcludeFromExplicitInstantiationAttr : public InheritableAttr {public:enum Spelling {GNU_exclude_from_explicit_instantiation = 0,CXX11_clang_exclude_from_explicit_instantiation = 1,C2x_clang_exclude_from_explicit_instantiation = 2,SpellingNotCalculated = 15};// Factory methodsstatic ExcludeFromExplicitInstantiationAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ExcludeFromExplicitInstantiationAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ExcludeFromExplicitInstantiationAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ExcludeFromExplicitInstantiationAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsExcludeFromExplicitInstantiationAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ExcludeFromExplicitInstantiationAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::ExcludeFromExplicitInstantiation; }};class ExclusiveTrylockFunctionAttr : public InheritableAttr {Expr * successValue;unsigned args_Size;Expr * *args_;public:// Factory methodsstatic ExclusiveTrylockFunctionAttr *CreateImplicit(ASTContext &Ctx, Expr * SuccessValue, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ExclusiveTrylockFunctionAttr *Create(ASTContext &Ctx, Expr * SuccessValue, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);static ExclusiveTrylockFunctionAttr *CreateImplicit(ASTContext &Ctx, Expr * SuccessValue, Expr * *Args, unsigned ArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ExclusiveTrylockFunctionAttr *Create(ASTContext &Ctx, Expr * SuccessValue, Expr * *Args, unsigned ArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsExclusiveTrylockFunctionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Expr * SuccessValue, Expr * *Args, unsigned ArgsSize);ExclusiveTrylockFunctionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Expr * SuccessValue);ExclusiveTrylockFunctionAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Expr * getSuccessValue() const {return successValue;}typedef Expr ** args_iterator;args_iterator args_begin() const { return args_; }args_iterator args_end() const { return args_ + args_Size; }unsigned args_size() const { return args_Size; }llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); }static bool classof(const Attr *A) { return A->getKind() == attr::ExclusiveTrylockFunction; }};class ExternalSourceSymbolAttr : public InheritableAttr {unsigned languageLength;char *language;unsigned definedInLength;char *definedIn;bool generatedDeclaration;public:enum Spelling {GNU_external_source_symbol = 0,CXX11_clang_external_source_symbol = 1,C2x_clang_external_source_symbol = 2,SpellingNotCalculated = 15};// Factory methodsstatic ExternalSourceSymbolAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Language, llvm::StringRef DefinedIn, bool GeneratedDeclaration, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ExternalSourceSymbolAttr *Create(ASTContext &Ctx, llvm::StringRef Language, llvm::StringRef DefinedIn, bool GeneratedDeclaration, const AttributeCommonInfo &CommonInfo);static ExternalSourceSymbolAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Language, llvm::StringRef DefinedIn, bool GeneratedDeclaration, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ExternalSourceSymbolAttr *Create(ASTContext &Ctx, llvm::StringRef Language, llvm::StringRef DefinedIn, bool GeneratedDeclaration, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsExternalSourceSymbolAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef Language, llvm::StringRef DefinedIn, bool GeneratedDeclaration);ExternalSourceSymbolAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ExternalSourceSymbolAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getLanguage() const {return llvm::StringRef(language, languageLength);}unsigned getLanguageLength() const {return languageLength;}void setLanguage(ASTContext &C, llvm::StringRef S) {languageLength = S.size();this->language = new (C, 1) char [languageLength];if (!S.empty())std::memcpy(this->language, S.data(), languageLength);}llvm::StringRef getDefinedIn() const {return llvm::StringRef(definedIn, definedInLength);}unsigned getDefinedInLength() const {return definedInLength;}void setDefinedIn(ASTContext &C, llvm::StringRef S) {definedInLength = S.size();this->definedIn = new (C, 1) char [definedInLength];if (!S.empty())std::memcpy(this->definedIn, S.data(), definedInLength);}bool getGeneratedDeclaration() const {return generatedDeclaration;}static bool classof(const Attr *A) { return A->getKind() == attr::ExternalSourceSymbol; }};class FallThroughAttr : public StmtAttr {public:enum Spelling {CXX11_fallthrough = 0,C2x_fallthrough = 1,CXX11_clang_fallthrough = 2,GNU_fallthrough = 3,CXX11_gnu_fallthrough = 4,C2x_gnu_fallthrough = 5,SpellingNotCalculated = 15};// Factory methodsstatic FallThroughAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static FallThroughAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static FallThroughAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static FallThroughAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsFallThroughAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);FallThroughAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::FallThrough; }};class FastCallAttr : public InheritableAttr {public:enum Spelling {GNU_fastcall = 0,CXX11_gnu_fastcall = 1,C2x_gnu_fastcall = 2,Keyword_fastcall = 3,SpellingNotCalculated = 15};// Factory methodsstatic FastCallAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static FastCallAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static FastCallAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static FastCallAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsFastCallAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);FastCallAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::FastCall; }};class FinalAttr : public InheritableAttr {public:enum Spelling {Keyword_final = 0,Keyword_sealed = 1,SpellingNotCalculated = 15};// Factory methodsstatic FinalAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static FinalAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static FinalAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, FinalAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static FinalAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, FinalAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsFinalAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);FinalAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;bool isSpelledAsSealed() const { return getAttributeSpellingListIndex() == 1; }static bool classof(const Attr *A) { return A->getKind() == attr::Final; }};class FlagEnumAttr : public InheritableAttr {public:enum Spelling {GNU_flag_enum = 0,CXX11_clang_flag_enum = 1,C2x_clang_flag_enum = 2,SpellingNotCalculated = 15};// Factory methodsstatic FlagEnumAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static FlagEnumAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static FlagEnumAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static FlagEnumAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsFlagEnumAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);FlagEnumAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::FlagEnum; }};class FlattenAttr : public InheritableAttr {public:enum Spelling {GNU_flatten = 0,CXX11_gnu_flatten = 1,C2x_gnu_flatten = 2,SpellingNotCalculated = 15};// Factory methodsstatic FlattenAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static FlattenAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static FlattenAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static FlattenAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsFlattenAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);FlattenAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::Flatten; }};class FormatAttr : public InheritableAttr {IdentifierInfo * type;int formatIdx;int firstArg;public:enum Spelling {GNU_format = 0,CXX11_gnu_format = 1,C2x_gnu_format = 2,SpellingNotCalculated = 15};// Factory methodsstatic FormatAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * Type, int FormatIdx, int FirstArg, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static FormatAttr *Create(ASTContext &Ctx, IdentifierInfo * Type, int FormatIdx, int FirstArg, const AttributeCommonInfo &CommonInfo);static FormatAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * Type, int FormatIdx, int FirstArg, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static FormatAttr *Create(ASTContext &Ctx, IdentifierInfo * Type, int FormatIdx, int FirstArg, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsFormatAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, IdentifierInfo * Type, int FormatIdx, int FirstArg);FormatAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;IdentifierInfo * getType() const {return type;}int getFormatIdx() const {return formatIdx;}int getFirstArg() const {return firstArg;}static bool classof(const Attr *A) { return A->getKind() == attr::Format; }};class FormatArgAttr : public InheritableAttr {ParamIdx formatIdx;public:enum Spelling {GNU_format_arg = 0,CXX11_gnu_format_arg = 1,C2x_gnu_format_arg = 2,SpellingNotCalculated = 15};// Factory methodsstatic FormatArgAttr *CreateImplicit(ASTContext &Ctx, ParamIdx FormatIdx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static FormatArgAttr *Create(ASTContext &Ctx, ParamIdx FormatIdx, const AttributeCommonInfo &CommonInfo);static FormatArgAttr *CreateImplicit(ASTContext &Ctx, ParamIdx FormatIdx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static FormatArgAttr *Create(ASTContext &Ctx, ParamIdx FormatIdx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsFormatArgAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, ParamIdx FormatIdx);FormatArgAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;ParamIdx getFormatIdx() const {return formatIdx;}static bool classof(const Attr *A) { return A->getKind() == attr::FormatArg; }};class FunctionReturnThunksAttr : public InheritableAttr {public:enum Kind {Keep,Extern};private:Kind thunkType;public:enum Spelling {GNU_function_return = 0,CXX11_gnu_function_return = 1,C2x_gnu_function_return = 2,SpellingNotCalculated = 15};// Factory methodsstatic FunctionReturnThunksAttr *CreateImplicit(ASTContext &Ctx, Kind ThunkType, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static FunctionReturnThunksAttr *Create(ASTContext &Ctx, Kind ThunkType, const AttributeCommonInfo &CommonInfo);static FunctionReturnThunksAttr *CreateImplicit(ASTContext &Ctx, Kind ThunkType, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static FunctionReturnThunksAttr *Create(ASTContext &Ctx, Kind ThunkType, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsFunctionReturnThunksAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Kind ThunkType);FunctionReturnThunksAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Kind getThunkType() const {return thunkType;}static bool ConvertStrToKind(StringRef Val, Kind &Out);static const char *ConvertKindToStr(Kind Val);static bool classof(const Attr *A) { return A->getKind() == attr::FunctionReturnThunks; }};class GNUInlineAttr : public InheritableAttr {public:enum Spelling {GNU_gnu_inline = 0,CXX11_gnu_gnu_inline = 1,C2x_gnu_gnu_inline = 2,SpellingNotCalculated = 15};// Factory methodsstatic GNUInlineAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static GNUInlineAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static GNUInlineAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static GNUInlineAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsGNUInlineAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);GNUInlineAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::GNUInline; }};class GuardedByAttr : public InheritableAttr {Expr * arg;public:// Factory methodsstatic GuardedByAttr *CreateImplicit(ASTContext &Ctx, Expr * Arg, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static GuardedByAttr *Create(ASTContext &Ctx, Expr * Arg, const AttributeCommonInfo &CommonInfo);static GuardedByAttr *CreateImplicit(ASTContext &Ctx, Expr * Arg, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static GuardedByAttr *Create(ASTContext &Ctx, Expr * Arg, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsGuardedByAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Expr * Arg);GuardedByAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Expr * getArg() const {return arg;}static bool classof(const Attr *A) { return A->getKind() == attr::GuardedBy; }};class GuardedVarAttr : public InheritableAttr {public:enum Spelling {GNU_guarded_var = 0,CXX11_clang_guarded_var = 1,SpellingNotCalculated = 15};// Factory methodsstatic GuardedVarAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static GuardedVarAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static GuardedVarAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static GuardedVarAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsGuardedVarAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);GuardedVarAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::GuardedVar; }};class HIPManagedAttr : public InheritableAttr {public:enum Spelling {GNU_managed = 0,Declspec_managed = 1,SpellingNotCalculated = 15};// Factory methodsstatic HIPManagedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static HIPManagedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static HIPManagedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static HIPManagedAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsHIPManagedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);HIPManagedAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::HIPManaged; }};class HLSLGroupSharedAddressSpaceAttr : public TypeAttr {public:// Factory methodsstatic HLSLGroupSharedAddressSpaceAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static HLSLGroupSharedAddressSpaceAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static HLSLGroupSharedAddressSpaceAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static HLSLGroupSharedAddressSpaceAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsHLSLGroupSharedAddressSpaceAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);HLSLGroupSharedAddressSpaceAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::HLSLGroupSharedAddressSpace; }};class HLSLNumThreadsAttr : public InheritableAttr {int x;int y;int z;public:// Factory methodsstatic HLSLNumThreadsAttr *CreateImplicit(ASTContext &Ctx, int X, int Y, int Z, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static HLSLNumThreadsAttr *Create(ASTContext &Ctx, int X, int Y, int Z, const AttributeCommonInfo &CommonInfo);static HLSLNumThreadsAttr *CreateImplicit(ASTContext &Ctx, int X, int Y, int Z, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static HLSLNumThreadsAttr *Create(ASTContext &Ctx, int X, int Y, int Z, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsHLSLNumThreadsAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, int X, int Y, int Z);HLSLNumThreadsAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;int getX() const {return x;}int getY() const {return y;}int getZ() const {return z;}static bool classof(const Attr *A) { return A->getKind() == attr::HLSLNumThreads; }};class HLSLResourceAttr : public InheritableAttr {public:enum ResourceClass {SRV,UAV,CBuffer,Sampler};private:ResourceClass resourceType;public:enum ResourceKind {Texture1D,Texture2D,Texture2DMS,Texture3D,TextureCube,Texture1DArray,Texture2DArray,Texture2DMSArray,TextureCubeArray,TypedBuffer,RawBuffer,StructuredBuffer,CBufferKind,SamplerKind,TBuffer,RTAccelerationStructure,FeedbackTexture2D,FeedbackTexture2DArray};private:ResourceKind resourceShape;public:// Factory methodsstatic HLSLResourceAttr *CreateImplicit(ASTContext &Ctx, ResourceClass ResourceType, ResourceKind ResourceShape, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static HLSLResourceAttr *Create(ASTContext &Ctx, ResourceClass ResourceType, ResourceKind ResourceShape, const AttributeCommonInfo &CommonInfo);static HLSLResourceAttr *CreateImplicit(ASTContext &Ctx, ResourceClass ResourceType, ResourceKind ResourceShape, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static HLSLResourceAttr *Create(ASTContext &Ctx, ResourceClass ResourceType, ResourceKind ResourceShape, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsHLSLResourceAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, ResourceClass ResourceType, ResourceKind ResourceShape);HLSLResourceAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;ResourceClass getResourceType() const {return resourceType;}static bool ConvertStrToResourceClass(StringRef Val, ResourceClass &Out);static const char *ConvertResourceClassToStr(ResourceClass Val);ResourceKind getResourceShape() const {return resourceShape;}static bool ConvertStrToResourceKind(StringRef Val, ResourceKind &Out);static const char *ConvertResourceKindToStr(ResourceKind Val);static bool classof(const Attr *A) { return A->getKind() == attr::HLSLResource; }};class HLSLResourceBindingAttr : public InheritableAttr {unsigned slotLength;char *slot;unsigned spaceLength;char *space;public:// Factory methodsstatic HLSLResourceBindingAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Slot, llvm::StringRef Space, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static HLSLResourceBindingAttr *Create(ASTContext &Ctx, llvm::StringRef Slot, llvm::StringRef Space, const AttributeCommonInfo &CommonInfo);static HLSLResourceBindingAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Slot, llvm::StringRef Space, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static HLSLResourceBindingAttr *Create(ASTContext &Ctx, llvm::StringRef Slot, llvm::StringRef Space, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsHLSLResourceBindingAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef Slot, llvm::StringRef Space);HLSLResourceBindingAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef Slot);HLSLResourceBindingAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getSlot() const {return llvm::StringRef(slot, slotLength);}unsigned getSlotLength() const {return slotLength;}void setSlot(ASTContext &C, llvm::StringRef S) {slotLength = S.size();this->slot = new (C, 1) char [slotLength];if (!S.empty())std::memcpy(this->slot, S.data(), slotLength);}llvm::StringRef getSpace() const {return llvm::StringRef(space, spaceLength);}unsigned getSpaceLength() const {return spaceLength;}void setSpace(ASTContext &C, llvm::StringRef S) {spaceLength = S.size();this->space = new (C, 1) char [spaceLength];if (!S.empty())std::memcpy(this->space, S.data(), spaceLength);}static bool classof(const Attr *A) { return A->getKind() == attr::HLSLResourceBinding; }};class HLSLSV_DispatchThreadIDAttr : public HLSLAnnotationAttr {public:// Factory methodsstatic HLSLSV_DispatchThreadIDAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static HLSLSV_DispatchThreadIDAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static HLSLSV_DispatchThreadIDAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static HLSLSV_DispatchThreadIDAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsHLSLSV_DispatchThreadIDAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);HLSLSV_DispatchThreadIDAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::HLSLSV_DispatchThreadID; }};class HLSLSV_GroupIndexAttr : public HLSLAnnotationAttr {public:// Factory methodsstatic HLSLSV_GroupIndexAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static HLSLSV_GroupIndexAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static HLSLSV_GroupIndexAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static HLSLSV_GroupIndexAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsHLSLSV_GroupIndexAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);HLSLSV_GroupIndexAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::HLSLSV_GroupIndex; }};class HLSLShaderAttr : public InheritableAttr {public:enum ShaderType {Pixel,Vertex,Geometry,Hull,Domain,Compute,Library,RayGeneration,Intersection,AnyHit,ClosestHit,Miss,Callable,Mesh,Amplification};private:ShaderType type;public:// Factory methodsstatic HLSLShaderAttr *CreateImplicit(ASTContext &Ctx, ShaderType Type, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static HLSLShaderAttr *Create(ASTContext &Ctx, ShaderType Type, const AttributeCommonInfo &CommonInfo);static HLSLShaderAttr *CreateImplicit(ASTContext &Ctx, ShaderType Type, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static HLSLShaderAttr *Create(ASTContext &Ctx, ShaderType Type, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsHLSLShaderAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, ShaderType Type);HLSLShaderAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;ShaderType getType() const {return type;}static bool ConvertStrToShaderType(StringRef Val, ShaderType &Out);static const char *ConvertShaderTypeToStr(ShaderType Val);static bool classof(const Attr *A) { return A->getKind() == attr::HLSLShader; }};class HotAttr : public InheritableAttr {public:enum Spelling {GNU_hot = 0,CXX11_gnu_hot = 1,C2x_gnu_hot = 2,SpellingNotCalculated = 15};// Factory methodsstatic HotAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static HotAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static HotAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static HotAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsHotAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);HotAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::Hot; }};class IBActionAttr : public InheritableAttr {public:enum Spelling {GNU_ibaction = 0,CXX11_clang_ibaction = 1,C2x_clang_ibaction = 2,SpellingNotCalculated = 15};// Factory methodsstatic IBActionAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static IBActionAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static IBActionAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static IBActionAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsIBActionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);IBActionAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::IBAction; }};class IBOutletAttr : public InheritableAttr {public:enum Spelling {GNU_iboutlet = 0,CXX11_clang_iboutlet = 1,C2x_clang_iboutlet = 2,SpellingNotCalculated = 15};// Factory methodsstatic IBOutletAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static IBOutletAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static IBOutletAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static IBOutletAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsIBOutletAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);IBOutletAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::IBOutlet; }};class IBOutletCollectionAttr : public InheritableAttr {TypeSourceInfo * interface_;public:enum Spelling {GNU_iboutletcollection = 0,CXX11_clang_iboutletcollection = 1,C2x_clang_iboutletcollection = 2,SpellingNotCalculated = 15};// Factory methodsstatic IBOutletCollectionAttr *CreateImplicit(ASTContext &Ctx, TypeSourceInfo * Interface, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static IBOutletCollectionAttr *Create(ASTContext &Ctx, TypeSourceInfo * Interface, const AttributeCommonInfo &CommonInfo);static IBOutletCollectionAttr *CreateImplicit(ASTContext &Ctx, TypeSourceInfo * Interface, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static IBOutletCollectionAttr *Create(ASTContext &Ctx, TypeSourceInfo * Interface, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsIBOutletCollectionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, TypeSourceInfo * Interface);IBOutletCollectionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);IBOutletCollectionAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;QualType getInterface() const {return interface_->getType();} TypeSourceInfo * getInterfaceLoc() const {return interface_;}static bool classof(const Attr *A) { return A->getKind() == attr::IBOutletCollection; }};class IFuncAttr : public Attr {unsigned resolverLength;char *resolver;public:enum Spelling {GNU_ifunc = 0,CXX11_gnu_ifunc = 1,C2x_gnu_ifunc = 2,SpellingNotCalculated = 15};// Factory methodsstatic IFuncAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Resolver, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static IFuncAttr *Create(ASTContext &Ctx, llvm::StringRef Resolver, const AttributeCommonInfo &CommonInfo);static IFuncAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Resolver, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static IFuncAttr *Create(ASTContext &Ctx, llvm::StringRef Resolver, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsIFuncAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef Resolver);IFuncAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getResolver() const {return llvm::StringRef(resolver, resolverLength);}unsigned getResolverLength() const {return resolverLength;}void setResolver(ASTContext &C, llvm::StringRef S) {resolverLength = S.size();this->resolver = new (C, 1) char [resolverLength];if (!S.empty())std::memcpy(this->resolver, S.data(), resolverLength);}static bool classof(const Attr *A) { return A->getKind() == attr::IFunc; }};class InitPriorityAttr : public InheritableAttr {unsigned priority;public:enum Spelling {GNU_init_priority = 0,CXX11_gnu_init_priority = 1,SpellingNotCalculated = 15};// Factory methodsstatic InitPriorityAttr *CreateImplicit(ASTContext &Ctx, unsigned Priority, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static InitPriorityAttr *Create(ASTContext &Ctx, unsigned Priority, const AttributeCommonInfo &CommonInfo);static InitPriorityAttr *CreateImplicit(ASTContext &Ctx, unsigned Priority, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static InitPriorityAttr *Create(ASTContext &Ctx, unsigned Priority, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsInitPriorityAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, unsigned Priority);InitPriorityAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;unsigned getPriority() const {return priority;}static bool classof(const Attr *A) { return A->getKind() == attr::InitPriority; }};class InitSegAttr : public Attr {unsigned sectionLength;char *section;public:// Factory methodsstatic InitSegAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Section, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static InitSegAttr *Create(ASTContext &Ctx, llvm::StringRef Section, const AttributeCommonInfo &CommonInfo);static InitSegAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Section, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static InitSegAttr *Create(ASTContext &Ctx, llvm::StringRef Section, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsInitSegAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef Section);InitSegAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getSection() const {return llvm::StringRef(section, sectionLength);}unsigned getSectionLength() const {return sectionLength;}void setSection(ASTContext &C, llvm::StringRef S) {sectionLength = S.size();this->section = new (C, 1) char [sectionLength];if (!S.empty())std::memcpy(this->section, S.data(), sectionLength);}void printPrettyPragma(raw_ostream &OS, const PrintingPolicy &Policy) const {OS << " (" << getSection() << ')';}static bool classof(const Attr *A) { return A->getKind() == attr::InitSeg; }};class IntelOclBiccAttr : public InheritableAttr {public:enum Spelling {GNU_intel_ocl_bicc = 0,CXX11_clang_intel_ocl_bicc = 1,SpellingNotCalculated = 15};// Factory methodsstatic IntelOclBiccAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static IntelOclBiccAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static IntelOclBiccAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static IntelOclBiccAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsIntelOclBiccAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);IntelOclBiccAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::IntelOclBicc; }};class InternalLinkageAttr : public InheritableAttr {public:enum Spelling {GNU_internal_linkage = 0,CXX11_clang_internal_linkage = 1,C2x_clang_internal_linkage = 2,SpellingNotCalculated = 15};// Factory methodsstatic InternalLinkageAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static InternalLinkageAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static InternalLinkageAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static InternalLinkageAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsInternalLinkageAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);InternalLinkageAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::InternalLinkage; }};class LTOVisibilityPublicAttr : public InheritableAttr {public:enum Spelling {GNU_lto_visibility_public = 0,CXX11_clang_lto_visibility_public = 1,C2x_clang_lto_visibility_public = 2,SpellingNotCalculated = 15};// Factory methodsstatic LTOVisibilityPublicAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static LTOVisibilityPublicAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static LTOVisibilityPublicAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static LTOVisibilityPublicAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsLTOVisibilityPublicAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);LTOVisibilityPublicAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::LTOVisibilityPublic; }};class LayoutVersionAttr : public InheritableAttr {unsigned version;public:// Factory methodsstatic LayoutVersionAttr *CreateImplicit(ASTContext &Ctx, unsigned Version, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static LayoutVersionAttr *Create(ASTContext &Ctx, unsigned Version, const AttributeCommonInfo &CommonInfo);static LayoutVersionAttr *CreateImplicit(ASTContext &Ctx, unsigned Version, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static LayoutVersionAttr *Create(ASTContext &Ctx, unsigned Version, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsLayoutVersionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, unsigned Version);LayoutVersionAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;unsigned getVersion() const {return version;}static bool classof(const Attr *A) { return A->getKind() == attr::LayoutVersion; }};class LeafAttr : public InheritableAttr {public:enum Spelling {GNU_leaf = 0,CXX11_gnu_leaf = 1,C2x_gnu_leaf = 2,SpellingNotCalculated = 15};// Factory methodsstatic LeafAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static LeafAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static LeafAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static LeafAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsLeafAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);LeafAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::Leaf; }};class LifetimeBoundAttr : public InheritableAttr {public:enum Spelling {GNU_lifetimebound = 0,CXX11_clang_lifetimebound = 1,SpellingNotCalculated = 15};// Factory methodsstatic LifetimeBoundAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static LifetimeBoundAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static LifetimeBoundAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static LifetimeBoundAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsLifetimeBoundAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);LifetimeBoundAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::LifetimeBound; }};class LikelyAttr : public StmtAttr {public:enum Spelling {CXX11_likely = 0,C2x_clang_likely = 1,SpellingNotCalculated = 15};// Factory methodsstatic LikelyAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static LikelyAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static LikelyAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static LikelyAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsLikelyAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);LikelyAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::Likely; }};class LoaderUninitializedAttr : public Attr {public:enum Spelling {GNU_loader_uninitialized = 0,CXX11_clang_loader_uninitialized = 1,C2x_clang_loader_uninitialized = 2,SpellingNotCalculated = 15};// Factory methodsstatic LoaderUninitializedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static LoaderUninitializedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static LoaderUninitializedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static LoaderUninitializedAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsLoaderUninitializedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);LoaderUninitializedAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::LoaderUninitialized; }};class LockReturnedAttr : public InheritableAttr {Expr * arg;public:// Factory methodsstatic LockReturnedAttr *CreateImplicit(ASTContext &Ctx, Expr * Arg, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static LockReturnedAttr *Create(ASTContext &Ctx, Expr * Arg, const AttributeCommonInfo &CommonInfo);static LockReturnedAttr *CreateImplicit(ASTContext &Ctx, Expr * Arg, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static LockReturnedAttr *Create(ASTContext &Ctx, Expr * Arg, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsLockReturnedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Expr * Arg);LockReturnedAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Expr * getArg() const {return arg;}static bool classof(const Attr *A) { return A->getKind() == attr::LockReturned; }};class LocksExcludedAttr : public InheritableAttr {unsigned args_Size;Expr * *args_;public:// Factory methodsstatic LocksExcludedAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static LocksExcludedAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);static LocksExcludedAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static LocksExcludedAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsLocksExcludedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Expr * *Args, unsigned ArgsSize);LocksExcludedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);LocksExcludedAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;typedef Expr ** args_iterator;args_iterator args_begin() const { return args_; }args_iterator args_end() const { return args_ + args_Size; }unsigned args_size() const { return args_Size; }llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); }static bool classof(const Attr *A) { return A->getKind() == attr::LocksExcluded; }};class LoopHintAttr : public Attr {public:enum OptionType {Vectorize,VectorizeWidth,Interleave,InterleaveCount,Unroll,UnrollCount,UnrollAndJam,UnrollAndJamCount,PipelineDisabled,PipelineInitiationInterval,Distribute,VectorizePredicate};private:OptionType option;public:enum LoopHintState {Enable,Disable,Numeric,FixedWidth,ScalableWidth,AssumeSafety,Full};private:LoopHintState state;Expr * value;public:enum Spelling {Pragma_clang_loop = 0,Pragma_unroll = 1,Pragma_nounroll = 2,Pragma_unroll_and_jam = 3,Pragma_nounroll_and_jam = 4,SpellingNotCalculated = 15};// Factory methodsstatic LoopHintAttr *CreateImplicit(ASTContext &Ctx, OptionType Option, LoopHintState State, Expr * Value, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static LoopHintAttr *Create(ASTContext &Ctx, OptionType Option, LoopHintState State, Expr * Value, const AttributeCommonInfo &CommonInfo);static LoopHintAttr *CreateImplicit(ASTContext &Ctx, OptionType Option, LoopHintState State, Expr * Value, SourceRange Range, AttributeCommonInfo::Syntax Syntax, LoopHintAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static LoopHintAttr *Create(ASTContext &Ctx, OptionType Option, LoopHintState State, Expr * Value, SourceRange Range, AttributeCommonInfo::Syntax Syntax, LoopHintAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsLoopHintAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, OptionType Option, LoopHintState State, Expr * Value);LoopHintAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;OptionType getOption() const {return option;}static bool ConvertStrToOptionType(StringRef Val, OptionType &Out);static const char *ConvertOptionTypeToStr(OptionType Val);LoopHintState getState() const {return state;}static bool ConvertStrToLoopHintState(StringRef Val, LoopHintState &Out);static const char *ConvertLoopHintStateToStr(LoopHintState Val);Expr * getValue() const {return value;}static const char *getOptionName(int Option) {switch(Option) {case Vectorize: return "vectorize";case VectorizeWidth: return "vectorize_width";case Interleave: return "interleave";case InterleaveCount: return "interleave_count";case Unroll: return "unroll";case UnrollCount: return "unroll_count";case UnrollAndJam: return "unroll_and_jam";case UnrollAndJamCount: return "unroll_and_jam_count";case PipelineDisabled: return "pipeline";case PipelineInitiationInterval: return "pipeline_initiation_interval";case Distribute: return "distribute";case VectorizePredicate: return "vectorize_predicate";}llvm_unreachable("Unhandled LoopHint option.");}void printPrettyPragma(raw_ostream &OS, const PrintingPolicy &Policy) const;// Return a string containing the loop hint argument including the// enclosing parentheses.std::string getValueString(const PrintingPolicy &Policy) const;// Return a string suitable for identifying this attribute in diagnostics.std::string getDiagnosticName(const PrintingPolicy &Policy) const;static bool classof(const Attr *A) { return A->getKind() == attr::LoopHint; }};class M68kInterruptAttr : public InheritableAttr {unsigned number;public:// Factory methodsstatic M68kInterruptAttr *CreateImplicit(ASTContext &Ctx, unsigned Number, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static M68kInterruptAttr *Create(ASTContext &Ctx, unsigned Number, const AttributeCommonInfo &CommonInfo);static M68kInterruptAttr *CreateImplicit(ASTContext &Ctx, unsigned Number, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static M68kInterruptAttr *Create(ASTContext &Ctx, unsigned Number, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsM68kInterruptAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, unsigned Number);M68kInterruptAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;unsigned getNumber() const {return number;}static bool classof(const Attr *A) { return A->getKind() == attr::M68kInterrupt; }};class MIGServerRoutineAttr : public InheritableAttr {public:enum Spelling {GNU_mig_server_routine = 0,CXX11_clang_mig_server_routine = 1,C2x_clang_mig_server_routine = 2,SpellingNotCalculated = 15};// Factory methodsstatic MIGServerRoutineAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static MIGServerRoutineAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static MIGServerRoutineAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static MIGServerRoutineAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsMIGServerRoutineAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);MIGServerRoutineAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::MIGServerRoutine; }};class MSABIAttr : public InheritableAttr {public:enum Spelling {GNU_ms_abi = 0,CXX11_gnu_ms_abi = 1,C2x_gnu_ms_abi = 2,SpellingNotCalculated = 15};// Factory methodsstatic MSABIAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static MSABIAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static MSABIAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static MSABIAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsMSABIAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);MSABIAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::MSABI; }};class MSAllocatorAttr : public InheritableAttr {public:// Factory methodsstatic MSAllocatorAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static MSAllocatorAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static MSAllocatorAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static MSAllocatorAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsMSAllocatorAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);MSAllocatorAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::MSAllocator; }};class MSInheritanceAttr : public InheritableAttr {bool bestCase;public:enum Spelling {Keyword_single_inheritance = 0,Keyword_multiple_inheritance = 1,Keyword_virtual_inheritance = 2,Keyword_unspecified_inheritance = 3,SpellingNotCalculated = 15};// Factory methodsstatic MSInheritanceAttr *CreateImplicit(ASTContext &Ctx, bool BestCase, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static MSInheritanceAttr *Create(ASTContext &Ctx, bool BestCase, const AttributeCommonInfo &CommonInfo);static MSInheritanceAttr *CreateImplicit(ASTContext &Ctx, bool BestCase, SourceRange Range, AttributeCommonInfo::Syntax Syntax, MSInheritanceAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static MSInheritanceAttr *Create(ASTContext &Ctx, bool BestCase, SourceRange Range, AttributeCommonInfo::Syntax Syntax, MSInheritanceAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static MSInheritanceAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static MSInheritanceAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static MSInheritanceAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, MSInheritanceAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static MSInheritanceAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, MSInheritanceAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsMSInheritanceAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, bool BestCase);MSInheritanceAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);MSInheritanceAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;bool getBestCase() const {return bestCase;}static const bool DefaultBestCase = true;MSInheritanceModel getInheritanceModel() const {// The spelling enum should agree with MSInheritanceModel.return MSInheritanceModel(getSemanticSpelling());}static bool classof(const Attr *A) { return A->getKind() == attr::MSInheritance; }};class MSNoVTableAttr : public InheritableAttr {public:// Factory methodsstatic MSNoVTableAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static MSNoVTableAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static MSNoVTableAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static MSNoVTableAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsMSNoVTableAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);MSNoVTableAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::MSNoVTable; }};class MSP430InterruptAttr : public InheritableAttr {unsigned number;public:enum Spelling {GNU_interrupt = 0,CXX11_gnu_interrupt = 1,C2x_gnu_interrupt = 2,SpellingNotCalculated = 15};// Factory methodsstatic MSP430InterruptAttr *CreateImplicit(ASTContext &Ctx, unsigned Number, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static MSP430InterruptAttr *Create(ASTContext &Ctx, unsigned Number, const AttributeCommonInfo &CommonInfo);static MSP430InterruptAttr *CreateImplicit(ASTContext &Ctx, unsigned Number, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static MSP430InterruptAttr *Create(ASTContext &Ctx, unsigned Number, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsMSP430InterruptAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, unsigned Number);MSP430InterruptAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;unsigned getNumber() const {return number;}static bool classof(const Attr *A) { return A->getKind() == attr::MSP430Interrupt; }};class MSStructAttr : public InheritableAttr {public:enum Spelling {GNU_ms_struct = 0,CXX11_gnu_ms_struct = 1,C2x_gnu_ms_struct = 2,SpellingNotCalculated = 15};// Factory methodsstatic MSStructAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static MSStructAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static MSStructAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static MSStructAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsMSStructAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);MSStructAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::MSStruct; }};class MSVtorDispAttr : public InheritableAttr {unsigned vdm;public:// Factory methodsstatic MSVtorDispAttr *CreateImplicit(ASTContext &Ctx, unsigned Vdm, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static MSVtorDispAttr *Create(ASTContext &Ctx, unsigned Vdm, const AttributeCommonInfo &CommonInfo);static MSVtorDispAttr *CreateImplicit(ASTContext &Ctx, unsigned Vdm, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static MSVtorDispAttr *Create(ASTContext &Ctx, unsigned Vdm, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsMSVtorDispAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, unsigned Vdm);MSVtorDispAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;unsigned getVdm() const {return vdm;}MSVtorDispMode getVtorDispMode() const { return MSVtorDispMode(vdm); }static bool classof(const Attr *A) { return A->getKind() == attr::MSVtorDisp; }};class MaxFieldAlignmentAttr : public InheritableAttr {unsigned alignment;public:// Factory methodsstatic MaxFieldAlignmentAttr *CreateImplicit(ASTContext &Ctx, unsigned Alignment, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static MaxFieldAlignmentAttr *Create(ASTContext &Ctx, unsigned Alignment, const AttributeCommonInfo &CommonInfo);static MaxFieldAlignmentAttr *CreateImplicit(ASTContext &Ctx, unsigned Alignment, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static MaxFieldAlignmentAttr *Create(ASTContext &Ctx, unsigned Alignment, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsMaxFieldAlignmentAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, unsigned Alignment);MaxFieldAlignmentAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;unsigned getAlignment() const {return alignment;}static bool classof(const Attr *A) { return A->getKind() == attr::MaxFieldAlignment; }};class MayAliasAttr : public InheritableAttr {public:enum Spelling {GNU_may_alias = 0,CXX11_gnu_may_alias = 1,C2x_gnu_may_alias = 2,SpellingNotCalculated = 15};// Factory methodsstatic MayAliasAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static MayAliasAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static MayAliasAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static MayAliasAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsMayAliasAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);MayAliasAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::MayAlias; }};class MaybeUndefAttr : public InheritableAttr {public:enum Spelling {GNU_maybe_undef = 0,CXX11_clang_maybe_undef = 1,C2x_clang_maybe_undef = 2,SpellingNotCalculated = 15};// Factory methodsstatic MaybeUndefAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static MaybeUndefAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static MaybeUndefAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static MaybeUndefAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsMaybeUndefAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);MaybeUndefAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::MaybeUndef; }};class MicroMipsAttr : public InheritableAttr {public:enum Spelling {GNU_micromips = 0,CXX11_gnu_micromips = 1,C2x_gnu_micromips = 2,SpellingNotCalculated = 15};// Factory methodsstatic MicroMipsAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static MicroMipsAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static MicroMipsAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static MicroMipsAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsMicroMipsAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);MicroMipsAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::MicroMips; }};class MinSizeAttr : public InheritableAttr {public:enum Spelling {GNU_minsize = 0,CXX11_clang_minsize = 1,C2x_clang_minsize = 2,SpellingNotCalculated = 15};// Factory methodsstatic MinSizeAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static MinSizeAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static MinSizeAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static MinSizeAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsMinSizeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);MinSizeAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::MinSize; }};class MinVectorWidthAttr : public InheritableAttr {unsigned vectorWidth;public:enum Spelling {GNU_min_vector_width = 0,CXX11_clang_min_vector_width = 1,C2x_clang_min_vector_width = 2,SpellingNotCalculated = 15};// Factory methodsstatic MinVectorWidthAttr *CreateImplicit(ASTContext &Ctx, unsigned VectorWidth, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static MinVectorWidthAttr *Create(ASTContext &Ctx, unsigned VectorWidth, const AttributeCommonInfo &CommonInfo);static MinVectorWidthAttr *CreateImplicit(ASTContext &Ctx, unsigned VectorWidth, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static MinVectorWidthAttr *Create(ASTContext &Ctx, unsigned VectorWidth, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsMinVectorWidthAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, unsigned VectorWidth);MinVectorWidthAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;unsigned getVectorWidth() const {return vectorWidth;}static bool classof(const Attr *A) { return A->getKind() == attr::MinVectorWidth; }};class Mips16Attr : public InheritableAttr {public:enum Spelling {GNU_mips16 = 0,CXX11_gnu_mips16 = 1,C2x_gnu_mips16 = 2,SpellingNotCalculated = 15};// Factory methodsstatic Mips16Attr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static Mips16Attr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static Mips16Attr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static Mips16Attr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsMips16Attr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);Mips16Attr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::Mips16; }};class MipsInterruptAttr : public InheritableAttr {public:enum InterruptType {sw0,sw1,hw0,hw1,hw2,hw3,hw4,hw5,eic};private:InterruptType interrupt;public:enum Spelling {GNU_interrupt = 0,CXX11_gnu_interrupt = 1,C2x_gnu_interrupt = 2,SpellingNotCalculated = 15};// Factory methodsstatic MipsInterruptAttr *CreateImplicit(ASTContext &Ctx, InterruptType Interrupt, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static MipsInterruptAttr *Create(ASTContext &Ctx, InterruptType Interrupt, const AttributeCommonInfo &CommonInfo);static MipsInterruptAttr *CreateImplicit(ASTContext &Ctx, InterruptType Interrupt, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static MipsInterruptAttr *Create(ASTContext &Ctx, InterruptType Interrupt, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsMipsInterruptAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, InterruptType Interrupt);MipsInterruptAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;InterruptType getInterrupt() const {return interrupt;}static bool ConvertStrToInterruptType(StringRef Val, InterruptType &Out);static const char *ConvertInterruptTypeToStr(InterruptType Val);static bool classof(const Attr *A) { return A->getKind() == attr::MipsInterrupt; }};class MipsLongCallAttr : public InheritableAttr {public:enum Spelling {GNU_long_call = 0,CXX11_gnu_long_call = 1,C2x_gnu_long_call = 2,GNU_far = 3,CXX11_gnu_far = 4,C2x_gnu_far = 5,SpellingNotCalculated = 15};// Factory methodsstatic MipsLongCallAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static MipsLongCallAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static MipsLongCallAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, MipsLongCallAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static MipsLongCallAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, MipsLongCallAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsMipsLongCallAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);MipsLongCallAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::MipsLongCall; }};class MipsShortCallAttr : public InheritableAttr {public:enum Spelling {GNU_short_call = 0,CXX11_gnu_short_call = 1,C2x_gnu_short_call = 2,GNU_near = 3,CXX11_gnu_near = 4,C2x_gnu_near = 5,SpellingNotCalculated = 15};// Factory methodsstatic MipsShortCallAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static MipsShortCallAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static MipsShortCallAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, MipsShortCallAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static MipsShortCallAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, MipsShortCallAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsMipsShortCallAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);MipsShortCallAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::MipsShortCall; }};class ModeAttr : public Attr {IdentifierInfo * mode;public:enum Spelling {GNU_mode = 0,CXX11_gnu_mode = 1,C2x_gnu_mode = 2,SpellingNotCalculated = 15};// Factory methodsstatic ModeAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * Mode, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ModeAttr *Create(ASTContext &Ctx, IdentifierInfo * Mode, const AttributeCommonInfo &CommonInfo);static ModeAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * Mode, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ModeAttr *Create(ASTContext &Ctx, IdentifierInfo * Mode, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsModeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, IdentifierInfo * Mode);ModeAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;IdentifierInfo * getMode() const {return mode;}static bool classof(const Attr *A) { return A->getKind() == attr::Mode; }};class MustTailAttr : public StmtAttr {public:enum Spelling {GNU_musttail = 0,CXX11_clang_musttail = 1,C2x_clang_musttail = 2,SpellingNotCalculated = 15};// Factory methodsstatic MustTailAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static MustTailAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static MustTailAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static MustTailAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsMustTailAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);MustTailAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::MustTail; }};class NSConsumedAttr : public InheritableParamAttr {public:enum Spelling {GNU_ns_consumed = 0,CXX11_clang_ns_consumed = 1,C2x_clang_ns_consumed = 2,SpellingNotCalculated = 15};// Factory methodsstatic NSConsumedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NSConsumedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static NSConsumedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static NSConsumedAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsNSConsumedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);NSConsumedAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::NSConsumed; }};class NSConsumesSelfAttr : public InheritableAttr {public:enum Spelling {GNU_ns_consumes_self = 0,CXX11_clang_ns_consumes_self = 1,C2x_clang_ns_consumes_self = 2,SpellingNotCalculated = 15};// Factory methodsstatic NSConsumesSelfAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NSConsumesSelfAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static NSConsumesSelfAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static NSConsumesSelfAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsNSConsumesSelfAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);NSConsumesSelfAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::NSConsumesSelf; }};class NSErrorDomainAttr : public InheritableAttr {VarDecl * errorDomain;public:// Factory methodsstatic NSErrorDomainAttr *CreateImplicit(ASTContext &Ctx, VarDecl * ErrorDomain, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NSErrorDomainAttr *Create(ASTContext &Ctx, VarDecl * ErrorDomain, const AttributeCommonInfo &CommonInfo);static NSErrorDomainAttr *CreateImplicit(ASTContext &Ctx, VarDecl * ErrorDomain, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static NSErrorDomainAttr *Create(ASTContext &Ctx, VarDecl * ErrorDomain, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsNSErrorDomainAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, VarDecl * ErrorDomain);NSErrorDomainAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;VarDecl * getErrorDomain() const {return errorDomain;}static bool classof(const Attr *A) { return A->getKind() == attr::NSErrorDomain; }};class NSReturnsAutoreleasedAttr : public InheritableAttr {public:enum Spelling {GNU_ns_returns_autoreleased = 0,CXX11_clang_ns_returns_autoreleased = 1,C2x_clang_ns_returns_autoreleased = 2,SpellingNotCalculated = 15};// Factory methodsstatic NSReturnsAutoreleasedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NSReturnsAutoreleasedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static NSReturnsAutoreleasedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static NSReturnsAutoreleasedAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsNSReturnsAutoreleasedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);NSReturnsAutoreleasedAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::NSReturnsAutoreleased; }};class NSReturnsNotRetainedAttr : public InheritableAttr {public:enum Spelling {GNU_ns_returns_not_retained = 0,CXX11_clang_ns_returns_not_retained = 1,C2x_clang_ns_returns_not_retained = 2,SpellingNotCalculated = 15};// Factory methodsstatic NSReturnsNotRetainedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NSReturnsNotRetainedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static NSReturnsNotRetainedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static NSReturnsNotRetainedAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsNSReturnsNotRetainedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);NSReturnsNotRetainedAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::NSReturnsNotRetained; }};class NSReturnsRetainedAttr : public InheritableAttr {public:enum Spelling {GNU_ns_returns_retained = 0,CXX11_clang_ns_returns_retained = 1,C2x_clang_ns_returns_retained = 2,SpellingNotCalculated = 15};// Factory methodsstatic NSReturnsRetainedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NSReturnsRetainedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static NSReturnsRetainedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static NSReturnsRetainedAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsNSReturnsRetainedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);NSReturnsRetainedAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::NSReturnsRetained; }};class NakedAttr : public InheritableAttr {public:enum Spelling {GNU_naked = 0,CXX11_gnu_naked = 1,C2x_gnu_naked = 2,Declspec_naked = 3,SpellingNotCalculated = 15};// Factory methodsstatic NakedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NakedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static NakedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static NakedAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsNakedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);NakedAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::Naked; }};class NoAliasAttr : public InheritableAttr {public:// Factory methodsstatic NoAliasAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NoAliasAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static NoAliasAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static NoAliasAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsNoAliasAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);NoAliasAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::NoAlias; }};class NoBuiltinAttr : public Attr {unsigned builtinNames_Size;StringRef *builtinNames_;public:enum Spelling {GNU_no_builtin = 0,CXX11_clang_no_builtin = 1,C2x_clang_no_builtin = 2,SpellingNotCalculated = 15};// Factory methodsstatic NoBuiltinAttr *CreateImplicit(ASTContext &Ctx, StringRef *BuiltinNames, unsigned BuiltinNamesSize, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NoBuiltinAttr *Create(ASTContext &Ctx, StringRef *BuiltinNames, unsigned BuiltinNamesSize, const AttributeCommonInfo &CommonInfo);static NoBuiltinAttr *CreateImplicit(ASTContext &Ctx, StringRef *BuiltinNames, unsigned BuiltinNamesSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static NoBuiltinAttr *Create(ASTContext &Ctx, StringRef *BuiltinNames, unsigned BuiltinNamesSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsNoBuiltinAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, StringRef *BuiltinNames, unsigned BuiltinNamesSize);NoBuiltinAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);NoBuiltinAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;typedef StringRef* builtinNames_iterator;builtinNames_iterator builtinNames_begin() const { return builtinNames_; }builtinNames_iterator builtinNames_end() const { return builtinNames_ + builtinNames_Size; }unsigned builtinNames_size() const { return builtinNames_Size; }llvm::iterator_range<builtinNames_iterator> builtinNames() const { return llvm::make_range(builtinNames_begin(), builtinNames_end()); }static bool classof(const Attr *A) { return A->getKind() == attr::NoBuiltin; }};class NoCommonAttr : public InheritableAttr {public:enum Spelling {GNU_nocommon = 0,CXX11_gnu_nocommon = 1,C2x_gnu_nocommon = 2,SpellingNotCalculated = 15};// Factory methodsstatic NoCommonAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NoCommonAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static NoCommonAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static NoCommonAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsNoCommonAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);NoCommonAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::NoCommon; }};class NoDebugAttr : public InheritableAttr {public:enum Spelling {GNU_nodebug = 0,CXX11_gnu_nodebug = 1,C2x_gnu_nodebug = 2,SpellingNotCalculated = 15};// Factory methodsstatic NoDebugAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NoDebugAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static NoDebugAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static NoDebugAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsNoDebugAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);NoDebugAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::NoDebug; }};class NoDerefAttr : public TypeAttr {public:enum Spelling {GNU_noderef = 0,CXX11_clang_noderef = 1,C2x_clang_noderef = 2,SpellingNotCalculated = 15};// Factory methodsstatic NoDerefAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NoDerefAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static NoDerefAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static NoDerefAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsNoDerefAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);NoDerefAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::NoDeref; }};class NoDestroyAttr : public InheritableAttr {public:enum Spelling {GNU_no_destroy = 0,CXX11_clang_no_destroy = 1,SpellingNotCalculated = 15};// Factory methodsstatic NoDestroyAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NoDestroyAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static NoDestroyAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static NoDestroyAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsNoDestroyAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);NoDestroyAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::NoDestroy; }};class NoDuplicateAttr : public InheritableAttr {public:enum Spelling {GNU_noduplicate = 0,CXX11_clang_noduplicate = 1,C2x_clang_noduplicate = 2,SpellingNotCalculated = 15};// Factory methodsstatic NoDuplicateAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NoDuplicateAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static NoDuplicateAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static NoDuplicateAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsNoDuplicateAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);NoDuplicateAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::NoDuplicate; }};class NoEscapeAttr : public Attr {public:enum Spelling {GNU_noescape = 0,CXX11_clang_noescape = 1,C2x_clang_noescape = 2,SpellingNotCalculated = 15};// Factory methodsstatic NoEscapeAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NoEscapeAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static NoEscapeAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static NoEscapeAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsNoEscapeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);NoEscapeAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::NoEscape; }};class NoInlineAttr : public DeclOrStmtAttr {public:enum Spelling {Keyword_noinline = 0,GNU_noinline = 1,CXX11_gnu_noinline = 2,C2x_gnu_noinline = 3,CXX11_clang_noinline = 4,C2x_clang_noinline = 5,Declspec_noinline = 6,SpellingNotCalculated = 15};// Factory methodsstatic NoInlineAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NoInlineAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static NoInlineAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static NoInlineAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsNoInlineAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);NoInlineAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;bool isClangNoInline() const { return getAttributeSpellingListIndex() == 4 ||getAttributeSpellingListIndex() == 5; }static bool classof(const Attr *A) { return A->getKind() == attr::NoInline; }};class NoInstrumentFunctionAttr : public InheritableAttr {public:enum Spelling {GNU_no_instrument_function = 0,CXX11_gnu_no_instrument_function = 1,C2x_gnu_no_instrument_function = 2,SpellingNotCalculated = 15};// Factory methodsstatic NoInstrumentFunctionAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NoInstrumentFunctionAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static NoInstrumentFunctionAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static NoInstrumentFunctionAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsNoInstrumentFunctionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);NoInstrumentFunctionAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::NoInstrumentFunction; }};class NoMergeAttr : public DeclOrStmtAttr {public:enum Spelling {GNU_nomerge = 0,CXX11_clang_nomerge = 1,C2x_clang_nomerge = 2,SpellingNotCalculated = 15};// Factory methodsstatic NoMergeAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NoMergeAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static NoMergeAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static NoMergeAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsNoMergeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);NoMergeAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::NoMerge; }};class NoMicroMipsAttr : public InheritableAttr {public:enum Spelling {GNU_nomicromips = 0,CXX11_gnu_nomicromips = 1,C2x_gnu_nomicromips = 2,SpellingNotCalculated = 15};// Factory methodsstatic NoMicroMipsAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NoMicroMipsAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static NoMicroMipsAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static NoMicroMipsAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsNoMicroMipsAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);NoMicroMipsAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::NoMicroMips; }};class NoMips16Attr : public InheritableAttr {public:enum Spelling {GNU_nomips16 = 0,CXX11_gnu_nomips16 = 1,C2x_gnu_nomips16 = 2,SpellingNotCalculated = 15};// Factory methodsstatic NoMips16Attr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NoMips16Attr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static NoMips16Attr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static NoMips16Attr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsNoMips16Attr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);NoMips16Attr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::NoMips16; }};class NoProfileFunctionAttr : public InheritableAttr {public:enum Spelling {GNU_no_profile_instrument_function = 0,CXX11_gnu_no_profile_instrument_function = 1,C2x_gnu_no_profile_instrument_function = 2,SpellingNotCalculated = 15};// Factory methodsstatic NoProfileFunctionAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NoProfileFunctionAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static NoProfileFunctionAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static NoProfileFunctionAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsNoProfileFunctionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);NoProfileFunctionAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::NoProfileFunction; }};class NoRandomizeLayoutAttr : public InheritableAttr {public:enum Spelling {GNU_no_randomize_layout = 0,CXX11_gnu_no_randomize_layout = 1,C2x_gnu_no_randomize_layout = 2,SpellingNotCalculated = 15};// Factory methodsstatic NoRandomizeLayoutAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NoRandomizeLayoutAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static NoRandomizeLayoutAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static NoRandomizeLayoutAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsNoRandomizeLayoutAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);NoRandomizeLayoutAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::NoRandomizeLayout; }};class NoReturnAttr : public InheritableAttr {public:enum Spelling {GNU_noreturn = 0,CXX11_gnu_noreturn = 1,C2x_gnu_noreturn = 2,Declspec_noreturn = 3,SpellingNotCalculated = 15};// Factory methodsstatic NoReturnAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NoReturnAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static NoReturnAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static NoReturnAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsNoReturnAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);NoReturnAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::NoReturn; }};class NoSanitizeAttr : public InheritableAttr {unsigned sanitizers_Size;StringRef *sanitizers_;public:enum Spelling {GNU_no_sanitize = 0,CXX11_clang_no_sanitize = 1,C2x_clang_no_sanitize = 2,SpellingNotCalculated = 15};// Factory methodsstatic NoSanitizeAttr *CreateImplicit(ASTContext &Ctx, StringRef *Sanitizers, unsigned SanitizersSize, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NoSanitizeAttr *Create(ASTContext &Ctx, StringRef *Sanitizers, unsigned SanitizersSize, const AttributeCommonInfo &CommonInfo);static NoSanitizeAttr *CreateImplicit(ASTContext &Ctx, StringRef *Sanitizers, unsigned SanitizersSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static NoSanitizeAttr *Create(ASTContext &Ctx, StringRef *Sanitizers, unsigned SanitizersSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsNoSanitizeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, StringRef *Sanitizers, unsigned SanitizersSize);NoSanitizeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);NoSanitizeAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;typedef StringRef* sanitizers_iterator;sanitizers_iterator sanitizers_begin() const { return sanitizers_; }sanitizers_iterator sanitizers_end() const { return sanitizers_ + sanitizers_Size; }unsigned sanitizers_size() const { return sanitizers_Size; }llvm::iterator_range<sanitizers_iterator> sanitizers() const { return llvm::make_range(sanitizers_begin(), sanitizers_end()); }SanitizerMask getMask() const {SanitizerMask Mask;for (auto SanitizerName : sanitizers()) {SanitizerMask ParsedMask =parseSanitizerValue(SanitizerName, /*AllowGroups=*/true);Mask |= expandSanitizerGroups(ParsedMask);}return Mask;}bool hasCoverage() const {return llvm::is_contained(sanitizers(), "coverage");}static bool classof(const Attr *A) { return A->getKind() == attr::NoSanitize; }};class NoSpeculativeLoadHardeningAttr : public InheritableAttr {public:enum Spelling {GNU_no_speculative_load_hardening = 0,CXX11_clang_no_speculative_load_hardening = 1,C2x_clang_no_speculative_load_hardening = 2,SpellingNotCalculated = 15};// Factory methodsstatic NoSpeculativeLoadHardeningAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NoSpeculativeLoadHardeningAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static NoSpeculativeLoadHardeningAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static NoSpeculativeLoadHardeningAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsNoSpeculativeLoadHardeningAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);NoSpeculativeLoadHardeningAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::NoSpeculativeLoadHardening; }};class NoSplitStackAttr : public InheritableAttr {public:enum Spelling {GNU_no_split_stack = 0,CXX11_gnu_no_split_stack = 1,C2x_gnu_no_split_stack = 2,SpellingNotCalculated = 15};// Factory methodsstatic NoSplitStackAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NoSplitStackAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static NoSplitStackAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static NoSplitStackAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsNoSplitStackAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);NoSplitStackAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::NoSplitStack; }};class NoStackProtectorAttr : public InheritableAttr {public:enum Spelling {GNU_no_stack_protector = 0,CXX11_clang_no_stack_protector = 1,C2x_clang_no_stack_protector = 2,Declspec_safebuffers = 3,SpellingNotCalculated = 15};// Factory methodsstatic NoStackProtectorAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NoStackProtectorAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static NoStackProtectorAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, NoStackProtectorAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static NoStackProtectorAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, NoStackProtectorAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsNoStackProtectorAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);NoStackProtectorAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::NoStackProtector; }};class NoThreadSafetyAnalysisAttr : public InheritableAttr {public:enum Spelling {GNU_no_thread_safety_analysis = 0,CXX11_clang_no_thread_safety_analysis = 1,C2x_clang_no_thread_safety_analysis = 2,SpellingNotCalculated = 15};// Factory methodsstatic NoThreadSafetyAnalysisAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NoThreadSafetyAnalysisAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static NoThreadSafetyAnalysisAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static NoThreadSafetyAnalysisAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsNoThreadSafetyAnalysisAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);NoThreadSafetyAnalysisAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::NoThreadSafetyAnalysis; }};class NoThrowAttr : public InheritableAttr {public:enum Spelling {GNU_nothrow = 0,CXX11_gnu_nothrow = 1,C2x_gnu_nothrow = 2,Declspec_nothrow = 3,SpellingNotCalculated = 15};// Factory methodsstatic NoThrowAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NoThrowAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static NoThrowAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static NoThrowAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsNoThrowAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);NoThrowAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::NoThrow; }};class NoUniqueAddressAttr : public InheritableAttr {public:// Factory methodsstatic NoUniqueAddressAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NoUniqueAddressAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static NoUniqueAddressAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static NoUniqueAddressAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsNoUniqueAddressAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);NoUniqueAddressAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::NoUniqueAddress; }};class NoUwtableAttr : public InheritableAttr {public:enum Spelling {GNU_nouwtable = 0,CXX11_clang_nouwtable = 1,C2x_clang_nouwtable = 2,SpellingNotCalculated = 15};// Factory methodsstatic NoUwtableAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NoUwtableAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static NoUwtableAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static NoUwtableAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsNoUwtableAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);NoUwtableAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::NoUwtable; }};class NonNullAttr : public InheritableParamAttr {unsigned args_Size;ParamIdx *args_;public:enum Spelling {GNU_nonnull = 0,CXX11_gnu_nonnull = 1,C2x_gnu_nonnull = 2,SpellingNotCalculated = 15};// Factory methodsstatic NonNullAttr *CreateImplicit(ASTContext &Ctx, ParamIdx *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NonNullAttr *Create(ASTContext &Ctx, ParamIdx *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);static NonNullAttr *CreateImplicit(ASTContext &Ctx, ParamIdx *Args, unsigned ArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static NonNullAttr *Create(ASTContext &Ctx, ParamIdx *Args, unsigned ArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsNonNullAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, ParamIdx *Args, unsigned ArgsSize);NonNullAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);NonNullAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;typedef ParamIdx* args_iterator;args_iterator args_begin() const { return args_; }args_iterator args_end() const { return args_ + args_Size; }unsigned args_size() const { return args_Size; }llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); }bool isNonNull(unsigned IdxAST) const {if (!args_size())return true;return llvm::any_of(args(), [=](const ParamIdx &Idx) {return Idx.getASTIndex() == IdxAST;});}static bool classof(const Attr *A) { return A->getKind() == attr::NonNull; }};class NotTailCalledAttr : public InheritableAttr {public:enum Spelling {GNU_not_tail_called = 0,CXX11_clang_not_tail_called = 1,C2x_clang_not_tail_called = 2,SpellingNotCalculated = 15};// Factory methodsstatic NotTailCalledAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static NotTailCalledAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static NotTailCalledAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static NotTailCalledAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsNotTailCalledAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);NotTailCalledAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::NotTailCalled; }};class OMPAllocateDeclAttr : public InheritableAttr {public:enum AllocatorTypeTy {OMPNullMemAlloc,OMPDefaultMemAlloc,OMPLargeCapMemAlloc,OMPConstMemAlloc,OMPHighBWMemAlloc,OMPLowLatMemAlloc,OMPCGroupMemAlloc,OMPPTeamMemAlloc,OMPThreadMemAlloc,OMPUserDefinedMemAlloc};private:AllocatorTypeTy allocatorType;Expr * allocator;Expr * alignment;public:// Factory methodsstatic OMPAllocateDeclAttr *CreateImplicit(ASTContext &Ctx, AllocatorTypeTy AllocatorType, Expr * Allocator, Expr * Alignment, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static OMPAllocateDeclAttr *Create(ASTContext &Ctx, AllocatorTypeTy AllocatorType, Expr * Allocator, Expr * Alignment, const AttributeCommonInfo &CommonInfo);static OMPAllocateDeclAttr *CreateImplicit(ASTContext &Ctx, AllocatorTypeTy AllocatorType, Expr * Allocator, Expr * Alignment, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static OMPAllocateDeclAttr *Create(ASTContext &Ctx, AllocatorTypeTy AllocatorType, Expr * Allocator, Expr * Alignment, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsOMPAllocateDeclAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, AllocatorTypeTy AllocatorType, Expr * Allocator, Expr * Alignment);OMPAllocateDeclAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;AllocatorTypeTy getAllocatorType() const {return allocatorType;}static bool ConvertStrToAllocatorTypeTy(StringRef Val, AllocatorTypeTy &Out);static const char *ConvertAllocatorTypeTyToStr(AllocatorTypeTy Val);Expr * getAllocator() const {return allocator;}Expr * getAlignment() const {return alignment;}static bool classof(const Attr *A) { return A->getKind() == attr::OMPAllocateDecl; }};class OMPCaptureKindAttr : public Attr {unsigned captureKindVal;public:// Factory methodsstatic OMPCaptureKindAttr *CreateImplicit(ASTContext &Ctx, unsigned CaptureKindVal, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static OMPCaptureKindAttr *Create(ASTContext &Ctx, unsigned CaptureKindVal, const AttributeCommonInfo &CommonInfo);static OMPCaptureKindAttr *CreateImplicit(ASTContext &Ctx, unsigned CaptureKindVal, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static OMPCaptureKindAttr *Create(ASTContext &Ctx, unsigned CaptureKindVal, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsOMPCaptureKindAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, unsigned CaptureKindVal);OMPCaptureKindAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;unsigned getCaptureKindVal() const {return captureKindVal;}llvm::omp::Clause getCaptureKind() const {return static_cast<llvm::omp::Clause>(getCaptureKindVal());}static bool classof(const Attr *A) { return A->getKind() == attr::OMPCaptureKind; }};class OMPCaptureNoInitAttr : public InheritableAttr {public:// Factory methodsstatic OMPCaptureNoInitAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static OMPCaptureNoInitAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static OMPCaptureNoInitAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static OMPCaptureNoInitAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsOMPCaptureNoInitAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);OMPCaptureNoInitAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::OMPCaptureNoInit; }};class OMPDeclareSimdDeclAttr : public Attr {public:enum BranchStateTy {BS_Undefined,BS_Inbranch,BS_Notinbranch};private:BranchStateTy branchState;Expr * simdlen;unsigned uniforms_Size;Expr * *uniforms_;unsigned aligneds_Size;Expr * *aligneds_;unsigned alignments_Size;Expr * *alignments_;unsigned linears_Size;Expr * *linears_;unsigned modifiers_Size;unsigned *modifiers_;unsigned steps_Size;Expr * *steps_;public:// Factory methodsstatic OMPDeclareSimdDeclAttr *CreateImplicit(ASTContext &Ctx, BranchStateTy BranchState, Expr * Simdlen, Expr * *Uniforms, unsigned UniformsSize, Expr * *Aligneds, unsigned AlignedsSize, Expr * *Alignments, unsigned AlignmentsSize, Expr * *Linears, unsigned LinearsSize, unsigned *Modifiers, unsigned ModifiersSize, Expr * *Steps, unsigned StepsSize, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static OMPDeclareSimdDeclAttr *Create(ASTContext &Ctx, BranchStateTy BranchState, Expr * Simdlen, Expr * *Uniforms, unsigned UniformsSize, Expr * *Aligneds, unsigned AlignedsSize, Expr * *Alignments, unsigned AlignmentsSize, Expr * *Linears, unsigned LinearsSize, unsigned *Modifiers, unsigned ModifiersSize, Expr * *Steps, unsigned StepsSize, const AttributeCommonInfo &CommonInfo);static OMPDeclareSimdDeclAttr *CreateImplicit(ASTContext &Ctx, BranchStateTy BranchState, Expr * Simdlen, Expr * *Uniforms, unsigned UniformsSize, Expr * *Aligneds, unsigned AlignedsSize, Expr * *Alignments, unsigned AlignmentsSize, Expr * *Linears, unsigned LinearsSize, unsigned *Modifiers, unsigned ModifiersSize, Expr * *Steps, unsigned StepsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static OMPDeclareSimdDeclAttr *Create(ASTContext &Ctx, BranchStateTy BranchState, Expr * Simdlen, Expr * *Uniforms, unsigned UniformsSize, Expr * *Aligneds, unsigned AlignedsSize, Expr * *Alignments, unsigned AlignmentsSize, Expr * *Linears, unsigned LinearsSize, unsigned *Modifiers, unsigned ModifiersSize, Expr * *Steps, unsigned StepsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsOMPDeclareSimdDeclAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, BranchStateTy BranchState, Expr * Simdlen, Expr * *Uniforms, unsigned UniformsSize, Expr * *Aligneds, unsigned AlignedsSize, Expr * *Alignments, unsigned AlignmentsSize, Expr * *Linears, unsigned LinearsSize, unsigned *Modifiers, unsigned ModifiersSize, Expr * *Steps, unsigned StepsSize);OMPDeclareSimdDeclAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, BranchStateTy BranchState, Expr * Simdlen);OMPDeclareSimdDeclAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;BranchStateTy getBranchState() const {return branchState;}static bool ConvertStrToBranchStateTy(StringRef Val, BranchStateTy &Out);static const char *ConvertBranchStateTyToStr(BranchStateTy Val);Expr * getSimdlen() const {return simdlen;}typedef Expr ** uniforms_iterator;uniforms_iterator uniforms_begin() const { return uniforms_; }uniforms_iterator uniforms_end() const { return uniforms_ + uniforms_Size; }unsigned uniforms_size() const { return uniforms_Size; }llvm::iterator_range<uniforms_iterator> uniforms() const { return llvm::make_range(uniforms_begin(), uniforms_end()); }typedef Expr ** aligneds_iterator;aligneds_iterator aligneds_begin() const { return aligneds_; }aligneds_iterator aligneds_end() const { return aligneds_ + aligneds_Size; }unsigned aligneds_size() const { return aligneds_Size; }llvm::iterator_range<aligneds_iterator> aligneds() const { return llvm::make_range(aligneds_begin(), aligneds_end()); }typedef Expr ** alignments_iterator;alignments_iterator alignments_begin() const { return alignments_; }alignments_iterator alignments_end() const { return alignments_ + alignments_Size; }unsigned alignments_size() const { return alignments_Size; }llvm::iterator_range<alignments_iterator> alignments() const { return llvm::make_range(alignments_begin(), alignments_end()); }typedef Expr ** linears_iterator;linears_iterator linears_begin() const { return linears_; }linears_iterator linears_end() const { return linears_ + linears_Size; }unsigned linears_size() const { return linears_Size; }llvm::iterator_range<linears_iterator> linears() const { return llvm::make_range(linears_begin(), linears_end()); }typedef unsigned* modifiers_iterator;modifiers_iterator modifiers_begin() const { return modifiers_; }modifiers_iterator modifiers_end() const { return modifiers_ + modifiers_Size; }unsigned modifiers_size() const { return modifiers_Size; }llvm::iterator_range<modifiers_iterator> modifiers() const { return llvm::make_range(modifiers_begin(), modifiers_end()); }typedef Expr ** steps_iterator;steps_iterator steps_begin() const { return steps_; }steps_iterator steps_end() const { return steps_ + steps_Size; }unsigned steps_size() const { return steps_Size; }llvm::iterator_range<steps_iterator> steps() const { return llvm::make_range(steps_begin(), steps_end()); }void printPrettyPragma(raw_ostream & OS, const PrintingPolicy &Policy)const;static bool classof(const Attr *A) { return A->getKind() == attr::OMPDeclareSimdDecl; }};class OMPDeclareTargetDeclAttr : public InheritableAttr {public:enum MapTypeTy {MT_To,MT_Enter,MT_Link};private:MapTypeTy mapType;public:enum DevTypeTy {DT_Host,DT_NoHost,DT_Any};private:DevTypeTy devType;Expr * indirectExpr;bool indirect;unsigned level;public:// Factory methodsstatic OMPDeclareTargetDeclAttr *CreateImplicit(ASTContext &Ctx, MapTypeTy MapType, DevTypeTy DevType, Expr * IndirectExpr, bool Indirect, unsigned Level, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static OMPDeclareTargetDeclAttr *Create(ASTContext &Ctx, MapTypeTy MapType, DevTypeTy DevType, Expr * IndirectExpr, bool Indirect, unsigned Level, const AttributeCommonInfo &CommonInfo);static OMPDeclareTargetDeclAttr *CreateImplicit(ASTContext &Ctx, MapTypeTy MapType, DevTypeTy DevType, Expr * IndirectExpr, bool Indirect, unsigned Level, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static OMPDeclareTargetDeclAttr *Create(ASTContext &Ctx, MapTypeTy MapType, DevTypeTy DevType, Expr * IndirectExpr, bool Indirect, unsigned Level, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsOMPDeclareTargetDeclAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, MapTypeTy MapType, DevTypeTy DevType, Expr * IndirectExpr, bool Indirect, unsigned Level);OMPDeclareTargetDeclAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;MapTypeTy getMapType() const {return mapType;}static bool ConvertStrToMapTypeTy(StringRef Val, MapTypeTy &Out);static const char *ConvertMapTypeTyToStr(MapTypeTy Val);DevTypeTy getDevType() const {return devType;}static bool ConvertStrToDevTypeTy(StringRef Val, DevTypeTy &Out);static const char *ConvertDevTypeTyToStr(DevTypeTy Val);Expr * getIndirectExpr() const {return indirectExpr;}bool getIndirect() const {return indirect;}unsigned getLevel() const {return level;}void printPrettyPragma(raw_ostream &OS, const PrintingPolicy &Policy) const;static std::optional<MapTypeTy>isDeclareTargetDeclaration(const ValueDecl *VD);static std::optional<OMPDeclareTargetDeclAttr*> getActiveAttr(const ValueDecl *VD);static std::optional<DevTypeTy> getDeviceType(const ValueDecl *VD);static std::optional<SourceLocation> getLocation(const ValueDecl *VD);static bool classof(const Attr *A) { return A->getKind() == attr::OMPDeclareTargetDecl; }};class OMPDeclareVariantAttr : public InheritableAttr {Expr * variantFuncRef;OMPTraitInfo * traitInfos;unsigned adjustArgsNothing_Size;Expr * *adjustArgsNothing_;unsigned adjustArgsNeedDevicePtr_Size;Expr * *adjustArgsNeedDevicePtr_;unsigned appendArgs_Size;OMPInteropInfo *appendArgs_;public:// Factory methodsstatic OMPDeclareVariantAttr *CreateImplicit(ASTContext &Ctx, Expr * VariantFuncRef, OMPTraitInfo * TraitInfos, Expr * *AdjustArgsNothing, unsigned AdjustArgsNothingSize, Expr * *AdjustArgsNeedDevicePtr, unsigned AdjustArgsNeedDevicePtrSize, OMPInteropInfo *AppendArgs, unsigned AppendArgsSize, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static OMPDeclareVariantAttr *Create(ASTContext &Ctx, Expr * VariantFuncRef, OMPTraitInfo * TraitInfos, Expr * *AdjustArgsNothing, unsigned AdjustArgsNothingSize, Expr * *AdjustArgsNeedDevicePtr, unsigned AdjustArgsNeedDevicePtrSize, OMPInteropInfo *AppendArgs, unsigned AppendArgsSize, const AttributeCommonInfo &CommonInfo);static OMPDeclareVariantAttr *CreateImplicit(ASTContext &Ctx, Expr * VariantFuncRef, OMPTraitInfo * TraitInfos, Expr * *AdjustArgsNothing, unsigned AdjustArgsNothingSize, Expr * *AdjustArgsNeedDevicePtr, unsigned AdjustArgsNeedDevicePtrSize, OMPInteropInfo *AppendArgs, unsigned AppendArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static OMPDeclareVariantAttr *Create(ASTContext &Ctx, Expr * VariantFuncRef, OMPTraitInfo * TraitInfos, Expr * *AdjustArgsNothing, unsigned AdjustArgsNothingSize, Expr * *AdjustArgsNeedDevicePtr, unsigned AdjustArgsNeedDevicePtrSize, OMPInteropInfo *AppendArgs, unsigned AppendArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsOMPDeclareVariantAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Expr * VariantFuncRef, OMPTraitInfo * TraitInfos, Expr * *AdjustArgsNothing, unsigned AdjustArgsNothingSize, Expr * *AdjustArgsNeedDevicePtr, unsigned AdjustArgsNeedDevicePtrSize, OMPInteropInfo *AppendArgs, unsigned AppendArgsSize);OMPDeclareVariantAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Expr * VariantFuncRef, OMPTraitInfo * TraitInfos, OMPInteropInfo *AppendArgs, unsigned AppendArgsSize);OMPDeclareVariantAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Expr * getVariantFuncRef() const {return variantFuncRef;}OMPTraitInfo * getTraitInfos() const {return traitInfos;}typedef Expr ** adjustArgsNothing_iterator;adjustArgsNothing_iterator adjustArgsNothing_begin() const { return adjustArgsNothing_; }adjustArgsNothing_iterator adjustArgsNothing_end() const { return adjustArgsNothing_ + adjustArgsNothing_Size; }unsigned adjustArgsNothing_size() const { return adjustArgsNothing_Size; }llvm::iterator_range<adjustArgsNothing_iterator> adjustArgsNothing() const { return llvm::make_range(adjustArgsNothing_begin(), adjustArgsNothing_end()); }typedef Expr ** adjustArgsNeedDevicePtr_iterator;adjustArgsNeedDevicePtr_iterator adjustArgsNeedDevicePtr_begin() const { return adjustArgsNeedDevicePtr_; }adjustArgsNeedDevicePtr_iterator adjustArgsNeedDevicePtr_end() const { return adjustArgsNeedDevicePtr_ + adjustArgsNeedDevicePtr_Size; }unsigned adjustArgsNeedDevicePtr_size() const { return adjustArgsNeedDevicePtr_Size; }llvm::iterator_range<adjustArgsNeedDevicePtr_iterator> adjustArgsNeedDevicePtr() const { return llvm::make_range(adjustArgsNeedDevicePtr_begin(), adjustArgsNeedDevicePtr_end()); }typedef OMPInteropInfo* appendArgs_iterator;appendArgs_iterator appendArgs_begin() const { return appendArgs_; }appendArgs_iterator appendArgs_end() const { return appendArgs_ + appendArgs_Size; }unsigned appendArgs_size() const { return appendArgs_Size; }llvm::iterator_range<appendArgs_iterator> appendArgs() const { return llvm::make_range(appendArgs_begin(), appendArgs_end()); }OMPTraitInfo &getTraitInfo() { return *traitInfos; }void printPrettyPragma(raw_ostream & OS, const PrintingPolicy &Policy)const;static StringRef getInteropTypeString(const OMPInteropInfo *I) {if (I->IsTarget && I->IsTargetSync)return "target,targetsync";if (I->IsTarget)return "target";return "targetsync";}static bool classof(const Attr *A) { return A->getKind() == attr::OMPDeclareVariant; }};class OMPReferencedVarAttr : public Attr {Expr * ref;public:// Factory methodsstatic OMPReferencedVarAttr *CreateImplicit(ASTContext &Ctx, Expr * Ref, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static OMPReferencedVarAttr *Create(ASTContext &Ctx, Expr * Ref, const AttributeCommonInfo &CommonInfo);static OMPReferencedVarAttr *CreateImplicit(ASTContext &Ctx, Expr * Ref, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static OMPReferencedVarAttr *Create(ASTContext &Ctx, Expr * Ref, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsOMPReferencedVarAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Expr * Ref);OMPReferencedVarAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Expr * getRef() const {return ref;}static bool classof(const Attr *A) { return A->getKind() == attr::OMPReferencedVar; }};class OMPThreadPrivateDeclAttr : public InheritableAttr {public:// Factory methodsstatic OMPThreadPrivateDeclAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static OMPThreadPrivateDeclAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static OMPThreadPrivateDeclAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static OMPThreadPrivateDeclAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsOMPThreadPrivateDeclAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);OMPThreadPrivateDeclAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::OMPThreadPrivateDecl; }};class OSConsumedAttr : public InheritableParamAttr {public:enum Spelling {GNU_os_consumed = 0,CXX11_clang_os_consumed = 1,C2x_clang_os_consumed = 2,SpellingNotCalculated = 15};// Factory methodsstatic OSConsumedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static OSConsumedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static OSConsumedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static OSConsumedAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsOSConsumedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);OSConsumedAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::OSConsumed; }};class OSConsumesThisAttr : public InheritableAttr {public:enum Spelling {GNU_os_consumes_this = 0,CXX11_clang_os_consumes_this = 1,C2x_clang_os_consumes_this = 2,SpellingNotCalculated = 15};// Factory methodsstatic OSConsumesThisAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static OSConsumesThisAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static OSConsumesThisAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static OSConsumesThisAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsOSConsumesThisAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);OSConsumesThisAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::OSConsumesThis; }};class OSReturnsNotRetainedAttr : public InheritableAttr {public:enum Spelling {GNU_os_returns_not_retained = 0,CXX11_clang_os_returns_not_retained = 1,C2x_clang_os_returns_not_retained = 2,SpellingNotCalculated = 15};// Factory methodsstatic OSReturnsNotRetainedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static OSReturnsNotRetainedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static OSReturnsNotRetainedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static OSReturnsNotRetainedAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsOSReturnsNotRetainedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);OSReturnsNotRetainedAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::OSReturnsNotRetained; }};class OSReturnsRetainedAttr : public InheritableAttr {public:enum Spelling {GNU_os_returns_retained = 0,CXX11_clang_os_returns_retained = 1,C2x_clang_os_returns_retained = 2,SpellingNotCalculated = 15};// Factory methodsstatic OSReturnsRetainedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static OSReturnsRetainedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static OSReturnsRetainedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static OSReturnsRetainedAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsOSReturnsRetainedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);OSReturnsRetainedAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::OSReturnsRetained; }};class OSReturnsRetainedOnNonZeroAttr : public InheritableAttr {public:enum Spelling {GNU_os_returns_retained_on_non_zero = 0,CXX11_clang_os_returns_retained_on_non_zero = 1,C2x_clang_os_returns_retained_on_non_zero = 2,SpellingNotCalculated = 15};// Factory methodsstatic OSReturnsRetainedOnNonZeroAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static OSReturnsRetainedOnNonZeroAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static OSReturnsRetainedOnNonZeroAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static OSReturnsRetainedOnNonZeroAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsOSReturnsRetainedOnNonZeroAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);OSReturnsRetainedOnNonZeroAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::OSReturnsRetainedOnNonZero; }};class OSReturnsRetainedOnZeroAttr : public InheritableAttr {public:enum Spelling {GNU_os_returns_retained_on_zero = 0,CXX11_clang_os_returns_retained_on_zero = 1,C2x_clang_os_returns_retained_on_zero = 2,SpellingNotCalculated = 15};// Factory methodsstatic OSReturnsRetainedOnZeroAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static OSReturnsRetainedOnZeroAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static OSReturnsRetainedOnZeroAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static OSReturnsRetainedOnZeroAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsOSReturnsRetainedOnZeroAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);OSReturnsRetainedOnZeroAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::OSReturnsRetainedOnZero; }};class ObjCBoxableAttr : public Attr {public:enum Spelling {GNU_objc_boxable = 0,CXX11_clang_objc_boxable = 1,C2x_clang_objc_boxable = 2,SpellingNotCalculated = 15};// Factory methodsstatic ObjCBoxableAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ObjCBoxableAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ObjCBoxableAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ObjCBoxableAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsObjCBoxableAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ObjCBoxableAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::ObjCBoxable; }};class ObjCBridgeAttr : public InheritableAttr {IdentifierInfo * bridgedType;public:enum Spelling {GNU_objc_bridge = 0,CXX11_clang_objc_bridge = 1,C2x_clang_objc_bridge = 2,SpellingNotCalculated = 15};// Factory methodsstatic ObjCBridgeAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * BridgedType, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ObjCBridgeAttr *Create(ASTContext &Ctx, IdentifierInfo * BridgedType, const AttributeCommonInfo &CommonInfo);static ObjCBridgeAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * BridgedType, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ObjCBridgeAttr *Create(ASTContext &Ctx, IdentifierInfo * BridgedType, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsObjCBridgeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, IdentifierInfo * BridgedType);ObjCBridgeAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;IdentifierInfo * getBridgedType() const {return bridgedType;}static bool classof(const Attr *A) { return A->getKind() == attr::ObjCBridge; }};class ObjCBridgeMutableAttr : public InheritableAttr {IdentifierInfo * bridgedType;public:enum Spelling {GNU_objc_bridge_mutable = 0,CXX11_clang_objc_bridge_mutable = 1,C2x_clang_objc_bridge_mutable = 2,SpellingNotCalculated = 15};// Factory methodsstatic ObjCBridgeMutableAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * BridgedType, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ObjCBridgeMutableAttr *Create(ASTContext &Ctx, IdentifierInfo * BridgedType, const AttributeCommonInfo &CommonInfo);static ObjCBridgeMutableAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * BridgedType, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ObjCBridgeMutableAttr *Create(ASTContext &Ctx, IdentifierInfo * BridgedType, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsObjCBridgeMutableAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, IdentifierInfo * BridgedType);ObjCBridgeMutableAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;IdentifierInfo * getBridgedType() const {return bridgedType;}static bool classof(const Attr *A) { return A->getKind() == attr::ObjCBridgeMutable; }};class ObjCBridgeRelatedAttr : public InheritableAttr {IdentifierInfo * relatedClass;IdentifierInfo * classMethod;IdentifierInfo * instanceMethod;public:enum Spelling {GNU_objc_bridge_related = 0,CXX11_clang_objc_bridge_related = 1,C2x_clang_objc_bridge_related = 2,SpellingNotCalculated = 15};// Factory methodsstatic ObjCBridgeRelatedAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * RelatedClass, IdentifierInfo * ClassMethod, IdentifierInfo * InstanceMethod, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ObjCBridgeRelatedAttr *Create(ASTContext &Ctx, IdentifierInfo * RelatedClass, IdentifierInfo * ClassMethod, IdentifierInfo * InstanceMethod, const AttributeCommonInfo &CommonInfo);static ObjCBridgeRelatedAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * RelatedClass, IdentifierInfo * ClassMethod, IdentifierInfo * InstanceMethod, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ObjCBridgeRelatedAttr *Create(ASTContext &Ctx, IdentifierInfo * RelatedClass, IdentifierInfo * ClassMethod, IdentifierInfo * InstanceMethod, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsObjCBridgeRelatedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, IdentifierInfo * RelatedClass, IdentifierInfo * ClassMethod, IdentifierInfo * InstanceMethod);ObjCBridgeRelatedAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;IdentifierInfo * getRelatedClass() const {return relatedClass;}IdentifierInfo * getClassMethod() const {return classMethod;}IdentifierInfo * getInstanceMethod() const {return instanceMethod;}static bool classof(const Attr *A) { return A->getKind() == attr::ObjCBridgeRelated; }};class ObjCClassStubAttr : public Attr {public:enum Spelling {GNU_objc_class_stub = 0,CXX11_clang_objc_class_stub = 1,C2x_clang_objc_class_stub = 2,SpellingNotCalculated = 15};// Factory methodsstatic ObjCClassStubAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ObjCClassStubAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ObjCClassStubAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ObjCClassStubAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsObjCClassStubAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ObjCClassStubAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::ObjCClassStub; }};class ObjCDesignatedInitializerAttr : public Attr {public:enum Spelling {GNU_objc_designated_initializer = 0,CXX11_clang_objc_designated_initializer = 1,C2x_clang_objc_designated_initializer = 2,SpellingNotCalculated = 15};// Factory methodsstatic ObjCDesignatedInitializerAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ObjCDesignatedInitializerAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ObjCDesignatedInitializerAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ObjCDesignatedInitializerAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsObjCDesignatedInitializerAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ObjCDesignatedInitializerAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::ObjCDesignatedInitializer; }};class ObjCDirectAttr : public Attr {public:enum Spelling {GNU_objc_direct = 0,CXX11_clang_objc_direct = 1,C2x_clang_objc_direct = 2,SpellingNotCalculated = 15};// Factory methodsstatic ObjCDirectAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ObjCDirectAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ObjCDirectAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ObjCDirectAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsObjCDirectAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ObjCDirectAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::ObjCDirect; }};class ObjCDirectMembersAttr : public Attr {public:enum Spelling {GNU_objc_direct_members = 0,CXX11_clang_objc_direct_members = 1,C2x_clang_objc_direct_members = 2,SpellingNotCalculated = 15};// Factory methodsstatic ObjCDirectMembersAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ObjCDirectMembersAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ObjCDirectMembersAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ObjCDirectMembersAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsObjCDirectMembersAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ObjCDirectMembersAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::ObjCDirectMembers; }};class ObjCExceptionAttr : public InheritableAttr {public:enum Spelling {GNU_objc_exception = 0,CXX11_clang_objc_exception = 1,C2x_clang_objc_exception = 2,SpellingNotCalculated = 15};// Factory methodsstatic ObjCExceptionAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ObjCExceptionAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ObjCExceptionAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ObjCExceptionAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsObjCExceptionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ObjCExceptionAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::ObjCException; }};class ObjCExplicitProtocolImplAttr : public InheritableAttr {public:enum Spelling {GNU_objc_protocol_requires_explicit_implementation = 0,CXX11_clang_objc_protocol_requires_explicit_implementation = 1,C2x_clang_objc_protocol_requires_explicit_implementation = 2,SpellingNotCalculated = 15};// Factory methodsstatic ObjCExplicitProtocolImplAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ObjCExplicitProtocolImplAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ObjCExplicitProtocolImplAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ObjCExplicitProtocolImplAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsObjCExplicitProtocolImplAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ObjCExplicitProtocolImplAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::ObjCExplicitProtocolImpl; }};class ObjCExternallyRetainedAttr : public InheritableAttr {public:enum Spelling {GNU_objc_externally_retained = 0,CXX11_clang_objc_externally_retained = 1,C2x_clang_objc_externally_retained = 2,SpellingNotCalculated = 15};// Factory methodsstatic ObjCExternallyRetainedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ObjCExternallyRetainedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ObjCExternallyRetainedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ObjCExternallyRetainedAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsObjCExternallyRetainedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ObjCExternallyRetainedAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::ObjCExternallyRetained; }};class ObjCGCAttr : public TypeAttr {IdentifierInfo * kind;public:enum Spelling {GNU_objc_gc = 0,CXX11_clang_objc_gc = 1,C2x_clang_objc_gc = 2,SpellingNotCalculated = 15};// Factory methodsstatic ObjCGCAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * Kind, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ObjCGCAttr *Create(ASTContext &Ctx, IdentifierInfo * Kind, const AttributeCommonInfo &CommonInfo);static ObjCGCAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * Kind, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ObjCGCAttr *Create(ASTContext &Ctx, IdentifierInfo * Kind, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsObjCGCAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, IdentifierInfo * Kind);ObjCGCAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;IdentifierInfo * getKind() const {return kind;}static bool classof(const Attr *A) { return A->getKind() == attr::ObjCGC; }};class ObjCIndependentClassAttr : public InheritableAttr {public:enum Spelling {GNU_objc_independent_class = 0,CXX11_clang_objc_independent_class = 1,C2x_clang_objc_independent_class = 2,SpellingNotCalculated = 15};// Factory methodsstatic ObjCIndependentClassAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ObjCIndependentClassAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ObjCIndependentClassAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ObjCIndependentClassAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsObjCIndependentClassAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ObjCIndependentClassAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::ObjCIndependentClass; }};class ObjCInertUnsafeUnretainedAttr : public TypeAttr {public:// Factory methodsstatic ObjCInertUnsafeUnretainedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ObjCInertUnsafeUnretainedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ObjCInertUnsafeUnretainedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ObjCInertUnsafeUnretainedAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsObjCInertUnsafeUnretainedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ObjCInertUnsafeUnretainedAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::ObjCInertUnsafeUnretained; }};class ObjCKindOfAttr : public TypeAttr {public:// Factory methodsstatic ObjCKindOfAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ObjCKindOfAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ObjCKindOfAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ObjCKindOfAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsObjCKindOfAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ObjCKindOfAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::ObjCKindOf; }};class ObjCMethodFamilyAttr : public InheritableAttr {public:enum FamilyKind {OMF_None,OMF_alloc,OMF_copy,OMF_init,OMF_mutableCopy,OMF_new};private:FamilyKind family;public:enum Spelling {GNU_objc_method_family = 0,CXX11_clang_objc_method_family = 1,C2x_clang_objc_method_family = 2,SpellingNotCalculated = 15};// Factory methodsstatic ObjCMethodFamilyAttr *CreateImplicit(ASTContext &Ctx, FamilyKind Family, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ObjCMethodFamilyAttr *Create(ASTContext &Ctx, FamilyKind Family, const AttributeCommonInfo &CommonInfo);static ObjCMethodFamilyAttr *CreateImplicit(ASTContext &Ctx, FamilyKind Family, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ObjCMethodFamilyAttr *Create(ASTContext &Ctx, FamilyKind Family, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsObjCMethodFamilyAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, FamilyKind Family);ObjCMethodFamilyAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;FamilyKind getFamily() const {return family;}static bool ConvertStrToFamilyKind(StringRef Val, FamilyKind &Out);static const char *ConvertFamilyKindToStr(FamilyKind Val);static bool classof(const Attr *A) { return A->getKind() == attr::ObjCMethodFamily; }};class ObjCNSObjectAttr : public InheritableAttr {public:enum Spelling {GNU_NSObject = 0,CXX11_clang_NSObject = 1,C2x_clang_NSObject = 2,SpellingNotCalculated = 15};// Factory methodsstatic ObjCNSObjectAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ObjCNSObjectAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ObjCNSObjectAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ObjCNSObjectAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsObjCNSObjectAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ObjCNSObjectAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::ObjCNSObject; }};class ObjCNonLazyClassAttr : public Attr {public:enum Spelling {GNU_objc_nonlazy_class = 0,CXX11_clang_objc_nonlazy_class = 1,C2x_clang_objc_nonlazy_class = 2,SpellingNotCalculated = 15};// Factory methodsstatic ObjCNonLazyClassAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ObjCNonLazyClassAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ObjCNonLazyClassAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ObjCNonLazyClassAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsObjCNonLazyClassAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ObjCNonLazyClassAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::ObjCNonLazyClass; }};class ObjCNonRuntimeProtocolAttr : public Attr {public:enum Spelling {GNU_objc_non_runtime_protocol = 0,CXX11_clang_objc_non_runtime_protocol = 1,C2x_clang_objc_non_runtime_protocol = 2,SpellingNotCalculated = 15};// Factory methodsstatic ObjCNonRuntimeProtocolAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ObjCNonRuntimeProtocolAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ObjCNonRuntimeProtocolAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ObjCNonRuntimeProtocolAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsObjCNonRuntimeProtocolAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ObjCNonRuntimeProtocolAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::ObjCNonRuntimeProtocol; }};class ObjCOwnershipAttr : public InheritableAttr {IdentifierInfo * kind;public:enum Spelling {GNU_objc_ownership = 0,CXX11_clang_objc_ownership = 1,C2x_clang_objc_ownership = 2,SpellingNotCalculated = 15};// Factory methodsstatic ObjCOwnershipAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * Kind, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ObjCOwnershipAttr *Create(ASTContext &Ctx, IdentifierInfo * Kind, const AttributeCommonInfo &CommonInfo);static ObjCOwnershipAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * Kind, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ObjCOwnershipAttr *Create(ASTContext &Ctx, IdentifierInfo * Kind, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsObjCOwnershipAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, IdentifierInfo * Kind);ObjCOwnershipAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;IdentifierInfo * getKind() const {return kind;}static bool classof(const Attr *A) { return A->getKind() == attr::ObjCOwnership; }};class ObjCPreciseLifetimeAttr : public InheritableAttr {public:enum Spelling {GNU_objc_precise_lifetime = 0,CXX11_clang_objc_precise_lifetime = 1,C2x_clang_objc_precise_lifetime = 2,SpellingNotCalculated = 15};// Factory methodsstatic ObjCPreciseLifetimeAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ObjCPreciseLifetimeAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ObjCPreciseLifetimeAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ObjCPreciseLifetimeAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsObjCPreciseLifetimeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ObjCPreciseLifetimeAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::ObjCPreciseLifetime; }};class ObjCRequiresPropertyDefsAttr : public InheritableAttr {public:enum Spelling {GNU_objc_requires_property_definitions = 0,CXX11_clang_objc_requires_property_definitions = 1,C2x_clang_objc_requires_property_definitions = 2,SpellingNotCalculated = 15};// Factory methodsstatic ObjCRequiresPropertyDefsAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ObjCRequiresPropertyDefsAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ObjCRequiresPropertyDefsAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ObjCRequiresPropertyDefsAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsObjCRequiresPropertyDefsAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ObjCRequiresPropertyDefsAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::ObjCRequiresPropertyDefs; }};class ObjCRequiresSuperAttr : public InheritableAttr {public:enum Spelling {GNU_objc_requires_super = 0,CXX11_clang_objc_requires_super = 1,C2x_clang_objc_requires_super = 2,SpellingNotCalculated = 15};// Factory methodsstatic ObjCRequiresSuperAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ObjCRequiresSuperAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ObjCRequiresSuperAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ObjCRequiresSuperAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsObjCRequiresSuperAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ObjCRequiresSuperAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::ObjCRequiresSuper; }};class ObjCReturnsInnerPointerAttr : public InheritableAttr {public:enum Spelling {GNU_objc_returns_inner_pointer = 0,CXX11_clang_objc_returns_inner_pointer = 1,C2x_clang_objc_returns_inner_pointer = 2,SpellingNotCalculated = 15};// Factory methodsstatic ObjCReturnsInnerPointerAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ObjCReturnsInnerPointerAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ObjCReturnsInnerPointerAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ObjCReturnsInnerPointerAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsObjCReturnsInnerPointerAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ObjCReturnsInnerPointerAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::ObjCReturnsInnerPointer; }};class ObjCRootClassAttr : public InheritableAttr {public:enum Spelling {GNU_objc_root_class = 0,CXX11_clang_objc_root_class = 1,C2x_clang_objc_root_class = 2,SpellingNotCalculated = 15};// Factory methodsstatic ObjCRootClassAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ObjCRootClassAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ObjCRootClassAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ObjCRootClassAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsObjCRootClassAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ObjCRootClassAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::ObjCRootClass; }};class ObjCRuntimeNameAttr : public Attr {unsigned metadataNameLength;char *metadataName;public:enum Spelling {GNU_objc_runtime_name = 0,CXX11_clang_objc_runtime_name = 1,C2x_clang_objc_runtime_name = 2,SpellingNotCalculated = 15};// Factory methodsstatic ObjCRuntimeNameAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef MetadataName, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ObjCRuntimeNameAttr *Create(ASTContext &Ctx, llvm::StringRef MetadataName, const AttributeCommonInfo &CommonInfo);static ObjCRuntimeNameAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef MetadataName, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ObjCRuntimeNameAttr *Create(ASTContext &Ctx, llvm::StringRef MetadataName, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsObjCRuntimeNameAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef MetadataName);ObjCRuntimeNameAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getMetadataName() const {return llvm::StringRef(metadataName, metadataNameLength);}unsigned getMetadataNameLength() const {return metadataNameLength;}void setMetadataName(ASTContext &C, llvm::StringRef S) {metadataNameLength = S.size();this->metadataName = new (C, 1) char [metadataNameLength];if (!S.empty())std::memcpy(this->metadataName, S.data(), metadataNameLength);}static bool classof(const Attr *A) { return A->getKind() == attr::ObjCRuntimeName; }};class ObjCRuntimeVisibleAttr : public Attr {public:enum Spelling {GNU_objc_runtime_visible = 0,CXX11_clang_objc_runtime_visible = 1,C2x_clang_objc_runtime_visible = 2,SpellingNotCalculated = 15};// Factory methodsstatic ObjCRuntimeVisibleAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ObjCRuntimeVisibleAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ObjCRuntimeVisibleAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ObjCRuntimeVisibleAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsObjCRuntimeVisibleAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ObjCRuntimeVisibleAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::ObjCRuntimeVisible; }};class ObjCSubclassingRestrictedAttr : public InheritableAttr {public:enum Spelling {GNU_objc_subclassing_restricted = 0,CXX11_clang_objc_subclassing_restricted = 1,C2x_clang_objc_subclassing_restricted = 2,SpellingNotCalculated = 15};// Factory methodsstatic ObjCSubclassingRestrictedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ObjCSubclassingRestrictedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ObjCSubclassingRestrictedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ObjCSubclassingRestrictedAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsObjCSubclassingRestrictedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ObjCSubclassingRestrictedAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::ObjCSubclassingRestricted; }};class OpenCLAccessAttr : public Attr {public:enum Spelling {Keyword_read_only = 0,Keyword_write_only = 2,Keyword_read_write = 4,SpellingNotCalculated = 15};// Factory methodsstatic OpenCLAccessAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static OpenCLAccessAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static OpenCLAccessAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, OpenCLAccessAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static OpenCLAccessAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, OpenCLAccessAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsOpenCLAccessAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);OpenCLAccessAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;bool isReadOnly() const { return getAttributeSpellingListIndex() == 0 ||getAttributeSpellingListIndex() == 1; }bool isReadWrite() const { return getAttributeSpellingListIndex() == 4 ||getAttributeSpellingListIndex() == 5; }bool isWriteOnly() const { return getAttributeSpellingListIndex() == 2 ||getAttributeSpellingListIndex() == 3; }static bool classof(const Attr *A) { return A->getKind() == attr::OpenCLAccess; }};class OpenCLConstantAddressSpaceAttr : public TypeAttr {public:enum Spelling {Keyword_constant = 0,GNU_opencl_constant = 2,CXX11_clang_opencl_constant = 3,C2x_clang_opencl_constant = 4,SpellingNotCalculated = 15};// Factory methodsstatic OpenCLConstantAddressSpaceAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static OpenCLConstantAddressSpaceAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static OpenCLConstantAddressSpaceAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, OpenCLConstantAddressSpaceAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static OpenCLConstantAddressSpaceAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, OpenCLConstantAddressSpaceAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsOpenCLConstantAddressSpaceAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);OpenCLConstantAddressSpaceAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::OpenCLConstantAddressSpace; }};class OpenCLGenericAddressSpaceAttr : public TypeAttr {public:enum Spelling {Keyword_generic = 0,GNU_opencl_generic = 2,CXX11_clang_opencl_generic = 3,C2x_clang_opencl_generic = 4,SpellingNotCalculated = 15};// Factory methodsstatic OpenCLGenericAddressSpaceAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static OpenCLGenericAddressSpaceAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static OpenCLGenericAddressSpaceAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, OpenCLGenericAddressSpaceAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static OpenCLGenericAddressSpaceAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, OpenCLGenericAddressSpaceAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsOpenCLGenericAddressSpaceAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);OpenCLGenericAddressSpaceAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::OpenCLGenericAddressSpace; }};class OpenCLGlobalAddressSpaceAttr : public TypeAttr {public:enum Spelling {Keyword_global = 0,GNU_opencl_global = 2,CXX11_clang_opencl_global = 3,C2x_clang_opencl_global = 4,SpellingNotCalculated = 15};// Factory methodsstatic OpenCLGlobalAddressSpaceAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static OpenCLGlobalAddressSpaceAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static OpenCLGlobalAddressSpaceAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, OpenCLGlobalAddressSpaceAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static OpenCLGlobalAddressSpaceAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, OpenCLGlobalAddressSpaceAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsOpenCLGlobalAddressSpaceAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);OpenCLGlobalAddressSpaceAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::OpenCLGlobalAddressSpace; }};class OpenCLGlobalDeviceAddressSpaceAttr : public TypeAttr {public:enum Spelling {GNU_opencl_global_device = 0,CXX11_clang_opencl_global_device = 1,C2x_clang_opencl_global_device = 2,SpellingNotCalculated = 15};// Factory methodsstatic OpenCLGlobalDeviceAddressSpaceAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static OpenCLGlobalDeviceAddressSpaceAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static OpenCLGlobalDeviceAddressSpaceAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static OpenCLGlobalDeviceAddressSpaceAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsOpenCLGlobalDeviceAddressSpaceAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);OpenCLGlobalDeviceAddressSpaceAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::OpenCLGlobalDeviceAddressSpace; }};class OpenCLGlobalHostAddressSpaceAttr : public TypeAttr {public:enum Spelling {GNU_opencl_global_host = 0,CXX11_clang_opencl_global_host = 1,C2x_clang_opencl_global_host = 2,SpellingNotCalculated = 15};// Factory methodsstatic OpenCLGlobalHostAddressSpaceAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static OpenCLGlobalHostAddressSpaceAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static OpenCLGlobalHostAddressSpaceAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static OpenCLGlobalHostAddressSpaceAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsOpenCLGlobalHostAddressSpaceAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);OpenCLGlobalHostAddressSpaceAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::OpenCLGlobalHostAddressSpace; }};class OpenCLIntelReqdSubGroupSizeAttr : public InheritableAttr {unsigned subGroupSize;public:// Factory methodsstatic OpenCLIntelReqdSubGroupSizeAttr *CreateImplicit(ASTContext &Ctx, unsigned SubGroupSize, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static OpenCLIntelReqdSubGroupSizeAttr *Create(ASTContext &Ctx, unsigned SubGroupSize, const AttributeCommonInfo &CommonInfo);static OpenCLIntelReqdSubGroupSizeAttr *CreateImplicit(ASTContext &Ctx, unsigned SubGroupSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static OpenCLIntelReqdSubGroupSizeAttr *Create(ASTContext &Ctx, unsigned SubGroupSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsOpenCLIntelReqdSubGroupSizeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, unsigned SubGroupSize);OpenCLIntelReqdSubGroupSizeAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;unsigned getSubGroupSize() const {return subGroupSize;}static bool classof(const Attr *A) { return A->getKind() == attr::OpenCLIntelReqdSubGroupSize; }};class OpenCLKernelAttr : public InheritableAttr {public:enum Spelling {Keyword_kernel = 0,SpellingNotCalculated = 15};// Factory methodsstatic OpenCLKernelAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static OpenCLKernelAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static OpenCLKernelAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static OpenCLKernelAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsOpenCLKernelAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);OpenCLKernelAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::OpenCLKernel; }};class OpenCLLocalAddressSpaceAttr : public TypeAttr {public:enum Spelling {Keyword_local = 0,GNU_opencl_local = 2,CXX11_clang_opencl_local = 3,C2x_clang_opencl_local = 4,SpellingNotCalculated = 15};// Factory methodsstatic OpenCLLocalAddressSpaceAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static OpenCLLocalAddressSpaceAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static OpenCLLocalAddressSpaceAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, OpenCLLocalAddressSpaceAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static OpenCLLocalAddressSpaceAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, OpenCLLocalAddressSpaceAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsOpenCLLocalAddressSpaceAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);OpenCLLocalAddressSpaceAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::OpenCLLocalAddressSpace; }};class OpenCLPrivateAddressSpaceAttr : public TypeAttr {public:enum Spelling {Keyword_private = 0,GNU_opencl_private = 2,CXX11_clang_opencl_private = 3,C2x_clang_opencl_private = 4,SpellingNotCalculated = 15};// Factory methodsstatic OpenCLPrivateAddressSpaceAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static OpenCLPrivateAddressSpaceAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static OpenCLPrivateAddressSpaceAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, OpenCLPrivateAddressSpaceAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static OpenCLPrivateAddressSpaceAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, OpenCLPrivateAddressSpaceAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsOpenCLPrivateAddressSpaceAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);OpenCLPrivateAddressSpaceAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::OpenCLPrivateAddressSpace; }};class OpenCLUnrollHintAttr : public StmtAttr {unsigned unrollHint;public:// Factory methodsstatic OpenCLUnrollHintAttr *CreateImplicit(ASTContext &Ctx, unsigned UnrollHint, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static OpenCLUnrollHintAttr *Create(ASTContext &Ctx, unsigned UnrollHint, const AttributeCommonInfo &CommonInfo);static OpenCLUnrollHintAttr *CreateImplicit(ASTContext &Ctx, unsigned UnrollHint, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static OpenCLUnrollHintAttr *Create(ASTContext &Ctx, unsigned UnrollHint, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsOpenCLUnrollHintAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, unsigned UnrollHint);OpenCLUnrollHintAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);OpenCLUnrollHintAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;unsigned getUnrollHint() const {return unrollHint;}static bool classof(const Attr *A) { return A->getKind() == attr::OpenCLUnrollHint; }};class OptimizeNoneAttr : public InheritableAttr {public:enum Spelling {GNU_optnone = 0,CXX11_clang_optnone = 1,C2x_clang_optnone = 2,SpellingNotCalculated = 15};// Factory methodsstatic OptimizeNoneAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static OptimizeNoneAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static OptimizeNoneAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static OptimizeNoneAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsOptimizeNoneAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);OptimizeNoneAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::OptimizeNone; }};class OverloadableAttr : public Attr {public:enum Spelling {GNU_overloadable = 0,CXX11_clang_overloadable = 1,C2x_clang_overloadable = 2,SpellingNotCalculated = 15};// Factory methodsstatic OverloadableAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static OverloadableAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static OverloadableAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static OverloadableAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsOverloadableAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);OverloadableAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::Overloadable; }};class OverrideAttr : public InheritableAttr {public:// Factory methodsstatic OverrideAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static OverrideAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static OverrideAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static OverrideAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsOverrideAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);OverrideAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::Override; }};class OwnerAttr : public InheritableAttr {TypeSourceInfo * derefType;public:// Factory methodsstatic OwnerAttr *CreateImplicit(ASTContext &Ctx, TypeSourceInfo * DerefType, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static OwnerAttr *Create(ASTContext &Ctx, TypeSourceInfo * DerefType, const AttributeCommonInfo &CommonInfo);static OwnerAttr *CreateImplicit(ASTContext &Ctx, TypeSourceInfo * DerefType, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static OwnerAttr *Create(ASTContext &Ctx, TypeSourceInfo * DerefType, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsOwnerAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, TypeSourceInfo * DerefType);OwnerAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);OwnerAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;QualType getDerefType() const {return derefType->getType();} TypeSourceInfo * getDerefTypeLoc() const {return derefType;}static bool classof(const Attr *A) { return A->getKind() == attr::Owner; }};class OwnershipAttr : public InheritableAttr {IdentifierInfo * module;unsigned args_Size;ParamIdx *args_;public:enum Spelling {GNU_ownership_holds = 0,CXX11_clang_ownership_holds = 1,C2x_clang_ownership_holds = 2,GNU_ownership_returns = 3,CXX11_clang_ownership_returns = 4,C2x_clang_ownership_returns = 5,GNU_ownership_takes = 6,CXX11_clang_ownership_takes = 7,C2x_clang_ownership_takes = 8,SpellingNotCalculated = 15};// Factory methodsstatic OwnershipAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * Module, ParamIdx *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static OwnershipAttr *Create(ASTContext &Ctx, IdentifierInfo * Module, ParamIdx *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);static OwnershipAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * Module, ParamIdx *Args, unsigned ArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax, OwnershipAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static OwnershipAttr *Create(ASTContext &Ctx, IdentifierInfo * Module, ParamIdx *Args, unsigned ArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax, OwnershipAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsOwnershipAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, IdentifierInfo * Module, ParamIdx *Args, unsigned ArgsSize);OwnershipAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, IdentifierInfo * Module);OwnershipAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;bool isHolds() const { return getAttributeSpellingListIndex() == 0 ||getAttributeSpellingListIndex() == 1 ||getAttributeSpellingListIndex() == 2; }bool isReturns() const { return getAttributeSpellingListIndex() == 3 ||getAttributeSpellingListIndex() == 4 ||getAttributeSpellingListIndex() == 5; }bool isTakes() const { return getAttributeSpellingListIndex() == 6 ||getAttributeSpellingListIndex() == 7 ||getAttributeSpellingListIndex() == 8; }IdentifierInfo * getModule() const {return module;}typedef ParamIdx* args_iterator;args_iterator args_begin() const { return args_; }args_iterator args_end() const { return args_ + args_Size; }unsigned args_size() const { return args_Size; }llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); }enum OwnershipKind { Holds, Returns, Takes };OwnershipKind getOwnKind() const {return isHolds() ? Holds :isTakes() ? Takes :Returns;}static bool classof(const Attr *A) { return A->getKind() == attr::Ownership; }};class PackedAttr : public InheritableAttr {public:enum Spelling {GNU_packed = 0,CXX11_gnu_packed = 1,C2x_gnu_packed = 2,SpellingNotCalculated = 15};// Factory methodsstatic PackedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static PackedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static PackedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static PackedAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsPackedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);PackedAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::Packed; }};class ParamTypestateAttr : public InheritableAttr {public:enum ConsumedState {Unknown,Consumed,Unconsumed};private:ConsumedState paramState;public:enum Spelling {GNU_param_typestate = 0,CXX11_clang_param_typestate = 1,SpellingNotCalculated = 15};// Factory methodsstatic ParamTypestateAttr *CreateImplicit(ASTContext &Ctx, ConsumedState ParamState, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ParamTypestateAttr *Create(ASTContext &Ctx, ConsumedState ParamState, const AttributeCommonInfo &CommonInfo);static ParamTypestateAttr *CreateImplicit(ASTContext &Ctx, ConsumedState ParamState, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ParamTypestateAttr *Create(ASTContext &Ctx, ConsumedState ParamState, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsParamTypestateAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, ConsumedState ParamState);ParamTypestateAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;ConsumedState getParamState() const {return paramState;}static bool ConvertStrToConsumedState(StringRef Val, ConsumedState &Out);static const char *ConvertConsumedStateToStr(ConsumedState Val);static bool classof(const Attr *A) { return A->getKind() == attr::ParamTypestate; }};class PascalAttr : public InheritableAttr {public:enum Spelling {GNU_pascal = 0,CXX11_clang_pascal = 1,C2x_clang_pascal = 2,Keyword_pascal = 3,SpellingNotCalculated = 15};// Factory methodsstatic PascalAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static PascalAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static PascalAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static PascalAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsPascalAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);PascalAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::Pascal; }};class PassObjectSizeAttr : public InheritableParamAttr {int type;public:enum Spelling {GNU_pass_object_size = 0,CXX11_clang_pass_object_size = 1,C2x_clang_pass_object_size = 2,GNU_pass_dynamic_object_size = 3,CXX11_clang_pass_dynamic_object_size = 4,C2x_clang_pass_dynamic_object_size = 5,SpellingNotCalculated = 15};// Factory methodsstatic PassObjectSizeAttr *CreateImplicit(ASTContext &Ctx, int Type, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static PassObjectSizeAttr *Create(ASTContext &Ctx, int Type, const AttributeCommonInfo &CommonInfo);static PassObjectSizeAttr *CreateImplicit(ASTContext &Ctx, int Type, SourceRange Range, AttributeCommonInfo::Syntax Syntax, PassObjectSizeAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static PassObjectSizeAttr *Create(ASTContext &Ctx, int Type, SourceRange Range, AttributeCommonInfo::Syntax Syntax, PassObjectSizeAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsPassObjectSizeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, int Type);PassObjectSizeAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;bool isDynamic() const { return getAttributeSpellingListIndex() == 3 ||getAttributeSpellingListIndex() == 4 ||getAttributeSpellingListIndex() == 5; }int getType() const {return type;}static bool classof(const Attr *A) { return A->getKind() == attr::PassObjectSize; }};class PatchableFunctionEntryAttr : public InheritableAttr {unsigned count;int offset;public:enum Spelling {GNU_patchable_function_entry = 0,CXX11_gnu_patchable_function_entry = 1,C2x_gnu_patchable_function_entry = 2,SpellingNotCalculated = 15};// Factory methodsstatic PatchableFunctionEntryAttr *CreateImplicit(ASTContext &Ctx, unsigned Count, int Offset, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static PatchableFunctionEntryAttr *Create(ASTContext &Ctx, unsigned Count, int Offset, const AttributeCommonInfo &CommonInfo);static PatchableFunctionEntryAttr *CreateImplicit(ASTContext &Ctx, unsigned Count, int Offset, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static PatchableFunctionEntryAttr *Create(ASTContext &Ctx, unsigned Count, int Offset, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsPatchableFunctionEntryAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, unsigned Count, int Offset);PatchableFunctionEntryAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, unsigned Count);PatchableFunctionEntryAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;unsigned getCount() const {return count;}int getOffset() const {return offset;}static const int DefaultOffset = 0;static bool classof(const Attr *A) { return A->getKind() == attr::PatchableFunctionEntry; }};class PcsAttr : public InheritableAttr {public:enum PCSType {AAPCS,AAPCS_VFP};private:PCSType pCS;public:enum Spelling {GNU_pcs = 0,CXX11_gnu_pcs = 1,C2x_gnu_pcs = 2,SpellingNotCalculated = 15};// Factory methodsstatic PcsAttr *CreateImplicit(ASTContext &Ctx, PCSType PCS, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static PcsAttr *Create(ASTContext &Ctx, PCSType PCS, const AttributeCommonInfo &CommonInfo);static PcsAttr *CreateImplicit(ASTContext &Ctx, PCSType PCS, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static PcsAttr *Create(ASTContext &Ctx, PCSType PCS, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsPcsAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, PCSType PCS);PcsAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;PCSType getPCS() const {return pCS;}static bool ConvertStrToPCSType(StringRef Val, PCSType &Out);static const char *ConvertPCSTypeToStr(PCSType Val);static bool classof(const Attr *A) { return A->getKind() == attr::Pcs; }};class PointerAttr : public InheritableAttr {TypeSourceInfo * derefType;public:// Factory methodsstatic PointerAttr *CreateImplicit(ASTContext &Ctx, TypeSourceInfo * DerefType, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static PointerAttr *Create(ASTContext &Ctx, TypeSourceInfo * DerefType, const AttributeCommonInfo &CommonInfo);static PointerAttr *CreateImplicit(ASTContext &Ctx, TypeSourceInfo * DerefType, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static PointerAttr *Create(ASTContext &Ctx, TypeSourceInfo * DerefType, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsPointerAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, TypeSourceInfo * DerefType);PointerAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);PointerAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;QualType getDerefType() const {return derefType->getType();} TypeSourceInfo * getDerefTypeLoc() const {return derefType;}static bool classof(const Attr *A) { return A->getKind() == attr::Pointer; }};class PragmaClangBSSSectionAttr : public InheritableAttr {unsigned nameLength;char *name;public:// Factory methodsstatic PragmaClangBSSSectionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static PragmaClangBSSSectionAttr *Create(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo);static PragmaClangBSSSectionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static PragmaClangBSSSectionAttr *Create(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsPragmaClangBSSSectionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef Name);PragmaClangBSSSectionAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getName() const {return llvm::StringRef(name, nameLength);}unsigned getNameLength() const {return nameLength;}void setName(ASTContext &C, llvm::StringRef S) {nameLength = S.size();this->name = new (C, 1) char [nameLength];if (!S.empty())std::memcpy(this->name, S.data(), nameLength);}static bool classof(const Attr *A) { return A->getKind() == attr::PragmaClangBSSSection; }};class PragmaClangDataSectionAttr : public InheritableAttr {unsigned nameLength;char *name;public:// Factory methodsstatic PragmaClangDataSectionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static PragmaClangDataSectionAttr *Create(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo);static PragmaClangDataSectionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static PragmaClangDataSectionAttr *Create(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsPragmaClangDataSectionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef Name);PragmaClangDataSectionAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getName() const {return llvm::StringRef(name, nameLength);}unsigned getNameLength() const {return nameLength;}void setName(ASTContext &C, llvm::StringRef S) {nameLength = S.size();this->name = new (C, 1) char [nameLength];if (!S.empty())std::memcpy(this->name, S.data(), nameLength);}static bool classof(const Attr *A) { return A->getKind() == attr::PragmaClangDataSection; }};class PragmaClangRelroSectionAttr : public InheritableAttr {unsigned nameLength;char *name;public:// Factory methodsstatic PragmaClangRelroSectionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static PragmaClangRelroSectionAttr *Create(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo);static PragmaClangRelroSectionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static PragmaClangRelroSectionAttr *Create(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsPragmaClangRelroSectionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef Name);PragmaClangRelroSectionAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getName() const {return llvm::StringRef(name, nameLength);}unsigned getNameLength() const {return nameLength;}void setName(ASTContext &C, llvm::StringRef S) {nameLength = S.size();this->name = new (C, 1) char [nameLength];if (!S.empty())std::memcpy(this->name, S.data(), nameLength);}static bool classof(const Attr *A) { return A->getKind() == attr::PragmaClangRelroSection; }};class PragmaClangRodataSectionAttr : public InheritableAttr {unsigned nameLength;char *name;public:// Factory methodsstatic PragmaClangRodataSectionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static PragmaClangRodataSectionAttr *Create(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo);static PragmaClangRodataSectionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static PragmaClangRodataSectionAttr *Create(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsPragmaClangRodataSectionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef Name);PragmaClangRodataSectionAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getName() const {return llvm::StringRef(name, nameLength);}unsigned getNameLength() const {return nameLength;}void setName(ASTContext &C, llvm::StringRef S) {nameLength = S.size();this->name = new (C, 1) char [nameLength];if (!S.empty())std::memcpy(this->name, S.data(), nameLength);}static bool classof(const Attr *A) { return A->getKind() == attr::PragmaClangRodataSection; }};class PragmaClangTextSectionAttr : public InheritableAttr {unsigned nameLength;char *name;public:// Factory methodsstatic PragmaClangTextSectionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static PragmaClangTextSectionAttr *Create(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo);static PragmaClangTextSectionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static PragmaClangTextSectionAttr *Create(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsPragmaClangTextSectionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef Name);PragmaClangTextSectionAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getName() const {return llvm::StringRef(name, nameLength);}unsigned getNameLength() const {return nameLength;}void setName(ASTContext &C, llvm::StringRef S) {nameLength = S.size();this->name = new (C, 1) char [nameLength];if (!S.empty())std::memcpy(this->name, S.data(), nameLength);}static bool classof(const Attr *A) { return A->getKind() == attr::PragmaClangTextSection; }};class PreferredNameAttr : public InheritableAttr {TypeSourceInfo * typedefType;public:enum Spelling {GNU_preferred_name = 0,CXX11_clang_preferred_name = 1,SpellingNotCalculated = 15};// Factory methodsstatic PreferredNameAttr *CreateImplicit(ASTContext &Ctx, TypeSourceInfo * TypedefType, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static PreferredNameAttr *Create(ASTContext &Ctx, TypeSourceInfo * TypedefType, const AttributeCommonInfo &CommonInfo);static PreferredNameAttr *CreateImplicit(ASTContext &Ctx, TypeSourceInfo * TypedefType, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static PreferredNameAttr *Create(ASTContext &Ctx, TypeSourceInfo * TypedefType, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsPreferredNameAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, TypeSourceInfo * TypedefType);PreferredNameAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;QualType getTypedefType() const {return typedefType->getType();} TypeSourceInfo * getTypedefTypeLoc() const {return typedefType;}static bool classof(const Attr *A) { return A->getKind() == attr::PreferredName; }};class PreserveAllAttr : public InheritableAttr {public:enum Spelling {GNU_preserve_all = 0,CXX11_clang_preserve_all = 1,C2x_clang_preserve_all = 2,SpellingNotCalculated = 15};// Factory methodsstatic PreserveAllAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static PreserveAllAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static PreserveAllAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static PreserveAllAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsPreserveAllAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);PreserveAllAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::PreserveAll; }};class PreserveMostAttr : public InheritableAttr {public:enum Spelling {GNU_preserve_most = 0,CXX11_clang_preserve_most = 1,C2x_clang_preserve_most = 2,SpellingNotCalculated = 15};// Factory methodsstatic PreserveMostAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static PreserveMostAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static PreserveMostAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static PreserveMostAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsPreserveMostAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);PreserveMostAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::PreserveMost; }};class PtGuardedByAttr : public InheritableAttr {Expr * arg;public:// Factory methodsstatic PtGuardedByAttr *CreateImplicit(ASTContext &Ctx, Expr * Arg, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static PtGuardedByAttr *Create(ASTContext &Ctx, Expr * Arg, const AttributeCommonInfo &CommonInfo);static PtGuardedByAttr *CreateImplicit(ASTContext &Ctx, Expr * Arg, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static PtGuardedByAttr *Create(ASTContext &Ctx, Expr * Arg, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsPtGuardedByAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Expr * Arg);PtGuardedByAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Expr * getArg() const {return arg;}static bool classof(const Attr *A) { return A->getKind() == attr::PtGuardedBy; }};class PtGuardedVarAttr : public InheritableAttr {public:enum Spelling {GNU_pt_guarded_var = 0,CXX11_clang_pt_guarded_var = 1,SpellingNotCalculated = 15};// Factory methodsstatic PtGuardedVarAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static PtGuardedVarAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static PtGuardedVarAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static PtGuardedVarAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsPtGuardedVarAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);PtGuardedVarAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::PtGuardedVar; }};class Ptr32Attr : public TypeAttr {public:// Factory methodsstatic Ptr32Attr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static Ptr32Attr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static Ptr32Attr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static Ptr32Attr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsPtr32Attr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);Ptr32Attr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::Ptr32; }};class Ptr64Attr : public TypeAttr {public:// Factory methodsstatic Ptr64Attr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static Ptr64Attr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static Ptr64Attr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static Ptr64Attr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsPtr64Attr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);Ptr64Attr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::Ptr64; }};class PureAttr : public InheritableAttr {public:enum Spelling {GNU_pure = 0,CXX11_gnu_pure = 1,C2x_gnu_pure = 2,SpellingNotCalculated = 15};// Factory methodsstatic PureAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static PureAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static PureAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static PureAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsPureAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);PureAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::Pure; }};class RISCVInterruptAttr : public InheritableAttr {public:enum InterruptType {user,supervisor,machine};private:InterruptType interrupt;public:enum Spelling {GNU_interrupt = 0,CXX11_gnu_interrupt = 1,C2x_gnu_interrupt = 2,SpellingNotCalculated = 15};// Factory methodsstatic RISCVInterruptAttr *CreateImplicit(ASTContext &Ctx, InterruptType Interrupt, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static RISCVInterruptAttr *Create(ASTContext &Ctx, InterruptType Interrupt, const AttributeCommonInfo &CommonInfo);static RISCVInterruptAttr *CreateImplicit(ASTContext &Ctx, InterruptType Interrupt, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static RISCVInterruptAttr *Create(ASTContext &Ctx, InterruptType Interrupt, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsRISCVInterruptAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, InterruptType Interrupt);RISCVInterruptAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);RISCVInterruptAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;InterruptType getInterrupt() const {return interrupt;}static bool ConvertStrToInterruptType(StringRef Val, InterruptType &Out);static const char *ConvertInterruptTypeToStr(InterruptType Val);static bool classof(const Attr *A) { return A->getKind() == attr::RISCVInterrupt; }};class RandomizeLayoutAttr : public InheritableAttr {public:enum Spelling {GNU_randomize_layout = 0,CXX11_gnu_randomize_layout = 1,C2x_gnu_randomize_layout = 2,SpellingNotCalculated = 15};// Factory methodsstatic RandomizeLayoutAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static RandomizeLayoutAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static RandomizeLayoutAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static RandomizeLayoutAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsRandomizeLayoutAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);RandomizeLayoutAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::RandomizeLayout; }};class ReadOnlyPlacementAttr : public InheritableAttr {public:enum Spelling {GNU_enforce_read_only_placement = 0,CXX11_clang_enforce_read_only_placement = 1,C2x_clang_enforce_read_only_placement = 2,SpellingNotCalculated = 15};// Factory methodsstatic ReadOnlyPlacementAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ReadOnlyPlacementAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ReadOnlyPlacementAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ReadOnlyPlacementAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsReadOnlyPlacementAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ReadOnlyPlacementAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::ReadOnlyPlacement; }};class RegCallAttr : public InheritableAttr {public:enum Spelling {GNU_regcall = 0,CXX11_gnu_regcall = 1,C2x_gnu_regcall = 2,Keyword_regcall = 3,SpellingNotCalculated = 15};// Factory methodsstatic RegCallAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static RegCallAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static RegCallAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static RegCallAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsRegCallAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);RegCallAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::RegCall; }};class ReinitializesAttr : public InheritableAttr {public:enum Spelling {GNU_reinitializes = 0,CXX11_clang_reinitializes = 1,SpellingNotCalculated = 15};// Factory methodsstatic ReinitializesAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ReinitializesAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ReinitializesAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ReinitializesAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsReinitializesAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ReinitializesAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::Reinitializes; }};class ReleaseCapabilityAttr : public InheritableAttr {unsigned args_Size;Expr * *args_;public:enum Spelling {GNU_release_capability = 0,CXX11_clang_release_capability = 1,GNU_release_shared_capability = 2,CXX11_clang_release_shared_capability = 3,GNU_release_generic_capability = 4,CXX11_clang_release_generic_capability = 5,GNU_unlock_function = 6,CXX11_clang_unlock_function = 7,SpellingNotCalculated = 15};// Factory methodsstatic ReleaseCapabilityAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ReleaseCapabilityAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);static ReleaseCapabilityAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax, ReleaseCapabilityAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static ReleaseCapabilityAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax, ReleaseCapabilityAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsReleaseCapabilityAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Expr * *Args, unsigned ArgsSize);ReleaseCapabilityAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ReleaseCapabilityAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;bool isShared() const { return getAttributeSpellingListIndex() == 2 ||getAttributeSpellingListIndex() == 3; }bool isGeneric() const { return getAttributeSpellingListIndex() == 4 ||getAttributeSpellingListIndex() == 5 ||getAttributeSpellingListIndex() == 6 ||getAttributeSpellingListIndex() == 7; }typedef Expr ** args_iterator;args_iterator args_begin() const { return args_; }args_iterator args_end() const { return args_ + args_Size; }unsigned args_size() const { return args_Size; }llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); }static bool classof(const Attr *A) { return A->getKind() == attr::ReleaseCapability; }};class ReleaseHandleAttr : public InheritableParamAttr {unsigned handleTypeLength;char *handleType;public:enum Spelling {GNU_release_handle = 0,CXX11_clang_release_handle = 1,C2x_clang_release_handle = 2,SpellingNotCalculated = 15};// Factory methodsstatic ReleaseHandleAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef HandleType, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ReleaseHandleAttr *Create(ASTContext &Ctx, llvm::StringRef HandleType, const AttributeCommonInfo &CommonInfo);static ReleaseHandleAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef HandleType, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ReleaseHandleAttr *Create(ASTContext &Ctx, llvm::StringRef HandleType, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsReleaseHandleAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef HandleType);ReleaseHandleAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getHandleType() const {return llvm::StringRef(handleType, handleTypeLength);}unsigned getHandleTypeLength() const {return handleTypeLength;}void setHandleType(ASTContext &C, llvm::StringRef S) {handleTypeLength = S.size();this->handleType = new (C, 1) char [handleTypeLength];if (!S.empty())std::memcpy(this->handleType, S.data(), handleTypeLength);}static bool classof(const Attr *A) { return A->getKind() == attr::ReleaseHandle; }};class RenderScriptKernelAttr : public Attr {public:// Factory methodsstatic RenderScriptKernelAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static RenderScriptKernelAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static RenderScriptKernelAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static RenderScriptKernelAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsRenderScriptKernelAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);RenderScriptKernelAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::RenderScriptKernel; }};class ReqdWorkGroupSizeAttr : public InheritableAttr {unsigned xDim;unsigned yDim;unsigned zDim;public:// Factory methodsstatic ReqdWorkGroupSizeAttr *CreateImplicit(ASTContext &Ctx, unsigned XDim, unsigned YDim, unsigned ZDim, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ReqdWorkGroupSizeAttr *Create(ASTContext &Ctx, unsigned XDim, unsigned YDim, unsigned ZDim, const AttributeCommonInfo &CommonInfo);static ReqdWorkGroupSizeAttr *CreateImplicit(ASTContext &Ctx, unsigned XDim, unsigned YDim, unsigned ZDim, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ReqdWorkGroupSizeAttr *Create(ASTContext &Ctx, unsigned XDim, unsigned YDim, unsigned ZDim, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsReqdWorkGroupSizeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, unsigned XDim, unsigned YDim, unsigned ZDim);ReqdWorkGroupSizeAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;unsigned getXDim() const {return xDim;}unsigned getYDim() const {return yDim;}unsigned getZDim() const {return zDim;}static bool classof(const Attr *A) { return A->getKind() == attr::ReqdWorkGroupSize; }};class RequiresCapabilityAttr : public InheritableAttr {unsigned args_Size;Expr * *args_;public:enum Spelling {GNU_requires_capability = 0,CXX11_clang_requires_capability = 1,GNU_exclusive_locks_required = 2,CXX11_clang_exclusive_locks_required = 3,GNU_requires_shared_capability = 4,CXX11_clang_requires_shared_capability = 5,GNU_shared_locks_required = 6,CXX11_clang_shared_locks_required = 7,SpellingNotCalculated = 15};// Factory methodsstatic RequiresCapabilityAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static RequiresCapabilityAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);static RequiresCapabilityAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax, RequiresCapabilityAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static RequiresCapabilityAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax, RequiresCapabilityAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsRequiresCapabilityAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Expr * *Args, unsigned ArgsSize);RequiresCapabilityAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);RequiresCapabilityAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;bool isShared() const { return getAttributeSpellingListIndex() == 4 ||getAttributeSpellingListIndex() == 5 ||getAttributeSpellingListIndex() == 6 ||getAttributeSpellingListIndex() == 7; }typedef Expr ** args_iterator;args_iterator args_begin() const { return args_; }args_iterator args_end() const { return args_ + args_Size; }unsigned args_size() const { return args_Size; }llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); }static bool classof(const Attr *A) { return A->getKind() == attr::RequiresCapability; }};class RestrictAttr : public InheritableAttr {public:enum Spelling {Declspec_restrict = 0,GNU_malloc = 1,CXX11_gnu_malloc = 2,C2x_gnu_malloc = 3,SpellingNotCalculated = 15};// Factory methodsstatic RestrictAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static RestrictAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static RestrictAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, RestrictAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static RestrictAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, RestrictAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsRestrictAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);RestrictAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::Restrict; }};class RetainAttr : public InheritableAttr {public:enum Spelling {GNU_retain = 0,CXX11_gnu_retain = 1,C2x_gnu_retain = 2,SpellingNotCalculated = 15};// Factory methodsstatic RetainAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static RetainAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static RetainAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static RetainAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsRetainAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);RetainAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::Retain; }};class ReturnTypestateAttr : public InheritableAttr {public:enum ConsumedState {Unknown,Consumed,Unconsumed};private:ConsumedState state;public:enum Spelling {GNU_return_typestate = 0,CXX11_clang_return_typestate = 1,SpellingNotCalculated = 15};// Factory methodsstatic ReturnTypestateAttr *CreateImplicit(ASTContext &Ctx, ConsumedState State, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ReturnTypestateAttr *Create(ASTContext &Ctx, ConsumedState State, const AttributeCommonInfo &CommonInfo);static ReturnTypestateAttr *CreateImplicit(ASTContext &Ctx, ConsumedState State, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ReturnTypestateAttr *Create(ASTContext &Ctx, ConsumedState State, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsReturnTypestateAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, ConsumedState State);ReturnTypestateAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;ConsumedState getState() const {return state;}static bool ConvertStrToConsumedState(StringRef Val, ConsumedState &Out);static const char *ConvertConsumedStateToStr(ConsumedState Val);static bool classof(const Attr *A) { return A->getKind() == attr::ReturnTypestate; }};class ReturnsNonNullAttr : public InheritableAttr {public:enum Spelling {GNU_returns_nonnull = 0,CXX11_gnu_returns_nonnull = 1,C2x_gnu_returns_nonnull = 2,SpellingNotCalculated = 15};// Factory methodsstatic ReturnsNonNullAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ReturnsNonNullAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ReturnsNonNullAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ReturnsNonNullAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsReturnsNonNullAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ReturnsNonNullAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::ReturnsNonNull; }};class ReturnsTwiceAttr : public InheritableAttr {public:enum Spelling {GNU_returns_twice = 0,CXX11_gnu_returns_twice = 1,C2x_gnu_returns_twice = 2,SpellingNotCalculated = 15};// Factory methodsstatic ReturnsTwiceAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ReturnsTwiceAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ReturnsTwiceAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ReturnsTwiceAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsReturnsTwiceAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ReturnsTwiceAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::ReturnsTwice; }};class SPtrAttr : public TypeAttr {public:// Factory methodsstatic SPtrAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static SPtrAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static SPtrAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static SPtrAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsSPtrAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);SPtrAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::SPtr; }};class SYCLKernelAttr : public InheritableAttr {public:enum Spelling {GNU_sycl_kernel = 0,CXX11_clang_sycl_kernel = 1,C2x_clang_sycl_kernel = 2,SpellingNotCalculated = 15};// Factory methodsstatic SYCLKernelAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static SYCLKernelAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static SYCLKernelAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static SYCLKernelAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsSYCLKernelAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);SYCLKernelAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::SYCLKernel; }};class SYCLSpecialClassAttr : public InheritableAttr {public:enum Spelling {GNU_sycl_special_class = 0,CXX11_clang_sycl_special_class = 1,C2x_clang_sycl_special_class = 2,SpellingNotCalculated = 15};// Factory methodsstatic SYCLSpecialClassAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static SYCLSpecialClassAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static SYCLSpecialClassAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static SYCLSpecialClassAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsSYCLSpecialClassAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);SYCLSpecialClassAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::SYCLSpecialClass; }};class ScopedLockableAttr : public InheritableAttr {public:enum Spelling {GNU_scoped_lockable = 0,CXX11_clang_scoped_lockable = 1,SpellingNotCalculated = 15};// Factory methodsstatic ScopedLockableAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ScopedLockableAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ScopedLockableAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ScopedLockableAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsScopedLockableAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ScopedLockableAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::ScopedLockable; }};class SectionAttr : public InheritableAttr {unsigned nameLength;char *name;public:enum Spelling {GNU_section = 0,CXX11_gnu_section = 1,C2x_gnu_section = 2,Declspec_allocate = 3,SpellingNotCalculated = 15};// Factory methodsstatic SectionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static SectionAttr *Create(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo);static SectionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range, AttributeCommonInfo::Syntax Syntax, SectionAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static SectionAttr *Create(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range, AttributeCommonInfo::Syntax Syntax, SectionAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsSectionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef Name);SectionAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;llvm::StringRef getName() const {return llvm::StringRef(name, nameLength);}unsigned getNameLength() const {return nameLength;}void setName(ASTContext &C, llvm::StringRef S) {nameLength = S.size();this->name = new (C, 1) char [nameLength];if (!S.empty())std::memcpy(this->name, S.data(), nameLength);}static bool classof(const Attr *A) { return A->getKind() == attr::Section; }};class SelectAnyAttr : public InheritableAttr {public:enum Spelling {Declspec_selectany = 0,GNU_selectany = 1,CXX11_gnu_selectany = 2,C2x_gnu_selectany = 3,SpellingNotCalculated = 15};// Factory methodsstatic SelectAnyAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static SelectAnyAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static SelectAnyAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static SelectAnyAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsSelectAnyAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);SelectAnyAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::SelectAny; }};class SentinelAttr : public InheritableAttr {int sentinel;int nullPos;public:enum Spelling {GNU_sentinel = 0,CXX11_gnu_sentinel = 1,C2x_gnu_sentinel = 2,SpellingNotCalculated = 15};// Factory methodsstatic SentinelAttr *CreateImplicit(ASTContext &Ctx, int Sentinel, int NullPos, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static SentinelAttr *Create(ASTContext &Ctx, int Sentinel, int NullPos, const AttributeCommonInfo &CommonInfo);static SentinelAttr *CreateImplicit(ASTContext &Ctx, int Sentinel, int NullPos, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static SentinelAttr *Create(ASTContext &Ctx, int Sentinel, int NullPos, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsSentinelAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, int Sentinel, int NullPos);SentinelAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);SentinelAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;int getSentinel() const {return sentinel;}static const int DefaultSentinel = 0;int getNullPos() const {return nullPos;}static const int DefaultNullPos = 0;static bool classof(const Attr *A) { return A->getKind() == attr::Sentinel; }};class SetTypestateAttr : public InheritableAttr {public:enum ConsumedState {Unknown,Consumed,Unconsumed};private:ConsumedState newState;public:enum Spelling {GNU_set_typestate = 0,CXX11_clang_set_typestate = 1,SpellingNotCalculated = 15};// Factory methodsstatic SetTypestateAttr *CreateImplicit(ASTContext &Ctx, ConsumedState NewState, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static SetTypestateAttr *Create(ASTContext &Ctx, ConsumedState NewState, const AttributeCommonInfo &CommonInfo);static SetTypestateAttr *CreateImplicit(ASTContext &Ctx, ConsumedState NewState, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static SetTypestateAttr *Create(ASTContext &Ctx, ConsumedState NewState, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsSetTypestateAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, ConsumedState NewState);SetTypestateAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;ConsumedState getNewState() const {return newState;}static bool ConvertStrToConsumedState(StringRef Val, ConsumedState &Out);static const char *ConvertConsumedStateToStr(ConsumedState Val);static bool classof(const Attr *A) { return A->getKind() == attr::SetTypestate; }};class SharedTrylockFunctionAttr : public InheritableAttr {Expr * successValue;unsigned args_Size;Expr * *args_;public:// Factory methodsstatic SharedTrylockFunctionAttr *CreateImplicit(ASTContext &Ctx, Expr * SuccessValue, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static SharedTrylockFunctionAttr *Create(ASTContext &Ctx, Expr * SuccessValue, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);static SharedTrylockFunctionAttr *CreateImplicit(ASTContext &Ctx, Expr * SuccessValue, Expr * *Args, unsigned ArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static SharedTrylockFunctionAttr *Create(ASTContext &Ctx, Expr * SuccessValue, Expr * *Args, unsigned ArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsSharedTrylockFunctionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Expr * SuccessValue, Expr * *Args, unsigned ArgsSize);SharedTrylockFunctionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Expr * SuccessValue);SharedTrylockFunctionAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Expr * getSuccessValue() const {return successValue;}typedef Expr ** args_iterator;args_iterator args_begin() const { return args_; }args_iterator args_end() const { return args_ + args_Size; }unsigned args_size() const { return args_Size; }llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); }static bool classof(const Attr *A) { return A->getKind() == attr::SharedTrylockFunction; }};class SpeculativeLoadHardeningAttr : public InheritableAttr {public:enum Spelling {GNU_speculative_load_hardening = 0,CXX11_clang_speculative_load_hardening = 1,C2x_clang_speculative_load_hardening = 2,SpellingNotCalculated = 15};// Factory methodsstatic SpeculativeLoadHardeningAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static SpeculativeLoadHardeningAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static SpeculativeLoadHardeningAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static SpeculativeLoadHardeningAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsSpeculativeLoadHardeningAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);SpeculativeLoadHardeningAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::SpeculativeLoadHardening; }};class StandaloneDebugAttr : public InheritableAttr {public:enum Spelling {GNU_standalone_debug = 0,CXX11_clang_standalone_debug = 1,SpellingNotCalculated = 15};// Factory methodsstatic StandaloneDebugAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static StandaloneDebugAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static StandaloneDebugAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static StandaloneDebugAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsStandaloneDebugAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);StandaloneDebugAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::StandaloneDebug; }};class StdCallAttr : public InheritableAttr {public:enum Spelling {GNU_stdcall = 0,CXX11_gnu_stdcall = 1,C2x_gnu_stdcall = 2,Keyword_stdcall = 3,SpellingNotCalculated = 15};// Factory methodsstatic StdCallAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static StdCallAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static StdCallAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static StdCallAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsStdCallAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);StdCallAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::StdCall; }};class StrictFPAttr : public InheritableAttr {public:// Factory methodsstatic StrictFPAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static StrictFPAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static StrictFPAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static StrictFPAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsStrictFPAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);StrictFPAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::StrictFP; }};class StrictGuardStackCheckAttr : public InheritableAttr {public:// Factory methodsstatic StrictGuardStackCheckAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static StrictGuardStackCheckAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static StrictGuardStackCheckAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static StrictGuardStackCheckAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsStrictGuardStackCheckAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);StrictGuardStackCheckAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::StrictGuardStackCheck; }};class SuppressAttr : public StmtAttr {unsigned diagnosticIdentifiers_Size;StringRef *diagnosticIdentifiers_;public:// Factory methodsstatic SuppressAttr *CreateImplicit(ASTContext &Ctx, StringRef *DiagnosticIdentifiers, unsigned DiagnosticIdentifiersSize, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static SuppressAttr *Create(ASTContext &Ctx, StringRef *DiagnosticIdentifiers, unsigned DiagnosticIdentifiersSize, const AttributeCommonInfo &CommonInfo);static SuppressAttr *CreateImplicit(ASTContext &Ctx, StringRef *DiagnosticIdentifiers, unsigned DiagnosticIdentifiersSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static SuppressAttr *Create(ASTContext &Ctx, StringRef *DiagnosticIdentifiers, unsigned DiagnosticIdentifiersSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsSuppressAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, StringRef *DiagnosticIdentifiers, unsigned DiagnosticIdentifiersSize);SuppressAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);SuppressAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;typedef StringRef* diagnosticIdentifiers_iterator;diagnosticIdentifiers_iterator diagnosticIdentifiers_begin() const { return diagnosticIdentifiers_; }diagnosticIdentifiers_iterator diagnosticIdentifiers_end() const { return diagnosticIdentifiers_ + diagnosticIdentifiers_Size; }unsigned diagnosticIdentifiers_size() const { return diagnosticIdentifiers_Size; }llvm::iterator_range<diagnosticIdentifiers_iterator> diagnosticIdentifiers() const { return llvm::make_range(diagnosticIdentifiers_begin(), diagnosticIdentifiers_end()); }static bool classof(const Attr *A) { return A->getKind() == attr::Suppress; }};class SwiftAsyncAttr : public InheritableAttr {public:enum Kind {None,SwiftPrivate,NotSwiftPrivate};private:Kind kind;ParamIdx completionHandlerIndex;public:enum Spelling {GNU_swift_async = 0,CXX11_clang_swift_async = 1,C2x_clang_swift_async = 2,SpellingNotCalculated = 15};// Factory methodsstatic SwiftAsyncAttr *CreateImplicit(ASTContext &Ctx, Kind Kind, ParamIdx CompletionHandlerIndex, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static SwiftAsyncAttr *Create(ASTContext &Ctx, Kind Kind, ParamIdx CompletionHandlerIndex, const AttributeCommonInfo &CommonInfo);static SwiftAsyncAttr *CreateImplicit(ASTContext &Ctx, Kind Kind, ParamIdx CompletionHandlerIndex, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static SwiftAsyncAttr *Create(ASTContext &Ctx, Kind Kind, ParamIdx CompletionHandlerIndex, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsSwiftAsyncAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Kind Kind, ParamIdx CompletionHandlerIndex);SwiftAsyncAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Kind Kind);SwiftAsyncAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Kind getKind() const {return kind;}static bool ConvertStrToKind(StringRef Val, Kind &Out);static const char *ConvertKindToStr(Kind Val);ParamIdx getCompletionHandlerIndex() const {return completionHandlerIndex;}static bool classof(const Attr *A) { return A->getKind() == attr::SwiftAsync; }};class SwiftAsyncCallAttr : public InheritableAttr {public:enum Spelling {GNU_swiftasynccall = 0,CXX11_clang_swiftasynccall = 1,C2x_clang_swiftasynccall = 2,SpellingNotCalculated = 15};// Factory methodsstatic SwiftAsyncCallAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static SwiftAsyncCallAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static SwiftAsyncCallAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static SwiftAsyncCallAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsSwiftAsyncCallAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);SwiftAsyncCallAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::SwiftAsyncCall; }};class SwiftAsyncContextAttr : public ParameterABIAttr {public:enum Spelling {GNU_swift_async_context = 0,CXX11_clang_swift_async_context = 1,C2x_clang_swift_async_context = 2,SpellingNotCalculated = 15};// Factory methodsstatic SwiftAsyncContextAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static SwiftAsyncContextAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static SwiftAsyncContextAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static SwiftAsyncContextAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsSwiftAsyncContextAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);SwiftAsyncContextAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::SwiftAsyncContext; }};class SwiftAsyncErrorAttr : public InheritableAttr {public:enum ConventionKind {None,NonNullError,ZeroArgument,NonZeroArgument};private:ConventionKind convention;unsigned handlerParamIdx;public:enum Spelling {GNU_swift_async_error = 0,CXX11_clang_swift_async_error = 1,C2x_clang_swift_async_error = 2,SpellingNotCalculated = 15};// Factory methodsstatic SwiftAsyncErrorAttr *CreateImplicit(ASTContext &Ctx, ConventionKind Convention, unsigned HandlerParamIdx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static SwiftAsyncErrorAttr *Create(ASTContext &Ctx, ConventionKind Convention, unsigned HandlerParamIdx, const AttributeCommonInfo &CommonInfo);static SwiftAsyncErrorAttr *CreateImplicit(ASTContext &Ctx, ConventionKind Convention, unsigned HandlerParamIdx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static SwiftAsyncErrorAttr *Create(ASTContext &Ctx, ConventionKind Convention, unsigned HandlerParamIdx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsSwiftAsyncErrorAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, ConventionKind Convention, unsigned HandlerParamIdx);SwiftAsyncErrorAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, ConventionKind Convention);SwiftAsyncErrorAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;ConventionKind getConvention() const {return convention;}static bool ConvertStrToConventionKind(StringRef Val, ConventionKind &Out);static const char *ConvertConventionKindToStr(ConventionKind Val);unsigned getHandlerParamIdx() const {return handlerParamIdx;}static bool classof(const Attr *A) { return A->getKind() == attr::SwiftAsyncError; }};class SwiftAsyncNameAttr : public InheritableAttr {unsigned nameLength;char *name;public:// Factory methodsstatic SwiftAsyncNameAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static SwiftAsyncNameAttr *Create(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo);static SwiftAsyncNameAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static SwiftAsyncNameAttr *Create(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsSwiftAsyncNameAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef Name);SwiftAsyncNameAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getName() const {return llvm::StringRef(name, nameLength);}unsigned getNameLength() const {return nameLength;}void setName(ASTContext &C, llvm::StringRef S) {nameLength = S.size();this->name = new (C, 1) char [nameLength];if (!S.empty())std::memcpy(this->name, S.data(), nameLength);}static bool classof(const Attr *A) { return A->getKind() == attr::SwiftAsyncName; }};class SwiftAttrAttr : public InheritableAttr {unsigned attributeLength;char *attribute;public:// Factory methodsstatic SwiftAttrAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Attribute, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static SwiftAttrAttr *Create(ASTContext &Ctx, llvm::StringRef Attribute, const AttributeCommonInfo &CommonInfo);static SwiftAttrAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Attribute, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static SwiftAttrAttr *Create(ASTContext &Ctx, llvm::StringRef Attribute, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsSwiftAttrAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef Attribute);SwiftAttrAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getAttribute() const {return llvm::StringRef(attribute, attributeLength);}unsigned getAttributeLength() const {return attributeLength;}void setAttribute(ASTContext &C, llvm::StringRef S) {attributeLength = S.size();this->attribute = new (C, 1) char [attributeLength];if (!S.empty())std::memcpy(this->attribute, S.data(), attributeLength);}static bool classof(const Attr *A) { return A->getKind() == attr::SwiftAttr; }};class SwiftBridgeAttr : public InheritableAttr {unsigned swiftTypeLength;char *swiftType;public:// Factory methodsstatic SwiftBridgeAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef SwiftType, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static SwiftBridgeAttr *Create(ASTContext &Ctx, llvm::StringRef SwiftType, const AttributeCommonInfo &CommonInfo);static SwiftBridgeAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef SwiftType, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static SwiftBridgeAttr *Create(ASTContext &Ctx, llvm::StringRef SwiftType, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsSwiftBridgeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef SwiftType);SwiftBridgeAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getSwiftType() const {return llvm::StringRef(swiftType, swiftTypeLength);}unsigned getSwiftTypeLength() const {return swiftTypeLength;}void setSwiftType(ASTContext &C, llvm::StringRef S) {swiftTypeLength = S.size();this->swiftType = new (C, 1) char [swiftTypeLength];if (!S.empty())std::memcpy(this->swiftType, S.data(), swiftTypeLength);}static bool classof(const Attr *A) { return A->getKind() == attr::SwiftBridge; }};class SwiftBridgedTypedefAttr : public InheritableAttr {public:// Factory methodsstatic SwiftBridgedTypedefAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static SwiftBridgedTypedefAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static SwiftBridgedTypedefAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static SwiftBridgedTypedefAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsSwiftBridgedTypedefAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);SwiftBridgedTypedefAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::SwiftBridgedTypedef; }};class SwiftCallAttr : public InheritableAttr {public:enum Spelling {GNU_swiftcall = 0,CXX11_clang_swiftcall = 1,C2x_clang_swiftcall = 2,SpellingNotCalculated = 15};// Factory methodsstatic SwiftCallAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static SwiftCallAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static SwiftCallAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static SwiftCallAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsSwiftCallAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);SwiftCallAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::SwiftCall; }};class SwiftContextAttr : public ParameterABIAttr {public:enum Spelling {GNU_swift_context = 0,CXX11_clang_swift_context = 1,C2x_clang_swift_context = 2,SpellingNotCalculated = 15};// Factory methodsstatic SwiftContextAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static SwiftContextAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static SwiftContextAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static SwiftContextAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsSwiftContextAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);SwiftContextAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::SwiftContext; }};class SwiftErrorAttr : public InheritableAttr {public:enum ConventionKind {None,NonNullError,NullResult,ZeroResult,NonZeroResult};private:ConventionKind convention;public:// Factory methodsstatic SwiftErrorAttr *CreateImplicit(ASTContext &Ctx, ConventionKind Convention, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static SwiftErrorAttr *Create(ASTContext &Ctx, ConventionKind Convention, const AttributeCommonInfo &CommonInfo);static SwiftErrorAttr *CreateImplicit(ASTContext &Ctx, ConventionKind Convention, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static SwiftErrorAttr *Create(ASTContext &Ctx, ConventionKind Convention, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsSwiftErrorAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, ConventionKind Convention);SwiftErrorAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;ConventionKind getConvention() const {return convention;}static bool ConvertStrToConventionKind(StringRef Val, ConventionKind &Out);static const char *ConvertConventionKindToStr(ConventionKind Val);static bool classof(const Attr *A) { return A->getKind() == attr::SwiftError; }};class SwiftErrorResultAttr : public ParameterABIAttr {public:enum Spelling {GNU_swift_error_result = 0,CXX11_clang_swift_error_result = 1,C2x_clang_swift_error_result = 2,SpellingNotCalculated = 15};// Factory methodsstatic SwiftErrorResultAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static SwiftErrorResultAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static SwiftErrorResultAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static SwiftErrorResultAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsSwiftErrorResultAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);SwiftErrorResultAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::SwiftErrorResult; }};class SwiftIndirectResultAttr : public ParameterABIAttr {public:enum Spelling {GNU_swift_indirect_result = 0,CXX11_clang_swift_indirect_result = 1,C2x_clang_swift_indirect_result = 2,SpellingNotCalculated = 15};// Factory methodsstatic SwiftIndirectResultAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static SwiftIndirectResultAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static SwiftIndirectResultAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static SwiftIndirectResultAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsSwiftIndirectResultAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);SwiftIndirectResultAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::SwiftIndirectResult; }};class SwiftNameAttr : public InheritableAttr {unsigned nameLength;char *name;public:// Factory methodsstatic SwiftNameAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static SwiftNameAttr *Create(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo);static SwiftNameAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static SwiftNameAttr *Create(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsSwiftNameAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef Name);SwiftNameAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getName() const {return llvm::StringRef(name, nameLength);}unsigned getNameLength() const {return nameLength;}void setName(ASTContext &C, llvm::StringRef S) {nameLength = S.size();this->name = new (C, 1) char [nameLength];if (!S.empty())std::memcpy(this->name, S.data(), nameLength);}static bool classof(const Attr *A) { return A->getKind() == attr::SwiftName; }};class SwiftNewTypeAttr : public InheritableAttr {public:enum NewtypeKind {NK_Struct,NK_Enum};private:NewtypeKind newtypeKind;public:enum Spelling {GNU_swift_newtype = 0,GNU_swift_wrapper = 1,SpellingNotCalculated = 15};// Factory methodsstatic SwiftNewTypeAttr *CreateImplicit(ASTContext &Ctx, NewtypeKind NewtypeKind, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static SwiftNewTypeAttr *Create(ASTContext &Ctx, NewtypeKind NewtypeKind, const AttributeCommonInfo &CommonInfo);static SwiftNewTypeAttr *CreateImplicit(ASTContext &Ctx, NewtypeKind NewtypeKind, SourceRange Range, AttributeCommonInfo::Syntax Syntax, SwiftNewTypeAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static SwiftNewTypeAttr *Create(ASTContext &Ctx, NewtypeKind NewtypeKind, SourceRange Range, AttributeCommonInfo::Syntax Syntax, SwiftNewTypeAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsSwiftNewTypeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, NewtypeKind NewtypeKind);SwiftNewTypeAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;NewtypeKind getNewtypeKind() const {return newtypeKind;}static bool ConvertStrToNewtypeKind(StringRef Val, NewtypeKind &Out);static const char *ConvertNewtypeKindToStr(NewtypeKind Val);static bool classof(const Attr *A) { return A->getKind() == attr::SwiftNewType; }};class SwiftObjCMembersAttr : public Attr {public:// Factory methodsstatic SwiftObjCMembersAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static SwiftObjCMembersAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static SwiftObjCMembersAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static SwiftObjCMembersAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsSwiftObjCMembersAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);SwiftObjCMembersAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::SwiftObjCMembers; }};class SwiftPrivateAttr : public InheritableAttr {public:// Factory methodsstatic SwiftPrivateAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static SwiftPrivateAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static SwiftPrivateAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static SwiftPrivateAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsSwiftPrivateAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);SwiftPrivateAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::SwiftPrivate; }};class SysVABIAttr : public InheritableAttr {public:enum Spelling {GNU_sysv_abi = 0,CXX11_gnu_sysv_abi = 1,C2x_gnu_sysv_abi = 2,SpellingNotCalculated = 15};// Factory methodsstatic SysVABIAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static SysVABIAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static SysVABIAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static SysVABIAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsSysVABIAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);SysVABIAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::SysVABI; }};class TLSModelAttr : public InheritableAttr {unsigned modelLength;char *model;public:enum Spelling {GNU_tls_model = 0,CXX11_gnu_tls_model = 1,C2x_gnu_tls_model = 2,SpellingNotCalculated = 15};// Factory methodsstatic TLSModelAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Model, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static TLSModelAttr *Create(ASTContext &Ctx, llvm::StringRef Model, const AttributeCommonInfo &CommonInfo);static TLSModelAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Model, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static TLSModelAttr *Create(ASTContext &Ctx, llvm::StringRef Model, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsTLSModelAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef Model);TLSModelAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getModel() const {return llvm::StringRef(model, modelLength);}unsigned getModelLength() const {return modelLength;}void setModel(ASTContext &C, llvm::StringRef S) {modelLength = S.size();this->model = new (C, 1) char [modelLength];if (!S.empty())std::memcpy(this->model, S.data(), modelLength);}static bool classof(const Attr *A) { return A->getKind() == attr::TLSModel; }};class TargetAttr : public InheritableAttr {unsigned featuresStrLength;char *featuresStr;public:enum Spelling {GNU_target = 0,CXX11_gnu_target = 1,C2x_gnu_target = 2,SpellingNotCalculated = 15};// Factory methodsstatic TargetAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef FeaturesStr, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static TargetAttr *Create(ASTContext &Ctx, llvm::StringRef FeaturesStr, const AttributeCommonInfo &CommonInfo);static TargetAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef FeaturesStr, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static TargetAttr *Create(ASTContext &Ctx, llvm::StringRef FeaturesStr, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsTargetAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef FeaturesStr);TargetAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getFeaturesStr() const {return llvm::StringRef(featuresStr, featuresStrLength);}unsigned getFeaturesStrLength() const {return featuresStrLength;}void setFeaturesStr(ASTContext &C, llvm::StringRef S) {featuresStrLength = S.size();this->featuresStr = new (C, 1) char [featuresStrLength];if (!S.empty())std::memcpy(this->featuresStr, S.data(), featuresStrLength);}StringRef getArchitecture() const {StringRef Features = getFeaturesStr();if (Features == "default") return {};SmallVector<StringRef, 1> AttrFeatures;Features.split(AttrFeatures, ",");for (auto &Feature : AttrFeatures) {Feature = Feature.trim();if (Feature.startswith("arch="))return Feature.drop_front(sizeof("arch=") - 1);}return "";}// Gets the list of features as simple string-refs with no +/- or 'no-'.// Only adds the items to 'Out' that are additions.void getAddedFeatures(llvm::SmallVectorImpl<StringRef> &Out) const {StringRef Features = getFeaturesStr();if (Features == "default") return;SmallVector<StringRef, 1> AttrFeatures;Features.split(AttrFeatures, ",");for (auto &Feature : AttrFeatures) {Feature = Feature.trim();if (!Feature.startswith("no-") && !Feature.startswith("arch=") &&!Feature.startswith("fpmath=") && !Feature.startswith("tune="))Out.push_back(Feature);}}bool isDefaultVersion() const { return getFeaturesStr() == "default"; }static bool classof(const Attr *A) { return A->getKind() == attr::Target; }};class TargetClonesAttr : public InheritableAttr {unsigned featuresStrs_Size;StringRef *featuresStrs_;public:enum Spelling {GNU_target_clones = 0,CXX11_gnu_target_clones = 1,C2x_gnu_target_clones = 2,SpellingNotCalculated = 15};// Factory methodsstatic TargetClonesAttr *CreateImplicit(ASTContext &Ctx, StringRef *FeaturesStrs, unsigned FeaturesStrsSize, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static TargetClonesAttr *Create(ASTContext &Ctx, StringRef *FeaturesStrs, unsigned FeaturesStrsSize, const AttributeCommonInfo &CommonInfo);static TargetClonesAttr *CreateImplicit(ASTContext &Ctx, StringRef *FeaturesStrs, unsigned FeaturesStrsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static TargetClonesAttr *Create(ASTContext &Ctx, StringRef *FeaturesStrs, unsigned FeaturesStrsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsTargetClonesAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, StringRef *FeaturesStrs, unsigned FeaturesStrsSize);TargetClonesAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);TargetClonesAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;typedef StringRef* featuresStrs_iterator;featuresStrs_iterator featuresStrs_begin() const { return featuresStrs_; }featuresStrs_iterator featuresStrs_end() const { return featuresStrs_ + featuresStrs_Size; }unsigned featuresStrs_size() const { return featuresStrs_Size; }llvm::iterator_range<featuresStrs_iterator> featuresStrs() const { return llvm::make_range(featuresStrs_begin(), featuresStrs_end()); }StringRef getFeatureStr(unsigned Index) const {return *(featuresStrs_begin() + Index);}// Given an index into the 'featuresStrs' sequence, compute a unique// ID to be used with function name mangling for the associated variant.// This mapping is necessary due to a requirement that the mangling ID// used for the "default" variant be the largest mangling ID in the// variant set. Duplicate variants present in 'featuresStrs' are also// assigned their own unique ID (the mapping is bijective).unsigned getMangledIndex(unsigned Index) const {if (getFeatureStr(Index) == "default")return std::count_if(featuresStrs_begin(), featuresStrs_end(),[](StringRef S) { return S != "default"; });return std::count_if(featuresStrs_begin(), featuresStrs_begin() + Index,[](StringRef S) { return S != "default"; });}// Given an index into the 'featuresStrs' sequence, determine if the// index corresponds to the first instance of the named variant. This// is used to skip over duplicate variant instances when iterating over// 'featuresStrs'.bool isFirstOfVersion(unsigned Index) const {StringRef FeatureStr(getFeatureStr(Index));return 0 == std::count_if(featuresStrs_begin(), featuresStrs_begin() + Index,[FeatureStr](StringRef S) { return S == FeatureStr; });}static bool classof(const Attr *A) { return A->getKind() == attr::TargetClones; }};class TargetVersionAttr : public InheritableAttr {unsigned namesStrLength;char *namesStr;public:enum Spelling {GNU_target_version = 0,CXX11_gnu_target_version = 1,C2x_gnu_target_version = 2,SpellingNotCalculated = 15};// Factory methodsstatic TargetVersionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef NamesStr, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static TargetVersionAttr *Create(ASTContext &Ctx, llvm::StringRef NamesStr, const AttributeCommonInfo &CommonInfo);static TargetVersionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef NamesStr, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static TargetVersionAttr *Create(ASTContext &Ctx, llvm::StringRef NamesStr, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsTargetVersionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef NamesStr);TargetVersionAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getNamesStr() const {return llvm::StringRef(namesStr, namesStrLength);}unsigned getNamesStrLength() const {return namesStrLength;}void setNamesStr(ASTContext &C, llvm::StringRef S) {namesStrLength = S.size();this->namesStr = new (C, 1) char [namesStrLength];if (!S.empty())std::memcpy(this->namesStr, S.data(), namesStrLength);}StringRef getName() const { return getNamesStr().trim(); }bool isDefaultVersion() const {return getName() == "default";}void getFeatures(llvm::SmallVectorImpl<StringRef> &Out) const {if (isDefaultVersion()) return;StringRef Features = getName();SmallVector<StringRef, 8> AttrFeatures;Features.split(AttrFeatures, "+");for (auto &Feature : AttrFeatures) {Feature = Feature.trim();Out.push_back(Feature);}}static bool classof(const Attr *A) { return A->getKind() == attr::TargetVersion; }};class TestTypestateAttr : public InheritableAttr {public:enum ConsumedState {Consumed,Unconsumed};private:ConsumedState testState;public:enum Spelling {GNU_test_typestate = 0,CXX11_clang_test_typestate = 1,SpellingNotCalculated = 15};// Factory methodsstatic TestTypestateAttr *CreateImplicit(ASTContext &Ctx, ConsumedState TestState, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static TestTypestateAttr *Create(ASTContext &Ctx, ConsumedState TestState, const AttributeCommonInfo &CommonInfo);static TestTypestateAttr *CreateImplicit(ASTContext &Ctx, ConsumedState TestState, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static TestTypestateAttr *Create(ASTContext &Ctx, ConsumedState TestState, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsTestTypestateAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, ConsumedState TestState);TestTypestateAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;ConsumedState getTestState() const {return testState;}static bool ConvertStrToConsumedState(StringRef Val, ConsumedState &Out);static const char *ConvertConsumedStateToStr(ConsumedState Val);static bool classof(const Attr *A) { return A->getKind() == attr::TestTypestate; }};class ThisCallAttr : public InheritableAttr {public:enum Spelling {GNU_thiscall = 0,CXX11_gnu_thiscall = 1,C2x_gnu_thiscall = 2,Keyword_thiscall = 3,SpellingNotCalculated = 15};// Factory methodsstatic ThisCallAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ThisCallAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ThisCallAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ThisCallAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsThisCallAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ThisCallAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::ThisCall; }};class ThreadAttr : public Attr {public:// Factory methodsstatic ThreadAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ThreadAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static ThreadAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ThreadAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsThreadAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);ThreadAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::Thread; }};class TransparentUnionAttr : public InheritableAttr {public:enum Spelling {GNU_transparent_union = 0,CXX11_gnu_transparent_union = 1,C2x_gnu_transparent_union = 2,SpellingNotCalculated = 15};// Factory methodsstatic TransparentUnionAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static TransparentUnionAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static TransparentUnionAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static TransparentUnionAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsTransparentUnionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);TransparentUnionAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::TransparentUnion; }};class TrivialABIAttr : public InheritableAttr {public:enum Spelling {GNU_trivial_abi = 0,CXX11_clang_trivial_abi = 1,SpellingNotCalculated = 15};// Factory methodsstatic TrivialABIAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static TrivialABIAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static TrivialABIAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static TrivialABIAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsTrivialABIAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);TrivialABIAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::TrivialABI; }};class TryAcquireCapabilityAttr : public InheritableAttr {Expr * successValue;unsigned args_Size;Expr * *args_;public:enum Spelling {GNU_try_acquire_capability = 0,CXX11_clang_try_acquire_capability = 1,GNU_try_acquire_shared_capability = 2,CXX11_clang_try_acquire_shared_capability = 3,SpellingNotCalculated = 15};// Factory methodsstatic TryAcquireCapabilityAttr *CreateImplicit(ASTContext &Ctx, Expr * SuccessValue, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static TryAcquireCapabilityAttr *Create(ASTContext &Ctx, Expr * SuccessValue, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);static TryAcquireCapabilityAttr *CreateImplicit(ASTContext &Ctx, Expr * SuccessValue, Expr * *Args, unsigned ArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax, TryAcquireCapabilityAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static TryAcquireCapabilityAttr *Create(ASTContext &Ctx, Expr * SuccessValue, Expr * *Args, unsigned ArgsSize, SourceRange Range, AttributeCommonInfo::Syntax Syntax, TryAcquireCapabilityAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsTryAcquireCapabilityAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Expr * SuccessValue, Expr * *Args, unsigned ArgsSize);TryAcquireCapabilityAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, Expr * SuccessValue);TryAcquireCapabilityAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;bool isShared() const { return getAttributeSpellingListIndex() == 2 ||getAttributeSpellingListIndex() == 3; }Expr * getSuccessValue() const {return successValue;}typedef Expr ** args_iterator;args_iterator args_begin() const { return args_; }args_iterator args_end() const { return args_ + args_Size; }unsigned args_size() const { return args_Size; }llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); }static bool classof(const Attr *A) { return A->getKind() == attr::TryAcquireCapability; }};class TypeNonNullAttr : public TypeAttr {public:// Factory methodsstatic TypeNonNullAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static TypeNonNullAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static TypeNonNullAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static TypeNonNullAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsTypeNonNullAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);TypeNonNullAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::TypeNonNull; }};class TypeNullUnspecifiedAttr : public TypeAttr {public:// Factory methodsstatic TypeNullUnspecifiedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static TypeNullUnspecifiedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static TypeNullUnspecifiedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static TypeNullUnspecifiedAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsTypeNullUnspecifiedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);TypeNullUnspecifiedAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::TypeNullUnspecified; }};class TypeNullableAttr : public TypeAttr {public:// Factory methodsstatic TypeNullableAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static TypeNullableAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static TypeNullableAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static TypeNullableAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsTypeNullableAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);TypeNullableAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::TypeNullable; }};class TypeNullableResultAttr : public TypeAttr {public:// Factory methodsstatic TypeNullableResultAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static TypeNullableResultAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static TypeNullableResultAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static TypeNullableResultAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsTypeNullableResultAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);TypeNullableResultAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::TypeNullableResult; }};class TypeTagForDatatypeAttr : public InheritableAttr {IdentifierInfo * argumentKind;TypeSourceInfo * matchingCType;bool layoutCompatible;bool mustBeNull;public:enum Spelling {GNU_type_tag_for_datatype = 0,CXX11_clang_type_tag_for_datatype = 1,C2x_clang_type_tag_for_datatype = 2,SpellingNotCalculated = 15};// Factory methodsstatic TypeTagForDatatypeAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * ArgumentKind, TypeSourceInfo * MatchingCType, bool LayoutCompatible, bool MustBeNull, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static TypeTagForDatatypeAttr *Create(ASTContext &Ctx, IdentifierInfo * ArgumentKind, TypeSourceInfo * MatchingCType, bool LayoutCompatible, bool MustBeNull, const AttributeCommonInfo &CommonInfo);static TypeTagForDatatypeAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * ArgumentKind, TypeSourceInfo * MatchingCType, bool LayoutCompatible, bool MustBeNull, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static TypeTagForDatatypeAttr *Create(ASTContext &Ctx, IdentifierInfo * ArgumentKind, TypeSourceInfo * MatchingCType, bool LayoutCompatible, bool MustBeNull, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsTypeTagForDatatypeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, IdentifierInfo * ArgumentKind, TypeSourceInfo * MatchingCType, bool LayoutCompatible, bool MustBeNull);TypeTagForDatatypeAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;IdentifierInfo * getArgumentKind() const {return argumentKind;}QualType getMatchingCType() const {return matchingCType->getType();} TypeSourceInfo * getMatchingCTypeLoc() const {return matchingCType;}bool getLayoutCompatible() const {return layoutCompatible;}bool getMustBeNull() const {return mustBeNull;}static bool classof(const Attr *A) { return A->getKind() == attr::TypeTagForDatatype; }};class TypeVisibilityAttr : public InheritableAttr {public:enum VisibilityType {Default,Hidden,Protected};private:VisibilityType visibility;public:enum Spelling {GNU_type_visibility = 0,CXX11_clang_type_visibility = 1,C2x_clang_type_visibility = 2,SpellingNotCalculated = 15};// Factory methodsstatic TypeVisibilityAttr *CreateImplicit(ASTContext &Ctx, VisibilityType Visibility, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static TypeVisibilityAttr *Create(ASTContext &Ctx, VisibilityType Visibility, const AttributeCommonInfo &CommonInfo);static TypeVisibilityAttr *CreateImplicit(ASTContext &Ctx, VisibilityType Visibility, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static TypeVisibilityAttr *Create(ASTContext &Ctx, VisibilityType Visibility, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsTypeVisibilityAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, VisibilityType Visibility);TypeVisibilityAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;VisibilityType getVisibility() const {return visibility;}static bool ConvertStrToVisibilityType(StringRef Val, VisibilityType &Out);static const char *ConvertVisibilityTypeToStr(VisibilityType Val);static bool classof(const Attr *A) { return A->getKind() == attr::TypeVisibility; }};class UPtrAttr : public TypeAttr {public:// Factory methodsstatic UPtrAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static UPtrAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static UPtrAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static UPtrAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsUPtrAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);UPtrAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::UPtr; }};class UnavailableAttr : public InheritableAttr {unsigned messageLength;char *message;public:enum ImplicitReason {IR_None,IR_ARCForbiddenType,IR_ForbiddenWeak,IR_ARCForbiddenConversion,IR_ARCInitReturnsUnrelated,IR_ARCFieldWithOwnership};private:ImplicitReason implicitReason;public:enum Spelling {GNU_unavailable = 0,CXX11_clang_unavailable = 1,C2x_clang_unavailable = 2,SpellingNotCalculated = 15};// Factory methodsstatic UnavailableAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Message, ImplicitReason ImplicitReason, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static UnavailableAttr *Create(ASTContext &Ctx, llvm::StringRef Message, ImplicitReason ImplicitReason, const AttributeCommonInfo &CommonInfo);static UnavailableAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Message, ImplicitReason ImplicitReason, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static UnavailableAttr *Create(ASTContext &Ctx, llvm::StringRef Message, ImplicitReason ImplicitReason, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static UnavailableAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Message, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static UnavailableAttr *Create(ASTContext &Ctx, llvm::StringRef Message, const AttributeCommonInfo &CommonInfo);static UnavailableAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Message, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static UnavailableAttr *Create(ASTContext &Ctx, llvm::StringRef Message, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsUnavailableAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef Message, ImplicitReason ImplicitReason);UnavailableAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef Message);UnavailableAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);UnavailableAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getMessage() const {return llvm::StringRef(message, messageLength);}unsigned getMessageLength() const {return messageLength;}void setMessage(ASTContext &C, llvm::StringRef S) {messageLength = S.size();this->message = new (C, 1) char [messageLength];if (!S.empty())std::memcpy(this->message, S.data(), messageLength);}ImplicitReason getImplicitReason() const {return implicitReason;}static bool classof(const Attr *A) { return A->getKind() == attr::Unavailable; }};class UninitializedAttr : public InheritableAttr {public:enum Spelling {GNU_uninitialized = 0,CXX11_clang_uninitialized = 1,SpellingNotCalculated = 15};// Factory methodsstatic UninitializedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static UninitializedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static UninitializedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static UninitializedAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsUninitializedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);UninitializedAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::Uninitialized; }};class UnlikelyAttr : public StmtAttr {public:enum Spelling {CXX11_unlikely = 0,C2x_clang_unlikely = 1,SpellingNotCalculated = 15};// Factory methodsstatic UnlikelyAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static UnlikelyAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static UnlikelyAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static UnlikelyAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsUnlikelyAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);UnlikelyAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::Unlikely; }};class UnusedAttr : public InheritableAttr {public:enum Spelling {CXX11_maybe_unused = 0,GNU_unused = 1,CXX11_gnu_unused = 2,C2x_gnu_unused = 3,C2x_maybe_unused = 4,SpellingNotCalculated = 15};// Factory methodsstatic UnusedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static UnusedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static UnusedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, UnusedAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static UnusedAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, UnusedAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsUnusedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);UnusedAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::Unused; }};class UseHandleAttr : public InheritableParamAttr {unsigned handleTypeLength;char *handleType;public:enum Spelling {GNU_use_handle = 0,CXX11_clang_use_handle = 1,C2x_clang_use_handle = 2,SpellingNotCalculated = 15};// Factory methodsstatic UseHandleAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef HandleType, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static UseHandleAttr *Create(ASTContext &Ctx, llvm::StringRef HandleType, const AttributeCommonInfo &CommonInfo);static UseHandleAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef HandleType, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static UseHandleAttr *Create(ASTContext &Ctx, llvm::StringRef HandleType, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsUseHandleAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef HandleType);UseHandleAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getHandleType() const {return llvm::StringRef(handleType, handleTypeLength);}unsigned getHandleTypeLength() const {return handleTypeLength;}void setHandleType(ASTContext &C, llvm::StringRef S) {handleTypeLength = S.size();this->handleType = new (C, 1) char [handleTypeLength];if (!S.empty())std::memcpy(this->handleType, S.data(), handleTypeLength);}static bool classof(const Attr *A) { return A->getKind() == attr::UseHandle; }};class UsedAttr : public InheritableAttr {public:enum Spelling {GNU_used = 0,CXX11_gnu_used = 1,C2x_gnu_used = 2,SpellingNotCalculated = 15};// Factory methodsstatic UsedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static UsedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static UsedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static UsedAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsUsedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);UsedAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::Used; }};class UsingIfExistsAttr : public InheritableAttr {public:enum Spelling {GNU_using_if_exists = 0,CXX11_clang_using_if_exists = 1,SpellingNotCalculated = 15};// Factory methodsstatic UsingIfExistsAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static UsingIfExistsAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static UsingIfExistsAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static UsingIfExistsAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsUsingIfExistsAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);UsingIfExistsAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::UsingIfExists; }};class UuidAttr : public InheritableAttr {unsigned guidLength;char *guid;MSGuidDecl * guidDecl;public:enum Spelling {Declspec_uuid = 0,Microsoft_uuid = 1,SpellingNotCalculated = 15};// Factory methodsstatic UuidAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Guid, MSGuidDecl * GuidDecl, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static UuidAttr *Create(ASTContext &Ctx, llvm::StringRef Guid, MSGuidDecl * GuidDecl, const AttributeCommonInfo &CommonInfo);static UuidAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Guid, MSGuidDecl * GuidDecl, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static UuidAttr *Create(ASTContext &Ctx, llvm::StringRef Guid, MSGuidDecl * GuidDecl, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static UuidAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Guid, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static UuidAttr *Create(ASTContext &Ctx, llvm::StringRef Guid, const AttributeCommonInfo &CommonInfo);static UuidAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Guid, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static UuidAttr *Create(ASTContext &Ctx, llvm::StringRef Guid, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsUuidAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef Guid, MSGuidDecl * GuidDecl);UuidAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef Guid);UuidAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getGuid() const {return llvm::StringRef(guid, guidLength);}unsigned getGuidLength() const {return guidLength;}void setGuid(ASTContext &C, llvm::StringRef S) {guidLength = S.size();this->guid = new (C, 1) char [guidLength];if (!S.empty())std::memcpy(this->guid, S.data(), guidLength);}MSGuidDecl * getGuidDecl() const {return guidDecl;}static bool classof(const Attr *A) { return A->getKind() == attr::Uuid; }};class VecReturnAttr : public InheritableAttr {public:enum Spelling {GNU_vecreturn = 0,CXX11_clang_vecreturn = 1,SpellingNotCalculated = 15};// Factory methodsstatic VecReturnAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static VecReturnAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static VecReturnAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static VecReturnAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsVecReturnAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);VecReturnAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::VecReturn; }};class VecTypeHintAttr : public InheritableAttr {TypeSourceInfo * typeHint;public:// Factory methodsstatic VecTypeHintAttr *CreateImplicit(ASTContext &Ctx, TypeSourceInfo * TypeHint, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static VecTypeHintAttr *Create(ASTContext &Ctx, TypeSourceInfo * TypeHint, const AttributeCommonInfo &CommonInfo);static VecTypeHintAttr *CreateImplicit(ASTContext &Ctx, TypeSourceInfo * TypeHint, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static VecTypeHintAttr *Create(ASTContext &Ctx, TypeSourceInfo * TypeHint, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsVecTypeHintAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, TypeSourceInfo * TypeHint);VecTypeHintAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;QualType getTypeHint() const {return typeHint->getType();} TypeSourceInfo * getTypeHintLoc() const {return typeHint;}static bool classof(const Attr *A) { return A->getKind() == attr::VecTypeHint; }};class VectorCallAttr : public InheritableAttr {public:enum Spelling {GNU_vectorcall = 0,CXX11_clang_vectorcall = 1,C2x_clang_vectorcall = 2,Keyword_vectorcall = 3,SpellingNotCalculated = 15};// Factory methodsstatic VectorCallAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static VectorCallAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static VectorCallAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static VectorCallAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsVectorCallAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);VectorCallAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::VectorCall; }};class VisibilityAttr : public InheritableAttr {public:enum VisibilityType {Default,Hidden,Protected};private:VisibilityType visibility;public:enum Spelling {GNU_visibility = 0,CXX11_gnu_visibility = 1,C2x_gnu_visibility = 2,SpellingNotCalculated = 15};// Factory methodsstatic VisibilityAttr *CreateImplicit(ASTContext &Ctx, VisibilityType Visibility, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static VisibilityAttr *Create(ASTContext &Ctx, VisibilityType Visibility, const AttributeCommonInfo &CommonInfo);static VisibilityAttr *CreateImplicit(ASTContext &Ctx, VisibilityType Visibility, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static VisibilityAttr *Create(ASTContext &Ctx, VisibilityType Visibility, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsVisibilityAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, VisibilityType Visibility);VisibilityAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;VisibilityType getVisibility() const {return visibility;}static bool ConvertStrToVisibilityType(StringRef Val, VisibilityType &Out);static const char *ConvertVisibilityTypeToStr(VisibilityType Val);static bool classof(const Attr *A) { return A->getKind() == attr::Visibility; }};class WarnUnusedAttr : public InheritableAttr {public:enum Spelling {GNU_warn_unused = 0,CXX11_gnu_warn_unused = 1,C2x_gnu_warn_unused = 2,SpellingNotCalculated = 15};// Factory methodsstatic WarnUnusedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static WarnUnusedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static WarnUnusedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static WarnUnusedAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsWarnUnusedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);WarnUnusedAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::WarnUnused; }};class WarnUnusedResultAttr : public InheritableAttr {unsigned messageLength;char *message;public:enum Spelling {CXX11_nodiscard = 0,C2x_nodiscard = 1,CXX11_clang_warn_unused_result = 2,GNU_warn_unused_result = 3,CXX11_gnu_warn_unused_result = 4,C2x_gnu_warn_unused_result = 5,SpellingNotCalculated = 15};// Factory methodsstatic WarnUnusedResultAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Message, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static WarnUnusedResultAttr *Create(ASTContext &Ctx, llvm::StringRef Message, const AttributeCommonInfo &CommonInfo);static WarnUnusedResultAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Message, SourceRange Range, AttributeCommonInfo::Syntax Syntax, WarnUnusedResultAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static WarnUnusedResultAttr *Create(ASTContext &Ctx, llvm::StringRef Message, SourceRange Range, AttributeCommonInfo::Syntax Syntax, WarnUnusedResultAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsWarnUnusedResultAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef Message);WarnUnusedResultAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);WarnUnusedResultAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;llvm::StringRef getMessage() const {return llvm::StringRef(message, messageLength);}unsigned getMessageLength() const {return messageLength;}void setMessage(ASTContext &C, llvm::StringRef S) {messageLength = S.size();this->message = new (C, 1) char [messageLength];if (!S.empty())std::memcpy(this->message, S.data(), messageLength);}// Check whether this the C++11 nodiscard version, even in non C++11// spellings.bool IsCXX11NoDiscard() const {return this->getSemanticSpelling() == CXX11_nodiscard;}static bool classof(const Attr *A) { return A->getKind() == attr::WarnUnusedResult; }};class WeakAttr : public InheritableAttr {public:enum Spelling {GNU_weak = 0,CXX11_gnu_weak = 1,C2x_gnu_weak = 2,SpellingNotCalculated = 15};// Factory methodsstatic WeakAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static WeakAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static WeakAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static WeakAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsWeakAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);WeakAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::Weak; }};class WeakImportAttr : public InheritableAttr {public:enum Spelling {GNU_weak_import = 0,CXX11_clang_weak_import = 1,C2x_clang_weak_import = 2,SpellingNotCalculated = 15};// Factory methodsstatic WeakImportAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static WeakImportAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static WeakImportAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static WeakImportAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsWeakImportAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);WeakImportAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::WeakImport; }};class WeakRefAttr : public InheritableAttr {unsigned aliaseeLength;char *aliasee;public:enum Spelling {GNU_weakref = 0,CXX11_gnu_weakref = 1,C2x_gnu_weakref = 2,SpellingNotCalculated = 15};// Factory methodsstatic WeakRefAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Aliasee, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static WeakRefAttr *Create(ASTContext &Ctx, llvm::StringRef Aliasee, const AttributeCommonInfo &CommonInfo);static WeakRefAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Aliasee, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static WeakRefAttr *Create(ASTContext &Ctx, llvm::StringRef Aliasee, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsWeakRefAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef Aliasee);WeakRefAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);WeakRefAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getAliasee() const {return llvm::StringRef(aliasee, aliaseeLength);}unsigned getAliaseeLength() const {return aliaseeLength;}void setAliasee(ASTContext &C, llvm::StringRef S) {aliaseeLength = S.size();this->aliasee = new (C, 1) char [aliaseeLength];if (!S.empty())std::memcpy(this->aliasee, S.data(), aliaseeLength);}static bool classof(const Attr *A) { return A->getKind() == attr::WeakRef; }};class WebAssemblyExportNameAttr : public InheritableAttr {unsigned exportNameLength;char *exportName;public:enum Spelling {GNU_export_name = 0,CXX11_clang_export_name = 1,C2x_clang_export_name = 2,SpellingNotCalculated = 15};// Factory methodsstatic WebAssemblyExportNameAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef ExportName, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static WebAssemblyExportNameAttr *Create(ASTContext &Ctx, llvm::StringRef ExportName, const AttributeCommonInfo &CommonInfo);static WebAssemblyExportNameAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef ExportName, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static WebAssemblyExportNameAttr *Create(ASTContext &Ctx, llvm::StringRef ExportName, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsWebAssemblyExportNameAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef ExportName);WebAssemblyExportNameAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getExportName() const {return llvm::StringRef(exportName, exportNameLength);}unsigned getExportNameLength() const {return exportNameLength;}void setExportName(ASTContext &C, llvm::StringRef S) {exportNameLength = S.size();this->exportName = new (C, 1) char [exportNameLength];if (!S.empty())std::memcpy(this->exportName, S.data(), exportNameLength);}static bool classof(const Attr *A) { return A->getKind() == attr::WebAssemblyExportName; }};class WebAssemblyImportModuleAttr : public InheritableAttr {unsigned importModuleLength;char *importModule;public:enum Spelling {GNU_import_module = 0,CXX11_clang_import_module = 1,C2x_clang_import_module = 2,SpellingNotCalculated = 15};// Factory methodsstatic WebAssemblyImportModuleAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef ImportModule, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static WebAssemblyImportModuleAttr *Create(ASTContext &Ctx, llvm::StringRef ImportModule, const AttributeCommonInfo &CommonInfo);static WebAssemblyImportModuleAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef ImportModule, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static WebAssemblyImportModuleAttr *Create(ASTContext &Ctx, llvm::StringRef ImportModule, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsWebAssemblyImportModuleAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef ImportModule);WebAssemblyImportModuleAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getImportModule() const {return llvm::StringRef(importModule, importModuleLength);}unsigned getImportModuleLength() const {return importModuleLength;}void setImportModule(ASTContext &C, llvm::StringRef S) {importModuleLength = S.size();this->importModule = new (C, 1) char [importModuleLength];if (!S.empty())std::memcpy(this->importModule, S.data(), importModuleLength);}static bool classof(const Attr *A) { return A->getKind() == attr::WebAssemblyImportModule; }};class WebAssemblyImportNameAttr : public InheritableAttr {unsigned importNameLength;char *importName;public:enum Spelling {GNU_import_name = 0,CXX11_clang_import_name = 1,C2x_clang_import_name = 2,SpellingNotCalculated = 15};// Factory methodsstatic WebAssemblyImportNameAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef ImportName, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static WebAssemblyImportNameAttr *Create(ASTContext &Ctx, llvm::StringRef ImportName, const AttributeCommonInfo &CommonInfo);static WebAssemblyImportNameAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef ImportName, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static WebAssemblyImportNameAttr *Create(ASTContext &Ctx, llvm::StringRef ImportName, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsWebAssemblyImportNameAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, llvm::StringRef ImportName);WebAssemblyImportNameAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;llvm::StringRef getImportName() const {return llvm::StringRef(importName, importNameLength);}unsigned getImportNameLength() const {return importNameLength;}void setImportName(ASTContext &C, llvm::StringRef S) {importNameLength = S.size();this->importName = new (C, 1) char [importNameLength];if (!S.empty())std::memcpy(this->importName, S.data(), importNameLength);}static bool classof(const Attr *A) { return A->getKind() == attr::WebAssemblyImportName; }};class WorkGroupSizeHintAttr : public InheritableAttr {unsigned xDim;unsigned yDim;unsigned zDim;public:// Factory methodsstatic WorkGroupSizeHintAttr *CreateImplicit(ASTContext &Ctx, unsigned XDim, unsigned YDim, unsigned ZDim, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static WorkGroupSizeHintAttr *Create(ASTContext &Ctx, unsigned XDim, unsigned YDim, unsigned ZDim, const AttributeCommonInfo &CommonInfo);static WorkGroupSizeHintAttr *CreateImplicit(ASTContext &Ctx, unsigned XDim, unsigned YDim, unsigned ZDim, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static WorkGroupSizeHintAttr *Create(ASTContext &Ctx, unsigned XDim, unsigned YDim, unsigned ZDim, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsWorkGroupSizeHintAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, unsigned XDim, unsigned YDim, unsigned ZDim);WorkGroupSizeHintAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;unsigned getXDim() const {return xDim;}unsigned getYDim() const {return yDim;}unsigned getZDim() const {return zDim;}static bool classof(const Attr *A) { return A->getKind() == attr::WorkGroupSizeHint; }};class X86ForceAlignArgPointerAttr : public InheritableAttr {public:enum Spelling {GNU_force_align_arg_pointer = 0,CXX11_gnu_force_align_arg_pointer = 1,C2x_gnu_force_align_arg_pointer = 2,SpellingNotCalculated = 15};// Factory methodsstatic X86ForceAlignArgPointerAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static X86ForceAlignArgPointerAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static X86ForceAlignArgPointerAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static X86ForceAlignArgPointerAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsX86ForceAlignArgPointerAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);X86ForceAlignArgPointerAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;static bool classof(const Attr *A) { return A->getKind() == attr::X86ForceAlignArgPointer; }};class XRayInstrumentAttr : public InheritableAttr {public:enum Spelling {GNU_xray_always_instrument = 0,CXX11_clang_xray_always_instrument = 1,C2x_clang_xray_always_instrument = 2,GNU_xray_never_instrument = 3,CXX11_clang_xray_never_instrument = 4,C2x_clang_xray_never_instrument = 5,SpellingNotCalculated = 15};// Factory methodsstatic XRayInstrumentAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static XRayInstrumentAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);static XRayInstrumentAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, XRayInstrumentAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));static XRayInstrumentAttr *Create(ASTContext &Ctx, SourceRange Range, AttributeCommonInfo::Syntax Syntax, XRayInstrumentAttr::Spelling S = static_cast<Spelling>(SpellingNotCalculated));// ConstructorsXRayInstrumentAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);XRayInstrumentAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;Spelling getSemanticSpelling() const;bool alwaysXRayInstrument() const { return getAttributeSpellingListIndex() == 0 ||getAttributeSpellingListIndex() == 1 ||getAttributeSpellingListIndex() == 2; }bool neverXRayInstrument() const { return getAttributeSpellingListIndex() == 3 ||getAttributeSpellingListIndex() == 4 ||getAttributeSpellingListIndex() == 5; }static bool classof(const Attr *A) { return A->getKind() == attr::XRayInstrument; }};class XRayLogArgsAttr : public InheritableAttr {unsigned argumentCount;public:enum Spelling {GNU_xray_log_args = 0,CXX11_clang_xray_log_args = 1,C2x_clang_xray_log_args = 2,SpellingNotCalculated = 15};// Factory methodsstatic XRayLogArgsAttr *CreateImplicit(ASTContext &Ctx, unsigned ArgumentCount, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static XRayLogArgsAttr *Create(ASTContext &Ctx, unsigned ArgumentCount, const AttributeCommonInfo &CommonInfo);static XRayLogArgsAttr *CreateImplicit(ASTContext &Ctx, unsigned ArgumentCount, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static XRayLogArgsAttr *Create(ASTContext &Ctx, unsigned ArgumentCount, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsXRayLogArgsAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, unsigned ArgumentCount);XRayLogArgsAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;unsigned getArgumentCount() const {return argumentCount;}static bool classof(const Attr *A) { return A->getKind() == attr::XRayLogArgs; }};class ZeroCallUsedRegsAttr : public InheritableAttr {public:enum ZeroCallUsedRegsKind {Skip,UsedGPRArg,UsedGPR,UsedArg,Used,AllGPRArg,AllGPR,AllArg,All};private:ZeroCallUsedRegsKind zeroCallUsedRegs;public:enum Spelling {GNU_zero_call_used_regs = 0,CXX11_gnu_zero_call_used_regs = 1,C2x_gnu_zero_call_used_regs = 2,SpellingNotCalculated = 15};// Factory methodsstatic ZeroCallUsedRegsAttr *CreateImplicit(ASTContext &Ctx, ZeroCallUsedRegsKind ZeroCallUsedRegs, const AttributeCommonInfo &CommonInfo = {SourceRange{}});static ZeroCallUsedRegsAttr *Create(ASTContext &Ctx, ZeroCallUsedRegsKind ZeroCallUsedRegs, const AttributeCommonInfo &CommonInfo);static ZeroCallUsedRegsAttr *CreateImplicit(ASTContext &Ctx, ZeroCallUsedRegsKind ZeroCallUsedRegs, SourceRange Range, AttributeCommonInfo::Syntax Syntax);static ZeroCallUsedRegsAttr *Create(ASTContext &Ctx, ZeroCallUsedRegsKind ZeroCallUsedRegs, SourceRange Range, AttributeCommonInfo::Syntax Syntax);// ConstructorsZeroCallUsedRegsAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo, ZeroCallUsedRegsKind ZeroCallUsedRegs);ZeroCallUsedRegsAttr *clone(ASTContext &C) const;void printPretty(raw_ostream &OS,const PrintingPolicy &Policy) const;const char *getSpelling() const;ZeroCallUsedRegsKind getZeroCallUsedRegs() const {return zeroCallUsedRegs;}static bool ConvertStrToZeroCallUsedRegsKind(StringRef Val, ZeroCallUsedRegsKind &Out);static const char *ConvertZeroCallUsedRegsKindToStr(ZeroCallUsedRegsKind Val);static bool classof(const Attr *A) { return A->getKind() == attr::ZeroCallUsedRegs; }};#endif // LLVM_CLANG_ATTR_CLASSES_INC