Back to home page

EIC code displayed by LXR

 
 

    


Warning, /include/clang/AST/Attrs.inc is written in an unsupported language. File is not indexed.

0001 /*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
0002 |*                                                                            *|
0003 |* Attribute classes' definitions                                             *|
0004 |*                                                                            *|
0005 |* Automatically generated file, do not edit!                                 *|
0006 |* From: Attr.td                                                              *|
0007 |*                                                                            *|
0008 \*===----------------------------------------------------------------------===*/
0009 
0010 #ifndef LLVM_CLANG_ATTR_CLASSES_INC
0011 #define LLVM_CLANG_ATTR_CLASSES_INC
0012 static inline void DelimitAttributeArgument(raw_ostream& OS, bool& IsFirst) {
0013   if (IsFirst) {
0014     IsFirst = false;
0015     OS << "(";
0016   } else
0017     OS << ", ";
0018 }
0019 class CLANG_ABI AArch64SVEPcsAttr : public InheritableAttr {
0020 public:
0021   enum Spelling {
0022     GNU_aarch64_sve_pcs = 0,
0023     CXX11_clang_aarch64_sve_pcs = 1,
0024     C23_clang_aarch64_sve_pcs = 2,
0025   SpellingNotCalculated = 15
0026 
0027   };
0028 
0029   // Factory methods
0030   static AArch64SVEPcsAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
0031   static AArch64SVEPcsAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
0032   static AArch64SVEPcsAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_aarch64_sve_pcs);
0033   static AArch64SVEPcsAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_aarch64_sve_pcs);
0034 
0035   // Constructors
0036   AArch64SVEPcsAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0037              );
0038 
0039   AArch64SVEPcsAttr *clone(ASTContext &C) const;
0040   void printPretty(raw_ostream &OS,
0041                    const PrintingPolicy &Policy) const;
0042   const char *getSpelling() const;
0043 
0044 
0045   static bool classof(const Attr *A) { return A->getKind() == attr::AArch64SVEPcs; }
0046 };
0047 
0048 class CLANG_ABI AArch64VectorPcsAttr : public InheritableAttr {
0049 public:
0050   enum Spelling {
0051     GNU_aarch64_vector_pcs = 0,
0052     CXX11_clang_aarch64_vector_pcs = 1,
0053     C23_clang_aarch64_vector_pcs = 2,
0054   SpellingNotCalculated = 15
0055 
0056   };
0057 
0058   // Factory methods
0059   static AArch64VectorPcsAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
0060   static AArch64VectorPcsAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
0061   static AArch64VectorPcsAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_aarch64_vector_pcs);
0062   static AArch64VectorPcsAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_aarch64_vector_pcs);
0063 
0064   // Constructors
0065   AArch64VectorPcsAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0066              );
0067 
0068   AArch64VectorPcsAttr *clone(ASTContext &C) const;
0069   void printPretty(raw_ostream &OS,
0070                    const PrintingPolicy &Policy) const;
0071   const char *getSpelling() const;
0072 
0073 
0074   static bool classof(const Attr *A) { return A->getKind() == attr::AArch64VectorPcs; }
0075 };
0076 
0077 class CLANG_ABI AMDGPUFlatWorkGroupSizeAttr : public InheritableAttr {
0078 Expr * min;
0079 
0080 Expr * max;
0081 
0082 public:
0083   enum Spelling {
0084     GNU_amdgpu_flat_work_group_size = 0,
0085     CXX11_clang_amdgpu_flat_work_group_size = 1,
0086   SpellingNotCalculated = 15
0087 
0088   };
0089 
0090   // Factory methods
0091   static AMDGPUFlatWorkGroupSizeAttr *CreateImplicit(ASTContext &Ctx, Expr * Min, Expr * Max, const AttributeCommonInfo &CommonInfo);
0092   static AMDGPUFlatWorkGroupSizeAttr *Create(ASTContext &Ctx, Expr * Min, Expr * Max, const AttributeCommonInfo &CommonInfo);
0093   static AMDGPUFlatWorkGroupSizeAttr *CreateImplicit(ASTContext &Ctx, Expr * Min, Expr * Max, SourceRange Range = {}, Spelling S = GNU_amdgpu_flat_work_group_size);
0094   static AMDGPUFlatWorkGroupSizeAttr *Create(ASTContext &Ctx, Expr * Min, Expr * Max, SourceRange Range = {}, Spelling S = GNU_amdgpu_flat_work_group_size);
0095 
0096   // Constructors
0097   AMDGPUFlatWorkGroupSizeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0098               , Expr * Min
0099               , Expr * Max
0100              );
0101 
0102   AMDGPUFlatWorkGroupSizeAttr *clone(ASTContext &C) const;
0103   void printPretty(raw_ostream &OS,
0104                    const PrintingPolicy &Policy) const;
0105   const char *getSpelling() const;
0106   Expr * getMin() const {
0107     return min;
0108   }
0109 
0110   Expr * getMax() const {
0111     return max;
0112   }
0113 
0114 
0115 
0116   static bool classof(const Attr *A) { return A->getKind() == attr::AMDGPUFlatWorkGroupSize; }
0117 };
0118 
0119 class CLANG_ABI AMDGPUKernelCallAttr : public InheritableAttr {
0120 public:
0121   enum Spelling {
0122     GNU_amdgpu_kernel = 0,
0123     CXX11_clang_amdgpu_kernel = 1,
0124     C23_clang_amdgpu_kernel = 2,
0125   SpellingNotCalculated = 15
0126 
0127   };
0128 
0129   // Factory methods
0130   static AMDGPUKernelCallAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
0131   static AMDGPUKernelCallAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
0132   static AMDGPUKernelCallAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_amdgpu_kernel);
0133   static AMDGPUKernelCallAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_amdgpu_kernel);
0134 
0135   // Constructors
0136   AMDGPUKernelCallAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0137              );
0138 
0139   AMDGPUKernelCallAttr *clone(ASTContext &C) const;
0140   void printPretty(raw_ostream &OS,
0141                    const PrintingPolicy &Policy) const;
0142   const char *getSpelling() const;
0143 
0144 
0145   static bool classof(const Attr *A) { return A->getKind() == attr::AMDGPUKernelCall; }
0146 };
0147 
0148 class CLANG_ABI AMDGPUMaxNumWorkGroupsAttr : public InheritableAttr {
0149 Expr * maxNumWorkGroupsX;
0150 
0151 Expr * maxNumWorkGroupsY;
0152 
0153 Expr * maxNumWorkGroupsZ;
0154 
0155 public:
0156   enum Spelling {
0157     GNU_amdgpu_max_num_work_groups = 0,
0158     CXX11_clang_amdgpu_max_num_work_groups = 1,
0159   SpellingNotCalculated = 15
0160 
0161   };
0162 
0163   // Factory methods
0164   static AMDGPUMaxNumWorkGroupsAttr *CreateImplicit(ASTContext &Ctx, Expr * MaxNumWorkGroupsX, Expr * MaxNumWorkGroupsY, Expr * MaxNumWorkGroupsZ, const AttributeCommonInfo &CommonInfo);
0165   static AMDGPUMaxNumWorkGroupsAttr *Create(ASTContext &Ctx, Expr * MaxNumWorkGroupsX, Expr * MaxNumWorkGroupsY, Expr * MaxNumWorkGroupsZ, const AttributeCommonInfo &CommonInfo);
0166   static AMDGPUMaxNumWorkGroupsAttr *CreateImplicit(ASTContext &Ctx, Expr * MaxNumWorkGroupsX, Expr * MaxNumWorkGroupsY, Expr * MaxNumWorkGroupsZ, SourceRange Range = {}, Spelling S = GNU_amdgpu_max_num_work_groups);
0167   static AMDGPUMaxNumWorkGroupsAttr *Create(ASTContext &Ctx, Expr * MaxNumWorkGroupsX, Expr * MaxNumWorkGroupsY, Expr * MaxNumWorkGroupsZ, SourceRange Range = {}, Spelling S = GNU_amdgpu_max_num_work_groups);
0168 
0169   // Constructors
0170   AMDGPUMaxNumWorkGroupsAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0171               , Expr * MaxNumWorkGroupsX
0172               , Expr * MaxNumWorkGroupsY
0173               , Expr * MaxNumWorkGroupsZ
0174              );
0175   AMDGPUMaxNumWorkGroupsAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0176               , Expr * MaxNumWorkGroupsX
0177              );
0178 
0179   AMDGPUMaxNumWorkGroupsAttr *clone(ASTContext &C) const;
0180   void printPretty(raw_ostream &OS,
0181                    const PrintingPolicy &Policy) const;
0182   const char *getSpelling() const;
0183   Expr * getMaxNumWorkGroupsX() const {
0184     return maxNumWorkGroupsX;
0185   }
0186 
0187   Expr * getMaxNumWorkGroupsY() const {
0188     return maxNumWorkGroupsY;
0189   }
0190 
0191   Expr * getMaxNumWorkGroupsZ() const {
0192     return maxNumWorkGroupsZ;
0193   }
0194 
0195 
0196 
0197   static bool classof(const Attr *A) { return A->getKind() == attr::AMDGPUMaxNumWorkGroups; }
0198 };
0199 
0200 class CLANG_ABI AMDGPUNumSGPRAttr : public InheritableAttr {
0201 unsigned numSGPR;
0202 
0203 public:
0204   enum Spelling {
0205     GNU_amdgpu_num_sgpr = 0,
0206     CXX11_clang_amdgpu_num_sgpr = 1,
0207   SpellingNotCalculated = 15
0208 
0209   };
0210 
0211   // Factory methods
0212   static AMDGPUNumSGPRAttr *CreateImplicit(ASTContext &Ctx, unsigned NumSGPR, const AttributeCommonInfo &CommonInfo);
0213   static AMDGPUNumSGPRAttr *Create(ASTContext &Ctx, unsigned NumSGPR, const AttributeCommonInfo &CommonInfo);
0214   static AMDGPUNumSGPRAttr *CreateImplicit(ASTContext &Ctx, unsigned NumSGPR, SourceRange Range = {}, Spelling S = GNU_amdgpu_num_sgpr);
0215   static AMDGPUNumSGPRAttr *Create(ASTContext &Ctx, unsigned NumSGPR, SourceRange Range = {}, Spelling S = GNU_amdgpu_num_sgpr);
0216 
0217   // Constructors
0218   AMDGPUNumSGPRAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0219               , unsigned NumSGPR
0220              );
0221 
0222   AMDGPUNumSGPRAttr *clone(ASTContext &C) const;
0223   void printPretty(raw_ostream &OS,
0224                    const PrintingPolicy &Policy) const;
0225   const char *getSpelling() const;
0226   unsigned getNumSGPR() const {
0227     return numSGPR;
0228   }
0229 
0230 
0231 
0232   static bool classof(const Attr *A) { return A->getKind() == attr::AMDGPUNumSGPR; }
0233 };
0234 
0235 class CLANG_ABI AMDGPUNumVGPRAttr : public InheritableAttr {
0236 unsigned numVGPR;
0237 
0238 public:
0239   enum Spelling {
0240     GNU_amdgpu_num_vgpr = 0,
0241     CXX11_clang_amdgpu_num_vgpr = 1,
0242   SpellingNotCalculated = 15
0243 
0244   };
0245 
0246   // Factory methods
0247   static AMDGPUNumVGPRAttr *CreateImplicit(ASTContext &Ctx, unsigned NumVGPR, const AttributeCommonInfo &CommonInfo);
0248   static AMDGPUNumVGPRAttr *Create(ASTContext &Ctx, unsigned NumVGPR, const AttributeCommonInfo &CommonInfo);
0249   static AMDGPUNumVGPRAttr *CreateImplicit(ASTContext &Ctx, unsigned NumVGPR, SourceRange Range = {}, Spelling S = GNU_amdgpu_num_vgpr);
0250   static AMDGPUNumVGPRAttr *Create(ASTContext &Ctx, unsigned NumVGPR, SourceRange Range = {}, Spelling S = GNU_amdgpu_num_vgpr);
0251 
0252   // Constructors
0253   AMDGPUNumVGPRAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0254               , unsigned NumVGPR
0255              );
0256 
0257   AMDGPUNumVGPRAttr *clone(ASTContext &C) const;
0258   void printPretty(raw_ostream &OS,
0259                    const PrintingPolicy &Policy) const;
0260   const char *getSpelling() const;
0261   unsigned getNumVGPR() const {
0262     return numVGPR;
0263   }
0264 
0265 
0266 
0267   static bool classof(const Attr *A) { return A->getKind() == attr::AMDGPUNumVGPR; }
0268 };
0269 
0270 class CLANG_ABI AMDGPUWavesPerEUAttr : public InheritableAttr {
0271 Expr * min;
0272 
0273 Expr * max;
0274 
0275 public:
0276   enum Spelling {
0277     GNU_amdgpu_waves_per_eu = 0,
0278     CXX11_clang_amdgpu_waves_per_eu = 1,
0279   SpellingNotCalculated = 15
0280 
0281   };
0282 
0283   // Factory methods
0284   static AMDGPUWavesPerEUAttr *CreateImplicit(ASTContext &Ctx, Expr * Min, Expr * Max, const AttributeCommonInfo &CommonInfo);
0285   static AMDGPUWavesPerEUAttr *Create(ASTContext &Ctx, Expr * Min, Expr * Max, const AttributeCommonInfo &CommonInfo);
0286   static AMDGPUWavesPerEUAttr *CreateImplicit(ASTContext &Ctx, Expr * Min, Expr * Max, SourceRange Range = {}, Spelling S = GNU_amdgpu_waves_per_eu);
0287   static AMDGPUWavesPerEUAttr *Create(ASTContext &Ctx, Expr * Min, Expr * Max, SourceRange Range = {}, Spelling S = GNU_amdgpu_waves_per_eu);
0288 
0289   // Constructors
0290   AMDGPUWavesPerEUAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0291               , Expr * Min
0292               , Expr * Max
0293              );
0294   AMDGPUWavesPerEUAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0295               , Expr * Min
0296              );
0297 
0298   AMDGPUWavesPerEUAttr *clone(ASTContext &C) const;
0299   void printPretty(raw_ostream &OS,
0300                    const PrintingPolicy &Policy) const;
0301   const char *getSpelling() const;
0302   Expr * getMin() const {
0303     return min;
0304   }
0305 
0306   Expr * getMax() const {
0307     return max;
0308   }
0309 
0310 
0311 
0312   static bool classof(const Attr *A) { return A->getKind() == attr::AMDGPUWavesPerEU; }
0313 };
0314 
0315 class CLANG_ABI ARMInterruptAttr : public InheritableAttr {
0316 public:
0317   enum InterruptType {
0318     IRQ,
0319     FIQ,
0320     SWI,
0321     ABORT,
0322     UNDEF,
0323     Generic
0324   };
0325 private:
0326   ARMInterruptAttr::InterruptType interrupt;
0327 
0328 public:
0329   enum Spelling {
0330     GNU_interrupt = 0,
0331     CXX11_gnu_interrupt = 1,
0332     C23_gnu_interrupt = 2,
0333   SpellingNotCalculated = 15
0334 
0335   };
0336 
0337   // Factory methods
0338   static ARMInterruptAttr *CreateImplicit(ASTContext &Ctx, ARMInterruptAttr::InterruptType Interrupt, const AttributeCommonInfo &CommonInfo);
0339   static ARMInterruptAttr *Create(ASTContext &Ctx, ARMInterruptAttr::InterruptType Interrupt, const AttributeCommonInfo &CommonInfo);
0340   static ARMInterruptAttr *CreateImplicit(ASTContext &Ctx, ARMInterruptAttr::InterruptType Interrupt, SourceRange Range = {}, Spelling S = GNU_interrupt);
0341   static ARMInterruptAttr *Create(ASTContext &Ctx, ARMInterruptAttr::InterruptType Interrupt, SourceRange Range = {}, Spelling S = GNU_interrupt);
0342 
0343   // Constructors
0344   ARMInterruptAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0345               , ARMInterruptAttr::InterruptType Interrupt
0346              );
0347   ARMInterruptAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0348              );
0349 
0350   ARMInterruptAttr *clone(ASTContext &C) const;
0351   void printPretty(raw_ostream &OS,
0352                    const PrintingPolicy &Policy) const;
0353   const char *getSpelling() const;
0354   ARMInterruptAttr::InterruptType getInterrupt() const {
0355     return interrupt;
0356   }
0357 
0358   static bool ConvertStrToInterruptType(StringRef Val, ARMInterruptAttr::InterruptType &Out);
0359   static const char *ConvertInterruptTypeToStr(ARMInterruptAttr::InterruptType Val);
0360 
0361 
0362   static bool classof(const Attr *A) { return A->getKind() == attr::ARMInterrupt; }
0363 };
0364 
0365 class CLANG_ABI AVRInterruptAttr : public InheritableAttr {
0366 public:
0367   enum Spelling {
0368     GNU_interrupt = 0,
0369     CXX11_gnu_interrupt = 1,
0370     C23_gnu_interrupt = 2,
0371   SpellingNotCalculated = 15
0372 
0373   };
0374 
0375   // Factory methods
0376   static AVRInterruptAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
0377   static AVRInterruptAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
0378   static AVRInterruptAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_interrupt);
0379   static AVRInterruptAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_interrupt);
0380 
0381   // Constructors
0382   AVRInterruptAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0383              );
0384 
0385   AVRInterruptAttr *clone(ASTContext &C) const;
0386   void printPretty(raw_ostream &OS,
0387                    const PrintingPolicy &Policy) const;
0388   const char *getSpelling() const;
0389 
0390 
0391   static bool classof(const Attr *A) { return A->getKind() == attr::AVRInterrupt; }
0392 };
0393 
0394 class CLANG_ABI AVRSignalAttr : public InheritableAttr {
0395 public:
0396   enum Spelling {
0397     GNU_signal = 0,
0398     CXX11_gnu_signal = 1,
0399     C23_gnu_signal = 2,
0400   SpellingNotCalculated = 15
0401 
0402   };
0403 
0404   // Factory methods
0405   static AVRSignalAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
0406   static AVRSignalAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
0407   static AVRSignalAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_signal);
0408   static AVRSignalAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_signal);
0409 
0410   // Constructors
0411   AVRSignalAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0412              );
0413 
0414   AVRSignalAttr *clone(ASTContext &C) const;
0415   void printPretty(raw_ostream &OS,
0416                    const PrintingPolicy &Policy) const;
0417   const char *getSpelling() const;
0418 
0419 
0420   static bool classof(const Attr *A) { return A->getKind() == attr::AVRSignal; }
0421 };
0422 
0423 class CLANG_ABI AbiTagAttr : public Attr {
0424   unsigned tags_Size;
0425   StringRef *tags_;
0426 
0427 public:
0428   enum Spelling {
0429     GNU_abi_tag = 0,
0430     CXX11_gnu_abi_tag = 1,
0431   SpellingNotCalculated = 15
0432 
0433   };
0434 
0435   // Factory methods
0436   static AbiTagAttr *CreateImplicit(ASTContext &Ctx, StringRef *Tags, unsigned TagsSize, const AttributeCommonInfo &CommonInfo);
0437   static AbiTagAttr *Create(ASTContext &Ctx, StringRef *Tags, unsigned TagsSize, const AttributeCommonInfo &CommonInfo);
0438   static AbiTagAttr *CreateImplicit(ASTContext &Ctx, StringRef *Tags, unsigned TagsSize, SourceRange Range = {}, Spelling S = GNU_abi_tag);
0439   static AbiTagAttr *Create(ASTContext &Ctx, StringRef *Tags, unsigned TagsSize, SourceRange Range = {}, Spelling S = GNU_abi_tag);
0440 
0441   // Constructors
0442   AbiTagAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0443               , StringRef *Tags, unsigned TagsSize
0444              );
0445   AbiTagAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0446              );
0447 
0448   AbiTagAttr *clone(ASTContext &C) const;
0449   void printPretty(raw_ostream &OS,
0450                    const PrintingPolicy &Policy) const;
0451   const char *getSpelling() const;
0452   typedef StringRef* tags_iterator;
0453   tags_iterator tags_begin() const { return tags_; }
0454   tags_iterator tags_end() const { return tags_ + tags_Size; }
0455   unsigned tags_size() const { return tags_Size; }
0456   llvm::iterator_range<tags_iterator> tags() const { return llvm::make_range(tags_begin(), tags_end()); }
0457 
0458 
0459 
0460 
0461   static bool classof(const Attr *A) { return A->getKind() == attr::AbiTag; }
0462 };
0463 
0464 class CLANG_ABI AcquireCapabilityAttr : public InheritableAttr {
0465   unsigned args_Size;
0466   Expr * *args_;
0467 
0468 public:
0469   enum Spelling {
0470     GNU_acquire_capability = 0,
0471     CXX11_clang_acquire_capability = 1,
0472     GNU_acquire_shared_capability = 2,
0473     CXX11_clang_acquire_shared_capability = 3,
0474     GNU_exclusive_lock_function = 4,
0475     GNU_shared_lock_function = 5,
0476   SpellingNotCalculated = 15
0477 
0478   };
0479 
0480   // Factory methods
0481   static AcquireCapabilityAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);
0482   static AcquireCapabilityAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);
0483   static AcquireCapabilityAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range = {}, Spelling S = GNU_acquire_capability);
0484   static AcquireCapabilityAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range = {}, Spelling S = GNU_acquire_capability);
0485 
0486   // Constructors
0487   AcquireCapabilityAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0488               , Expr * *Args, unsigned ArgsSize
0489              );
0490   AcquireCapabilityAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0491              );
0492 
0493   AcquireCapabilityAttr *clone(ASTContext &C) const;
0494   void printPretty(raw_ostream &OS,
0495                    const PrintingPolicy &Policy) const;
0496   const char *getSpelling() const;
0497   Spelling getSemanticSpelling() const;
0498   bool isShared() const { return getAttributeSpellingListIndex() == 2 ||
0499     getAttributeSpellingListIndex() == 3 ||
0500     getAttributeSpellingListIndex() == 5; }
0501   typedef Expr ** args_iterator;
0502   args_iterator args_begin() const { return args_; }
0503   args_iterator args_end() const { return args_ + args_Size; }
0504   unsigned args_size() const { return args_Size; }
0505   llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); }
0506 
0507 
0508 
0509 
0510   static bool classof(const Attr *A) { return A->getKind() == attr::AcquireCapability; }
0511 };
0512 
0513 class CLANG_ABI AcquireHandleAttr : public InheritableAttr {
0514 unsigned handleTypeLength;
0515 char *handleType;
0516 
0517 public:
0518   enum Spelling {
0519     GNU_acquire_handle = 0,
0520     CXX11_clang_acquire_handle = 1,
0521     C23_clang_acquire_handle = 2,
0522   SpellingNotCalculated = 15
0523 
0524   };
0525 
0526   // Factory methods
0527   static AcquireHandleAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef HandleType, const AttributeCommonInfo &CommonInfo);
0528   static AcquireHandleAttr *Create(ASTContext &Ctx, llvm::StringRef HandleType, const AttributeCommonInfo &CommonInfo);
0529   static AcquireHandleAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef HandleType, SourceRange Range = {}, Spelling S = GNU_acquire_handle);
0530   static AcquireHandleAttr *Create(ASTContext &Ctx, llvm::StringRef HandleType, SourceRange Range = {}, Spelling S = GNU_acquire_handle);
0531 
0532   // Constructors
0533   AcquireHandleAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0534               , llvm::StringRef HandleType
0535              );
0536 
0537   AcquireHandleAttr *clone(ASTContext &C) const;
0538   void printPretty(raw_ostream &OS,
0539                    const PrintingPolicy &Policy) const;
0540   const char *getSpelling() const;
0541   llvm::StringRef getHandleType() const {
0542     return llvm::StringRef(handleType, handleTypeLength);
0543   }
0544   unsigned getHandleTypeLength() const {
0545     return handleTypeLength;
0546   }
0547   void setHandleType(ASTContext &C, llvm::StringRef S) {
0548     handleTypeLength = S.size();
0549     this->handleType = new (C, 1) char [handleTypeLength];
0550     if (!S.empty())
0551       std::memcpy(this->handleType, S.data(), handleTypeLength);
0552   }
0553 
0554 
0555 
0556   static bool classof(const Attr *A) { return A->getKind() == attr::AcquireHandle; }
0557 };
0558 
0559 class CLANG_ABI AcquiredAfterAttr : public InheritableAttr {
0560   unsigned args_Size;
0561   Expr * *args_;
0562 
0563 public:
0564   // Factory methods
0565   static AcquiredAfterAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);
0566   static AcquiredAfterAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);
0567   static AcquiredAfterAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range = {});
0568   static AcquiredAfterAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range = {});
0569 
0570   // Constructors
0571   AcquiredAfterAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0572               , Expr * *Args, unsigned ArgsSize
0573              );
0574   AcquiredAfterAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0575              );
0576 
0577   AcquiredAfterAttr *clone(ASTContext &C) const;
0578   void printPretty(raw_ostream &OS,
0579                    const PrintingPolicy &Policy) const;
0580   const char *getSpelling() const;
0581   typedef Expr ** args_iterator;
0582   args_iterator args_begin() const { return args_; }
0583   args_iterator args_end() const { return args_ + args_Size; }
0584   unsigned args_size() const { return args_Size; }
0585   llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); }
0586 
0587 
0588 
0589 
0590   static bool classof(const Attr *A) { return A->getKind() == attr::AcquiredAfter; }
0591 };
0592 
0593 class CLANG_ABI AcquiredBeforeAttr : public InheritableAttr {
0594   unsigned args_Size;
0595   Expr * *args_;
0596 
0597 public:
0598   // Factory methods
0599   static AcquiredBeforeAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);
0600   static AcquiredBeforeAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);
0601   static AcquiredBeforeAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range = {});
0602   static AcquiredBeforeAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range = {});
0603 
0604   // Constructors
0605   AcquiredBeforeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0606               , Expr * *Args, unsigned ArgsSize
0607              );
0608   AcquiredBeforeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0609              );
0610 
0611   AcquiredBeforeAttr *clone(ASTContext &C) const;
0612   void printPretty(raw_ostream &OS,
0613                    const PrintingPolicy &Policy) const;
0614   const char *getSpelling() const;
0615   typedef Expr ** args_iterator;
0616   args_iterator args_begin() const { return args_; }
0617   args_iterator args_end() const { return args_ + args_Size; }
0618   unsigned args_size() const { return args_Size; }
0619   llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); }
0620 
0621 
0622 
0623 
0624   static bool classof(const Attr *A) { return A->getKind() == attr::AcquiredBefore; }
0625 };
0626 
0627 class CLANG_ABI AddressSpaceAttr : public TypeAttr {
0628 int addressSpace;
0629 
0630 public:
0631   enum Spelling {
0632     GNU_address_space = 0,
0633     CXX11_clang_address_space = 1,
0634     C23_clang_address_space = 2,
0635   SpellingNotCalculated = 15
0636 
0637   };
0638 
0639   // Factory methods
0640   static AddressSpaceAttr *CreateImplicit(ASTContext &Ctx, int AddressSpace, const AttributeCommonInfo &CommonInfo);
0641   static AddressSpaceAttr *Create(ASTContext &Ctx, int AddressSpace, const AttributeCommonInfo &CommonInfo);
0642   static AddressSpaceAttr *CreateImplicit(ASTContext &Ctx, int AddressSpace, SourceRange Range = {}, Spelling S = GNU_address_space);
0643   static AddressSpaceAttr *Create(ASTContext &Ctx, int AddressSpace, SourceRange Range = {}, Spelling S = GNU_address_space);
0644 
0645   // Constructors
0646   AddressSpaceAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0647               , int AddressSpace
0648              );
0649 
0650   AddressSpaceAttr *clone(ASTContext &C) const;
0651   void printPretty(raw_ostream &OS,
0652                    const PrintingPolicy &Policy) const;
0653   const char *getSpelling() const;
0654   int getAddressSpace() const {
0655     return addressSpace;
0656   }
0657 
0658 
0659 
0660   static bool classof(const Attr *A) { return A->getKind() == attr::AddressSpace; }
0661 };
0662 
0663 class CLANG_ABI AliasAttr : public Attr {
0664 unsigned aliaseeLength;
0665 char *aliasee;
0666 
0667 public:
0668   enum Spelling {
0669     GNU_alias = 0,
0670     CXX11_gnu_alias = 1,
0671     C23_gnu_alias = 2,
0672   SpellingNotCalculated = 15
0673 
0674   };
0675 
0676   // Factory methods
0677   static AliasAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Aliasee, const AttributeCommonInfo &CommonInfo);
0678   static AliasAttr *Create(ASTContext &Ctx, llvm::StringRef Aliasee, const AttributeCommonInfo &CommonInfo);
0679   static AliasAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Aliasee, SourceRange Range = {}, Spelling S = GNU_alias);
0680   static AliasAttr *Create(ASTContext &Ctx, llvm::StringRef Aliasee, SourceRange Range = {}, Spelling S = GNU_alias);
0681 
0682   // Constructors
0683   AliasAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0684               , llvm::StringRef Aliasee
0685              );
0686 
0687   AliasAttr *clone(ASTContext &C) const;
0688   void printPretty(raw_ostream &OS,
0689                    const PrintingPolicy &Policy) const;
0690   const char *getSpelling() const;
0691   llvm::StringRef getAliasee() const {
0692     return llvm::StringRef(aliasee, aliaseeLength);
0693   }
0694   unsigned getAliaseeLength() const {
0695     return aliaseeLength;
0696   }
0697   void setAliasee(ASTContext &C, llvm::StringRef S) {
0698     aliaseeLength = S.size();
0699     this->aliasee = new (C, 1) char [aliaseeLength];
0700     if (!S.empty())
0701       std::memcpy(this->aliasee, S.data(), aliaseeLength);
0702   }
0703 
0704 
0705 
0706   static bool classof(const Attr *A) { return A->getKind() == attr::Alias; }
0707 };
0708 
0709 class CLANG_ABI AlignMac68kAttr : public InheritableAttr {
0710 public:
0711   // Factory methods
0712   static AlignMac68kAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
0713   static AlignMac68kAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
0714   static AlignMac68kAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
0715   static AlignMac68kAttr *Create(ASTContext &Ctx, SourceRange Range = {});
0716 
0717   // Constructors
0718   AlignMac68kAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0719              );
0720 
0721   AlignMac68kAttr *clone(ASTContext &C) const;
0722   void printPretty(raw_ostream &OS,
0723                    const PrintingPolicy &Policy) const;
0724   const char *getSpelling() const;
0725 
0726 
0727   static bool classof(const Attr *A) { return A->getKind() == attr::AlignMac68k; }
0728 };
0729 
0730 class CLANG_ABI AlignNaturalAttr : public InheritableAttr {
0731 public:
0732   // Factory methods
0733   static AlignNaturalAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
0734   static AlignNaturalAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
0735   static AlignNaturalAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
0736   static AlignNaturalAttr *Create(ASTContext &Ctx, SourceRange Range = {});
0737 
0738   // Constructors
0739   AlignNaturalAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0740              );
0741 
0742   AlignNaturalAttr *clone(ASTContext &C) const;
0743   void printPretty(raw_ostream &OS,
0744                    const PrintingPolicy &Policy) const;
0745   const char *getSpelling() const;
0746 
0747 
0748   static bool classof(const Attr *A) { return A->getKind() == attr::AlignNatural; }
0749 };
0750 
0751 class CLANG_ABI AlignValueAttr : public Attr {
0752 Expr * alignment;
0753 
0754 public:
0755   // Factory methods
0756   static AlignValueAttr *CreateImplicit(ASTContext &Ctx, Expr * Alignment, const AttributeCommonInfo &CommonInfo);
0757   static AlignValueAttr *Create(ASTContext &Ctx, Expr * Alignment, const AttributeCommonInfo &CommonInfo);
0758   static AlignValueAttr *CreateImplicit(ASTContext &Ctx, Expr * Alignment, SourceRange Range = {});
0759   static AlignValueAttr *Create(ASTContext &Ctx, Expr * Alignment, SourceRange Range = {});
0760 
0761   // Constructors
0762   AlignValueAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0763               , Expr * Alignment
0764              );
0765 
0766   AlignValueAttr *clone(ASTContext &C) const;
0767   void printPretty(raw_ostream &OS,
0768                    const PrintingPolicy &Policy) const;
0769   const char *getSpelling() const;
0770   Expr * getAlignment() const {
0771     return alignment;
0772   }
0773 
0774 
0775 
0776   static bool classof(const Attr *A) { return A->getKind() == attr::AlignValue; }
0777 };
0778 
0779 class CLANG_ABI AlignedAttr : public InheritableAttr {
0780 bool isalignmentExpr;
0781 union {
0782 Expr *alignmentExpr;
0783 TypeSourceInfo *alignmentType;
0784 };
0785 std::optional<unsigned> alignmentCache;
0786 
0787 
0788 public:
0789   enum Spelling {
0790     GNU_aligned = 0,
0791     CXX11_gnu_aligned = 1,
0792     C23_gnu_aligned = 2,
0793     Declspec_align = 3,
0794     Keyword_alignas = 4,
0795     Keyword_Alignas = 5,
0796   SpellingNotCalculated = 15
0797 
0798   };
0799 
0800   // Factory methods
0801   static AlignedAttr *CreateImplicit(ASTContext &Ctx, bool IsAlignmentExpr, void *Alignment, const AttributeCommonInfo &CommonInfo);
0802   static AlignedAttr *Create(ASTContext &Ctx, bool IsAlignmentExpr, void *Alignment, const AttributeCommonInfo &CommonInfo);
0803   static AlignedAttr *CreateImplicit(ASTContext &Ctx, bool IsAlignmentExpr, void *Alignment, SourceRange Range = {}, Spelling S = GNU_aligned);
0804   static AlignedAttr *Create(ASTContext &Ctx, bool IsAlignmentExpr, void *Alignment, SourceRange Range = {}, Spelling S = GNU_aligned);
0805 
0806   // Constructors
0807   AlignedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0808               , bool IsAlignmentExpr, void *Alignment
0809              );
0810   AlignedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0811              );
0812 
0813   AlignedAttr *clone(ASTContext &C) const;
0814   void printPretty(raw_ostream &OS,
0815                    const PrintingPolicy &Policy) const;
0816   const char *getSpelling() const;
0817   Spelling getSemanticSpelling() const;
0818   bool isGNU() const { return getAttributeSpellingListIndex() == 0 ||
0819     getAttributeSpellingListIndex() == 1 ||
0820     getAttributeSpellingListIndex() == 2; }
0821   bool isC11() const { return getAttributeSpellingListIndex() == 5; }
0822   bool isAlignas() const { return getAttributeSpellingListIndex() == 4 ||
0823     getAttributeSpellingListIndex() == 5; }
0824   bool isDeclspec() const { return getAttributeSpellingListIndex() == 3; }
0825   bool isAlignmentDependent() const;
0826   bool isAlignmentErrorDependent() const;
0827   unsigned getAlignment(ASTContext &Ctx) const;
0828   bool isAlignmentExpr() const {
0829     return isalignmentExpr;
0830   }
0831   Expr *getAlignmentExpr() const {
0832     assert(isalignmentExpr);
0833     return alignmentExpr;
0834   }
0835   TypeSourceInfo *getAlignmentType() const {
0836     assert(!isalignmentExpr);
0837     return alignmentType;
0838   }  std::optional<unsigned> getCachedAlignmentValue() const {
0839     return alignmentCache;
0840   }  void setCachedAlignmentValue(unsigned AlignVal) {
0841     alignmentCache = AlignVal;
0842   }
0843 
0844 
0845 
0846   static bool classof(const Attr *A) { return A->getKind() == attr::Aligned; }
0847 };
0848 
0849 class CLANG_ABI AllocAlignAttr : public InheritableAttr {
0850 ParamIdx paramIndex;
0851 
0852 public:
0853   enum Spelling {
0854     GNU_alloc_align = 0,
0855     CXX11_gnu_alloc_align = 1,
0856     C23_gnu_alloc_align = 2,
0857   SpellingNotCalculated = 15
0858 
0859   };
0860 
0861   // Factory methods
0862   static AllocAlignAttr *CreateImplicit(ASTContext &Ctx, ParamIdx ParamIndex, const AttributeCommonInfo &CommonInfo);
0863   static AllocAlignAttr *Create(ASTContext &Ctx, ParamIdx ParamIndex, const AttributeCommonInfo &CommonInfo);
0864   static AllocAlignAttr *CreateImplicit(ASTContext &Ctx, ParamIdx ParamIndex, SourceRange Range = {}, Spelling S = GNU_alloc_align);
0865   static AllocAlignAttr *Create(ASTContext &Ctx, ParamIdx ParamIndex, SourceRange Range = {}, Spelling S = GNU_alloc_align);
0866 
0867   // Constructors
0868   AllocAlignAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0869               , ParamIdx ParamIndex
0870              );
0871 
0872   AllocAlignAttr *clone(ASTContext &C) const;
0873   void printPretty(raw_ostream &OS,
0874                    const PrintingPolicy &Policy) const;
0875   const char *getSpelling() const;
0876   ParamIdx getParamIndex() const {
0877     return paramIndex;
0878   }
0879 
0880 
0881 
0882   static bool classof(const Attr *A) { return A->getKind() == attr::AllocAlign; }
0883 };
0884 
0885 class CLANG_ABI AllocSizeAttr : public InheritableAttr {
0886 ParamIdx elemSizeParam;
0887 
0888 ParamIdx numElemsParam;
0889 
0890 public:
0891   enum Spelling {
0892     GNU_alloc_size = 0,
0893     CXX11_gnu_alloc_size = 1,
0894     C23_gnu_alloc_size = 2,
0895   SpellingNotCalculated = 15
0896 
0897   };
0898 
0899   // Factory methods
0900   static AllocSizeAttr *CreateImplicit(ASTContext &Ctx, ParamIdx ElemSizeParam, ParamIdx NumElemsParam, const AttributeCommonInfo &CommonInfo);
0901   static AllocSizeAttr *Create(ASTContext &Ctx, ParamIdx ElemSizeParam, ParamIdx NumElemsParam, const AttributeCommonInfo &CommonInfo);
0902   static AllocSizeAttr *CreateImplicit(ASTContext &Ctx, ParamIdx ElemSizeParam, ParamIdx NumElemsParam, SourceRange Range = {}, Spelling S = GNU_alloc_size);
0903   static AllocSizeAttr *Create(ASTContext &Ctx, ParamIdx ElemSizeParam, ParamIdx NumElemsParam, SourceRange Range = {}, Spelling S = GNU_alloc_size);
0904 
0905   // Constructors
0906   AllocSizeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0907               , ParamIdx ElemSizeParam
0908               , ParamIdx NumElemsParam
0909              );
0910   AllocSizeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0911               , ParamIdx ElemSizeParam
0912              );
0913 
0914   AllocSizeAttr *clone(ASTContext &C) const;
0915   void printPretty(raw_ostream &OS,
0916                    const PrintingPolicy &Policy) const;
0917   const char *getSpelling() const;
0918   ParamIdx getElemSizeParam() const {
0919     return elemSizeParam;
0920   }
0921 
0922   ParamIdx getNumElemsParam() const {
0923     return numElemsParam;
0924   }
0925 
0926 
0927 
0928   static bool classof(const Attr *A) { return A->getKind() == attr::AllocSize; }
0929 };
0930 
0931 class CLANG_ABI AllocatingAttr : public TypeAttr {
0932 public:
0933   enum Spelling {
0934     GNU_allocating = 0,
0935     CXX11_clang_allocating = 1,
0936     C23_clang_allocating = 2,
0937   SpellingNotCalculated = 15
0938 
0939   };
0940 
0941   // Factory methods
0942   static AllocatingAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
0943   static AllocatingAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
0944   static AllocatingAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_allocating);
0945   static AllocatingAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_allocating);
0946 
0947   // Constructors
0948   AllocatingAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0949              );
0950 
0951   AllocatingAttr *clone(ASTContext &C) const;
0952   void printPretty(raw_ostream &OS,
0953                    const PrintingPolicy &Policy) const;
0954   const char *getSpelling() const;
0955 
0956 
0957   static bool classof(const Attr *A) { return A->getKind() == attr::Allocating; }
0958 };
0959 
0960 class CLANG_ABI AlwaysDestroyAttr : public InheritableAttr {
0961 public:
0962   enum Spelling {
0963     GNU_always_destroy = 0,
0964     CXX11_clang_always_destroy = 1,
0965   SpellingNotCalculated = 15
0966 
0967   };
0968 
0969   // Factory methods
0970   static AlwaysDestroyAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
0971   static AlwaysDestroyAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
0972   static AlwaysDestroyAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_always_destroy);
0973   static AlwaysDestroyAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_always_destroy);
0974 
0975   // Constructors
0976   AlwaysDestroyAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
0977              );
0978 
0979   AlwaysDestroyAttr *clone(ASTContext &C) const;
0980   void printPretty(raw_ostream &OS,
0981                    const PrintingPolicy &Policy) const;
0982   const char *getSpelling() const;
0983 
0984 
0985   static bool classof(const Attr *A) { return A->getKind() == attr::AlwaysDestroy; }
0986 };
0987 
0988 class CLANG_ABI AlwaysInlineAttr : public DeclOrStmtAttr {
0989 public:
0990   enum Spelling {
0991     GNU_always_inline = 0,
0992     CXX11_gnu_always_inline = 1,
0993     C23_gnu_always_inline = 2,
0994     CXX11_clang_always_inline = 3,
0995     C23_clang_always_inline = 4,
0996     Keyword_forceinline = 5,
0997   SpellingNotCalculated = 15
0998 
0999   };
1000 
1001   // Factory methods
1002   static AlwaysInlineAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
1003   static AlwaysInlineAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
1004   static AlwaysInlineAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_always_inline);
1005   static AlwaysInlineAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_always_inline);
1006 
1007   // Constructors
1008   AlwaysInlineAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1009              );
1010 
1011   AlwaysInlineAttr *clone(ASTContext &C) const;
1012   void printPretty(raw_ostream &OS,
1013                    const PrintingPolicy &Policy) const;
1014   const char *getSpelling() const;
1015   Spelling getSemanticSpelling() const;
1016   bool isClangAlwaysInline() const { return getAttributeSpellingListIndex() == 3 ||
1017     getAttributeSpellingListIndex() == 4; }
1018 
1019 
1020   static bool classof(const Attr *A) { return A->getKind() == attr::AlwaysInline; }
1021 };
1022 
1023 class CLANG_ABI AnalyzerNoReturnAttr : public InheritableAttr {
1024 public:
1025   // Factory methods
1026   static AnalyzerNoReturnAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
1027   static AnalyzerNoReturnAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
1028   static AnalyzerNoReturnAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
1029   static AnalyzerNoReturnAttr *Create(ASTContext &Ctx, SourceRange Range = {});
1030 
1031   // Constructors
1032   AnalyzerNoReturnAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1033              );
1034 
1035   AnalyzerNoReturnAttr *clone(ASTContext &C) const;
1036   void printPretty(raw_ostream &OS,
1037                    const PrintingPolicy &Policy) const;
1038   const char *getSpelling() const;
1039 
1040 
1041   static bool classof(const Attr *A) { return A->getKind() == attr::AnalyzerNoReturn; }
1042 };
1043 
1044 class CLANG_ABI AnnotateAttr : public InheritableParamOrStmtAttr {
1045 unsigned annotationLength;
1046 char *annotation;
1047 
1048   unsigned args_Size;
1049   Expr * *args_;
1050 
1051   unsigned delayedArgs_Size;
1052   Expr * *delayedArgs_;
1053 
1054 public:
1055   enum Spelling {
1056     GNU_annotate = 0,
1057     CXX11_clang_annotate = 1,
1058     C23_clang_annotate = 2,
1059   SpellingNotCalculated = 15
1060 
1061   };
1062 
1063   // Factory methods
1064   static AnnotateAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Annotation, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);
1065   static AnnotateAttr *Create(ASTContext &Ctx, llvm::StringRef Annotation, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);
1066   static AnnotateAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Annotation, Expr * *Args, unsigned ArgsSize, SourceRange Range = {}, Spelling S = GNU_annotate);
1067   static AnnotateAttr *Create(ASTContext &Ctx, llvm::StringRef Annotation, Expr * *Args, unsigned ArgsSize, SourceRange Range = {}, Spelling S = GNU_annotate);
1068   static AnnotateAttr *CreateImplicitWithDelayedArgs(ASTContext &Ctx, Expr * *DelayedArgs, unsigned DelayedArgsSize, const AttributeCommonInfo &CommonInfo);
1069   static AnnotateAttr *CreateWithDelayedArgs(ASTContext &Ctx, Expr * *DelayedArgs, unsigned DelayedArgsSize, const AttributeCommonInfo &CommonInfo);
1070   static AnnotateAttr *CreateImplicitWithDelayedArgs(ASTContext &Ctx, Expr * *DelayedArgs, unsigned DelayedArgsSize, SourceRange Range = {}, Spelling S = GNU_annotate);
1071   static AnnotateAttr *CreateWithDelayedArgs(ASTContext &Ctx, Expr * *DelayedArgs, unsigned DelayedArgsSize, SourceRange Range = {}, Spelling S = GNU_annotate);
1072 
1073   // Constructors
1074   AnnotateAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1075               , llvm::StringRef Annotation
1076               , Expr * *Args, unsigned ArgsSize
1077              );
1078   AnnotateAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1079               , llvm::StringRef Annotation
1080              );
1081   AnnotateAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1082              );
1083 
1084   AnnotateAttr *clone(ASTContext &C) const;
1085   void printPretty(raw_ostream &OS,
1086                    const PrintingPolicy &Policy) const;
1087   const char *getSpelling() const;
1088   llvm::StringRef getAnnotation() const {
1089     return llvm::StringRef(annotation, annotationLength);
1090   }
1091   unsigned getAnnotationLength() const {
1092     return annotationLength;
1093   }
1094   void setAnnotation(ASTContext &C, llvm::StringRef S) {
1095     annotationLength = S.size();
1096     this->annotation = new (C, 1) char [annotationLength];
1097     if (!S.empty())
1098       std::memcpy(this->annotation, S.data(), annotationLength);
1099   }
1100 
1101   typedef Expr ** args_iterator;
1102   args_iterator args_begin() const { return args_; }
1103   args_iterator args_end() const { return args_ + args_Size; }
1104   unsigned args_size() const { return args_Size; }
1105   llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); }
1106 
1107 
1108   typedef Expr ** delayedArgs_iterator;
1109   delayedArgs_iterator delayedArgs_begin() const { return delayedArgs_; }
1110   delayedArgs_iterator delayedArgs_end() const { return delayedArgs_ + delayedArgs_Size; }
1111   unsigned delayedArgs_size() const { return delayedArgs_Size; }
1112   llvm::iterator_range<delayedArgs_iterator> delayedArgs() const { return llvm::make_range(delayedArgs_begin(), delayedArgs_end()); }
1113   void setDelayedArgs(ASTContext &Ctx, Expr * *DelayedArgs, unsigned DelayedArgsSize) {
1114     delayedArgs_Size = DelayedArgsSize;
1115     delayedArgs_ = new (Ctx, 16) Expr *[delayedArgs_Size];
1116     std::copy(DelayedArgs, DelayedArgs + delayedArgs_Size, delayedArgs_);
1117   }
1118 
1119   static AnnotateAttr *Create(ASTContext &Ctx, llvm::StringRef Annotation, \
1120               const AttributeCommonInfo &CommonInfo) {
1121     return AnnotateAttr::Create(Ctx, Annotation, nullptr, 0, CommonInfo);
1122   }
1123   static AnnotateAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Annotation, \
1124               const AttributeCommonInfo &CommonInfo) {
1125     return AnnotateAttr::CreateImplicit(Ctx, Annotation, nullptr, 0, CommonInfo);
1126   }
1127   
1128 
1129   static bool classof(const Attr *A) { return A->getKind() == attr::Annotate; }
1130 };
1131 
1132 class CLANG_ABI AnnotateTypeAttr : public TypeAttr {
1133 unsigned annotationLength;
1134 char *annotation;
1135 
1136   unsigned args_Size;
1137   Expr * *args_;
1138 
1139   unsigned delayedArgs_Size;
1140   Expr * *delayedArgs_;
1141 
1142 public:
1143   enum Spelling {
1144     CXX11_clang_annotate_type = 0,
1145     C23_clang_annotate_type = 1,
1146   SpellingNotCalculated = 15
1147 
1148   };
1149 
1150   // Factory methods
1151   static AnnotateTypeAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Annotation, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);
1152   static AnnotateTypeAttr *Create(ASTContext &Ctx, llvm::StringRef Annotation, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);
1153   static AnnotateTypeAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Annotation, Expr * *Args, unsigned ArgsSize, SourceRange Range = {}, Spelling S = CXX11_clang_annotate_type);
1154   static AnnotateTypeAttr *Create(ASTContext &Ctx, llvm::StringRef Annotation, Expr * *Args, unsigned ArgsSize, SourceRange Range = {}, Spelling S = CXX11_clang_annotate_type);
1155   static AnnotateTypeAttr *CreateImplicitWithDelayedArgs(ASTContext &Ctx, Expr * *DelayedArgs, unsigned DelayedArgsSize, const AttributeCommonInfo &CommonInfo);
1156   static AnnotateTypeAttr *CreateWithDelayedArgs(ASTContext &Ctx, Expr * *DelayedArgs, unsigned DelayedArgsSize, const AttributeCommonInfo &CommonInfo);
1157   static AnnotateTypeAttr *CreateImplicitWithDelayedArgs(ASTContext &Ctx, Expr * *DelayedArgs, unsigned DelayedArgsSize, SourceRange Range = {}, Spelling S = CXX11_clang_annotate_type);
1158   static AnnotateTypeAttr *CreateWithDelayedArgs(ASTContext &Ctx, Expr * *DelayedArgs, unsigned DelayedArgsSize, SourceRange Range = {}, Spelling S = CXX11_clang_annotate_type);
1159 
1160   // Constructors
1161   AnnotateTypeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1162               , llvm::StringRef Annotation
1163               , Expr * *Args, unsigned ArgsSize
1164              );
1165   AnnotateTypeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1166               , llvm::StringRef Annotation
1167              );
1168   AnnotateTypeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1169              );
1170 
1171   AnnotateTypeAttr *clone(ASTContext &C) const;
1172   void printPretty(raw_ostream &OS,
1173                    const PrintingPolicy &Policy) const;
1174   const char *getSpelling() const;
1175   llvm::StringRef getAnnotation() const {
1176     return llvm::StringRef(annotation, annotationLength);
1177   }
1178   unsigned getAnnotationLength() const {
1179     return annotationLength;
1180   }
1181   void setAnnotation(ASTContext &C, llvm::StringRef S) {
1182     annotationLength = S.size();
1183     this->annotation = new (C, 1) char [annotationLength];
1184     if (!S.empty())
1185       std::memcpy(this->annotation, S.data(), annotationLength);
1186   }
1187 
1188   typedef Expr ** args_iterator;
1189   args_iterator args_begin() const { return args_; }
1190   args_iterator args_end() const { return args_ + args_Size; }
1191   unsigned args_size() const { return args_Size; }
1192   llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); }
1193 
1194 
1195   typedef Expr ** delayedArgs_iterator;
1196   delayedArgs_iterator delayedArgs_begin() const { return delayedArgs_; }
1197   delayedArgs_iterator delayedArgs_end() const { return delayedArgs_ + delayedArgs_Size; }
1198   unsigned delayedArgs_size() const { return delayedArgs_Size; }
1199   llvm::iterator_range<delayedArgs_iterator> delayedArgs() const { return llvm::make_range(delayedArgs_begin(), delayedArgs_end()); }
1200   void setDelayedArgs(ASTContext &Ctx, Expr * *DelayedArgs, unsigned DelayedArgsSize) {
1201     delayedArgs_Size = DelayedArgsSize;
1202     delayedArgs_ = new (Ctx, 16) Expr *[delayedArgs_Size];
1203     std::copy(DelayedArgs, DelayedArgs + delayedArgs_Size, delayedArgs_);
1204   }
1205 
1206 
1207   static bool classof(const Attr *A) { return A->getKind() == attr::AnnotateType; }
1208 };
1209 
1210 class CLANG_ABI AnyX86InterruptAttr : public InheritableAttr {
1211 public:
1212   enum Spelling {
1213     GNU_interrupt = 0,
1214     CXX11_gnu_interrupt = 1,
1215     C23_gnu_interrupt = 2,
1216   SpellingNotCalculated = 15
1217 
1218   };
1219 
1220   // Factory methods
1221   static AnyX86InterruptAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
1222   static AnyX86InterruptAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
1223   static AnyX86InterruptAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_interrupt);
1224   static AnyX86InterruptAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_interrupt);
1225 
1226   // Constructors
1227   AnyX86InterruptAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1228              );
1229 
1230   AnyX86InterruptAttr *clone(ASTContext &C) const;
1231   void printPretty(raw_ostream &OS,
1232                    const PrintingPolicy &Policy) const;
1233   const char *getSpelling() const;
1234 
1235 
1236   static bool classof(const Attr *A) { return A->getKind() == attr::AnyX86Interrupt; }
1237 };
1238 
1239 class CLANG_ABI AnyX86NoCallerSavedRegistersAttr : public InheritableAttr {
1240 public:
1241   enum Spelling {
1242     GNU_no_caller_saved_registers = 0,
1243     CXX11_gnu_no_caller_saved_registers = 1,
1244     C23_gnu_no_caller_saved_registers = 2,
1245   SpellingNotCalculated = 15
1246 
1247   };
1248 
1249   // Factory methods
1250   static AnyX86NoCallerSavedRegistersAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
1251   static AnyX86NoCallerSavedRegistersAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
1252   static AnyX86NoCallerSavedRegistersAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_no_caller_saved_registers);
1253   static AnyX86NoCallerSavedRegistersAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_no_caller_saved_registers);
1254 
1255   // Constructors
1256   AnyX86NoCallerSavedRegistersAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1257              );
1258 
1259   AnyX86NoCallerSavedRegistersAttr *clone(ASTContext &C) const;
1260   void printPretty(raw_ostream &OS,
1261                    const PrintingPolicy &Policy) const;
1262   const char *getSpelling() const;
1263 
1264 
1265   static bool classof(const Attr *A) { return A->getKind() == attr::AnyX86NoCallerSavedRegisters; }
1266 };
1267 
1268 class CLANG_ABI AnyX86NoCfCheckAttr : public InheritableAttr {
1269 public:
1270   enum Spelling {
1271     GNU_nocf_check = 0,
1272     CXX11_gnu_nocf_check = 1,
1273     C23_gnu_nocf_check = 2,
1274   SpellingNotCalculated = 15
1275 
1276   };
1277 
1278   // Factory methods
1279   static AnyX86NoCfCheckAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
1280   static AnyX86NoCfCheckAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
1281   static AnyX86NoCfCheckAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_nocf_check);
1282   static AnyX86NoCfCheckAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_nocf_check);
1283 
1284   // Constructors
1285   AnyX86NoCfCheckAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1286              );
1287 
1288   AnyX86NoCfCheckAttr *clone(ASTContext &C) const;
1289   void printPretty(raw_ostream &OS,
1290                    const PrintingPolicy &Policy) const;
1291   const char *getSpelling() const;
1292 
1293 
1294   static bool classof(const Attr *A) { return A->getKind() == attr::AnyX86NoCfCheck; }
1295 };
1296 
1297 class CLANG_ABI ArcWeakrefUnavailableAttr : public InheritableAttr {
1298 public:
1299   enum Spelling {
1300     GNU_objc_arc_weak_reference_unavailable = 0,
1301     CXX11_clang_objc_arc_weak_reference_unavailable = 1,
1302     C23_clang_objc_arc_weak_reference_unavailable = 2,
1303   SpellingNotCalculated = 15
1304 
1305   };
1306 
1307   // Factory methods
1308   static ArcWeakrefUnavailableAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
1309   static ArcWeakrefUnavailableAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
1310   static ArcWeakrefUnavailableAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_arc_weak_reference_unavailable);
1311   static ArcWeakrefUnavailableAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_arc_weak_reference_unavailable);
1312 
1313   // Constructors
1314   ArcWeakrefUnavailableAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1315              );
1316 
1317   ArcWeakrefUnavailableAttr *clone(ASTContext &C) const;
1318   void printPretty(raw_ostream &OS,
1319                    const PrintingPolicy &Policy) const;
1320   const char *getSpelling() const;
1321 
1322 
1323   static bool classof(const Attr *A) { return A->getKind() == attr::ArcWeakrefUnavailable; }
1324 };
1325 
1326 class CLANG_ABI ArgumentWithTypeTagAttr : public InheritableAttr {
1327 IdentifierInfo * argumentKind;
1328 
1329 ParamIdx argumentIdx;
1330 
1331 ParamIdx typeTagIdx;
1332 
1333 bool isPointer;
1334 
1335 public:
1336   enum Spelling {
1337     GNU_argument_with_type_tag = 0,
1338     CXX11_clang_argument_with_type_tag = 1,
1339     C23_clang_argument_with_type_tag = 2,
1340     GNU_pointer_with_type_tag = 3,
1341     CXX11_clang_pointer_with_type_tag = 4,
1342     C23_clang_pointer_with_type_tag = 5,
1343   SpellingNotCalculated = 15
1344 
1345   };
1346 
1347   // Factory methods
1348   static ArgumentWithTypeTagAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * ArgumentKind, ParamIdx ArgumentIdx, ParamIdx TypeTagIdx, bool IsPointer, const AttributeCommonInfo &CommonInfo);
1349   static ArgumentWithTypeTagAttr *Create(ASTContext &Ctx, IdentifierInfo * ArgumentKind, ParamIdx ArgumentIdx, ParamIdx TypeTagIdx, bool IsPointer, const AttributeCommonInfo &CommonInfo);
1350   static ArgumentWithTypeTagAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * ArgumentKind, ParamIdx ArgumentIdx, ParamIdx TypeTagIdx, bool IsPointer, SourceRange Range = {}, Spelling S = GNU_argument_with_type_tag);
1351   static ArgumentWithTypeTagAttr *Create(ASTContext &Ctx, IdentifierInfo * ArgumentKind, ParamIdx ArgumentIdx, ParamIdx TypeTagIdx, bool IsPointer, SourceRange Range = {}, Spelling S = GNU_argument_with_type_tag);
1352   static ArgumentWithTypeTagAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * ArgumentKind, ParamIdx ArgumentIdx, ParamIdx TypeTagIdx, const AttributeCommonInfo &CommonInfo);
1353   static ArgumentWithTypeTagAttr *Create(ASTContext &Ctx, IdentifierInfo * ArgumentKind, ParamIdx ArgumentIdx, ParamIdx TypeTagIdx, const AttributeCommonInfo &CommonInfo);
1354   static ArgumentWithTypeTagAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * ArgumentKind, ParamIdx ArgumentIdx, ParamIdx TypeTagIdx, SourceRange Range = {}, Spelling S = GNU_argument_with_type_tag);
1355   static ArgumentWithTypeTagAttr *Create(ASTContext &Ctx, IdentifierInfo * ArgumentKind, ParamIdx ArgumentIdx, ParamIdx TypeTagIdx, SourceRange Range = {}, Spelling S = GNU_argument_with_type_tag);
1356 
1357   // Constructors
1358   ArgumentWithTypeTagAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1359               , IdentifierInfo * ArgumentKind
1360               , ParamIdx ArgumentIdx
1361               , ParamIdx TypeTagIdx
1362               , bool IsPointer
1363              );
1364   ArgumentWithTypeTagAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1365               , IdentifierInfo * ArgumentKind
1366               , ParamIdx ArgumentIdx
1367               , ParamIdx TypeTagIdx
1368              );
1369 
1370   ArgumentWithTypeTagAttr *clone(ASTContext &C) const;
1371   void printPretty(raw_ostream &OS,
1372                    const PrintingPolicy &Policy) const;
1373   const char *getSpelling() const;
1374   Spelling getSemanticSpelling() const;
1375   IdentifierInfo * getArgumentKind() const {
1376     return argumentKind;
1377   }
1378 
1379   ParamIdx getArgumentIdx() const {
1380     return argumentIdx;
1381   }
1382 
1383   ParamIdx getTypeTagIdx() const {
1384     return typeTagIdx;
1385   }
1386 
1387   bool getIsPointer() const {
1388     return isPointer;
1389   }
1390 
1391 
1392 
1393   static bool classof(const Attr *A) { return A->getKind() == attr::ArgumentWithTypeTag; }
1394 };
1395 
1396 class CLANG_ABI ArmAgnosticAttr : public TypeAttr {
1397   unsigned agnosticArgs_Size;
1398   StringRef *agnosticArgs_;
1399 
1400 public:
1401   // Factory methods
1402   static ArmAgnosticAttr *CreateImplicit(ASTContext &Ctx, StringRef *AgnosticArgs, unsigned AgnosticArgsSize, const AttributeCommonInfo &CommonInfo);
1403   static ArmAgnosticAttr *Create(ASTContext &Ctx, StringRef *AgnosticArgs, unsigned AgnosticArgsSize, const AttributeCommonInfo &CommonInfo);
1404   static ArmAgnosticAttr *CreateImplicit(ASTContext &Ctx, StringRef *AgnosticArgs, unsigned AgnosticArgsSize, SourceRange Range = {});
1405   static ArmAgnosticAttr *Create(ASTContext &Ctx, StringRef *AgnosticArgs, unsigned AgnosticArgsSize, SourceRange Range = {});
1406 
1407   // Constructors
1408   ArmAgnosticAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1409               , StringRef *AgnosticArgs, unsigned AgnosticArgsSize
1410              );
1411   ArmAgnosticAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1412              );
1413 
1414   ArmAgnosticAttr *clone(ASTContext &C) const;
1415   void printPretty(raw_ostream &OS,
1416                    const PrintingPolicy &Policy) const;
1417   const char *getSpelling() const;
1418   typedef StringRef* agnosticArgs_iterator;
1419   agnosticArgs_iterator agnosticArgs_begin() const { return agnosticArgs_; }
1420   agnosticArgs_iterator agnosticArgs_end() const { return agnosticArgs_ + agnosticArgs_Size; }
1421   unsigned agnosticArgs_size() const { return agnosticArgs_Size; }
1422   llvm::iterator_range<agnosticArgs_iterator> agnosticArgs() const { return llvm::make_range(agnosticArgs_begin(), agnosticArgs_end()); }
1423 
1424 
1425 
1426 
1427   static bool classof(const Attr *A) { return A->getKind() == attr::ArmAgnostic; }
1428 };
1429 
1430 class CLANG_ABI ArmBuiltinAliasAttr : public InheritableAttr {
1431 IdentifierInfo * builtinName;
1432 
1433 public:
1434   enum Spelling {
1435     GNU_clang_arm_builtin_alias = 0,
1436     CXX11_clang_clang_arm_builtin_alias = 1,
1437     C23_clang_clang_arm_builtin_alias = 2,
1438   SpellingNotCalculated = 15
1439 
1440   };
1441 
1442   // Factory methods
1443   static ArmBuiltinAliasAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * BuiltinName, const AttributeCommonInfo &CommonInfo);
1444   static ArmBuiltinAliasAttr *Create(ASTContext &Ctx, IdentifierInfo * BuiltinName, const AttributeCommonInfo &CommonInfo);
1445   static ArmBuiltinAliasAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * BuiltinName, SourceRange Range = {}, Spelling S = GNU_clang_arm_builtin_alias);
1446   static ArmBuiltinAliasAttr *Create(ASTContext &Ctx, IdentifierInfo * BuiltinName, SourceRange Range = {}, Spelling S = GNU_clang_arm_builtin_alias);
1447 
1448   // Constructors
1449   ArmBuiltinAliasAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1450               , IdentifierInfo * BuiltinName
1451              );
1452 
1453   ArmBuiltinAliasAttr *clone(ASTContext &C) const;
1454   void printPretty(raw_ostream &OS,
1455                    const PrintingPolicy &Policy) const;
1456   const char *getSpelling() const;
1457   IdentifierInfo * getBuiltinName() const {
1458     return builtinName;
1459   }
1460 
1461 
1462 
1463   static bool classof(const Attr *A) { return A->getKind() == attr::ArmBuiltinAlias; }
1464 };
1465 
1466 class CLANG_ABI ArmInAttr : public TypeAttr {
1467   unsigned inArgs_Size;
1468   StringRef *inArgs_;
1469 
1470 public:
1471   // Factory methods
1472   static ArmInAttr *CreateImplicit(ASTContext &Ctx, StringRef *InArgs, unsigned InArgsSize, const AttributeCommonInfo &CommonInfo);
1473   static ArmInAttr *Create(ASTContext &Ctx, StringRef *InArgs, unsigned InArgsSize, const AttributeCommonInfo &CommonInfo);
1474   static ArmInAttr *CreateImplicit(ASTContext &Ctx, StringRef *InArgs, unsigned InArgsSize, SourceRange Range = {});
1475   static ArmInAttr *Create(ASTContext &Ctx, StringRef *InArgs, unsigned InArgsSize, SourceRange Range = {});
1476 
1477   // Constructors
1478   ArmInAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1479               , StringRef *InArgs, unsigned InArgsSize
1480              );
1481   ArmInAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1482              );
1483 
1484   ArmInAttr *clone(ASTContext &C) const;
1485   void printPretty(raw_ostream &OS,
1486                    const PrintingPolicy &Policy) const;
1487   const char *getSpelling() const;
1488   typedef StringRef* inArgs_iterator;
1489   inArgs_iterator inArgs_begin() const { return inArgs_; }
1490   inArgs_iterator inArgs_end() const { return inArgs_ + inArgs_Size; }
1491   unsigned inArgs_size() const { return inArgs_Size; }
1492   llvm::iterator_range<inArgs_iterator> inArgs() const { return llvm::make_range(inArgs_begin(), inArgs_end()); }
1493 
1494 
1495 
1496 
1497   static bool classof(const Attr *A) { return A->getKind() == attr::ArmIn; }
1498 };
1499 
1500 class CLANG_ABI ArmInOutAttr : public TypeAttr {
1501   unsigned inOutArgs_Size;
1502   StringRef *inOutArgs_;
1503 
1504 public:
1505   // Factory methods
1506   static ArmInOutAttr *CreateImplicit(ASTContext &Ctx, StringRef *InOutArgs, unsigned InOutArgsSize, const AttributeCommonInfo &CommonInfo);
1507   static ArmInOutAttr *Create(ASTContext &Ctx, StringRef *InOutArgs, unsigned InOutArgsSize, const AttributeCommonInfo &CommonInfo);
1508   static ArmInOutAttr *CreateImplicit(ASTContext &Ctx, StringRef *InOutArgs, unsigned InOutArgsSize, SourceRange Range = {});
1509   static ArmInOutAttr *Create(ASTContext &Ctx, StringRef *InOutArgs, unsigned InOutArgsSize, SourceRange Range = {});
1510 
1511   // Constructors
1512   ArmInOutAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1513               , StringRef *InOutArgs, unsigned InOutArgsSize
1514              );
1515   ArmInOutAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1516              );
1517 
1518   ArmInOutAttr *clone(ASTContext &C) const;
1519   void printPretty(raw_ostream &OS,
1520                    const PrintingPolicy &Policy) const;
1521   const char *getSpelling() const;
1522   typedef StringRef* inOutArgs_iterator;
1523   inOutArgs_iterator inOutArgs_begin() const { return inOutArgs_; }
1524   inOutArgs_iterator inOutArgs_end() const { return inOutArgs_ + inOutArgs_Size; }
1525   unsigned inOutArgs_size() const { return inOutArgs_Size; }
1526   llvm::iterator_range<inOutArgs_iterator> inOutArgs() const { return llvm::make_range(inOutArgs_begin(), inOutArgs_end()); }
1527 
1528 
1529 
1530 
1531   static bool classof(const Attr *A) { return A->getKind() == attr::ArmInOut; }
1532 };
1533 
1534 class CLANG_ABI ArmLocallyStreamingAttr : public InheritableAttr {
1535 public:
1536   // Factory methods
1537   static ArmLocallyStreamingAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
1538   static ArmLocallyStreamingAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
1539   static ArmLocallyStreamingAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
1540   static ArmLocallyStreamingAttr *Create(ASTContext &Ctx, SourceRange Range = {});
1541 
1542   // Constructors
1543   ArmLocallyStreamingAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1544              );
1545 
1546   ArmLocallyStreamingAttr *clone(ASTContext &C) const;
1547   void printPretty(raw_ostream &OS,
1548                    const PrintingPolicy &Policy) const;
1549   const char *getSpelling() const;
1550 
1551 
1552   static bool classof(const Attr *A) { return A->getKind() == attr::ArmLocallyStreaming; }
1553 };
1554 
1555 class CLANG_ABI ArmMveStrictPolymorphismAttr : public TypeAttr {
1556 public:
1557   enum Spelling {
1558     GNU_clang_arm_mve_strict_polymorphism = 0,
1559     CXX11_clang_clang_arm_mve_strict_polymorphism = 1,
1560     C23_clang_clang_arm_mve_strict_polymorphism = 2,
1561   SpellingNotCalculated = 15
1562 
1563   };
1564 
1565   // Factory methods
1566   static ArmMveStrictPolymorphismAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
1567   static ArmMveStrictPolymorphismAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
1568   static ArmMveStrictPolymorphismAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_clang_arm_mve_strict_polymorphism);
1569   static ArmMveStrictPolymorphismAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_clang_arm_mve_strict_polymorphism);
1570 
1571   // Constructors
1572   ArmMveStrictPolymorphismAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1573              );
1574 
1575   ArmMveStrictPolymorphismAttr *clone(ASTContext &C) const;
1576   void printPretty(raw_ostream &OS,
1577                    const PrintingPolicy &Policy) const;
1578   const char *getSpelling() const;
1579 
1580 
1581   static bool classof(const Attr *A) { return A->getKind() == attr::ArmMveStrictPolymorphism; }
1582 };
1583 
1584 class CLANG_ABI ArmNewAttr : public InheritableAttr {
1585   unsigned newArgs_Size;
1586   StringRef *newArgs_;
1587 
1588 public:
1589   // Factory methods
1590   static ArmNewAttr *CreateImplicit(ASTContext &Ctx, StringRef *NewArgs, unsigned NewArgsSize, const AttributeCommonInfo &CommonInfo);
1591   static ArmNewAttr *Create(ASTContext &Ctx, StringRef *NewArgs, unsigned NewArgsSize, const AttributeCommonInfo &CommonInfo);
1592   static ArmNewAttr *CreateImplicit(ASTContext &Ctx, StringRef *NewArgs, unsigned NewArgsSize, SourceRange Range = {});
1593   static ArmNewAttr *Create(ASTContext &Ctx, StringRef *NewArgs, unsigned NewArgsSize, SourceRange Range = {});
1594 
1595   // Constructors
1596   ArmNewAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1597               , StringRef *NewArgs, unsigned NewArgsSize
1598              );
1599   ArmNewAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1600              );
1601 
1602   ArmNewAttr *clone(ASTContext &C) const;
1603   void printPretty(raw_ostream &OS,
1604                    const PrintingPolicy &Policy) const;
1605   const char *getSpelling() const;
1606   typedef StringRef* newArgs_iterator;
1607   newArgs_iterator newArgs_begin() const { return newArgs_; }
1608   newArgs_iterator newArgs_end() const { return newArgs_ + newArgs_Size; }
1609   unsigned newArgs_size() const { return newArgs_Size; }
1610   llvm::iterator_range<newArgs_iterator> newArgs() const { return llvm::make_range(newArgs_begin(), newArgs_end()); }
1611 
1612 
1613 
1614     bool isNewZA() const {
1615       return llvm::is_contained(newArgs(), "za");
1616     }
1617     bool isNewZT0() const {
1618       return llvm::is_contained(newArgs(), "zt0");
1619     }
1620   
1621 
1622   static bool classof(const Attr *A) { return A->getKind() == attr::ArmNew; }
1623 };
1624 
1625 class CLANG_ABI ArmOutAttr : public TypeAttr {
1626   unsigned outArgs_Size;
1627   StringRef *outArgs_;
1628 
1629 public:
1630   // Factory methods
1631   static ArmOutAttr *CreateImplicit(ASTContext &Ctx, StringRef *OutArgs, unsigned OutArgsSize, const AttributeCommonInfo &CommonInfo);
1632   static ArmOutAttr *Create(ASTContext &Ctx, StringRef *OutArgs, unsigned OutArgsSize, const AttributeCommonInfo &CommonInfo);
1633   static ArmOutAttr *CreateImplicit(ASTContext &Ctx, StringRef *OutArgs, unsigned OutArgsSize, SourceRange Range = {});
1634   static ArmOutAttr *Create(ASTContext &Ctx, StringRef *OutArgs, unsigned OutArgsSize, SourceRange Range = {});
1635 
1636   // Constructors
1637   ArmOutAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1638               , StringRef *OutArgs, unsigned OutArgsSize
1639              );
1640   ArmOutAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1641              );
1642 
1643   ArmOutAttr *clone(ASTContext &C) const;
1644   void printPretty(raw_ostream &OS,
1645                    const PrintingPolicy &Policy) const;
1646   const char *getSpelling() const;
1647   typedef StringRef* outArgs_iterator;
1648   outArgs_iterator outArgs_begin() const { return outArgs_; }
1649   outArgs_iterator outArgs_end() const { return outArgs_ + outArgs_Size; }
1650   unsigned outArgs_size() const { return outArgs_Size; }
1651   llvm::iterator_range<outArgs_iterator> outArgs() const { return llvm::make_range(outArgs_begin(), outArgs_end()); }
1652 
1653 
1654 
1655 
1656   static bool classof(const Attr *A) { return A->getKind() == attr::ArmOut; }
1657 };
1658 
1659 class CLANG_ABI ArmPreservesAttr : public TypeAttr {
1660   unsigned preserveArgs_Size;
1661   StringRef *preserveArgs_;
1662 
1663 public:
1664   // Factory methods
1665   static ArmPreservesAttr *CreateImplicit(ASTContext &Ctx, StringRef *PreserveArgs, unsigned PreserveArgsSize, const AttributeCommonInfo &CommonInfo);
1666   static ArmPreservesAttr *Create(ASTContext &Ctx, StringRef *PreserveArgs, unsigned PreserveArgsSize, const AttributeCommonInfo &CommonInfo);
1667   static ArmPreservesAttr *CreateImplicit(ASTContext &Ctx, StringRef *PreserveArgs, unsigned PreserveArgsSize, SourceRange Range = {});
1668   static ArmPreservesAttr *Create(ASTContext &Ctx, StringRef *PreserveArgs, unsigned PreserveArgsSize, SourceRange Range = {});
1669 
1670   // Constructors
1671   ArmPreservesAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1672               , StringRef *PreserveArgs, unsigned PreserveArgsSize
1673              );
1674   ArmPreservesAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1675              );
1676 
1677   ArmPreservesAttr *clone(ASTContext &C) const;
1678   void printPretty(raw_ostream &OS,
1679                    const PrintingPolicy &Policy) const;
1680   const char *getSpelling() const;
1681   typedef StringRef* preserveArgs_iterator;
1682   preserveArgs_iterator preserveArgs_begin() const { return preserveArgs_; }
1683   preserveArgs_iterator preserveArgs_end() const { return preserveArgs_ + preserveArgs_Size; }
1684   unsigned preserveArgs_size() const { return preserveArgs_Size; }
1685   llvm::iterator_range<preserveArgs_iterator> preserveArgs() const { return llvm::make_range(preserveArgs_begin(), preserveArgs_end()); }
1686 
1687 
1688 
1689 
1690   static bool classof(const Attr *A) { return A->getKind() == attr::ArmPreserves; }
1691 };
1692 
1693 class CLANG_ABI ArmStreamingAttr : public TypeAttr {
1694 public:
1695   // Factory methods
1696   static ArmStreamingAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
1697   static ArmStreamingAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
1698   static ArmStreamingAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
1699   static ArmStreamingAttr *Create(ASTContext &Ctx, SourceRange Range = {});
1700 
1701   // Constructors
1702   ArmStreamingAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1703              );
1704 
1705   ArmStreamingAttr *clone(ASTContext &C) const;
1706   void printPretty(raw_ostream &OS,
1707                    const PrintingPolicy &Policy) const;
1708   const char *getSpelling() const;
1709 
1710 
1711   static bool classof(const Attr *A) { return A->getKind() == attr::ArmStreaming; }
1712 };
1713 
1714 class CLANG_ABI ArmStreamingCompatibleAttr : public TypeAttr {
1715 public:
1716   // Factory methods
1717   static ArmStreamingCompatibleAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
1718   static ArmStreamingCompatibleAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
1719   static ArmStreamingCompatibleAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
1720   static ArmStreamingCompatibleAttr *Create(ASTContext &Ctx, SourceRange Range = {});
1721 
1722   // Constructors
1723   ArmStreamingCompatibleAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1724              );
1725 
1726   ArmStreamingCompatibleAttr *clone(ASTContext &C) const;
1727   void printPretty(raw_ostream &OS,
1728                    const PrintingPolicy &Policy) const;
1729   const char *getSpelling() const;
1730 
1731 
1732   static bool classof(const Attr *A) { return A->getKind() == attr::ArmStreamingCompatible; }
1733 };
1734 
1735 class CLANG_ABI ArtificialAttr : public InheritableAttr {
1736 public:
1737   enum Spelling {
1738     GNU_artificial = 0,
1739     CXX11_gnu_artificial = 1,
1740     C23_gnu_artificial = 2,
1741   SpellingNotCalculated = 15
1742 
1743   };
1744 
1745   // Factory methods
1746   static ArtificialAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
1747   static ArtificialAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
1748   static ArtificialAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_artificial);
1749   static ArtificialAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_artificial);
1750 
1751   // Constructors
1752   ArtificialAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1753              );
1754 
1755   ArtificialAttr *clone(ASTContext &C) const;
1756   void printPretty(raw_ostream &OS,
1757                    const PrintingPolicy &Policy) const;
1758   const char *getSpelling() const;
1759 
1760 
1761   static bool classof(const Attr *A) { return A->getKind() == attr::Artificial; }
1762 };
1763 
1764 class CLANG_ABI AsmLabelAttr : public InheritableAttr {
1765 unsigned labelLength;
1766 char *label;
1767 
1768 bool isLiteralLabel;
1769 
1770 public:
1771   enum Spelling {
1772     Keyword_asm = 0,
1773   SpellingNotCalculated = 15
1774 
1775   };
1776 
1777   // Factory methods
1778   static AsmLabelAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Label, bool IsLiteralLabel, const AttributeCommonInfo &CommonInfo);
1779   static AsmLabelAttr *Create(ASTContext &Ctx, llvm::StringRef Label, bool IsLiteralLabel, const AttributeCommonInfo &CommonInfo);
1780   static AsmLabelAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Label, bool IsLiteralLabel, SourceRange Range = {}, Spelling S = Keyword_asm);
1781   static AsmLabelAttr *Create(ASTContext &Ctx, llvm::StringRef Label, bool IsLiteralLabel, SourceRange Range = {}, Spelling S = Keyword_asm);
1782   static AsmLabelAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Label, const AttributeCommonInfo &CommonInfo);
1783   static AsmLabelAttr *Create(ASTContext &Ctx, llvm::StringRef Label, const AttributeCommonInfo &CommonInfo);
1784   static AsmLabelAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Label, SourceRange Range = {}, Spelling S = Keyword_asm);
1785   static AsmLabelAttr *Create(ASTContext &Ctx, llvm::StringRef Label, SourceRange Range = {}, Spelling S = Keyword_asm);
1786 
1787   // Constructors
1788   AsmLabelAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1789               , llvm::StringRef Label
1790               , bool IsLiteralLabel
1791              );
1792   AsmLabelAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1793               , llvm::StringRef Label
1794              );
1795 
1796   AsmLabelAttr *clone(ASTContext &C) const;
1797   void printPretty(raw_ostream &OS,
1798                    const PrintingPolicy &Policy) const;
1799   const char *getSpelling() const;
1800   llvm::StringRef getLabel() const {
1801     return llvm::StringRef(label, labelLength);
1802   }
1803   unsigned getLabelLength() const {
1804     return labelLength;
1805   }
1806   void setLabel(ASTContext &C, llvm::StringRef S) {
1807     labelLength = S.size();
1808     this->label = new (C, 1) char [labelLength];
1809     if (!S.empty())
1810       std::memcpy(this->label, S.data(), labelLength);
1811   }
1812 
1813   bool getIsLiteralLabel() const {
1814     return isLiteralLabel;
1815   }
1816 
1817 
1818 bool isEquivalent(AsmLabelAttr *Other) const {
1819   return getLabel() == Other->getLabel() && getIsLiteralLabel() == Other->getIsLiteralLabel();
1820 }
1821 
1822 
1823   static bool classof(const Attr *A) { return A->getKind() == attr::AsmLabel; }
1824 };
1825 
1826 class CLANG_ABI AssertCapabilityAttr : public InheritableAttr {
1827   unsigned args_Size;
1828   Expr * *args_;
1829 
1830 public:
1831   enum Spelling {
1832     GNU_assert_capability = 0,
1833     CXX11_clang_assert_capability = 1,
1834     GNU_assert_shared_capability = 2,
1835     CXX11_clang_assert_shared_capability = 3,
1836   SpellingNotCalculated = 15
1837 
1838   };
1839 
1840   // Factory methods
1841   static AssertCapabilityAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);
1842   static AssertCapabilityAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);
1843   static AssertCapabilityAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range = {}, Spelling S = GNU_assert_capability);
1844   static AssertCapabilityAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range = {}, Spelling S = GNU_assert_capability);
1845 
1846   // Constructors
1847   AssertCapabilityAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1848               , Expr * *Args, unsigned ArgsSize
1849              );
1850   AssertCapabilityAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1851              );
1852 
1853   AssertCapabilityAttr *clone(ASTContext &C) const;
1854   void printPretty(raw_ostream &OS,
1855                    const PrintingPolicy &Policy) const;
1856   const char *getSpelling() const;
1857   Spelling getSemanticSpelling() const;
1858   bool isShared() const { return getAttributeSpellingListIndex() == 2 ||
1859     getAttributeSpellingListIndex() == 3; }
1860   typedef Expr ** args_iterator;
1861   args_iterator args_begin() const { return args_; }
1862   args_iterator args_end() const { return args_ + args_Size; }
1863   unsigned args_size() const { return args_Size; }
1864   llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); }
1865 
1866 
1867 
1868 
1869   static bool classof(const Attr *A) { return A->getKind() == attr::AssertCapability; }
1870 };
1871 
1872 class CLANG_ABI AssertExclusiveLockAttr : public InheritableAttr {
1873   unsigned args_Size;
1874   Expr * *args_;
1875 
1876 public:
1877   // Factory methods
1878   static AssertExclusiveLockAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);
1879   static AssertExclusiveLockAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);
1880   static AssertExclusiveLockAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range = {});
1881   static AssertExclusiveLockAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range = {});
1882 
1883   // Constructors
1884   AssertExclusiveLockAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1885               , Expr * *Args, unsigned ArgsSize
1886              );
1887   AssertExclusiveLockAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1888              );
1889 
1890   AssertExclusiveLockAttr *clone(ASTContext &C) const;
1891   void printPretty(raw_ostream &OS,
1892                    const PrintingPolicy &Policy) const;
1893   const char *getSpelling() const;
1894   typedef Expr ** args_iterator;
1895   args_iterator args_begin() const { return args_; }
1896   args_iterator args_end() const { return args_ + args_Size; }
1897   unsigned args_size() const { return args_Size; }
1898   llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); }
1899 
1900 
1901 
1902 
1903   static bool classof(const Attr *A) { return A->getKind() == attr::AssertExclusiveLock; }
1904 };
1905 
1906 class CLANG_ABI AssertSharedLockAttr : public InheritableAttr {
1907   unsigned args_Size;
1908   Expr * *args_;
1909 
1910 public:
1911   // Factory methods
1912   static AssertSharedLockAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);
1913   static AssertSharedLockAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);
1914   static AssertSharedLockAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range = {});
1915   static AssertSharedLockAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range = {});
1916 
1917   // Constructors
1918   AssertSharedLockAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1919               , Expr * *Args, unsigned ArgsSize
1920              );
1921   AssertSharedLockAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1922              );
1923 
1924   AssertSharedLockAttr *clone(ASTContext &C) const;
1925   void printPretty(raw_ostream &OS,
1926                    const PrintingPolicy &Policy) const;
1927   const char *getSpelling() const;
1928   typedef Expr ** args_iterator;
1929   args_iterator args_begin() const { return args_; }
1930   args_iterator args_end() const { return args_ + args_Size; }
1931   unsigned args_size() const { return args_Size; }
1932   llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); }
1933 
1934 
1935 
1936 
1937   static bool classof(const Attr *A) { return A->getKind() == attr::AssertSharedLock; }
1938 };
1939 
1940 class CLANG_ABI AssumeAlignedAttr : public InheritableAttr {
1941 Expr * alignment;
1942 
1943 Expr * offset;
1944 
1945 public:
1946   enum Spelling {
1947     GNU_assume_aligned = 0,
1948     CXX11_gnu_assume_aligned = 1,
1949     C23_gnu_assume_aligned = 2,
1950   SpellingNotCalculated = 15
1951 
1952   };
1953 
1954   // Factory methods
1955   static AssumeAlignedAttr *CreateImplicit(ASTContext &Ctx, Expr * Alignment, Expr * Offset, const AttributeCommonInfo &CommonInfo);
1956   static AssumeAlignedAttr *Create(ASTContext &Ctx, Expr * Alignment, Expr * Offset, const AttributeCommonInfo &CommonInfo);
1957   static AssumeAlignedAttr *CreateImplicit(ASTContext &Ctx, Expr * Alignment, Expr * Offset, SourceRange Range = {}, Spelling S = GNU_assume_aligned);
1958   static AssumeAlignedAttr *Create(ASTContext &Ctx, Expr * Alignment, Expr * Offset, SourceRange Range = {}, Spelling S = GNU_assume_aligned);
1959 
1960   // Constructors
1961   AssumeAlignedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1962               , Expr * Alignment
1963               , Expr * Offset
1964              );
1965   AssumeAlignedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
1966               , Expr * Alignment
1967              );
1968 
1969   AssumeAlignedAttr *clone(ASTContext &C) const;
1970   void printPretty(raw_ostream &OS,
1971                    const PrintingPolicy &Policy) const;
1972   const char *getSpelling() const;
1973   Expr * getAlignment() const {
1974     return alignment;
1975   }
1976 
1977   Expr * getOffset() const {
1978     return offset;
1979   }
1980 
1981 
1982 
1983   static bool classof(const Attr *A) { return A->getKind() == attr::AssumeAligned; }
1984 };
1985 
1986 class CLANG_ABI AvailabilityAttr : public InheritableAttr {
1987 IdentifierInfo * platform;
1988 
1989 VersionTuple introduced;
1990 
1991 
1992 VersionTuple deprecated;
1993 
1994 
1995 VersionTuple obsoleted;
1996 
1997 
1998 bool unavailable;
1999 
2000 unsigned messageLength;
2001 char *message;
2002 
2003 bool strict;
2004 
2005 unsigned replacementLength;
2006 char *replacement;
2007 
2008 int priority;
2009 
2010 IdentifierInfo * environment;
2011 
2012 public:
2013   enum Spelling {
2014     GNU_availability = 0,
2015     CXX11_clang_availability = 1,
2016     C23_clang_availability = 2,
2017   SpellingNotCalculated = 15
2018 
2019   };
2020 
2021   // Factory methods
2022   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, IdentifierInfo * Environment, const AttributeCommonInfo &CommonInfo);
2023   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, IdentifierInfo * Environment, const AttributeCommonInfo &CommonInfo);
2024   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, IdentifierInfo * Environment, SourceRange Range = {}, Spelling S = GNU_availability);
2025   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, IdentifierInfo * Environment, SourceRange Range = {}, Spelling S = GNU_availability);
2026 
2027   // Constructors
2028   AvailabilityAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
2029               , IdentifierInfo * Platform
2030               , VersionTuple Introduced
2031               , VersionTuple Deprecated
2032               , VersionTuple Obsoleted
2033               , bool Unavailable
2034               , llvm::StringRef Message
2035               , bool Strict
2036               , llvm::StringRef Replacement
2037               , int Priority
2038               , IdentifierInfo * Environment
2039              );
2040 
2041   AvailabilityAttr *clone(ASTContext &C) const;
2042   void printPretty(raw_ostream &OS,
2043                    const PrintingPolicy &Policy) const;
2044   const char *getSpelling() const;
2045   IdentifierInfo * getPlatform() const {
2046     return platform;
2047   }
2048 
2049   VersionTuple getIntroduced() const {
2050     return introduced;
2051   }
2052   void setIntroduced(ASTContext &C, VersionTuple V) {
2053     introduced = V;
2054   }
2055 
2056   VersionTuple getDeprecated() const {
2057     return deprecated;
2058   }
2059   void setDeprecated(ASTContext &C, VersionTuple V) {
2060     deprecated = V;
2061   }
2062 
2063   VersionTuple getObsoleted() const {
2064     return obsoleted;
2065   }
2066   void setObsoleted(ASTContext &C, VersionTuple V) {
2067     obsoleted = V;
2068   }
2069 
2070   bool getUnavailable() const {
2071     return unavailable;
2072   }
2073 
2074   llvm::StringRef getMessage() const {
2075     return llvm::StringRef(message, messageLength);
2076   }
2077   unsigned getMessageLength() const {
2078     return messageLength;
2079   }
2080   void setMessage(ASTContext &C, llvm::StringRef S) {
2081     messageLength = S.size();
2082     this->message = new (C, 1) char [messageLength];
2083     if (!S.empty())
2084       std::memcpy(this->message, S.data(), messageLength);
2085   }
2086 
2087   bool getStrict() const {
2088     return strict;
2089   }
2090 
2091   llvm::StringRef getReplacement() const {
2092     return llvm::StringRef(replacement, replacementLength);
2093   }
2094   unsigned getReplacementLength() const {
2095     return replacementLength;
2096   }
2097   void setReplacement(ASTContext &C, llvm::StringRef S) {
2098     replacementLength = S.size();
2099     this->replacement = new (C, 1) char [replacementLength];
2100     if (!S.empty())
2101       std::memcpy(this->replacement, S.data(), replacementLength);
2102   }
2103 
2104   int getPriority() const {
2105     return priority;
2106   }
2107 
2108   IdentifierInfo * getEnvironment() const {
2109     return environment;
2110   }
2111 
2112 static llvm::StringRef getPrettyPlatformName(llvm::StringRef Platform) {
2113     return llvm::StringSwitch<llvm::StringRef>(Platform)
2114              .Case("android", "Android")
2115              .Case("fuchsia", "Fuchsia")
2116              .Case("ios", "iOS")
2117              .Case("macos", "macOS")
2118              .Case("tvos", "tvOS")
2119              .Case("watchos", "watchOS")
2120              .Case("driverkit", "DriverKit")
2121              .Case("ios_app_extension", "iOS (App Extension)")
2122              .Case("macos_app_extension", "macOS (App Extension)")
2123              .Case("tvos_app_extension", "tvOS (App Extension)")
2124              .Case("watchos_app_extension", "watchOS (App Extension)")
2125              .Case("maccatalyst", "macCatalyst")
2126              .Case("maccatalyst_app_extension", "macCatalyst (App Extension)")
2127              .Case("xros", "visionOS")
2128              .Case("xros_app_extension", "visionOS (App Extension)")
2129              .Case("swift", "Swift")
2130              .Case("shadermodel", "Shader Model")
2131              .Case("ohos", "OpenHarmony OS")
2132              .Default(llvm::StringRef());
2133 }
2134 static llvm::StringRef getPlatformNameSourceSpelling(llvm::StringRef Platform) {
2135     return llvm::StringSwitch<llvm::StringRef>(Platform)
2136              .Case("ios", "iOS")
2137              .Case("macos", "macOS")
2138              .Case("tvos", "tvOS")
2139              .Case("watchos", "watchOS")
2140              .Case("ios_app_extension", "iOSApplicationExtension")
2141              .Case("macos_app_extension", "macOSApplicationExtension")
2142              .Case("tvos_app_extension", "tvOSApplicationExtension")
2143              .Case("watchos_app_extension", "watchOSApplicationExtension")
2144              .Case("maccatalyst", "macCatalyst")
2145              .Case("maccatalyst_app_extension", "macCatalystApplicationExtension")
2146              .Case("xros", "visionOS")
2147              .Case("xros_app_extension", "visionOSApplicationExtension")
2148              .Case("zos", "z/OS")
2149              .Case("shadermodel", "ShaderModel")
2150              .Default(Platform);
2151 }
2152 static llvm::StringRef canonicalizePlatformName(llvm::StringRef Platform) {
2153     return llvm::StringSwitch<llvm::StringRef>(Platform)
2154              .Case("iOS", "ios")
2155              .Case("macOS", "macos")
2156              .Case("tvOS", "tvos")
2157              .Case("watchOS", "watchos")
2158              .Case("iOSApplicationExtension", "ios_app_extension")
2159              .Case("macOSApplicationExtension", "macos_app_extension")
2160              .Case("tvOSApplicationExtension", "tvos_app_extension")
2161              .Case("watchOSApplicationExtension", "watchos_app_extension")
2162              .Case("macCatalyst", "maccatalyst")
2163              .Case("macCatalystApplicationExtension", "maccatalyst_app_extension")
2164              .Case("visionOS", "xros")
2165              .Case("visionOSApplicationExtension", "xros_app_extension")
2166              .Case("visionos", "xros")
2167              .Case("visionos_app_extension", "xros_app_extension")
2168              .Case("ShaderModel", "shadermodel")
2169              .Default(Platform);
2170 }
2171 static std::vector<llvm::StringRef> equivalentPlatformNames(llvm::StringRef Platform) {
2172     return llvm::StringSwitch<std::vector<llvm::StringRef>>(Platform)
2173              .Case("ios", {"ios", "iOS"})
2174              .Case("iOS", {"ios", "iOS"})
2175              .Case("macos", {"macos", "macOS"})
2176              .Case("macOS", {"macos", "macOS"})
2177              .Case("tvos", {"tvos", "tvOS"})
2178              .Case("tvOS", {"tvos", "tvOS"})
2179              .Case("watchos", {"watchos", "watchOS"})
2180              .Case("watchOS", {"watchos", "watchOS"})
2181              .Case("ios_app_extension", {"iOSApplicationExtension", "ios_app_extension"})
2182              .Case("iOSApplicationExtension", {"iOSApplicationExtension", "ios_app_extension"})
2183              .Case("macos_app_extension", {"macOSApplicationExtension", "macos_app_extension"})
2184              .Case("macOSApplicationExtension", {"macOSApplicationExtension", "macos_app_extension"})
2185              .Case("tvos_app_extension", {"tvOSApplicationExtension", "tvos_app_extension"})
2186              .Case("tvOSApplicationExtension", {"tvOSApplicationExtension", "tvos_app_extension"})
2187              .Case("watchos_app_extension", {"watchOSApplicationExtension", "watchos_app_extension"})
2188              .Case("watchOSApplicationExtension", {"watchOSApplicationExtension", "watchos_app_extension"})
2189              .Case("maccatalyst", {"macCatalyst", "maccatalyst"})
2190              .Case("macCatalyst", {"macCatalyst", "maccatalyst"})
2191              .Case("maccatalyst_app_extension", {"macCatalystApplicationExtension", "maccatalyst_app_extension"})
2192              .Case("macCatalystApplicationExtension", {"macCatalystApplicationExtension", "maccatalyst_app_extension"})
2193              .Case("xros", {"visionos", "visionOS", "xros"})
2194              .Case("visionOS", {"visionos", "visionOS", "xros"})
2195              .Case("visionos", {"visionos", "visionOS", "xros"})
2196              .Case("xros_app_extension", {"visionOSApplicationExtension", "visionos_app_extension", "xros_app_extension"})
2197              .Case("visionOSApplicationExtension", {"visionOSApplicationExtension", "visionos_app_extension", "xros_app_extension"})
2198              .Case("visionos_app_extension", {"visionOSApplicationExtension", "visionos_app_extension", "xros_app_extension"})
2199              .Default({Platform});
2200 }
2201 static llvm::Triple::EnvironmentType getEnvironmentType(llvm::StringRef Environment) {
2202     return llvm::StringSwitch<llvm::Triple::EnvironmentType>(Environment)
2203              .Case("pixel", llvm::Triple::Pixel)
2204              .Case("vertex", llvm::Triple::Vertex)
2205              .Case("geometry", llvm::Triple::Geometry)
2206              .Case("hull", llvm::Triple::Hull)
2207              .Case("domain", llvm::Triple::Domain)
2208              .Case("compute", llvm::Triple::Compute)
2209              .Case("raygeneration", llvm::Triple::RayGeneration)
2210              .Case("intersection", llvm::Triple::Intersection)
2211              .Case("anyhit", llvm::Triple::AnyHit)
2212              .Case("closesthit", llvm::Triple::ClosestHit)
2213              .Case("miss", llvm::Triple::Miss)
2214              .Case("callable", llvm::Triple::Callable)
2215              .Case("mesh", llvm::Triple::Mesh)
2216              .Case("amplification", llvm::Triple::Amplification)
2217              .Case("library", llvm::Triple::Library)
2218              .Default(llvm::Triple::UnknownEnvironment);
2219 }
2220 
2221 
2222   static bool classof(const Attr *A) { return A->getKind() == attr::Availability; }
2223 };
2224 
2225 class CLANG_ABI AvailableOnlyInDefaultEvalMethodAttr : public InheritableAttr {
2226 public:
2227   enum Spelling {
2228     GNU_available_only_in_default_eval_method = 0,
2229     CXX11_clang_available_only_in_default_eval_method = 1,
2230     C23_clang_available_only_in_default_eval_method = 2,
2231   SpellingNotCalculated = 15
2232 
2233   };
2234 
2235   // Factory methods
2236   static AvailableOnlyInDefaultEvalMethodAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
2237   static AvailableOnlyInDefaultEvalMethodAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
2238   static AvailableOnlyInDefaultEvalMethodAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_available_only_in_default_eval_method);
2239   static AvailableOnlyInDefaultEvalMethodAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_available_only_in_default_eval_method);
2240 
2241   // Constructors
2242   AvailableOnlyInDefaultEvalMethodAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
2243              );
2244 
2245   AvailableOnlyInDefaultEvalMethodAttr *clone(ASTContext &C) const;
2246   void printPretty(raw_ostream &OS,
2247                    const PrintingPolicy &Policy) const;
2248   const char *getSpelling() const;
2249 
2250 
2251   static bool classof(const Attr *A) { return A->getKind() == attr::AvailableOnlyInDefaultEvalMethod; }
2252 };
2253 
2254 class CLANG_ABI BPFFastCallAttr : public InheritableAttr {
2255 public:
2256   enum Spelling {
2257     GNU_bpf_fastcall = 0,
2258     CXX11_clang_bpf_fastcall = 1,
2259     C23_clang_bpf_fastcall = 2,
2260   SpellingNotCalculated = 15
2261 
2262   };
2263 
2264   // Factory methods
2265   static BPFFastCallAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
2266   static BPFFastCallAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
2267   static BPFFastCallAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_bpf_fastcall);
2268   static BPFFastCallAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_bpf_fastcall);
2269 
2270   // Constructors
2271   BPFFastCallAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
2272              );
2273 
2274   BPFFastCallAttr *clone(ASTContext &C) const;
2275   void printPretty(raw_ostream &OS,
2276                    const PrintingPolicy &Policy) const;
2277   const char *getSpelling() const;
2278 
2279 
2280   static bool classof(const Attr *A) { return A->getKind() == attr::BPFFastCall; }
2281 };
2282 
2283 class CLANG_ABI BPFPreserveAccessIndexAttr : public InheritableAttr {
2284 public:
2285   enum Spelling {
2286     GNU_preserve_access_index = 0,
2287     CXX11_clang_preserve_access_index = 1,
2288     C23_clang_preserve_access_index = 2,
2289   SpellingNotCalculated = 15
2290 
2291   };
2292 
2293   // Factory methods
2294   static BPFPreserveAccessIndexAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
2295   static BPFPreserveAccessIndexAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
2296   static BPFPreserveAccessIndexAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_preserve_access_index);
2297   static BPFPreserveAccessIndexAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_preserve_access_index);
2298 
2299   // Constructors
2300   BPFPreserveAccessIndexAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
2301              );
2302 
2303   BPFPreserveAccessIndexAttr *clone(ASTContext &C) const;
2304   void printPretty(raw_ostream &OS,
2305                    const PrintingPolicy &Policy) const;
2306   const char *getSpelling() const;
2307 
2308 
2309   static bool classof(const Attr *A) { return A->getKind() == attr::BPFPreserveAccessIndex; }
2310 };
2311 
2312 class CLANG_ABI BPFPreserveStaticOffsetAttr : public InheritableAttr {
2313 public:
2314   enum Spelling {
2315     GNU_preserve_static_offset = 0,
2316     CXX11_clang_preserve_static_offset = 1,
2317     C23_clang_preserve_static_offset = 2,
2318   SpellingNotCalculated = 15
2319 
2320   };
2321 
2322   // Factory methods
2323   static BPFPreserveStaticOffsetAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
2324   static BPFPreserveStaticOffsetAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
2325   static BPFPreserveStaticOffsetAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_preserve_static_offset);
2326   static BPFPreserveStaticOffsetAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_preserve_static_offset);
2327 
2328   // Constructors
2329   BPFPreserveStaticOffsetAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
2330              );
2331 
2332   BPFPreserveStaticOffsetAttr *clone(ASTContext &C) const;
2333   void printPretty(raw_ostream &OS,
2334                    const PrintingPolicy &Policy) const;
2335   const char *getSpelling() const;
2336 
2337 
2338   static bool classof(const Attr *A) { return A->getKind() == attr::BPFPreserveStaticOffset; }
2339 };
2340 
2341 class CLANG_ABI BTFDeclTagAttr : public InheritableAttr {
2342 unsigned bTFDeclTagLength;
2343 char *bTFDeclTag;
2344 
2345 public:
2346   enum Spelling {
2347     GNU_btf_decl_tag = 0,
2348     CXX11_clang_btf_decl_tag = 1,
2349     C23_clang_btf_decl_tag = 2,
2350   SpellingNotCalculated = 15
2351 
2352   };
2353 
2354   // Factory methods
2355   static BTFDeclTagAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef BTFDeclTag, const AttributeCommonInfo &CommonInfo);
2356   static BTFDeclTagAttr *Create(ASTContext &Ctx, llvm::StringRef BTFDeclTag, const AttributeCommonInfo &CommonInfo);
2357   static BTFDeclTagAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef BTFDeclTag, SourceRange Range = {}, Spelling S = GNU_btf_decl_tag);
2358   static BTFDeclTagAttr *Create(ASTContext &Ctx, llvm::StringRef BTFDeclTag, SourceRange Range = {}, Spelling S = GNU_btf_decl_tag);
2359 
2360   // Constructors
2361   BTFDeclTagAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
2362               , llvm::StringRef BTFDeclTag
2363              );
2364 
2365   BTFDeclTagAttr *clone(ASTContext &C) const;
2366   void printPretty(raw_ostream &OS,
2367                    const PrintingPolicy &Policy) const;
2368   const char *getSpelling() const;
2369   llvm::StringRef getBTFDeclTag() const {
2370     return llvm::StringRef(bTFDeclTag, bTFDeclTagLength);
2371   }
2372   unsigned getBTFDeclTagLength() const {
2373     return bTFDeclTagLength;
2374   }
2375   void setBTFDeclTag(ASTContext &C, llvm::StringRef S) {
2376     bTFDeclTagLength = S.size();
2377     this->bTFDeclTag = new (C, 1) char [bTFDeclTagLength];
2378     if (!S.empty())
2379       std::memcpy(this->bTFDeclTag, S.data(), bTFDeclTagLength);
2380   }
2381 
2382 
2383 
2384   static bool classof(const Attr *A) { return A->getKind() == attr::BTFDeclTag; }
2385 };
2386 
2387 class CLANG_ABI BTFTypeTagAttr : public TypeAttr {
2388 unsigned bTFTypeTagLength;
2389 char *bTFTypeTag;
2390 
2391 public:
2392   enum Spelling {
2393     GNU_btf_type_tag = 0,
2394     CXX11_clang_btf_type_tag = 1,
2395     C23_clang_btf_type_tag = 2,
2396   SpellingNotCalculated = 15
2397 
2398   };
2399 
2400   // Factory methods
2401   static BTFTypeTagAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef BTFTypeTag, const AttributeCommonInfo &CommonInfo);
2402   static BTFTypeTagAttr *Create(ASTContext &Ctx, llvm::StringRef BTFTypeTag, const AttributeCommonInfo &CommonInfo);
2403   static BTFTypeTagAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef BTFTypeTag, SourceRange Range = {}, Spelling S = GNU_btf_type_tag);
2404   static BTFTypeTagAttr *Create(ASTContext &Ctx, llvm::StringRef BTFTypeTag, SourceRange Range = {}, Spelling S = GNU_btf_type_tag);
2405 
2406   // Constructors
2407   BTFTypeTagAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
2408               , llvm::StringRef BTFTypeTag
2409              );
2410 
2411   BTFTypeTagAttr *clone(ASTContext &C) const;
2412   void printPretty(raw_ostream &OS,
2413                    const PrintingPolicy &Policy) const;
2414   const char *getSpelling() const;
2415   llvm::StringRef getBTFTypeTag() const {
2416     return llvm::StringRef(bTFTypeTag, bTFTypeTagLength);
2417   }
2418   unsigned getBTFTypeTagLength() const {
2419     return bTFTypeTagLength;
2420   }
2421   void setBTFTypeTag(ASTContext &C, llvm::StringRef S) {
2422     bTFTypeTagLength = S.size();
2423     this->bTFTypeTag = new (C, 1) char [bTFTypeTagLength];
2424     if (!S.empty())
2425       std::memcpy(this->bTFTypeTag, S.data(), bTFTypeTagLength);
2426   }
2427 
2428 
2429 
2430   static bool classof(const Attr *A) { return A->getKind() == attr::BTFTypeTag; }
2431 };
2432 
2433 class CLANG_ABI BlockingAttr : public TypeAttr {
2434 public:
2435   enum Spelling {
2436     GNU_blocking = 0,
2437     CXX11_clang_blocking = 1,
2438     C23_clang_blocking = 2,
2439   SpellingNotCalculated = 15
2440 
2441   };
2442 
2443   // Factory methods
2444   static BlockingAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
2445   static BlockingAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
2446   static BlockingAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_blocking);
2447   static BlockingAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_blocking);
2448 
2449   // Constructors
2450   BlockingAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
2451              );
2452 
2453   BlockingAttr *clone(ASTContext &C) const;
2454   void printPretty(raw_ostream &OS,
2455                    const PrintingPolicy &Policy) const;
2456   const char *getSpelling() const;
2457 
2458 
2459   static bool classof(const Attr *A) { return A->getKind() == attr::Blocking; }
2460 };
2461 
2462 class CLANG_ABI BlocksAttr : public InheritableAttr {
2463 public:
2464   enum BlockType {
2465     ByRef
2466   };
2467 private:
2468   BlocksAttr::BlockType type;
2469 
2470 public:
2471   enum Spelling {
2472     GNU_blocks = 0,
2473     CXX11_clang_blocks = 1,
2474     C23_clang_blocks = 2,
2475   SpellingNotCalculated = 15
2476 
2477   };
2478 
2479   // Factory methods
2480   static BlocksAttr *CreateImplicit(ASTContext &Ctx, BlocksAttr::BlockType Type, const AttributeCommonInfo &CommonInfo);
2481   static BlocksAttr *Create(ASTContext &Ctx, BlocksAttr::BlockType Type, const AttributeCommonInfo &CommonInfo);
2482   static BlocksAttr *CreateImplicit(ASTContext &Ctx, BlocksAttr::BlockType Type, SourceRange Range = {}, Spelling S = GNU_blocks);
2483   static BlocksAttr *Create(ASTContext &Ctx, BlocksAttr::BlockType Type, SourceRange Range = {}, Spelling S = GNU_blocks);
2484 
2485   // Constructors
2486   BlocksAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
2487               , BlocksAttr::BlockType Type
2488              );
2489 
2490   BlocksAttr *clone(ASTContext &C) const;
2491   void printPretty(raw_ostream &OS,
2492                    const PrintingPolicy &Policy) const;
2493   const char *getSpelling() const;
2494   BlocksAttr::BlockType getType() const {
2495     return type;
2496   }
2497 
2498   static bool ConvertStrToBlockType(StringRef Val, BlocksAttr::BlockType &Out);
2499   static const char *ConvertBlockTypeToStr(BlocksAttr::BlockType Val);
2500 
2501 
2502   static bool classof(const Attr *A) { return A->getKind() == attr::Blocks; }
2503 };
2504 
2505 class CLANG_ABI BuiltinAttr : public InheritableAttr {
2506 unsigned iD;
2507 
2508 public:
2509   // Factory methods
2510   static BuiltinAttr *CreateImplicit(ASTContext &Ctx, unsigned ID, const AttributeCommonInfo &CommonInfo);
2511   static BuiltinAttr *Create(ASTContext &Ctx, unsigned ID, const AttributeCommonInfo &CommonInfo);
2512   static BuiltinAttr *CreateImplicit(ASTContext &Ctx, unsigned ID, SourceRange Range = {});
2513   static BuiltinAttr *Create(ASTContext &Ctx, unsigned ID, SourceRange Range = {});
2514 
2515   // Constructors
2516   BuiltinAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
2517               , unsigned ID
2518              );
2519 
2520   BuiltinAttr *clone(ASTContext &C) const;
2521   void printPretty(raw_ostream &OS,
2522                    const PrintingPolicy &Policy) const;
2523   const char *getSpelling() const;
2524   unsigned getID() const {
2525     return iD;
2526   }
2527 
2528 
2529 
2530   static bool classof(const Attr *A) { return A->getKind() == attr::Builtin; }
2531 };
2532 
2533 class CLANG_ABI BuiltinAliasAttr : public Attr {
2534 IdentifierInfo * builtinName;
2535 
2536 public:
2537   enum Spelling {
2538     CXX11_clang_builtin_alias = 0,
2539     C23_clang_builtin_alias = 1,
2540     GNU_clang_builtin_alias = 2,
2541   SpellingNotCalculated = 15
2542 
2543   };
2544 
2545   // Factory methods
2546   static BuiltinAliasAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * BuiltinName, const AttributeCommonInfo &CommonInfo);
2547   static BuiltinAliasAttr *Create(ASTContext &Ctx, IdentifierInfo * BuiltinName, const AttributeCommonInfo &CommonInfo);
2548   static BuiltinAliasAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * BuiltinName, SourceRange Range = {}, Spelling S = CXX11_clang_builtin_alias);
2549   static BuiltinAliasAttr *Create(ASTContext &Ctx, IdentifierInfo * BuiltinName, SourceRange Range = {}, Spelling S = CXX11_clang_builtin_alias);
2550 
2551   // Constructors
2552   BuiltinAliasAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
2553               , IdentifierInfo * BuiltinName
2554              );
2555 
2556   BuiltinAliasAttr *clone(ASTContext &C) const;
2557   void printPretty(raw_ostream &OS,
2558                    const PrintingPolicy &Policy) const;
2559   const char *getSpelling() const;
2560   Spelling getSemanticSpelling() const;
2561   IdentifierInfo * getBuiltinName() const {
2562     return builtinName;
2563   }
2564 
2565 
2566 
2567   static bool classof(const Attr *A) { return A->getKind() == attr::BuiltinAlias; }
2568 };
2569 
2570 class CLANG_ABI C11NoReturnAttr : public InheritableAttr {
2571 public:
2572   // Factory methods
2573   static C11NoReturnAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
2574   static C11NoReturnAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
2575   static C11NoReturnAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
2576   static C11NoReturnAttr *Create(ASTContext &Ctx, SourceRange Range = {});
2577 
2578   // Constructors
2579   C11NoReturnAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
2580              );
2581 
2582   C11NoReturnAttr *clone(ASTContext &C) const;
2583   void printPretty(raw_ostream &OS,
2584                    const PrintingPolicy &Policy) const;
2585   const char *getSpelling() const;
2586 
2587 
2588   static bool classof(const Attr *A) { return A->getKind() == attr::C11NoReturn; }
2589 };
2590 
2591 class CLANG_ABI CDeclAttr : public InheritableAttr {
2592 public:
2593   enum Spelling {
2594     GNU_cdecl = 0,
2595     CXX11_gnu_cdecl = 1,
2596     C23_gnu_cdecl = 2,
2597     Keyword_cdecl = 3,
2598   SpellingNotCalculated = 15
2599 
2600   };
2601 
2602   // Factory methods
2603   static CDeclAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
2604   static CDeclAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
2605   static CDeclAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_cdecl);
2606   static CDeclAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_cdecl);
2607 
2608   // Constructors
2609   CDeclAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
2610              );
2611 
2612   CDeclAttr *clone(ASTContext &C) const;
2613   void printPretty(raw_ostream &OS,
2614                    const PrintingPolicy &Policy) const;
2615   const char *getSpelling() const;
2616 
2617 
2618   static bool classof(const Attr *A) { return A->getKind() == attr::CDecl; }
2619 };
2620 
2621 class CLANG_ABI CFAuditedTransferAttr : public InheritableAttr {
2622 public:
2623   enum Spelling {
2624     GNU_cf_audited_transfer = 0,
2625     CXX11_clang_cf_audited_transfer = 1,
2626     C23_clang_cf_audited_transfer = 2,
2627   SpellingNotCalculated = 15
2628 
2629   };
2630 
2631   // Factory methods
2632   static CFAuditedTransferAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
2633   static CFAuditedTransferAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
2634   static CFAuditedTransferAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_cf_audited_transfer);
2635   static CFAuditedTransferAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_cf_audited_transfer);
2636 
2637   // Constructors
2638   CFAuditedTransferAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
2639              );
2640 
2641   CFAuditedTransferAttr *clone(ASTContext &C) const;
2642   void printPretty(raw_ostream &OS,
2643                    const PrintingPolicy &Policy) const;
2644   const char *getSpelling() const;
2645 
2646 
2647   static bool classof(const Attr *A) { return A->getKind() == attr::CFAuditedTransfer; }
2648 };
2649 
2650 class CLANG_ABI CFConsumedAttr : public InheritableParamAttr {
2651 public:
2652   enum Spelling {
2653     GNU_cf_consumed = 0,
2654     CXX11_clang_cf_consumed = 1,
2655     C23_clang_cf_consumed = 2,
2656   SpellingNotCalculated = 15
2657 
2658   };
2659 
2660   // Factory methods
2661   static CFConsumedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
2662   static CFConsumedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
2663   static CFConsumedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_cf_consumed);
2664   static CFConsumedAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_cf_consumed);
2665 
2666   // Constructors
2667   CFConsumedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
2668              );
2669 
2670   CFConsumedAttr *clone(ASTContext &C) const;
2671   void printPretty(raw_ostream &OS,
2672                    const PrintingPolicy &Policy) const;
2673   const char *getSpelling() const;
2674 
2675 
2676   static bool classof(const Attr *A) { return A->getKind() == attr::CFConsumed; }
2677 };
2678 
2679 class CLANG_ABI CFGuardAttr : public InheritableAttr {
2680 public:
2681   enum GuardArg {
2682     nocf
2683   };
2684 private:
2685   CFGuardAttr::GuardArg guard;
2686 
2687 public:
2688   enum Spelling {
2689     Declspec_guard = 0,
2690     GNU_guard = 1,
2691     CXX11_clang_guard = 2,
2692     C23_clang_guard = 3,
2693   SpellingNotCalculated = 15
2694 
2695   };
2696 
2697   // Factory methods
2698   static CFGuardAttr *CreateImplicit(ASTContext &Ctx, CFGuardAttr::GuardArg Guard, const AttributeCommonInfo &CommonInfo);
2699   static CFGuardAttr *Create(ASTContext &Ctx, CFGuardAttr::GuardArg Guard, const AttributeCommonInfo &CommonInfo);
2700   static CFGuardAttr *CreateImplicit(ASTContext &Ctx, CFGuardAttr::GuardArg Guard, SourceRange Range = {}, Spelling S = Declspec_guard);
2701   static CFGuardAttr *Create(ASTContext &Ctx, CFGuardAttr::GuardArg Guard, SourceRange Range = {}, Spelling S = Declspec_guard);
2702 
2703   // Constructors
2704   CFGuardAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
2705               , CFGuardAttr::GuardArg Guard
2706              );
2707 
2708   CFGuardAttr *clone(ASTContext &C) const;
2709   void printPretty(raw_ostream &OS,
2710                    const PrintingPolicy &Policy) const;
2711   const char *getSpelling() const;
2712   CFGuardAttr::GuardArg getGuard() const {
2713     return guard;
2714   }
2715 
2716   static bool ConvertStrToGuardArg(StringRef Val, CFGuardAttr::GuardArg &Out);
2717   static const char *ConvertGuardArgToStr(CFGuardAttr::GuardArg Val);
2718 
2719 
2720   static bool classof(const Attr *A) { return A->getKind() == attr::CFGuard; }
2721 };
2722 
2723 class CLANG_ABI CFICanonicalJumpTableAttr : public InheritableAttr {
2724 public:
2725   enum Spelling {
2726     GNU_cfi_canonical_jump_table = 0,
2727     CXX11_clang_cfi_canonical_jump_table = 1,
2728     C23_clang_cfi_canonical_jump_table = 2,
2729   SpellingNotCalculated = 15
2730 
2731   };
2732 
2733   // Factory methods
2734   static CFICanonicalJumpTableAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
2735   static CFICanonicalJumpTableAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
2736   static CFICanonicalJumpTableAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_cfi_canonical_jump_table);
2737   static CFICanonicalJumpTableAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_cfi_canonical_jump_table);
2738 
2739   // Constructors
2740   CFICanonicalJumpTableAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
2741              );
2742 
2743   CFICanonicalJumpTableAttr *clone(ASTContext &C) const;
2744   void printPretty(raw_ostream &OS,
2745                    const PrintingPolicy &Policy) const;
2746   const char *getSpelling() const;
2747 
2748 
2749   static bool classof(const Attr *A) { return A->getKind() == attr::CFICanonicalJumpTable; }
2750 };
2751 
2752 class CLANG_ABI CFReturnsNotRetainedAttr : public InheritableAttr {
2753 public:
2754   enum Spelling {
2755     GNU_cf_returns_not_retained = 0,
2756     CXX11_clang_cf_returns_not_retained = 1,
2757     C23_clang_cf_returns_not_retained = 2,
2758   SpellingNotCalculated = 15
2759 
2760   };
2761 
2762   // Factory methods
2763   static CFReturnsNotRetainedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
2764   static CFReturnsNotRetainedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
2765   static CFReturnsNotRetainedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_cf_returns_not_retained);
2766   static CFReturnsNotRetainedAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_cf_returns_not_retained);
2767 
2768   // Constructors
2769   CFReturnsNotRetainedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
2770              );
2771 
2772   CFReturnsNotRetainedAttr *clone(ASTContext &C) const;
2773   void printPretty(raw_ostream &OS,
2774                    const PrintingPolicy &Policy) const;
2775   const char *getSpelling() const;
2776 
2777 
2778   static bool classof(const Attr *A) { return A->getKind() == attr::CFReturnsNotRetained; }
2779 };
2780 
2781 class CLANG_ABI CFReturnsRetainedAttr : public InheritableAttr {
2782 public:
2783   enum Spelling {
2784     GNU_cf_returns_retained = 0,
2785     CXX11_clang_cf_returns_retained = 1,
2786     C23_clang_cf_returns_retained = 2,
2787   SpellingNotCalculated = 15
2788 
2789   };
2790 
2791   // Factory methods
2792   static CFReturnsRetainedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
2793   static CFReturnsRetainedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
2794   static CFReturnsRetainedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_cf_returns_retained);
2795   static CFReturnsRetainedAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_cf_returns_retained);
2796 
2797   // Constructors
2798   CFReturnsRetainedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
2799              );
2800 
2801   CFReturnsRetainedAttr *clone(ASTContext &C) const;
2802   void printPretty(raw_ostream &OS,
2803                    const PrintingPolicy &Policy) const;
2804   const char *getSpelling() const;
2805 
2806 
2807   static bool classof(const Attr *A) { return A->getKind() == attr::CFReturnsRetained; }
2808 };
2809 
2810 class CLANG_ABI CFUnknownTransferAttr : public InheritableAttr {
2811 public:
2812   enum Spelling {
2813     GNU_cf_unknown_transfer = 0,
2814     CXX11_clang_cf_unknown_transfer = 1,
2815     C23_clang_cf_unknown_transfer = 2,
2816   SpellingNotCalculated = 15
2817 
2818   };
2819 
2820   // Factory methods
2821   static CFUnknownTransferAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
2822   static CFUnknownTransferAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
2823   static CFUnknownTransferAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_cf_unknown_transfer);
2824   static CFUnknownTransferAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_cf_unknown_transfer);
2825 
2826   // Constructors
2827   CFUnknownTransferAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
2828              );
2829 
2830   CFUnknownTransferAttr *clone(ASTContext &C) const;
2831   void printPretty(raw_ostream &OS,
2832                    const PrintingPolicy &Policy) const;
2833   const char *getSpelling() const;
2834 
2835 
2836   static bool classof(const Attr *A) { return A->getKind() == attr::CFUnknownTransfer; }
2837 };
2838 
2839 class CLANG_ABI CPUDispatchAttr : public InheritableAttr {
2840   unsigned cpus_Size;
2841   IdentifierInfo * *cpus_;
2842 
2843 public:
2844   enum Spelling {
2845     GNU_cpu_dispatch = 0,
2846     CXX11_clang_cpu_dispatch = 1,
2847     C23_clang_cpu_dispatch = 2,
2848     Declspec_cpu_dispatch = 3,
2849   SpellingNotCalculated = 15
2850 
2851   };
2852 
2853   // Factory methods
2854   static CPUDispatchAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * *Cpus, unsigned CpusSize, const AttributeCommonInfo &CommonInfo);
2855   static CPUDispatchAttr *Create(ASTContext &Ctx, IdentifierInfo * *Cpus, unsigned CpusSize, const AttributeCommonInfo &CommonInfo);
2856   static CPUDispatchAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * *Cpus, unsigned CpusSize, SourceRange Range = {}, Spelling S = GNU_cpu_dispatch);
2857   static CPUDispatchAttr *Create(ASTContext &Ctx, IdentifierInfo * *Cpus, unsigned CpusSize, SourceRange Range = {}, Spelling S = GNU_cpu_dispatch);
2858 
2859   // Constructors
2860   CPUDispatchAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
2861               , IdentifierInfo * *Cpus, unsigned CpusSize
2862              );
2863   CPUDispatchAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
2864              );
2865 
2866   CPUDispatchAttr *clone(ASTContext &C) const;
2867   void printPretty(raw_ostream &OS,
2868                    const PrintingPolicy &Policy) const;
2869   const char *getSpelling() const;
2870   typedef IdentifierInfo ** cpus_iterator;
2871   cpus_iterator cpus_begin() const { return cpus_; }
2872   cpus_iterator cpus_end() const { return cpus_ + cpus_Size; }
2873   unsigned cpus_size() const { return cpus_Size; }
2874   llvm::iterator_range<cpus_iterator> cpus() const { return llvm::make_range(cpus_begin(), cpus_end()); }
2875 
2876 
2877 
2878 
2879   static bool classof(const Attr *A) { return A->getKind() == attr::CPUDispatch; }
2880 };
2881 
2882 class CLANG_ABI CPUSpecificAttr : public InheritableAttr {
2883   unsigned cpus_Size;
2884   IdentifierInfo * *cpus_;
2885 
2886 public:
2887   enum Spelling {
2888     GNU_cpu_specific = 0,
2889     CXX11_clang_cpu_specific = 1,
2890     C23_clang_cpu_specific = 2,
2891     Declspec_cpu_specific = 3,
2892   SpellingNotCalculated = 15
2893 
2894   };
2895 
2896   // Factory methods
2897   static CPUSpecificAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * *Cpus, unsigned CpusSize, const AttributeCommonInfo &CommonInfo);
2898   static CPUSpecificAttr *Create(ASTContext &Ctx, IdentifierInfo * *Cpus, unsigned CpusSize, const AttributeCommonInfo &CommonInfo);
2899   static CPUSpecificAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * *Cpus, unsigned CpusSize, SourceRange Range = {}, Spelling S = GNU_cpu_specific);
2900   static CPUSpecificAttr *Create(ASTContext &Ctx, IdentifierInfo * *Cpus, unsigned CpusSize, SourceRange Range = {}, Spelling S = GNU_cpu_specific);
2901 
2902   // Constructors
2903   CPUSpecificAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
2904               , IdentifierInfo * *Cpus, unsigned CpusSize
2905              );
2906   CPUSpecificAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
2907              );
2908 
2909   CPUSpecificAttr *clone(ASTContext &C) const;
2910   void printPretty(raw_ostream &OS,
2911                    const PrintingPolicy &Policy) const;
2912   const char *getSpelling() const;
2913   typedef IdentifierInfo ** cpus_iterator;
2914   cpus_iterator cpus_begin() const { return cpus_; }
2915   cpus_iterator cpus_end() const { return cpus_ + cpus_Size; }
2916   unsigned cpus_size() const { return cpus_Size; }
2917   llvm::iterator_range<cpus_iterator> cpus() const { return llvm::make_range(cpus_begin(), cpus_end()); }
2918 
2919 
2920 
2921     IdentifierInfo *getCPUName(unsigned Index) const {
2922       return *(cpus_begin() + Index);
2923     }
2924   
2925 
2926   static bool classof(const Attr *A) { return A->getKind() == attr::CPUSpecific; }
2927 };
2928 
2929 class CLANG_ABI CUDAConstantAttr : public InheritableAttr {
2930 public:
2931   enum Spelling {
2932     GNU_constant = 0,
2933     Declspec_constant = 1,
2934   SpellingNotCalculated = 15
2935 
2936   };
2937 
2938   // Factory methods
2939   static CUDAConstantAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
2940   static CUDAConstantAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
2941   static CUDAConstantAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_constant);
2942   static CUDAConstantAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_constant);
2943 
2944   // Constructors
2945   CUDAConstantAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
2946              );
2947 
2948   CUDAConstantAttr *clone(ASTContext &C) const;
2949   void printPretty(raw_ostream &OS,
2950                    const PrintingPolicy &Policy) const;
2951   const char *getSpelling() const;
2952 
2953 
2954   static bool classof(const Attr *A) { return A->getKind() == attr::CUDAConstant; }
2955 };
2956 
2957 class CLANG_ABI CUDADeviceAttr : public InheritableAttr {
2958 public:
2959   enum Spelling {
2960     GNU_device = 0,
2961     Declspec_device = 1,
2962   SpellingNotCalculated = 15
2963 
2964   };
2965 
2966   // Factory methods
2967   static CUDADeviceAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
2968   static CUDADeviceAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
2969   static CUDADeviceAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_device);
2970   static CUDADeviceAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_device);
2971 
2972   // Constructors
2973   CUDADeviceAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
2974              );
2975 
2976   CUDADeviceAttr *clone(ASTContext &C) const;
2977   void printPretty(raw_ostream &OS,
2978                    const PrintingPolicy &Policy) const;
2979   const char *getSpelling() const;
2980 
2981 
2982   static bool classof(const Attr *A) { return A->getKind() == attr::CUDADevice; }
2983 };
2984 
2985 class CLANG_ABI CUDADeviceBuiltinSurfaceTypeAttr : public InheritableAttr {
2986 public:
2987   enum Spelling {
2988     GNU_device_builtin_surface_type = 0,
2989     Declspec_device_builtin_surface_type = 1,
2990   SpellingNotCalculated = 15
2991 
2992   };
2993 
2994   // Factory methods
2995   static CUDADeviceBuiltinSurfaceTypeAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
2996   static CUDADeviceBuiltinSurfaceTypeAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
2997   static CUDADeviceBuiltinSurfaceTypeAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_device_builtin_surface_type);
2998   static CUDADeviceBuiltinSurfaceTypeAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_device_builtin_surface_type);
2999 
3000   // Constructors
3001   CUDADeviceBuiltinSurfaceTypeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3002              );
3003 
3004   CUDADeviceBuiltinSurfaceTypeAttr *clone(ASTContext &C) const;
3005   void printPretty(raw_ostream &OS,
3006                    const PrintingPolicy &Policy) const;
3007   const char *getSpelling() const;
3008 
3009 
3010   static bool classof(const Attr *A) { return A->getKind() == attr::CUDADeviceBuiltinSurfaceType; }
3011 };
3012 
3013 class CLANG_ABI CUDADeviceBuiltinTextureTypeAttr : public InheritableAttr {
3014 public:
3015   enum Spelling {
3016     GNU_device_builtin_texture_type = 0,
3017     Declspec_device_builtin_texture_type = 1,
3018   SpellingNotCalculated = 15
3019 
3020   };
3021 
3022   // Factory methods
3023   static CUDADeviceBuiltinTextureTypeAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3024   static CUDADeviceBuiltinTextureTypeAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3025   static CUDADeviceBuiltinTextureTypeAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_device_builtin_texture_type);
3026   static CUDADeviceBuiltinTextureTypeAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_device_builtin_texture_type);
3027 
3028   // Constructors
3029   CUDADeviceBuiltinTextureTypeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3030              );
3031 
3032   CUDADeviceBuiltinTextureTypeAttr *clone(ASTContext &C) const;
3033   void printPretty(raw_ostream &OS,
3034                    const PrintingPolicy &Policy) const;
3035   const char *getSpelling() const;
3036 
3037 
3038   static bool classof(const Attr *A) { return A->getKind() == attr::CUDADeviceBuiltinTextureType; }
3039 };
3040 
3041 class CLANG_ABI CUDAGlobalAttr : public InheritableAttr {
3042 public:
3043   enum Spelling {
3044     GNU_global = 0,
3045     Declspec_global = 1,
3046   SpellingNotCalculated = 15
3047 
3048   };
3049 
3050   // Factory methods
3051   static CUDAGlobalAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3052   static CUDAGlobalAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3053   static CUDAGlobalAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_global);
3054   static CUDAGlobalAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_global);
3055 
3056   // Constructors
3057   CUDAGlobalAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3058              );
3059 
3060   CUDAGlobalAttr *clone(ASTContext &C) const;
3061   void printPretty(raw_ostream &OS,
3062                    const PrintingPolicy &Policy) const;
3063   const char *getSpelling() const;
3064 
3065 
3066   static bool classof(const Attr *A) { return A->getKind() == attr::CUDAGlobal; }
3067 };
3068 
3069 class CLANG_ABI CUDAGridConstantAttr : public InheritableAttr {
3070 public:
3071   enum Spelling {
3072     GNU_grid_constant = 0,
3073     Declspec_grid_constant = 1,
3074   SpellingNotCalculated = 15
3075 
3076   };
3077 
3078   // Factory methods
3079   static CUDAGridConstantAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3080   static CUDAGridConstantAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3081   static CUDAGridConstantAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_grid_constant);
3082   static CUDAGridConstantAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_grid_constant);
3083 
3084   // Constructors
3085   CUDAGridConstantAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3086              );
3087 
3088   CUDAGridConstantAttr *clone(ASTContext &C) const;
3089   void printPretty(raw_ostream &OS,
3090                    const PrintingPolicy &Policy) const;
3091   const char *getSpelling() const;
3092 
3093 
3094   static bool classof(const Attr *A) { return A->getKind() == attr::CUDAGridConstant; }
3095 };
3096 
3097 class CLANG_ABI CUDAHostAttr : public InheritableAttr {
3098 public:
3099   enum Spelling {
3100     GNU_host = 0,
3101     Declspec_host = 1,
3102   SpellingNotCalculated = 15
3103 
3104   };
3105 
3106   // Factory methods
3107   static CUDAHostAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3108   static CUDAHostAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3109   static CUDAHostAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_host);
3110   static CUDAHostAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_host);
3111 
3112   // Constructors
3113   CUDAHostAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3114              );
3115 
3116   CUDAHostAttr *clone(ASTContext &C) const;
3117   void printPretty(raw_ostream &OS,
3118                    const PrintingPolicy &Policy) const;
3119   const char *getSpelling() const;
3120 
3121 
3122   static bool classof(const Attr *A) { return A->getKind() == attr::CUDAHost; }
3123 };
3124 
3125 class CLANG_ABI CUDAInvalidTargetAttr : public InheritableAttr {
3126 public:
3127   // Factory methods
3128   static CUDAInvalidTargetAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3129   static CUDAInvalidTargetAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3130   static CUDAInvalidTargetAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
3131   static CUDAInvalidTargetAttr *Create(ASTContext &Ctx, SourceRange Range = {});
3132 
3133   // Constructors
3134   CUDAInvalidTargetAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3135              );
3136 
3137   CUDAInvalidTargetAttr *clone(ASTContext &C) const;
3138   void printPretty(raw_ostream &OS,
3139                    const PrintingPolicy &Policy) const;
3140   const char *getSpelling() const;
3141 
3142 
3143   static bool classof(const Attr *A) { return A->getKind() == attr::CUDAInvalidTarget; }
3144 };
3145 
3146 class CLANG_ABI CUDALaunchBoundsAttr : public InheritableAttr {
3147 Expr * maxThreads;
3148 
3149 Expr * minBlocks;
3150 
3151 Expr * maxBlocks;
3152 
3153 public:
3154   enum Spelling {
3155     GNU_launch_bounds = 0,
3156     Declspec_launch_bounds = 1,
3157   SpellingNotCalculated = 15
3158 
3159   };
3160 
3161   // Factory methods
3162   static CUDALaunchBoundsAttr *CreateImplicit(ASTContext &Ctx, Expr * MaxThreads, Expr * MinBlocks, Expr * MaxBlocks, const AttributeCommonInfo &CommonInfo);
3163   static CUDALaunchBoundsAttr *Create(ASTContext &Ctx, Expr * MaxThreads, Expr * MinBlocks, Expr * MaxBlocks, const AttributeCommonInfo &CommonInfo);
3164   static CUDALaunchBoundsAttr *CreateImplicit(ASTContext &Ctx, Expr * MaxThreads, Expr * MinBlocks, Expr * MaxBlocks, SourceRange Range = {}, Spelling S = GNU_launch_bounds);
3165   static CUDALaunchBoundsAttr *Create(ASTContext &Ctx, Expr * MaxThreads, Expr * MinBlocks, Expr * MaxBlocks, SourceRange Range = {}, Spelling S = GNU_launch_bounds);
3166 
3167   // Constructors
3168   CUDALaunchBoundsAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3169               , Expr * MaxThreads
3170               , Expr * MinBlocks
3171               , Expr * MaxBlocks
3172              );
3173   CUDALaunchBoundsAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3174               , Expr * MaxThreads
3175              );
3176 
3177   CUDALaunchBoundsAttr *clone(ASTContext &C) const;
3178   void printPretty(raw_ostream &OS,
3179                    const PrintingPolicy &Policy) const;
3180   const char *getSpelling() const;
3181   Expr * getMaxThreads() const {
3182     return maxThreads;
3183   }
3184 
3185   Expr * getMinBlocks() const {
3186     return minBlocks;
3187   }
3188 
3189   Expr * getMaxBlocks() const {
3190     return maxBlocks;
3191   }
3192 
3193 
3194 
3195   static bool classof(const Attr *A) { return A->getKind() == attr::CUDALaunchBounds; }
3196 };
3197 
3198 class CLANG_ABI CUDASharedAttr : public InheritableAttr {
3199 public:
3200   enum Spelling {
3201     GNU_shared = 0,
3202     Declspec_shared = 1,
3203   SpellingNotCalculated = 15
3204 
3205   };
3206 
3207   // Factory methods
3208   static CUDASharedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3209   static CUDASharedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3210   static CUDASharedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_shared);
3211   static CUDASharedAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_shared);
3212 
3213   // Constructors
3214   CUDASharedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3215              );
3216 
3217   CUDASharedAttr *clone(ASTContext &C) const;
3218   void printPretty(raw_ostream &OS,
3219                    const PrintingPolicy &Policy) const;
3220   const char *getSpelling() const;
3221 
3222 
3223   static bool classof(const Attr *A) { return A->getKind() == attr::CUDAShared; }
3224 };
3225 
3226 class CLANG_ABI CXX11NoReturnAttr : public InheritableAttr {
3227 public:
3228   enum Spelling {
3229     CXX11_noreturn = 0,
3230     C23_noreturn = 1,
3231     C23_Noreturn = 2,
3232   SpellingNotCalculated = 15
3233 
3234   };
3235 
3236   // Factory methods
3237   static CXX11NoReturnAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3238   static CXX11NoReturnAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3239   static CXX11NoReturnAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = CXX11_noreturn);
3240   static CXX11NoReturnAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = CXX11_noreturn);
3241 
3242   // Constructors
3243   CXX11NoReturnAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3244              );
3245 
3246   CXX11NoReturnAttr *clone(ASTContext &C) const;
3247   void printPretty(raw_ostream &OS,
3248                    const PrintingPolicy &Policy) const;
3249   const char *getSpelling() const;
3250   Spelling getSemanticSpelling() const;
3251 
3252 
3253   static bool classof(const Attr *A) { return A->getKind() == attr::CXX11NoReturn; }
3254 };
3255 
3256 class CLANG_ABI CXXAssumeAttr : public StmtAttr {
3257 Expr * assumption;
3258 
3259 public:
3260   enum Spelling {
3261     CXX11_assume = 0,
3262     GNU_assume = 1,
3263     CXX11_clang_assume = 2,
3264     C23_clang_assume = 3,
3265   SpellingNotCalculated = 15
3266 
3267   };
3268 
3269   // Factory methods
3270   static CXXAssumeAttr *CreateImplicit(ASTContext &Ctx, Expr * Assumption, const AttributeCommonInfo &CommonInfo);
3271   static CXXAssumeAttr *Create(ASTContext &Ctx, Expr * Assumption, const AttributeCommonInfo &CommonInfo);
3272   static CXXAssumeAttr *CreateImplicit(ASTContext &Ctx, Expr * Assumption, SourceRange Range = {}, Spelling S = CXX11_assume);
3273   static CXXAssumeAttr *Create(ASTContext &Ctx, Expr * Assumption, SourceRange Range = {}, Spelling S = CXX11_assume);
3274 
3275   // Constructors
3276   CXXAssumeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3277               , Expr * Assumption
3278              );
3279 
3280   CXXAssumeAttr *clone(ASTContext &C) const;
3281   void printPretty(raw_ostream &OS,
3282                    const PrintingPolicy &Policy) const;
3283   const char *getSpelling() const;
3284   Expr * getAssumption() const {
3285     return assumption;
3286   }
3287 
3288 
3289 
3290   static bool classof(const Attr *A) { return A->getKind() == attr::CXXAssume; }
3291 };
3292 
3293 class CLANG_ABI CallableWhenAttr : public InheritableAttr {
3294 public:
3295   enum ConsumedState {
3296     Unknown,
3297     Consumed,
3298     Unconsumed
3299   };
3300 private:
3301   unsigned callableStates_Size;
3302   ConsumedState *callableStates_;
3303 
3304 public:
3305   enum Spelling {
3306     GNU_callable_when = 0,
3307     CXX11_clang_callable_when = 1,
3308   SpellingNotCalculated = 15
3309 
3310   };
3311 
3312   // Factory methods
3313   static CallableWhenAttr *CreateImplicit(ASTContext &Ctx, ConsumedState *CallableStates, unsigned CallableStatesSize, const AttributeCommonInfo &CommonInfo);
3314   static CallableWhenAttr *Create(ASTContext &Ctx, ConsumedState *CallableStates, unsigned CallableStatesSize, const AttributeCommonInfo &CommonInfo);
3315   static CallableWhenAttr *CreateImplicit(ASTContext &Ctx, ConsumedState *CallableStates, unsigned CallableStatesSize, SourceRange Range = {}, Spelling S = GNU_callable_when);
3316   static CallableWhenAttr *Create(ASTContext &Ctx, ConsumedState *CallableStates, unsigned CallableStatesSize, SourceRange Range = {}, Spelling S = GNU_callable_when);
3317 
3318   // Constructors
3319   CallableWhenAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3320               , ConsumedState *CallableStates, unsigned CallableStatesSize
3321              );
3322   CallableWhenAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3323              );
3324 
3325   CallableWhenAttr *clone(ASTContext &C) const;
3326   void printPretty(raw_ostream &OS,
3327                    const PrintingPolicy &Policy) const;
3328   const char *getSpelling() const;
3329   typedef ConsumedState* callableStates_iterator;
3330   callableStates_iterator callableStates_begin() const { return callableStates_; }
3331   callableStates_iterator callableStates_end() const { return callableStates_ + callableStates_Size; }
3332   unsigned callableStates_size() const { return callableStates_Size; }
3333   llvm::iterator_range<callableStates_iterator> callableStates() const { return llvm::make_range(callableStates_begin(), callableStates_end()); }
3334 
3335 
3336   static bool ConvertStrToConsumedState(StringRef Val, CallableWhenAttr::ConsumedState &Out);
3337   static const char *ConvertConsumedStateToStr(CallableWhenAttr::ConsumedState Val);
3338 
3339 
3340   static bool classof(const Attr *A) { return A->getKind() == attr::CallableWhen; }
3341 };
3342 
3343 class CLANG_ABI CallbackAttr : public InheritableAttr {
3344   unsigned encoding_Size;
3345   int *encoding_;
3346 
3347 public:
3348   enum Spelling {
3349     GNU_callback = 0,
3350     CXX11_clang_callback = 1,
3351     C23_clang_callback = 2,
3352   SpellingNotCalculated = 15
3353 
3354   };
3355 
3356   // Factory methods
3357   static CallbackAttr *CreateImplicit(ASTContext &Ctx, int *Encoding, unsigned EncodingSize, const AttributeCommonInfo &CommonInfo);
3358   static CallbackAttr *Create(ASTContext &Ctx, int *Encoding, unsigned EncodingSize, const AttributeCommonInfo &CommonInfo);
3359   static CallbackAttr *CreateImplicit(ASTContext &Ctx, int *Encoding, unsigned EncodingSize, SourceRange Range = {}, Spelling S = GNU_callback);
3360   static CallbackAttr *Create(ASTContext &Ctx, int *Encoding, unsigned EncodingSize, SourceRange Range = {}, Spelling S = GNU_callback);
3361 
3362   // Constructors
3363   CallbackAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3364               , int *Encoding, unsigned EncodingSize
3365              );
3366   CallbackAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3367              );
3368 
3369   CallbackAttr *clone(ASTContext &C) const;
3370   void printPretty(raw_ostream &OS,
3371                    const PrintingPolicy &Policy) const;
3372   const char *getSpelling() const;
3373   typedef int* encoding_iterator;
3374   encoding_iterator encoding_begin() const { return encoding_; }
3375   encoding_iterator encoding_end() const { return encoding_ + encoding_Size; }
3376   unsigned encoding_size() const { return encoding_Size; }
3377   llvm::iterator_range<encoding_iterator> encoding() const { return llvm::make_range(encoding_begin(), encoding_end()); }
3378 
3379 
3380 
3381 
3382   static bool classof(const Attr *A) { return A->getKind() == attr::Callback; }
3383 };
3384 
3385 class CLANG_ABI CalledOnceAttr : public Attr {
3386 public:
3387   enum Spelling {
3388     GNU_called_once = 0,
3389     CXX11_clang_called_once = 1,
3390     C23_clang_called_once = 2,
3391   SpellingNotCalculated = 15
3392 
3393   };
3394 
3395   // Factory methods
3396   static CalledOnceAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3397   static CalledOnceAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3398   static CalledOnceAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_called_once);
3399   static CalledOnceAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_called_once);
3400 
3401   // Constructors
3402   CalledOnceAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3403              );
3404 
3405   CalledOnceAttr *clone(ASTContext &C) const;
3406   void printPretty(raw_ostream &OS,
3407                    const PrintingPolicy &Policy) const;
3408   const char *getSpelling() const;
3409 
3410 
3411   static bool classof(const Attr *A) { return A->getKind() == attr::CalledOnce; }
3412 };
3413 
3414 class CLANG_ABI CapabilityAttr : public InheritableAttr {
3415 unsigned nameLength;
3416 char *name;
3417 
3418 public:
3419   enum Spelling {
3420     GNU_capability = 0,
3421     CXX11_clang_capability = 1,
3422     GNU_shared_capability = 2,
3423     CXX11_clang_shared_capability = 3,
3424   SpellingNotCalculated = 15
3425 
3426   };
3427 
3428   // Factory methods
3429   static CapabilityAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo);
3430   static CapabilityAttr *Create(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo);
3431   static CapabilityAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range = {}, Spelling S = GNU_capability);
3432   static CapabilityAttr *Create(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range = {}, Spelling S = GNU_capability);
3433 
3434   // Constructors
3435   CapabilityAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3436               , llvm::StringRef Name
3437              );
3438 
3439   CapabilityAttr *clone(ASTContext &C) const;
3440   void printPretty(raw_ostream &OS,
3441                    const PrintingPolicy &Policy) const;
3442   const char *getSpelling() const;
3443   Spelling getSemanticSpelling() const;
3444   bool isShared() const { return getAttributeSpellingListIndex() == 2 ||
3445     getAttributeSpellingListIndex() == 3; }
3446   llvm::StringRef getName() const {
3447     return llvm::StringRef(name, nameLength);
3448   }
3449   unsigned getNameLength() const {
3450     return nameLength;
3451   }
3452   void setName(ASTContext &C, llvm::StringRef S) {
3453     nameLength = S.size();
3454     this->name = new (C, 1) char [nameLength];
3455     if (!S.empty())
3456       std::memcpy(this->name, S.data(), nameLength);
3457   }
3458 
3459 
3460 
3461   static bool classof(const Attr *A) { return A->getKind() == attr::Capability; }
3462 };
3463 
3464 class CLANG_ABI CapturedRecordAttr : public InheritableAttr {
3465 public:
3466   // Factory methods
3467   static CapturedRecordAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3468   static CapturedRecordAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3469   static CapturedRecordAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
3470   static CapturedRecordAttr *Create(ASTContext &Ctx, SourceRange Range = {});
3471 
3472   // Constructors
3473   CapturedRecordAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3474              );
3475 
3476   CapturedRecordAttr *clone(ASTContext &C) const;
3477   void printPretty(raw_ostream &OS,
3478                    const PrintingPolicy &Policy) const;
3479   const char *getSpelling() const;
3480 
3481 
3482   static bool classof(const Attr *A) { return A->getKind() == attr::CapturedRecord; }
3483 };
3484 
3485 class CLANG_ABI CarriesDependencyAttr : public InheritableParamAttr {
3486 public:
3487   enum Spelling {
3488     GNU_carries_dependency = 0,
3489     CXX11_carries_dependency = 1,
3490   SpellingNotCalculated = 15
3491 
3492   };
3493 
3494   // Factory methods
3495   static CarriesDependencyAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3496   static CarriesDependencyAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3497   static CarriesDependencyAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_carries_dependency);
3498   static CarriesDependencyAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_carries_dependency);
3499 
3500   // Constructors
3501   CarriesDependencyAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3502              );
3503 
3504   CarriesDependencyAttr *clone(ASTContext &C) const;
3505   void printPretty(raw_ostream &OS,
3506                    const PrintingPolicy &Policy) const;
3507   const char *getSpelling() const;
3508 
3509 
3510   static bool classof(const Attr *A) { return A->getKind() == attr::CarriesDependency; }
3511 };
3512 
3513 class CLANG_ABI CleanupAttr : public InheritableAttr {
3514 FunctionDecl * functionDecl;
3515 
3516 public:
3517   enum Spelling {
3518     GNU_cleanup = 0,
3519     CXX11_gnu_cleanup = 1,
3520     C23_gnu_cleanup = 2,
3521   SpellingNotCalculated = 15
3522 
3523   };
3524 
3525   // Factory methods
3526   static CleanupAttr *CreateImplicit(ASTContext &Ctx, FunctionDecl * FunctionDecl, const AttributeCommonInfo &CommonInfo);
3527   static CleanupAttr *Create(ASTContext &Ctx, FunctionDecl * FunctionDecl, const AttributeCommonInfo &CommonInfo);
3528   static CleanupAttr *CreateImplicit(ASTContext &Ctx, FunctionDecl * FunctionDecl, SourceRange Range = {}, Spelling S = GNU_cleanup);
3529   static CleanupAttr *Create(ASTContext &Ctx, FunctionDecl * FunctionDecl, SourceRange Range = {}, Spelling S = GNU_cleanup);
3530 
3531   // Constructors
3532   CleanupAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3533               , FunctionDecl * FunctionDecl
3534              );
3535 
3536   CleanupAttr *clone(ASTContext &C) const;
3537   void printPretty(raw_ostream &OS,
3538                    const PrintingPolicy &Policy) const;
3539   const char *getSpelling() const;
3540   FunctionDecl * getFunctionDecl() const {
3541     return functionDecl;
3542   }
3543 
3544 
3545 
3546   static bool classof(const Attr *A) { return A->getKind() == attr::Cleanup; }
3547 };
3548 
3549 class CLANG_ABI ClspvLibclcBuiltinAttr : public InheritableAttr {
3550 public:
3551   enum Spelling {
3552     GNU_clspv_libclc_builtin = 0,
3553     CXX11_clang_clspv_libclc_builtin = 1,
3554     C23_clang_clspv_libclc_builtin = 2,
3555   SpellingNotCalculated = 15
3556 
3557   };
3558 
3559   // Factory methods
3560   static ClspvLibclcBuiltinAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3561   static ClspvLibclcBuiltinAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3562   static ClspvLibclcBuiltinAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_clspv_libclc_builtin);
3563   static ClspvLibclcBuiltinAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_clspv_libclc_builtin);
3564 
3565   // Constructors
3566   ClspvLibclcBuiltinAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3567              );
3568 
3569   ClspvLibclcBuiltinAttr *clone(ASTContext &C) const;
3570   void printPretty(raw_ostream &OS,
3571                    const PrintingPolicy &Policy) const;
3572   const char *getSpelling() const;
3573 
3574 
3575   static bool classof(const Attr *A) { return A->getKind() == attr::ClspvLibclcBuiltin; }
3576 };
3577 
3578 class CLANG_ABI CmseNSCallAttr : public TypeAttr {
3579 public:
3580   // Factory methods
3581   static CmseNSCallAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3582   static CmseNSCallAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3583   static CmseNSCallAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
3584   static CmseNSCallAttr *Create(ASTContext &Ctx, SourceRange Range = {});
3585 
3586   // Constructors
3587   CmseNSCallAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3588              );
3589 
3590   CmseNSCallAttr *clone(ASTContext &C) const;
3591   void printPretty(raw_ostream &OS,
3592                    const PrintingPolicy &Policy) const;
3593   const char *getSpelling() const;
3594 
3595 
3596   static bool classof(const Attr *A) { return A->getKind() == attr::CmseNSCall; }
3597 };
3598 
3599 class CLANG_ABI CmseNSEntryAttr : public InheritableAttr {
3600 public:
3601   // Factory methods
3602   static CmseNSEntryAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3603   static CmseNSEntryAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3604   static CmseNSEntryAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
3605   static CmseNSEntryAttr *Create(ASTContext &Ctx, SourceRange Range = {});
3606 
3607   // Constructors
3608   CmseNSEntryAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3609              );
3610 
3611   CmseNSEntryAttr *clone(ASTContext &C) const;
3612   void printPretty(raw_ostream &OS,
3613                    const PrintingPolicy &Policy) const;
3614   const char *getSpelling() const;
3615 
3616 
3617   static bool classof(const Attr *A) { return A->getKind() == attr::CmseNSEntry; }
3618 };
3619 
3620 class CLANG_ABI CodeAlignAttr : public StmtAttr {
3621 Expr * alignment;
3622 
3623 public:
3624   enum Spelling {
3625     GNU_code_align = 0,
3626     CXX11_clang_code_align = 1,
3627     C23_clang_code_align = 2,
3628   SpellingNotCalculated = 15
3629 
3630   };
3631 
3632   // Factory methods
3633   static CodeAlignAttr *CreateImplicit(ASTContext &Ctx, Expr * Alignment, const AttributeCommonInfo &CommonInfo);
3634   static CodeAlignAttr *Create(ASTContext &Ctx, Expr * Alignment, const AttributeCommonInfo &CommonInfo);
3635   static CodeAlignAttr *CreateImplicit(ASTContext &Ctx, Expr * Alignment, SourceRange Range = {}, Spelling S = GNU_code_align);
3636   static CodeAlignAttr *Create(ASTContext &Ctx, Expr * Alignment, SourceRange Range = {}, Spelling S = GNU_code_align);
3637 
3638   // Constructors
3639   CodeAlignAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3640               , Expr * Alignment
3641              );
3642 
3643   CodeAlignAttr *clone(ASTContext &C) const;
3644   void printPretty(raw_ostream &OS,
3645                    const PrintingPolicy &Policy) const;
3646   const char *getSpelling() const;
3647   Expr * getAlignment() const {
3648     return alignment;
3649   }
3650 
3651 
3652     static constexpr int MinimumAlignment = 1;
3653     static constexpr int MaximumAlignment = 4096;
3654   
3655 
3656   static bool classof(const Attr *A) { return A->getKind() == attr::CodeAlign; }
3657 };
3658 
3659 class CLANG_ABI CodeModelAttr : public InheritableAttr {
3660 private:
3661   llvm::CodeModel::Model model;
3662 
3663 public:
3664   enum Spelling {
3665     GNU_model = 0,
3666     CXX11_gnu_model = 1,
3667     C23_gnu_model = 2,
3668   SpellingNotCalculated = 15
3669 
3670   };
3671 
3672   // Factory methods
3673   static CodeModelAttr *CreateImplicit(ASTContext &Ctx, llvm::CodeModel::Model Model, const AttributeCommonInfo &CommonInfo);
3674   static CodeModelAttr *Create(ASTContext &Ctx, llvm::CodeModel::Model Model, const AttributeCommonInfo &CommonInfo);
3675   static CodeModelAttr *CreateImplicit(ASTContext &Ctx, llvm::CodeModel::Model Model, SourceRange Range = {}, Spelling S = GNU_model);
3676   static CodeModelAttr *Create(ASTContext &Ctx, llvm::CodeModel::Model Model, SourceRange Range = {}, Spelling S = GNU_model);
3677 
3678   // Constructors
3679   CodeModelAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3680               , llvm::CodeModel::Model Model
3681              );
3682 
3683   CodeModelAttr *clone(ASTContext &C) const;
3684   void printPretty(raw_ostream &OS,
3685                    const PrintingPolicy &Policy) const;
3686   const char *getSpelling() const;
3687   llvm::CodeModel::Model getModel() const {
3688     return model;
3689   }
3690 
3691   static bool ConvertStrToModel(StringRef Val, llvm::CodeModel::Model &Out);
3692   static const char *ConvertModelToStr(llvm::CodeModel::Model Val);
3693 
3694 
3695   static bool classof(const Attr *A) { return A->getKind() == attr::CodeModel; }
3696 };
3697 
3698 class CLANG_ABI CodeSegAttr : public InheritableAttr {
3699 unsigned nameLength;
3700 char *name;
3701 
3702 public:
3703   // Factory methods
3704   static CodeSegAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo);
3705   static CodeSegAttr *Create(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo);
3706   static CodeSegAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range = {});
3707   static CodeSegAttr *Create(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range = {});
3708 
3709   // Constructors
3710   CodeSegAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3711               , llvm::StringRef Name
3712              );
3713 
3714   CodeSegAttr *clone(ASTContext &C) const;
3715   void printPretty(raw_ostream &OS,
3716                    const PrintingPolicy &Policy) const;
3717   const char *getSpelling() const;
3718   llvm::StringRef getName() const {
3719     return llvm::StringRef(name, nameLength);
3720   }
3721   unsigned getNameLength() const {
3722     return nameLength;
3723   }
3724   void setName(ASTContext &C, llvm::StringRef S) {
3725     nameLength = S.size();
3726     this->name = new (C, 1) char [nameLength];
3727     if (!S.empty())
3728       std::memcpy(this->name, S.data(), nameLength);
3729   }
3730 
3731 
3732 
3733   static bool classof(const Attr *A) { return A->getKind() == attr::CodeSeg; }
3734 };
3735 
3736 class CLANG_ABI ColdAttr : public InheritableAttr {
3737 public:
3738   enum Spelling {
3739     GNU_cold = 0,
3740     CXX11_gnu_cold = 1,
3741     C23_gnu_cold = 2,
3742   SpellingNotCalculated = 15
3743 
3744   };
3745 
3746   // Factory methods
3747   static ColdAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3748   static ColdAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3749   static ColdAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_cold);
3750   static ColdAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_cold);
3751 
3752   // Constructors
3753   ColdAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3754              );
3755 
3756   ColdAttr *clone(ASTContext &C) const;
3757   void printPretty(raw_ostream &OS,
3758                    const PrintingPolicy &Policy) const;
3759   const char *getSpelling() const;
3760 
3761 
3762   static bool classof(const Attr *A) { return A->getKind() == attr::Cold; }
3763 };
3764 
3765 class CLANG_ABI CommonAttr : public InheritableAttr {
3766 public:
3767   enum Spelling {
3768     GNU_common = 0,
3769     CXX11_gnu_common = 1,
3770     C23_gnu_common = 2,
3771   SpellingNotCalculated = 15
3772 
3773   };
3774 
3775   // Factory methods
3776   static CommonAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3777   static CommonAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3778   static CommonAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_common);
3779   static CommonAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_common);
3780 
3781   // Constructors
3782   CommonAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3783              );
3784 
3785   CommonAttr *clone(ASTContext &C) const;
3786   void printPretty(raw_ostream &OS,
3787                    const PrintingPolicy &Policy) const;
3788   const char *getSpelling() const;
3789 
3790 
3791   static bool classof(const Attr *A) { return A->getKind() == attr::Common; }
3792 };
3793 
3794 class CLANG_ABI ConstAttr : public InheritableAttr {
3795 public:
3796   enum Spelling {
3797     GNU_const = 0,
3798     CXX11_gnu_const = 1,
3799     C23_gnu_const = 2,
3800   SpellingNotCalculated = 15
3801 
3802   };
3803 
3804   // Factory methods
3805   static ConstAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3806   static ConstAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3807   static ConstAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_const);
3808   static ConstAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_const);
3809 
3810   // Constructors
3811   ConstAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3812              );
3813 
3814   ConstAttr *clone(ASTContext &C) const;
3815   void printPretty(raw_ostream &OS,
3816                    const PrintingPolicy &Policy) const;
3817   const char *getSpelling() const;
3818 
3819 
3820   static bool classof(const Attr *A) { return A->getKind() == attr::Const; }
3821 };
3822 
3823 class CLANG_ABI ConstInitAttr : public InheritableAttr {
3824 public:
3825   enum Spelling {
3826     Keyword_constinit = 0,
3827     GNU_require_constant_initialization = 1,
3828     CXX11_clang_require_constant_initialization = 2,
3829   SpellingNotCalculated = 15
3830 
3831   };
3832 
3833   // Factory methods
3834   static ConstInitAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3835   static ConstInitAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3836   static ConstInitAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Keyword_constinit);
3837   static ConstInitAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Keyword_constinit);
3838 
3839   // Constructors
3840   ConstInitAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3841              );
3842 
3843   ConstInitAttr *clone(ASTContext &C) const;
3844   void printPretty(raw_ostream &OS,
3845                    const PrintingPolicy &Policy) const;
3846   const char *getSpelling() const;
3847   Spelling getSemanticSpelling() const;
3848   bool isConstinit() const { return getAttributeSpellingListIndex() == 0; }
3849 
3850 
3851   static bool classof(const Attr *A) { return A->getKind() == attr::ConstInit; }
3852 };
3853 
3854 class CLANG_ABI ConstructorAttr : public InheritableAttr {
3855 int priority;
3856 
3857 public:
3858   enum Spelling {
3859     GNU_constructor = 0,
3860     CXX11_gnu_constructor = 1,
3861     C23_gnu_constructor = 2,
3862   SpellingNotCalculated = 15
3863 
3864   };
3865 
3866   // Factory methods
3867   static ConstructorAttr *CreateImplicit(ASTContext &Ctx, int Priority, const AttributeCommonInfo &CommonInfo);
3868   static ConstructorAttr *Create(ASTContext &Ctx, int Priority, const AttributeCommonInfo &CommonInfo);
3869   static ConstructorAttr *CreateImplicit(ASTContext &Ctx, int Priority, SourceRange Range = {}, Spelling S = GNU_constructor);
3870   static ConstructorAttr *Create(ASTContext &Ctx, int Priority, SourceRange Range = {}, Spelling S = GNU_constructor);
3871 
3872   // Constructors
3873   ConstructorAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3874               , int Priority
3875              );
3876   ConstructorAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3877              );
3878 
3879   ConstructorAttr *clone(ASTContext &C) const;
3880   void printPretty(raw_ostream &OS,
3881                    const PrintingPolicy &Policy) const;
3882   const char *getSpelling() const;
3883   int getPriority() const {
3884     return priority;
3885   }
3886 
3887   static const int DefaultPriority = 65535;
3888 
3889 
3890 
3891   static bool classof(const Attr *A) { return A->getKind() == attr::Constructor; }
3892 };
3893 
3894 class CLANG_ABI ConsumableAttr : public InheritableAttr {
3895 public:
3896   enum ConsumedState {
3897     Unknown,
3898     Consumed,
3899     Unconsumed
3900   };
3901 private:
3902   ConsumableAttr::ConsumedState defaultState;
3903 
3904 public:
3905   enum Spelling {
3906     GNU_consumable = 0,
3907     CXX11_clang_consumable = 1,
3908   SpellingNotCalculated = 15
3909 
3910   };
3911 
3912   // Factory methods
3913   static ConsumableAttr *CreateImplicit(ASTContext &Ctx, ConsumableAttr::ConsumedState DefaultState, const AttributeCommonInfo &CommonInfo);
3914   static ConsumableAttr *Create(ASTContext &Ctx, ConsumableAttr::ConsumedState DefaultState, const AttributeCommonInfo &CommonInfo);
3915   static ConsumableAttr *CreateImplicit(ASTContext &Ctx, ConsumableAttr::ConsumedState DefaultState, SourceRange Range = {}, Spelling S = GNU_consumable);
3916   static ConsumableAttr *Create(ASTContext &Ctx, ConsumableAttr::ConsumedState DefaultState, SourceRange Range = {}, Spelling S = GNU_consumable);
3917 
3918   // Constructors
3919   ConsumableAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3920               , ConsumableAttr::ConsumedState DefaultState
3921              );
3922 
3923   ConsumableAttr *clone(ASTContext &C) const;
3924   void printPretty(raw_ostream &OS,
3925                    const PrintingPolicy &Policy) const;
3926   const char *getSpelling() const;
3927   ConsumableAttr::ConsumedState getDefaultState() const {
3928     return defaultState;
3929   }
3930 
3931   static bool ConvertStrToConsumedState(StringRef Val, ConsumableAttr::ConsumedState &Out);
3932   static const char *ConvertConsumedStateToStr(ConsumableAttr::ConsumedState Val);
3933 
3934 
3935   static bool classof(const Attr *A) { return A->getKind() == attr::Consumable; }
3936 };
3937 
3938 class CLANG_ABI ConsumableAutoCastAttr : public InheritableAttr {
3939 public:
3940   enum Spelling {
3941     GNU_consumable_auto_cast_state = 0,
3942     CXX11_clang_consumable_auto_cast_state = 1,
3943   SpellingNotCalculated = 15
3944 
3945   };
3946 
3947   // Factory methods
3948   static ConsumableAutoCastAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3949   static ConsumableAutoCastAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3950   static ConsumableAutoCastAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_consumable_auto_cast_state);
3951   static ConsumableAutoCastAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_consumable_auto_cast_state);
3952 
3953   // Constructors
3954   ConsumableAutoCastAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3955              );
3956 
3957   ConsumableAutoCastAttr *clone(ASTContext &C) const;
3958   void printPretty(raw_ostream &OS,
3959                    const PrintingPolicy &Policy) const;
3960   const char *getSpelling() const;
3961 
3962 
3963   static bool classof(const Attr *A) { return A->getKind() == attr::ConsumableAutoCast; }
3964 };
3965 
3966 class CLANG_ABI ConsumableSetOnReadAttr : public InheritableAttr {
3967 public:
3968   enum Spelling {
3969     GNU_consumable_set_state_on_read = 0,
3970     CXX11_clang_consumable_set_state_on_read = 1,
3971   SpellingNotCalculated = 15
3972 
3973   };
3974 
3975   // Factory methods
3976   static ConsumableSetOnReadAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3977   static ConsumableSetOnReadAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
3978   static ConsumableSetOnReadAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_consumable_set_state_on_read);
3979   static ConsumableSetOnReadAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_consumable_set_state_on_read);
3980 
3981   // Constructors
3982   ConsumableSetOnReadAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
3983              );
3984 
3985   ConsumableSetOnReadAttr *clone(ASTContext &C) const;
3986   void printPretty(raw_ostream &OS,
3987                    const PrintingPolicy &Policy) const;
3988   const char *getSpelling() const;
3989 
3990 
3991   static bool classof(const Attr *A) { return A->getKind() == attr::ConsumableSetOnRead; }
3992 };
3993 
3994 class CLANG_ABI ConvergentAttr : public InheritableAttr {
3995 public:
3996   enum Spelling {
3997     GNU_convergent = 0,
3998     CXX11_clang_convergent = 1,
3999     C23_clang_convergent = 2,
4000   SpellingNotCalculated = 15
4001 
4002   };
4003 
4004   // Factory methods
4005   static ConvergentAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
4006   static ConvergentAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
4007   static ConvergentAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_convergent);
4008   static ConvergentAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_convergent);
4009 
4010   // Constructors
4011   ConvergentAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4012              );
4013 
4014   ConvergentAttr *clone(ASTContext &C) const;
4015   void printPretty(raw_ostream &OS,
4016                    const PrintingPolicy &Policy) const;
4017   const char *getSpelling() const;
4018 
4019 
4020   static bool classof(const Attr *A) { return A->getKind() == attr::Convergent; }
4021 };
4022 
4023 class CLANG_ABI CoroAwaitElidableAttr : public InheritableAttr {
4024 public:
4025   enum Spelling {
4026     GNU_coro_await_elidable = 0,
4027     CXX11_clang_coro_await_elidable = 1,
4028     C23_clang_coro_await_elidable = 2,
4029   SpellingNotCalculated = 15
4030 
4031   };
4032 
4033   // Factory methods
4034   static CoroAwaitElidableAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
4035   static CoroAwaitElidableAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
4036   static CoroAwaitElidableAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_coro_await_elidable);
4037   static CoroAwaitElidableAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_coro_await_elidable);
4038 
4039   // Constructors
4040   CoroAwaitElidableAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4041              );
4042 
4043   CoroAwaitElidableAttr *clone(ASTContext &C) const;
4044   void printPretty(raw_ostream &OS,
4045                    const PrintingPolicy &Policy) const;
4046   const char *getSpelling() const;
4047 
4048 
4049   static bool classof(const Attr *A) { return A->getKind() == attr::CoroAwaitElidable; }
4050 };
4051 
4052 class CLANG_ABI CoroAwaitElidableArgumentAttr : public InheritableAttr {
4053 public:
4054   enum Spelling {
4055     GNU_coro_await_elidable_argument = 0,
4056     CXX11_clang_coro_await_elidable_argument = 1,
4057     C23_clang_coro_await_elidable_argument = 2,
4058   SpellingNotCalculated = 15
4059 
4060   };
4061 
4062   // Factory methods
4063   static CoroAwaitElidableArgumentAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
4064   static CoroAwaitElidableArgumentAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
4065   static CoroAwaitElidableArgumentAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_coro_await_elidable_argument);
4066   static CoroAwaitElidableArgumentAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_coro_await_elidable_argument);
4067 
4068   // Constructors
4069   CoroAwaitElidableArgumentAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4070              );
4071 
4072   CoroAwaitElidableArgumentAttr *clone(ASTContext &C) const;
4073   void printPretty(raw_ostream &OS,
4074                    const PrintingPolicy &Policy) const;
4075   const char *getSpelling() const;
4076 
4077 
4078   static bool classof(const Attr *A) { return A->getKind() == attr::CoroAwaitElidableArgument; }
4079 };
4080 
4081 class CLANG_ABI CoroDisableLifetimeBoundAttr : public InheritableAttr {
4082 public:
4083   enum Spelling {
4084     GNU_coro_disable_lifetimebound = 0,
4085     CXX11_clang_coro_disable_lifetimebound = 1,
4086     C23_clang_coro_disable_lifetimebound = 2,
4087   SpellingNotCalculated = 15
4088 
4089   };
4090 
4091   // Factory methods
4092   static CoroDisableLifetimeBoundAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
4093   static CoroDisableLifetimeBoundAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
4094   static CoroDisableLifetimeBoundAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_coro_disable_lifetimebound);
4095   static CoroDisableLifetimeBoundAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_coro_disable_lifetimebound);
4096 
4097   // Constructors
4098   CoroDisableLifetimeBoundAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4099              );
4100 
4101   CoroDisableLifetimeBoundAttr *clone(ASTContext &C) const;
4102   void printPretty(raw_ostream &OS,
4103                    const PrintingPolicy &Policy) const;
4104   const char *getSpelling() const;
4105 
4106 
4107   static bool classof(const Attr *A) { return A->getKind() == attr::CoroDisableLifetimeBound; }
4108 };
4109 
4110 class CLANG_ABI CoroLifetimeBoundAttr : public InheritableAttr {
4111 public:
4112   enum Spelling {
4113     GNU_coro_lifetimebound = 0,
4114     CXX11_clang_coro_lifetimebound = 1,
4115     C23_clang_coro_lifetimebound = 2,
4116   SpellingNotCalculated = 15
4117 
4118   };
4119 
4120   // Factory methods
4121   static CoroLifetimeBoundAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
4122   static CoroLifetimeBoundAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
4123   static CoroLifetimeBoundAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_coro_lifetimebound);
4124   static CoroLifetimeBoundAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_coro_lifetimebound);
4125 
4126   // Constructors
4127   CoroLifetimeBoundAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4128              );
4129 
4130   CoroLifetimeBoundAttr *clone(ASTContext &C) const;
4131   void printPretty(raw_ostream &OS,
4132                    const PrintingPolicy &Policy) const;
4133   const char *getSpelling() const;
4134 
4135 
4136   static bool classof(const Attr *A) { return A->getKind() == attr::CoroLifetimeBound; }
4137 };
4138 
4139 class CLANG_ABI CoroOnlyDestroyWhenCompleteAttr : public InheritableAttr {
4140 public:
4141   enum Spelling {
4142     GNU_coro_only_destroy_when_complete = 0,
4143     CXX11_clang_coro_only_destroy_when_complete = 1,
4144     C23_clang_coro_only_destroy_when_complete = 2,
4145   SpellingNotCalculated = 15
4146 
4147   };
4148 
4149   // Factory methods
4150   static CoroOnlyDestroyWhenCompleteAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
4151   static CoroOnlyDestroyWhenCompleteAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
4152   static CoroOnlyDestroyWhenCompleteAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_coro_only_destroy_when_complete);
4153   static CoroOnlyDestroyWhenCompleteAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_coro_only_destroy_when_complete);
4154 
4155   // Constructors
4156   CoroOnlyDestroyWhenCompleteAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4157              );
4158 
4159   CoroOnlyDestroyWhenCompleteAttr *clone(ASTContext &C) const;
4160   void printPretty(raw_ostream &OS,
4161                    const PrintingPolicy &Policy) const;
4162   const char *getSpelling() const;
4163 
4164 
4165   static bool classof(const Attr *A) { return A->getKind() == attr::CoroOnlyDestroyWhenComplete; }
4166 };
4167 
4168 class CLANG_ABI CoroReturnTypeAttr : public InheritableAttr {
4169 public:
4170   enum Spelling {
4171     GNU_coro_return_type = 0,
4172     CXX11_clang_coro_return_type = 1,
4173     C23_clang_coro_return_type = 2,
4174   SpellingNotCalculated = 15
4175 
4176   };
4177 
4178   // Factory methods
4179   static CoroReturnTypeAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
4180   static CoroReturnTypeAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
4181   static CoroReturnTypeAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_coro_return_type);
4182   static CoroReturnTypeAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_coro_return_type);
4183 
4184   // Constructors
4185   CoroReturnTypeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4186              );
4187 
4188   CoroReturnTypeAttr *clone(ASTContext &C) const;
4189   void printPretty(raw_ostream &OS,
4190                    const PrintingPolicy &Policy) const;
4191   const char *getSpelling() const;
4192 
4193 
4194   static bool classof(const Attr *A) { return A->getKind() == attr::CoroReturnType; }
4195 };
4196 
4197 class CLANG_ABI CoroWrapperAttr : public InheritableAttr {
4198 public:
4199   enum Spelling {
4200     GNU_coro_wrapper = 0,
4201     CXX11_clang_coro_wrapper = 1,
4202     C23_clang_coro_wrapper = 2,
4203   SpellingNotCalculated = 15
4204 
4205   };
4206 
4207   // Factory methods
4208   static CoroWrapperAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
4209   static CoroWrapperAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
4210   static CoroWrapperAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_coro_wrapper);
4211   static CoroWrapperAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_coro_wrapper);
4212 
4213   // Constructors
4214   CoroWrapperAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4215              );
4216 
4217   CoroWrapperAttr *clone(ASTContext &C) const;
4218   void printPretty(raw_ostream &OS,
4219                    const PrintingPolicy &Policy) const;
4220   const char *getSpelling() const;
4221 
4222 
4223   static bool classof(const Attr *A) { return A->getKind() == attr::CoroWrapper; }
4224 };
4225 
4226 class CLANG_ABI CountedByAttr : public InheritableAttr {
4227 Expr * count;
4228 
4229 int nestedLevel;
4230 
4231 public:
4232   enum Spelling {
4233     GNU_counted_by = 0,
4234     CXX11_clang_counted_by = 1,
4235     C23_clang_counted_by = 2,
4236   SpellingNotCalculated = 15
4237 
4238   };
4239 
4240   // Factory methods
4241   static CountedByAttr *CreateImplicit(ASTContext &Ctx, Expr * Count, int NestedLevel, const AttributeCommonInfo &CommonInfo);
4242   static CountedByAttr *Create(ASTContext &Ctx, Expr * Count, int NestedLevel, const AttributeCommonInfo &CommonInfo);
4243   static CountedByAttr *CreateImplicit(ASTContext &Ctx, Expr * Count, int NestedLevel, SourceRange Range = {}, Spelling S = GNU_counted_by);
4244   static CountedByAttr *Create(ASTContext &Ctx, Expr * Count, int NestedLevel, SourceRange Range = {}, Spelling S = GNU_counted_by);
4245 
4246   // Constructors
4247   CountedByAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4248               , Expr * Count
4249               , int NestedLevel
4250              );
4251   CountedByAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4252               , Expr * Count
4253              );
4254 
4255   CountedByAttr *clone(ASTContext &C) const;
4256   void printPretty(raw_ostream &OS,
4257                    const PrintingPolicy &Policy) const;
4258   const char *getSpelling() const;
4259   Expr * getCount() const {
4260     return count;
4261   }
4262 
4263   int getNestedLevel() const {
4264     return nestedLevel;
4265   }
4266 
4267 
4268 
4269   static bool classof(const Attr *A) { return A->getKind() == attr::CountedBy; }
4270 };
4271 
4272 class CLANG_ABI CountedByOrNullAttr : public InheritableAttr {
4273 Expr * count;
4274 
4275 int nestedLevel;
4276 
4277 public:
4278   enum Spelling {
4279     GNU_counted_by_or_null = 0,
4280     CXX11_clang_counted_by_or_null = 1,
4281     C23_clang_counted_by_or_null = 2,
4282   SpellingNotCalculated = 15
4283 
4284   };
4285 
4286   // Factory methods
4287   static CountedByOrNullAttr *CreateImplicit(ASTContext &Ctx, Expr * Count, int NestedLevel, const AttributeCommonInfo &CommonInfo);
4288   static CountedByOrNullAttr *Create(ASTContext &Ctx, Expr * Count, int NestedLevel, const AttributeCommonInfo &CommonInfo);
4289   static CountedByOrNullAttr *CreateImplicit(ASTContext &Ctx, Expr * Count, int NestedLevel, SourceRange Range = {}, Spelling S = GNU_counted_by_or_null);
4290   static CountedByOrNullAttr *Create(ASTContext &Ctx, Expr * Count, int NestedLevel, SourceRange Range = {}, Spelling S = GNU_counted_by_or_null);
4291 
4292   // Constructors
4293   CountedByOrNullAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4294               , Expr * Count
4295               , int NestedLevel
4296              );
4297   CountedByOrNullAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4298               , Expr * Count
4299              );
4300 
4301   CountedByOrNullAttr *clone(ASTContext &C) const;
4302   void printPretty(raw_ostream &OS,
4303                    const PrintingPolicy &Policy) const;
4304   const char *getSpelling() const;
4305   Expr * getCount() const {
4306     return count;
4307   }
4308 
4309   int getNestedLevel() const {
4310     return nestedLevel;
4311   }
4312 
4313 
4314 
4315   static bool classof(const Attr *A) { return A->getKind() == attr::CountedByOrNull; }
4316 };
4317 
4318 class CLANG_ABI DLLExportAttr : public InheritableAttr {
4319 public:
4320   enum Spelling {
4321     Declspec_dllexport = 0,
4322     GNU_dllexport = 1,
4323     CXX11_gnu_dllexport = 2,
4324     C23_gnu_dllexport = 3,
4325   SpellingNotCalculated = 15
4326 
4327   };
4328 
4329   // Factory methods
4330   static DLLExportAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
4331   static DLLExportAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
4332   static DLLExportAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Declspec_dllexport);
4333   static DLLExportAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Declspec_dllexport);
4334 
4335   // Constructors
4336   DLLExportAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4337              );
4338 
4339   DLLExportAttr *clone(ASTContext &C) const;
4340   void printPretty(raw_ostream &OS,
4341                    const PrintingPolicy &Policy) const;
4342   const char *getSpelling() const;
4343 
4344 
4345   static bool classof(const Attr *A) { return A->getKind() == attr::DLLExport; }
4346 };
4347 
4348 class CLANG_ABI DLLExportStaticLocalAttr : public InheritableAttr {
4349 public:
4350   // Factory methods
4351   static DLLExportStaticLocalAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
4352   static DLLExportStaticLocalAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
4353   static DLLExportStaticLocalAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
4354   static DLLExportStaticLocalAttr *Create(ASTContext &Ctx, SourceRange Range = {});
4355 
4356   // Constructors
4357   DLLExportStaticLocalAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4358              );
4359 
4360   DLLExportStaticLocalAttr *clone(ASTContext &C) const;
4361   void printPretty(raw_ostream &OS,
4362                    const PrintingPolicy &Policy) const;
4363   const char *getSpelling() const;
4364 
4365 
4366   static bool classof(const Attr *A) { return A->getKind() == attr::DLLExportStaticLocal; }
4367 };
4368 
4369 class CLANG_ABI DLLImportAttr : public InheritableAttr {
4370 public:
4371   enum Spelling {
4372     Declspec_dllimport = 0,
4373     GNU_dllimport = 1,
4374     CXX11_gnu_dllimport = 2,
4375     C23_gnu_dllimport = 3,
4376   SpellingNotCalculated = 15
4377 
4378   };
4379 
4380   // Factory methods
4381   static DLLImportAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
4382   static DLLImportAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
4383   static DLLImportAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Declspec_dllimport);
4384   static DLLImportAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Declspec_dllimport);
4385 
4386   // Constructors
4387   DLLImportAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4388              );
4389 
4390   DLLImportAttr *clone(ASTContext &C) const;
4391   void printPretty(raw_ostream &OS,
4392                    const PrintingPolicy &Policy) const;
4393   const char *getSpelling() const;
4394 
4395 private:
4396   bool PropagatedToBaseTemplate = false;
4397 
4398 public:
4399   void setPropagatedToBaseTemplate() { PropagatedToBaseTemplate = true; }
4400   bool wasPropagatedToBaseTemplate() { return PropagatedToBaseTemplate; }
4401   
4402 
4403   static bool classof(const Attr *A) { return A->getKind() == attr::DLLImport; }
4404 };
4405 
4406 class CLANG_ABI DLLImportStaticLocalAttr : public InheritableAttr {
4407 public:
4408   // Factory methods
4409   static DLLImportStaticLocalAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
4410   static DLLImportStaticLocalAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
4411   static DLLImportStaticLocalAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
4412   static DLLImportStaticLocalAttr *Create(ASTContext &Ctx, SourceRange Range = {});
4413 
4414   // Constructors
4415   DLLImportStaticLocalAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4416              );
4417 
4418   DLLImportStaticLocalAttr *clone(ASTContext &C) const;
4419   void printPretty(raw_ostream &OS,
4420                    const PrintingPolicy &Policy) const;
4421   const char *getSpelling() const;
4422 
4423 
4424   static bool classof(const Attr *A) { return A->getKind() == attr::DLLImportStaticLocal; }
4425 };
4426 
4427 class CLANG_ABI DeprecatedAttr : public InheritableAttr {
4428 unsigned messageLength;
4429 char *message;
4430 
4431 unsigned replacementLength;
4432 char *replacement;
4433 
4434 public:
4435   enum Spelling {
4436     GNU_deprecated = 0,
4437     CXX11_gnu_deprecated = 1,
4438     C23_gnu_deprecated = 2,
4439     Declspec_deprecated = 3,
4440     CXX11_deprecated = 4,
4441     C23_deprecated = 5,
4442   SpellingNotCalculated = 15
4443 
4444   };
4445 
4446   // Factory methods
4447   static DeprecatedAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Message, llvm::StringRef Replacement, const AttributeCommonInfo &CommonInfo);
4448   static DeprecatedAttr *Create(ASTContext &Ctx, llvm::StringRef Message, llvm::StringRef Replacement, const AttributeCommonInfo &CommonInfo);
4449   static DeprecatedAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Message, llvm::StringRef Replacement, SourceRange Range = {}, Spelling S = GNU_deprecated);
4450   static DeprecatedAttr *Create(ASTContext &Ctx, llvm::StringRef Message, llvm::StringRef Replacement, SourceRange Range = {}, Spelling S = GNU_deprecated);
4451 
4452   // Constructors
4453   DeprecatedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4454               , llvm::StringRef Message
4455               , llvm::StringRef Replacement
4456              );
4457   DeprecatedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4458              );
4459 
4460   DeprecatedAttr *clone(ASTContext &C) const;
4461   void printPretty(raw_ostream &OS,
4462                    const PrintingPolicy &Policy) const;
4463   const char *getSpelling() const;
4464   llvm::StringRef getMessage() const {
4465     return llvm::StringRef(message, messageLength);
4466   }
4467   unsigned getMessageLength() const {
4468     return messageLength;
4469   }
4470   void setMessage(ASTContext &C, llvm::StringRef S) {
4471     messageLength = S.size();
4472     this->message = new (C, 1) char [messageLength];
4473     if (!S.empty())
4474       std::memcpy(this->message, S.data(), messageLength);
4475   }
4476 
4477   llvm::StringRef getReplacement() const {
4478     return llvm::StringRef(replacement, replacementLength);
4479   }
4480   unsigned getReplacementLength() const {
4481     return replacementLength;
4482   }
4483   void setReplacement(ASTContext &C, llvm::StringRef S) {
4484     replacementLength = S.size();
4485     this->replacement = new (C, 1) char [replacementLength];
4486     if (!S.empty())
4487       std::memcpy(this->replacement, S.data(), replacementLength);
4488   }
4489 
4490 
4491 
4492   static bool classof(const Attr *A) { return A->getKind() == attr::Deprecated; }
4493 };
4494 
4495 class CLANG_ABI DestructorAttr : public InheritableAttr {
4496 int priority;
4497 
4498 public:
4499   enum Spelling {
4500     GNU_destructor = 0,
4501     CXX11_gnu_destructor = 1,
4502     C23_gnu_destructor = 2,
4503   SpellingNotCalculated = 15
4504 
4505   };
4506 
4507   // Factory methods
4508   static DestructorAttr *CreateImplicit(ASTContext &Ctx, int Priority, const AttributeCommonInfo &CommonInfo);
4509   static DestructorAttr *Create(ASTContext &Ctx, int Priority, const AttributeCommonInfo &CommonInfo);
4510   static DestructorAttr *CreateImplicit(ASTContext &Ctx, int Priority, SourceRange Range = {}, Spelling S = GNU_destructor);
4511   static DestructorAttr *Create(ASTContext &Ctx, int Priority, SourceRange Range = {}, Spelling S = GNU_destructor);
4512 
4513   // Constructors
4514   DestructorAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4515               , int Priority
4516              );
4517   DestructorAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4518              );
4519 
4520   DestructorAttr *clone(ASTContext &C) const;
4521   void printPretty(raw_ostream &OS,
4522                    const PrintingPolicy &Policy) const;
4523   const char *getSpelling() const;
4524   int getPriority() const {
4525     return priority;
4526   }
4527 
4528   static const int DefaultPriority = 65535;
4529 
4530 
4531 
4532   static bool classof(const Attr *A) { return A->getKind() == attr::Destructor; }
4533 };
4534 
4535 class CLANG_ABI DiagnoseAsBuiltinAttr : public InheritableAttr {
4536 FunctionDecl * function;
4537 
4538   unsigned argIndices_Size;
4539   unsigned *argIndices_;
4540 
4541 public:
4542   enum Spelling {
4543     GNU_diagnose_as_builtin = 0,
4544     CXX11_clang_diagnose_as_builtin = 1,
4545     C23_clang_diagnose_as_builtin = 2,
4546   SpellingNotCalculated = 15
4547 
4548   };
4549 
4550   // Factory methods
4551   static DiagnoseAsBuiltinAttr *CreateImplicit(ASTContext &Ctx, FunctionDecl * Function, unsigned *ArgIndices, unsigned ArgIndicesSize, const AttributeCommonInfo &CommonInfo);
4552   static DiagnoseAsBuiltinAttr *Create(ASTContext &Ctx, FunctionDecl * Function, unsigned *ArgIndices, unsigned ArgIndicesSize, const AttributeCommonInfo &CommonInfo);
4553   static DiagnoseAsBuiltinAttr *CreateImplicit(ASTContext &Ctx, FunctionDecl * Function, unsigned *ArgIndices, unsigned ArgIndicesSize, SourceRange Range = {}, Spelling S = GNU_diagnose_as_builtin);
4554   static DiagnoseAsBuiltinAttr *Create(ASTContext &Ctx, FunctionDecl * Function, unsigned *ArgIndices, unsigned ArgIndicesSize, SourceRange Range = {}, Spelling S = GNU_diagnose_as_builtin);
4555 
4556   // Constructors
4557   DiagnoseAsBuiltinAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4558               , FunctionDecl * Function
4559               , unsigned *ArgIndices, unsigned ArgIndicesSize
4560              );
4561   DiagnoseAsBuiltinAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4562               , FunctionDecl * Function
4563              );
4564 
4565   DiagnoseAsBuiltinAttr *clone(ASTContext &C) const;
4566   void printPretty(raw_ostream &OS,
4567                    const PrintingPolicy &Policy) const;
4568   const char *getSpelling() const;
4569   FunctionDecl * getFunction() const {
4570     return function;
4571   }
4572 
4573   typedef unsigned* argIndices_iterator;
4574   argIndices_iterator argIndices_begin() const { return argIndices_; }
4575   argIndices_iterator argIndices_end() const { return argIndices_ + argIndices_Size; }
4576   unsigned argIndices_size() const { return argIndices_Size; }
4577   llvm::iterator_range<argIndices_iterator> argIndices() const { return llvm::make_range(argIndices_begin(), argIndices_end()); }
4578 
4579 
4580 
4581 
4582   static bool classof(const Attr *A) { return A->getKind() == attr::DiagnoseAsBuiltin; }
4583 };
4584 
4585 class CLANG_ABI DiagnoseIfAttr : public InheritableAttr {
4586 Expr * cond;
4587 
4588 unsigned messageLength;
4589 char *message;
4590 
4591 public:
4592   enum DefaultSeverity {
4593     DS_error,
4594     DS_warning
4595   };
4596 private:
4597   DiagnoseIfAttr::DefaultSeverity defaultSeverity;
4598 
4599 unsigned warningGroupLength;
4600 char *warningGroup;
4601 
4602 bool argDependent;
4603 
4604 NamedDecl * parent;
4605 
4606 public:
4607   // Factory methods
4608   static DiagnoseIfAttr *CreateImplicit(ASTContext &Ctx, Expr * Cond, llvm::StringRef Message, DiagnoseIfAttr::DefaultSeverity DefaultSeverity, llvm::StringRef WarningGroup, bool ArgDependent, NamedDecl * Parent, const AttributeCommonInfo &CommonInfo);
4609   static DiagnoseIfAttr *Create(ASTContext &Ctx, Expr * Cond, llvm::StringRef Message, DiagnoseIfAttr::DefaultSeverity DefaultSeverity, llvm::StringRef WarningGroup, bool ArgDependent, NamedDecl * Parent, const AttributeCommonInfo &CommonInfo);
4610   static DiagnoseIfAttr *CreateImplicit(ASTContext &Ctx, Expr * Cond, llvm::StringRef Message, DiagnoseIfAttr::DefaultSeverity DefaultSeverity, llvm::StringRef WarningGroup, bool ArgDependent, NamedDecl * Parent, SourceRange Range = {});
4611   static DiagnoseIfAttr *Create(ASTContext &Ctx, Expr * Cond, llvm::StringRef Message, DiagnoseIfAttr::DefaultSeverity DefaultSeverity, llvm::StringRef WarningGroup, bool ArgDependent, NamedDecl * Parent, SourceRange Range = {});
4612   static DiagnoseIfAttr *CreateImplicit(ASTContext &Ctx, Expr * Cond, llvm::StringRef Message, DiagnoseIfAttr::DefaultSeverity DefaultSeverity, llvm::StringRef WarningGroup, const AttributeCommonInfo &CommonInfo);
4613   static DiagnoseIfAttr *Create(ASTContext &Ctx, Expr * Cond, llvm::StringRef Message, DiagnoseIfAttr::DefaultSeverity DefaultSeverity, llvm::StringRef WarningGroup, const AttributeCommonInfo &CommonInfo);
4614   static DiagnoseIfAttr *CreateImplicit(ASTContext &Ctx, Expr * Cond, llvm::StringRef Message, DiagnoseIfAttr::DefaultSeverity DefaultSeverity, llvm::StringRef WarningGroup, SourceRange Range = {});
4615   static DiagnoseIfAttr *Create(ASTContext &Ctx, Expr * Cond, llvm::StringRef Message, DiagnoseIfAttr::DefaultSeverity DefaultSeverity, llvm::StringRef WarningGroup, SourceRange Range = {});
4616 
4617   // Constructors
4618   DiagnoseIfAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4619               , Expr * Cond
4620               , llvm::StringRef Message
4621               , DiagnoseIfAttr::DefaultSeverity DefaultSeverity
4622               , llvm::StringRef WarningGroup
4623               , bool ArgDependent
4624               , NamedDecl * Parent
4625              );
4626   DiagnoseIfAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4627               , Expr * Cond
4628               , llvm::StringRef Message
4629               , DiagnoseIfAttr::DefaultSeverity DefaultSeverity
4630               , llvm::StringRef WarningGroup
4631              );
4632   DiagnoseIfAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4633               , Expr * Cond
4634               , llvm::StringRef Message
4635               , DiagnoseIfAttr::DefaultSeverity DefaultSeverity
4636              );
4637 
4638   DiagnoseIfAttr *clone(ASTContext &C) const;
4639   void printPretty(raw_ostream &OS,
4640                    const PrintingPolicy &Policy) const;
4641   const char *getSpelling() const;
4642   Expr * getCond() const {
4643     return cond;
4644   }
4645 
4646   llvm::StringRef getMessage() const {
4647     return llvm::StringRef(message, messageLength);
4648   }
4649   unsigned getMessageLength() const {
4650     return messageLength;
4651   }
4652   void setMessage(ASTContext &C, llvm::StringRef S) {
4653     messageLength = S.size();
4654     this->message = new (C, 1) char [messageLength];
4655     if (!S.empty())
4656       std::memcpy(this->message, S.data(), messageLength);
4657   }
4658 
4659   DiagnoseIfAttr::DefaultSeverity getDefaultSeverity() const {
4660     return defaultSeverity;
4661   }
4662 
4663   static bool ConvertStrToDefaultSeverity(StringRef Val, DiagnoseIfAttr::DefaultSeverity &Out);
4664   static const char *ConvertDefaultSeverityToStr(DiagnoseIfAttr::DefaultSeverity Val);
4665   llvm::StringRef getWarningGroup() const {
4666     return llvm::StringRef(warningGroup, warningGroupLength);
4667   }
4668   unsigned getWarningGroupLength() const {
4669     return warningGroupLength;
4670   }
4671   void setWarningGroup(ASTContext &C, llvm::StringRef S) {
4672     warningGroupLength = S.size();
4673     this->warningGroup = new (C, 1) char [warningGroupLength];
4674     if (!S.empty())
4675       std::memcpy(this->warningGroup, S.data(), warningGroupLength);
4676   }
4677 
4678   bool getArgDependent() const {
4679     return argDependent;
4680   }
4681 
4682   NamedDecl * getParent() const {
4683     return parent;
4684   }
4685 
4686 
4687 
4688   static bool classof(const Attr *A) { return A->getKind() == attr::DiagnoseIf; }
4689 };
4690 
4691 class CLANG_ABI DisableSanitizerInstrumentationAttr : public InheritableAttr {
4692 public:
4693   enum Spelling {
4694     GNU_disable_sanitizer_instrumentation = 0,
4695     CXX11_clang_disable_sanitizer_instrumentation = 1,
4696     C23_clang_disable_sanitizer_instrumentation = 2,
4697   SpellingNotCalculated = 15
4698 
4699   };
4700 
4701   // Factory methods
4702   static DisableSanitizerInstrumentationAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
4703   static DisableSanitizerInstrumentationAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
4704   static DisableSanitizerInstrumentationAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_disable_sanitizer_instrumentation);
4705   static DisableSanitizerInstrumentationAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_disable_sanitizer_instrumentation);
4706 
4707   // Constructors
4708   DisableSanitizerInstrumentationAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4709              );
4710 
4711   DisableSanitizerInstrumentationAttr *clone(ASTContext &C) const;
4712   void printPretty(raw_ostream &OS,
4713                    const PrintingPolicy &Policy) const;
4714   const char *getSpelling() const;
4715 
4716 
4717   static bool classof(const Attr *A) { return A->getKind() == attr::DisableSanitizerInstrumentation; }
4718 };
4719 
4720 class CLANG_ABI DisableTailCallsAttr : public InheritableAttr {
4721 public:
4722   enum Spelling {
4723     GNU_disable_tail_calls = 0,
4724     CXX11_clang_disable_tail_calls = 1,
4725     C23_clang_disable_tail_calls = 2,
4726   SpellingNotCalculated = 15
4727 
4728   };
4729 
4730   // Factory methods
4731   static DisableTailCallsAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
4732   static DisableTailCallsAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
4733   static DisableTailCallsAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_disable_tail_calls);
4734   static DisableTailCallsAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_disable_tail_calls);
4735 
4736   // Constructors
4737   DisableTailCallsAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4738              );
4739 
4740   DisableTailCallsAttr *clone(ASTContext &C) const;
4741   void printPretty(raw_ostream &OS,
4742                    const PrintingPolicy &Policy) const;
4743   const char *getSpelling() const;
4744 
4745 
4746   static bool classof(const Attr *A) { return A->getKind() == attr::DisableTailCalls; }
4747 };
4748 
4749 class CLANG_ABI EmptyBasesAttr : public InheritableAttr {
4750 public:
4751   // Factory methods
4752   static EmptyBasesAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
4753   static EmptyBasesAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
4754   static EmptyBasesAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
4755   static EmptyBasesAttr *Create(ASTContext &Ctx, SourceRange Range = {});
4756 
4757   // Constructors
4758   EmptyBasesAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4759              );
4760 
4761   EmptyBasesAttr *clone(ASTContext &C) const;
4762   void printPretty(raw_ostream &OS,
4763                    const PrintingPolicy &Policy) const;
4764   const char *getSpelling() const;
4765 
4766 
4767   static bool classof(const Attr *A) { return A->getKind() == attr::EmptyBases; }
4768 };
4769 
4770 class CLANG_ABI EnableIfAttr : public InheritableAttr {
4771 Expr * cond;
4772 
4773 unsigned messageLength;
4774 char *message;
4775 
4776 public:
4777   // Factory methods
4778   static EnableIfAttr *CreateImplicit(ASTContext &Ctx, Expr * Cond, llvm::StringRef Message, const AttributeCommonInfo &CommonInfo);
4779   static EnableIfAttr *Create(ASTContext &Ctx, Expr * Cond, llvm::StringRef Message, const AttributeCommonInfo &CommonInfo);
4780   static EnableIfAttr *CreateImplicit(ASTContext &Ctx, Expr * Cond, llvm::StringRef Message, SourceRange Range = {});
4781   static EnableIfAttr *Create(ASTContext &Ctx, Expr * Cond, llvm::StringRef Message, SourceRange Range = {});
4782 
4783   // Constructors
4784   EnableIfAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4785               , Expr * Cond
4786               , llvm::StringRef Message
4787              );
4788 
4789   EnableIfAttr *clone(ASTContext &C) const;
4790   void printPretty(raw_ostream &OS,
4791                    const PrintingPolicy &Policy) const;
4792   const char *getSpelling() const;
4793   Expr * getCond() const {
4794     return cond;
4795   }
4796 
4797   llvm::StringRef getMessage() const {
4798     return llvm::StringRef(message, messageLength);
4799   }
4800   unsigned getMessageLength() const {
4801     return messageLength;
4802   }
4803   void setMessage(ASTContext &C, llvm::StringRef S) {
4804     messageLength = S.size();
4805     this->message = new (C, 1) char [messageLength];
4806     if (!S.empty())
4807       std::memcpy(this->message, S.data(), messageLength);
4808   }
4809 
4810 
4811 
4812   static bool classof(const Attr *A) { return A->getKind() == attr::EnableIf; }
4813 };
4814 
4815 class CLANG_ABI EnforceTCBAttr : public InheritableAttr {
4816 unsigned tCBNameLength;
4817 char *tCBName;
4818 
4819 public:
4820   enum Spelling {
4821     GNU_enforce_tcb = 0,
4822     CXX11_clang_enforce_tcb = 1,
4823     C23_clang_enforce_tcb = 2,
4824   SpellingNotCalculated = 15
4825 
4826   };
4827 
4828   // Factory methods
4829   static EnforceTCBAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef TCBName, const AttributeCommonInfo &CommonInfo);
4830   static EnforceTCBAttr *Create(ASTContext &Ctx, llvm::StringRef TCBName, const AttributeCommonInfo &CommonInfo);
4831   static EnforceTCBAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef TCBName, SourceRange Range = {}, Spelling S = GNU_enforce_tcb);
4832   static EnforceTCBAttr *Create(ASTContext &Ctx, llvm::StringRef TCBName, SourceRange Range = {}, Spelling S = GNU_enforce_tcb);
4833 
4834   // Constructors
4835   EnforceTCBAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4836               , llvm::StringRef TCBName
4837              );
4838 
4839   EnforceTCBAttr *clone(ASTContext &C) const;
4840   void printPretty(raw_ostream &OS,
4841                    const PrintingPolicy &Policy) const;
4842   const char *getSpelling() const;
4843   llvm::StringRef getTCBName() const {
4844     return llvm::StringRef(tCBName, tCBNameLength);
4845   }
4846   unsigned getTCBNameLength() const {
4847     return tCBNameLength;
4848   }
4849   void setTCBName(ASTContext &C, llvm::StringRef S) {
4850     tCBNameLength = S.size();
4851     this->tCBName = new (C, 1) char [tCBNameLength];
4852     if (!S.empty())
4853       std::memcpy(this->tCBName, S.data(), tCBNameLength);
4854   }
4855 
4856 
4857 
4858   static bool classof(const Attr *A) { return A->getKind() == attr::EnforceTCB; }
4859 };
4860 
4861 class CLANG_ABI EnforceTCBLeafAttr : public InheritableAttr {
4862 unsigned tCBNameLength;
4863 char *tCBName;
4864 
4865 public:
4866   enum Spelling {
4867     GNU_enforce_tcb_leaf = 0,
4868     CXX11_clang_enforce_tcb_leaf = 1,
4869     C23_clang_enforce_tcb_leaf = 2,
4870   SpellingNotCalculated = 15
4871 
4872   };
4873 
4874   // Factory methods
4875   static EnforceTCBLeafAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef TCBName, const AttributeCommonInfo &CommonInfo);
4876   static EnforceTCBLeafAttr *Create(ASTContext &Ctx, llvm::StringRef TCBName, const AttributeCommonInfo &CommonInfo);
4877   static EnforceTCBLeafAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef TCBName, SourceRange Range = {}, Spelling S = GNU_enforce_tcb_leaf);
4878   static EnforceTCBLeafAttr *Create(ASTContext &Ctx, llvm::StringRef TCBName, SourceRange Range = {}, Spelling S = GNU_enforce_tcb_leaf);
4879 
4880   // Constructors
4881   EnforceTCBLeafAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4882               , llvm::StringRef TCBName
4883              );
4884 
4885   EnforceTCBLeafAttr *clone(ASTContext &C) const;
4886   void printPretty(raw_ostream &OS,
4887                    const PrintingPolicy &Policy) const;
4888   const char *getSpelling() const;
4889   llvm::StringRef getTCBName() const {
4890     return llvm::StringRef(tCBName, tCBNameLength);
4891   }
4892   unsigned getTCBNameLength() const {
4893     return tCBNameLength;
4894   }
4895   void setTCBName(ASTContext &C, llvm::StringRef S) {
4896     tCBNameLength = S.size();
4897     this->tCBName = new (C, 1) char [tCBNameLength];
4898     if (!S.empty())
4899       std::memcpy(this->tCBName, S.data(), tCBNameLength);
4900   }
4901 
4902 
4903 
4904   static bool classof(const Attr *A) { return A->getKind() == attr::EnforceTCBLeaf; }
4905 };
4906 
4907 class CLANG_ABI EnumExtensibilityAttr : public InheritableAttr {
4908 public:
4909   enum Kind {
4910     Closed,
4911     Open
4912   };
4913 private:
4914   EnumExtensibilityAttr::Kind extensibility;
4915 
4916 public:
4917   enum Spelling {
4918     GNU_enum_extensibility = 0,
4919     CXX11_clang_enum_extensibility = 1,
4920     C23_clang_enum_extensibility = 2,
4921   SpellingNotCalculated = 15
4922 
4923   };
4924 
4925   // Factory methods
4926   static EnumExtensibilityAttr *CreateImplicit(ASTContext &Ctx, EnumExtensibilityAttr::Kind Extensibility, const AttributeCommonInfo &CommonInfo);
4927   static EnumExtensibilityAttr *Create(ASTContext &Ctx, EnumExtensibilityAttr::Kind Extensibility, const AttributeCommonInfo &CommonInfo);
4928   static EnumExtensibilityAttr *CreateImplicit(ASTContext &Ctx, EnumExtensibilityAttr::Kind Extensibility, SourceRange Range = {}, Spelling S = GNU_enum_extensibility);
4929   static EnumExtensibilityAttr *Create(ASTContext &Ctx, EnumExtensibilityAttr::Kind Extensibility, SourceRange Range = {}, Spelling S = GNU_enum_extensibility);
4930 
4931   // Constructors
4932   EnumExtensibilityAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4933               , EnumExtensibilityAttr::Kind Extensibility
4934              );
4935 
4936   EnumExtensibilityAttr *clone(ASTContext &C) const;
4937   void printPretty(raw_ostream &OS,
4938                    const PrintingPolicy &Policy) const;
4939   const char *getSpelling() const;
4940   EnumExtensibilityAttr::Kind getExtensibility() const {
4941     return extensibility;
4942   }
4943 
4944   static bool ConvertStrToKind(StringRef Val, EnumExtensibilityAttr::Kind &Out);
4945   static const char *ConvertKindToStr(EnumExtensibilityAttr::Kind Val);
4946 
4947 
4948   static bool classof(const Attr *A) { return A->getKind() == attr::EnumExtensibility; }
4949 };
4950 
4951 class CLANG_ABI ErrorAttr : public InheritableAttr {
4952 unsigned userDiagnosticLength;
4953 char *userDiagnostic;
4954 
4955 public:
4956   enum Spelling {
4957     GNU_error = 0,
4958     CXX11_gnu_error = 1,
4959     C23_gnu_error = 2,
4960     GNU_warning = 3,
4961     CXX11_gnu_warning = 4,
4962     C23_gnu_warning = 5,
4963   SpellingNotCalculated = 15
4964 
4965   };
4966 
4967   // Factory methods
4968   static ErrorAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef UserDiagnostic, const AttributeCommonInfo &CommonInfo);
4969   static ErrorAttr *Create(ASTContext &Ctx, llvm::StringRef UserDiagnostic, const AttributeCommonInfo &CommonInfo);
4970   static ErrorAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef UserDiagnostic, SourceRange Range = {}, Spelling S = GNU_error);
4971   static ErrorAttr *Create(ASTContext &Ctx, llvm::StringRef UserDiagnostic, SourceRange Range = {}, Spelling S = GNU_error);
4972 
4973   // Constructors
4974   ErrorAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
4975               , llvm::StringRef UserDiagnostic
4976              );
4977 
4978   ErrorAttr *clone(ASTContext &C) const;
4979   void printPretty(raw_ostream &OS,
4980                    const PrintingPolicy &Policy) const;
4981   const char *getSpelling() const;
4982   Spelling getSemanticSpelling() const;
4983   bool isError() const { return getAttributeSpellingListIndex() == 0 ||
4984     getAttributeSpellingListIndex() == 1 ||
4985     getAttributeSpellingListIndex() == 2; }
4986   bool isWarning() const { return getAttributeSpellingListIndex() == 3 ||
4987     getAttributeSpellingListIndex() == 4 ||
4988     getAttributeSpellingListIndex() == 5; }
4989   llvm::StringRef getUserDiagnostic() const {
4990     return llvm::StringRef(userDiagnostic, userDiagnosticLength);
4991   }
4992   unsigned getUserDiagnosticLength() const {
4993     return userDiagnosticLength;
4994   }
4995   void setUserDiagnostic(ASTContext &C, llvm::StringRef S) {
4996     userDiagnosticLength = S.size();
4997     this->userDiagnostic = new (C, 1) char [userDiagnosticLength];
4998     if (!S.empty())
4999       std::memcpy(this->userDiagnostic, S.data(), userDiagnosticLength);
5000   }
5001 
5002 
5003 
5004   static bool classof(const Attr *A) { return A->getKind() == attr::Error; }
5005 };
5006 
5007 class CLANG_ABI ExcludeFromExplicitInstantiationAttr : public InheritableAttr {
5008 public:
5009   enum Spelling {
5010     GNU_exclude_from_explicit_instantiation = 0,
5011     CXX11_clang_exclude_from_explicit_instantiation = 1,
5012     C23_clang_exclude_from_explicit_instantiation = 2,
5013   SpellingNotCalculated = 15
5014 
5015   };
5016 
5017   // Factory methods
5018   static ExcludeFromExplicitInstantiationAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
5019   static ExcludeFromExplicitInstantiationAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
5020   static ExcludeFromExplicitInstantiationAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_exclude_from_explicit_instantiation);
5021   static ExcludeFromExplicitInstantiationAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_exclude_from_explicit_instantiation);
5022 
5023   // Constructors
5024   ExcludeFromExplicitInstantiationAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
5025              );
5026 
5027   ExcludeFromExplicitInstantiationAttr *clone(ASTContext &C) const;
5028   void printPretty(raw_ostream &OS,
5029                    const PrintingPolicy &Policy) const;
5030   const char *getSpelling() const;
5031 
5032 
5033   static bool classof(const Attr *A) { return A->getKind() == attr::ExcludeFromExplicitInstantiation; }
5034 };
5035 
5036 class CLANG_ABI ExclusiveTrylockFunctionAttr : public InheritableAttr {
5037 Expr * successValue;
5038 
5039   unsigned args_Size;
5040   Expr * *args_;
5041 
5042 public:
5043   // Factory methods
5044   static ExclusiveTrylockFunctionAttr *CreateImplicit(ASTContext &Ctx, Expr * SuccessValue, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);
5045   static ExclusiveTrylockFunctionAttr *Create(ASTContext &Ctx, Expr * SuccessValue, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);
5046   static ExclusiveTrylockFunctionAttr *CreateImplicit(ASTContext &Ctx, Expr * SuccessValue, Expr * *Args, unsigned ArgsSize, SourceRange Range = {});
5047   static ExclusiveTrylockFunctionAttr *Create(ASTContext &Ctx, Expr * SuccessValue, Expr * *Args, unsigned ArgsSize, SourceRange Range = {});
5048 
5049   // Constructors
5050   ExclusiveTrylockFunctionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
5051               , Expr * SuccessValue
5052               , Expr * *Args, unsigned ArgsSize
5053              );
5054   ExclusiveTrylockFunctionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
5055               , Expr * SuccessValue
5056              );
5057 
5058   ExclusiveTrylockFunctionAttr *clone(ASTContext &C) const;
5059   void printPretty(raw_ostream &OS,
5060                    const PrintingPolicy &Policy) const;
5061   const char *getSpelling() const;
5062   Expr * getSuccessValue() const {
5063     return successValue;
5064   }
5065 
5066   typedef Expr ** args_iterator;
5067   args_iterator args_begin() const { return args_; }
5068   args_iterator args_end() const { return args_ + args_Size; }
5069   unsigned args_size() const { return args_Size; }
5070   llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); }
5071 
5072 
5073 
5074 
5075   static bool classof(const Attr *A) { return A->getKind() == attr::ExclusiveTrylockFunction; }
5076 };
5077 
5078 class CLANG_ABI ExplicitInitAttr : public InheritableAttr {
5079 public:
5080   enum Spelling {
5081     GNU_require_explicit_initialization = 0,
5082     CXX11_clang_require_explicit_initialization = 1,
5083     C23_clang_require_explicit_initialization = 2,
5084   SpellingNotCalculated = 15
5085 
5086   };
5087 
5088   // Factory methods
5089   static ExplicitInitAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
5090   static ExplicitInitAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
5091   static ExplicitInitAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_require_explicit_initialization);
5092   static ExplicitInitAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_require_explicit_initialization);
5093 
5094   // Constructors
5095   ExplicitInitAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
5096              );
5097 
5098   ExplicitInitAttr *clone(ASTContext &C) const;
5099   void printPretty(raw_ostream &OS,
5100                    const PrintingPolicy &Policy) const;
5101   const char *getSpelling() const;
5102 
5103 
5104   static bool classof(const Attr *A) { return A->getKind() == attr::ExplicitInit; }
5105 };
5106 
5107 class CLANG_ABI ExternalSourceSymbolAttr : public InheritableAttr {
5108 unsigned languageLength;
5109 char *language;
5110 
5111 unsigned definedInLength;
5112 char *definedIn;
5113 
5114 bool generatedDeclaration;
5115 
5116 unsigned uSRLength;
5117 char *uSR;
5118 
5119 public:
5120   enum Spelling {
5121     GNU_external_source_symbol = 0,
5122     CXX11_clang_external_source_symbol = 1,
5123     C23_clang_external_source_symbol = 2,
5124   SpellingNotCalculated = 15
5125 
5126   };
5127 
5128   // Factory methods
5129   static ExternalSourceSymbolAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Language, llvm::StringRef DefinedIn, bool GeneratedDeclaration, llvm::StringRef USR, const AttributeCommonInfo &CommonInfo);
5130   static ExternalSourceSymbolAttr *Create(ASTContext &Ctx, llvm::StringRef Language, llvm::StringRef DefinedIn, bool GeneratedDeclaration, llvm::StringRef USR, const AttributeCommonInfo &CommonInfo);
5131   static ExternalSourceSymbolAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Language, llvm::StringRef DefinedIn, bool GeneratedDeclaration, llvm::StringRef USR, SourceRange Range = {}, Spelling S = GNU_external_source_symbol);
5132   static ExternalSourceSymbolAttr *Create(ASTContext &Ctx, llvm::StringRef Language, llvm::StringRef DefinedIn, bool GeneratedDeclaration, llvm::StringRef USR, SourceRange Range = {}, Spelling S = GNU_external_source_symbol);
5133 
5134   // Constructors
5135   ExternalSourceSymbolAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
5136               , llvm::StringRef Language
5137               , llvm::StringRef DefinedIn
5138               , bool GeneratedDeclaration
5139               , llvm::StringRef USR
5140              );
5141   ExternalSourceSymbolAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
5142              );
5143 
5144   ExternalSourceSymbolAttr *clone(ASTContext &C) const;
5145   void printPretty(raw_ostream &OS,
5146                    const PrintingPolicy &Policy) const;
5147   const char *getSpelling() const;
5148   llvm::StringRef getLanguage() const {
5149     return llvm::StringRef(language, languageLength);
5150   }
5151   unsigned getLanguageLength() const {
5152     return languageLength;
5153   }
5154   void setLanguage(ASTContext &C, llvm::StringRef S) {
5155     languageLength = S.size();
5156     this->language = new (C, 1) char [languageLength];
5157     if (!S.empty())
5158       std::memcpy(this->language, S.data(), languageLength);
5159   }
5160 
5161   llvm::StringRef getDefinedIn() const {
5162     return llvm::StringRef(definedIn, definedInLength);
5163   }
5164   unsigned getDefinedInLength() const {
5165     return definedInLength;
5166   }
5167   void setDefinedIn(ASTContext &C, llvm::StringRef S) {
5168     definedInLength = S.size();
5169     this->definedIn = new (C, 1) char [definedInLength];
5170     if (!S.empty())
5171       std::memcpy(this->definedIn, S.data(), definedInLength);
5172   }
5173 
5174   bool getGeneratedDeclaration() const {
5175     return generatedDeclaration;
5176   }
5177 
5178   llvm::StringRef getUSR() const {
5179     return llvm::StringRef(uSR, uSRLength);
5180   }
5181   unsigned getUSRLength() const {
5182     return uSRLength;
5183   }
5184   void setUSR(ASTContext &C, llvm::StringRef S) {
5185     uSRLength = S.size();
5186     this->uSR = new (C, 1) char [uSRLength];
5187     if (!S.empty())
5188       std::memcpy(this->uSR, S.data(), uSRLength);
5189   }
5190 
5191 
5192 
5193   static bool classof(const Attr *A) { return A->getKind() == attr::ExternalSourceSymbol; }
5194 };
5195 
5196 class CLANG_ABI FallThroughAttr : public StmtAttr {
5197 public:
5198   enum Spelling {
5199     CXX11_fallthrough = 0,
5200     C23_fallthrough = 1,
5201     CXX11_clang_fallthrough = 2,
5202     GNU_fallthrough = 3,
5203     CXX11_gnu_fallthrough = 4,
5204     C23_gnu_fallthrough = 5,
5205   SpellingNotCalculated = 15
5206 
5207   };
5208 
5209   // Factory methods
5210   static FallThroughAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
5211   static FallThroughAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
5212   static FallThroughAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = CXX11_fallthrough);
5213   static FallThroughAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = CXX11_fallthrough);
5214 
5215   // Constructors
5216   FallThroughAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
5217              );
5218 
5219   FallThroughAttr *clone(ASTContext &C) const;
5220   void printPretty(raw_ostream &OS,
5221                    const PrintingPolicy &Policy) const;
5222   const char *getSpelling() const;
5223 
5224 
5225   static bool classof(const Attr *A) { return A->getKind() == attr::FallThrough; }
5226 };
5227 
5228 class CLANG_ABI FastCallAttr : public InheritableAttr {
5229 public:
5230   enum Spelling {
5231     GNU_fastcall = 0,
5232     CXX11_gnu_fastcall = 1,
5233     C23_gnu_fastcall = 2,
5234     Keyword_fastcall = 3,
5235   SpellingNotCalculated = 15
5236 
5237   };
5238 
5239   // Factory methods
5240   static FastCallAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
5241   static FastCallAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
5242   static FastCallAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_fastcall);
5243   static FastCallAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_fastcall);
5244 
5245   // Constructors
5246   FastCallAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
5247              );
5248 
5249   FastCallAttr *clone(ASTContext &C) const;
5250   void printPretty(raw_ostream &OS,
5251                    const PrintingPolicy &Policy) const;
5252   const char *getSpelling() const;
5253 
5254 
5255   static bool classof(const Attr *A) { return A->getKind() == attr::FastCall; }
5256 };
5257 
5258 class CLANG_ABI FinalAttr : public InheritableAttr {
5259 public:
5260   enum Spelling {
5261     Keyword_final = 0,
5262     Keyword_sealed = 1,
5263   SpellingNotCalculated = 15
5264 
5265   };
5266 
5267   // Factory methods
5268   static FinalAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
5269   static FinalAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
5270   static FinalAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Keyword_final);
5271   static FinalAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Keyword_final);
5272 
5273   // Constructors
5274   FinalAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
5275              );
5276 
5277   FinalAttr *clone(ASTContext &C) const;
5278   void printPretty(raw_ostream &OS,
5279                    const PrintingPolicy &Policy) const;
5280   const char *getSpelling() const;
5281   Spelling getSemanticSpelling() const;
5282   bool isSpelledAsSealed() const { return getAttributeSpellingListIndex() == 1; }
5283 
5284 
5285   static bool classof(const Attr *A) { return A->getKind() == attr::Final; }
5286 };
5287 
5288 class CLANG_ABI FlagEnumAttr : public InheritableAttr {
5289 public:
5290   enum Spelling {
5291     GNU_flag_enum = 0,
5292     CXX11_clang_flag_enum = 1,
5293     C23_clang_flag_enum = 2,
5294   SpellingNotCalculated = 15
5295 
5296   };
5297 
5298   // Factory methods
5299   static FlagEnumAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
5300   static FlagEnumAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
5301   static FlagEnumAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_flag_enum);
5302   static FlagEnumAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_flag_enum);
5303 
5304   // Constructors
5305   FlagEnumAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
5306              );
5307 
5308   FlagEnumAttr *clone(ASTContext &C) const;
5309   void printPretty(raw_ostream &OS,
5310                    const PrintingPolicy &Policy) const;
5311   const char *getSpelling() const;
5312 
5313 
5314   static bool classof(const Attr *A) { return A->getKind() == attr::FlagEnum; }
5315 };
5316 
5317 class CLANG_ABI FlattenAttr : public InheritableAttr {
5318 public:
5319   enum Spelling {
5320     GNU_flatten = 0,
5321     CXX11_gnu_flatten = 1,
5322     C23_gnu_flatten = 2,
5323   SpellingNotCalculated = 15
5324 
5325   };
5326 
5327   // Factory methods
5328   static FlattenAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
5329   static FlattenAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
5330   static FlattenAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_flatten);
5331   static FlattenAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_flatten);
5332 
5333   // Constructors
5334   FlattenAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
5335              );
5336 
5337   FlattenAttr *clone(ASTContext &C) const;
5338   void printPretty(raw_ostream &OS,
5339                    const PrintingPolicy &Policy) const;
5340   const char *getSpelling() const;
5341 
5342 
5343   static bool classof(const Attr *A) { return A->getKind() == attr::Flatten; }
5344 };
5345 
5346 class CLANG_ABI FormatAttr : public InheritableAttr {
5347 IdentifierInfo * type;
5348 
5349 int formatIdx;
5350 
5351 int firstArg;
5352 
5353 public:
5354   enum Spelling {
5355     GNU_format = 0,
5356     CXX11_gnu_format = 1,
5357     C23_gnu_format = 2,
5358   SpellingNotCalculated = 15
5359 
5360   };
5361 
5362   // Factory methods
5363   static FormatAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * Type, int FormatIdx, int FirstArg, const AttributeCommonInfo &CommonInfo);
5364   static FormatAttr *Create(ASTContext &Ctx, IdentifierInfo * Type, int FormatIdx, int FirstArg, const AttributeCommonInfo &CommonInfo);
5365   static FormatAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * Type, int FormatIdx, int FirstArg, SourceRange Range = {}, Spelling S = GNU_format);
5366   static FormatAttr *Create(ASTContext &Ctx, IdentifierInfo * Type, int FormatIdx, int FirstArg, SourceRange Range = {}, Spelling S = GNU_format);
5367 
5368   // Constructors
5369   FormatAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
5370               , IdentifierInfo * Type
5371               , int FormatIdx
5372               , int FirstArg
5373              );
5374 
5375   FormatAttr *clone(ASTContext &C) const;
5376   void printPretty(raw_ostream &OS,
5377                    const PrintingPolicy &Policy) const;
5378   const char *getSpelling() const;
5379   IdentifierInfo * getType() const {
5380     return type;
5381   }
5382 
5383   int getFormatIdx() const {
5384     return formatIdx;
5385   }
5386 
5387   int getFirstArg() const {
5388     return firstArg;
5389   }
5390 
5391 
5392 
5393   static bool classof(const Attr *A) { return A->getKind() == attr::Format; }
5394 };
5395 
5396 class CLANG_ABI FormatArgAttr : public InheritableAttr {
5397 ParamIdx formatIdx;
5398 
5399 public:
5400   enum Spelling {
5401     GNU_format_arg = 0,
5402     CXX11_gnu_format_arg = 1,
5403     C23_gnu_format_arg = 2,
5404   SpellingNotCalculated = 15
5405 
5406   };
5407 
5408   // Factory methods
5409   static FormatArgAttr *CreateImplicit(ASTContext &Ctx, ParamIdx FormatIdx, const AttributeCommonInfo &CommonInfo);
5410   static FormatArgAttr *Create(ASTContext &Ctx, ParamIdx FormatIdx, const AttributeCommonInfo &CommonInfo);
5411   static FormatArgAttr *CreateImplicit(ASTContext &Ctx, ParamIdx FormatIdx, SourceRange Range = {}, Spelling S = GNU_format_arg);
5412   static FormatArgAttr *Create(ASTContext &Ctx, ParamIdx FormatIdx, SourceRange Range = {}, Spelling S = GNU_format_arg);
5413 
5414   // Constructors
5415   FormatArgAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
5416               , ParamIdx FormatIdx
5417              );
5418 
5419   FormatArgAttr *clone(ASTContext &C) const;
5420   void printPretty(raw_ostream &OS,
5421                    const PrintingPolicy &Policy) const;
5422   const char *getSpelling() const;
5423   ParamIdx getFormatIdx() const {
5424     return formatIdx;
5425   }
5426 
5427 
5428 
5429   static bool classof(const Attr *A) { return A->getKind() == attr::FormatArg; }
5430 };
5431 
5432 class CLANG_ABI FunctionReturnThunksAttr : public InheritableAttr {
5433 public:
5434   enum Kind {
5435     Keep,
5436     Extern
5437   };
5438 private:
5439   FunctionReturnThunksAttr::Kind thunkType;
5440 
5441 public:
5442   enum Spelling {
5443     GNU_function_return = 0,
5444     CXX11_gnu_function_return = 1,
5445     C23_gnu_function_return = 2,
5446   SpellingNotCalculated = 15
5447 
5448   };
5449 
5450   // Factory methods
5451   static FunctionReturnThunksAttr *CreateImplicit(ASTContext &Ctx, FunctionReturnThunksAttr::Kind ThunkType, const AttributeCommonInfo &CommonInfo);
5452   static FunctionReturnThunksAttr *Create(ASTContext &Ctx, FunctionReturnThunksAttr::Kind ThunkType, const AttributeCommonInfo &CommonInfo);
5453   static FunctionReturnThunksAttr *CreateImplicit(ASTContext &Ctx, FunctionReturnThunksAttr::Kind ThunkType, SourceRange Range = {}, Spelling S = GNU_function_return);
5454   static FunctionReturnThunksAttr *Create(ASTContext &Ctx, FunctionReturnThunksAttr::Kind ThunkType, SourceRange Range = {}, Spelling S = GNU_function_return);
5455 
5456   // Constructors
5457   FunctionReturnThunksAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
5458               , FunctionReturnThunksAttr::Kind ThunkType
5459              );
5460 
5461   FunctionReturnThunksAttr *clone(ASTContext &C) const;
5462   void printPretty(raw_ostream &OS,
5463                    const PrintingPolicy &Policy) const;
5464   const char *getSpelling() const;
5465   FunctionReturnThunksAttr::Kind getThunkType() const {
5466     return thunkType;
5467   }
5468 
5469   static bool ConvertStrToKind(StringRef Val, FunctionReturnThunksAttr::Kind &Out);
5470   static const char *ConvertKindToStr(FunctionReturnThunksAttr::Kind Val);
5471 
5472 
5473   static bool classof(const Attr *A) { return A->getKind() == attr::FunctionReturnThunks; }
5474 };
5475 
5476 class CLANG_ABI GNUInlineAttr : public InheritableAttr {
5477 public:
5478   enum Spelling {
5479     GNU_gnu_inline = 0,
5480     CXX11_gnu_gnu_inline = 1,
5481     C23_gnu_gnu_inline = 2,
5482   SpellingNotCalculated = 15
5483 
5484   };
5485 
5486   // Factory methods
5487   static GNUInlineAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
5488   static GNUInlineAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
5489   static GNUInlineAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_gnu_inline);
5490   static GNUInlineAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_gnu_inline);
5491 
5492   // Constructors
5493   GNUInlineAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
5494              );
5495 
5496   GNUInlineAttr *clone(ASTContext &C) const;
5497   void printPretty(raw_ostream &OS,
5498                    const PrintingPolicy &Policy) const;
5499   const char *getSpelling() const;
5500 
5501 
5502   static bool classof(const Attr *A) { return A->getKind() == attr::GNUInline; }
5503 };
5504 
5505 class CLANG_ABI GuardedByAttr : public InheritableAttr {
5506 Expr * arg;
5507 
5508 public:
5509   // Factory methods
5510   static GuardedByAttr *CreateImplicit(ASTContext &Ctx, Expr * Arg, const AttributeCommonInfo &CommonInfo);
5511   static GuardedByAttr *Create(ASTContext &Ctx, Expr * Arg, const AttributeCommonInfo &CommonInfo);
5512   static GuardedByAttr *CreateImplicit(ASTContext &Ctx, Expr * Arg, SourceRange Range = {});
5513   static GuardedByAttr *Create(ASTContext &Ctx, Expr * Arg, SourceRange Range = {});
5514 
5515   // Constructors
5516   GuardedByAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
5517               , Expr * Arg
5518              );
5519 
5520   GuardedByAttr *clone(ASTContext &C) const;
5521   void printPretty(raw_ostream &OS,
5522                    const PrintingPolicy &Policy) const;
5523   const char *getSpelling() const;
5524   Expr * getArg() const {
5525     return arg;
5526   }
5527 
5528 
5529 
5530   static bool classof(const Attr *A) { return A->getKind() == attr::GuardedBy; }
5531 };
5532 
5533 class CLANG_ABI GuardedVarAttr : public InheritableAttr {
5534 public:
5535   enum Spelling {
5536     GNU_guarded_var = 0,
5537     CXX11_clang_guarded_var = 1,
5538   SpellingNotCalculated = 15
5539 
5540   };
5541 
5542   // Factory methods
5543   static GuardedVarAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
5544   static GuardedVarAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
5545   static GuardedVarAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_guarded_var);
5546   static GuardedVarAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_guarded_var);
5547 
5548   // Constructors
5549   GuardedVarAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
5550              );
5551 
5552   GuardedVarAttr *clone(ASTContext &C) const;
5553   void printPretty(raw_ostream &OS,
5554                    const PrintingPolicy &Policy) const;
5555   const char *getSpelling() const;
5556 
5557 
5558   static bool classof(const Attr *A) { return A->getKind() == attr::GuardedVar; }
5559 };
5560 
5561 class CLANG_ABI HIPManagedAttr : public InheritableAttr {
5562 public:
5563   enum Spelling {
5564     GNU_managed = 0,
5565     Declspec_managed = 1,
5566   SpellingNotCalculated = 15
5567 
5568   };
5569 
5570   // Factory methods
5571   static HIPManagedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
5572   static HIPManagedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
5573   static HIPManagedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_managed);
5574   static HIPManagedAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_managed);
5575 
5576   // Constructors
5577   HIPManagedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
5578              );
5579 
5580   HIPManagedAttr *clone(ASTContext &C) const;
5581   void printPretty(raw_ostream &OS,
5582                    const PrintingPolicy &Policy) const;
5583   const char *getSpelling() const;
5584 
5585 
5586   static bool classof(const Attr *A) { return A->getKind() == attr::HIPManaged; }
5587 };
5588 
5589 class CLANG_ABI HLSLContainedTypeAttr : public TypeAttr {
5590 TypeSourceInfo * type;
5591 
5592 public:
5593   // Factory methods
5594   static HLSLContainedTypeAttr *CreateImplicit(ASTContext &Ctx, TypeSourceInfo * Type, const AttributeCommonInfo &CommonInfo);
5595   static HLSLContainedTypeAttr *Create(ASTContext &Ctx, TypeSourceInfo * Type, const AttributeCommonInfo &CommonInfo);
5596   static HLSLContainedTypeAttr *CreateImplicit(ASTContext &Ctx, TypeSourceInfo * Type, SourceRange Range = {});
5597   static HLSLContainedTypeAttr *Create(ASTContext &Ctx, TypeSourceInfo * Type, SourceRange Range = {});
5598 
5599   // Constructors
5600   HLSLContainedTypeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
5601               , TypeSourceInfo * Type
5602              );
5603 
5604   HLSLContainedTypeAttr *clone(ASTContext &C) const;
5605   void printPretty(raw_ostream &OS,
5606                    const PrintingPolicy &Policy) const;
5607   const char *getSpelling() const;
5608   QualType getType() const {
5609     return type->getType();
5610   }  TypeSourceInfo * getTypeLoc() const {
5611     return type;
5612   }
5613 
5614 
5615 
5616   static bool classof(const Attr *A) { return A->getKind() == attr::HLSLContainedType; }
5617 };
5618 
5619 class CLANG_ABI HLSLControlFlowHintAttr : public StmtAttr {
5620 public:
5621   enum Spelling {
5622     Microsoft_branch = 0,
5623     Microsoft_flatten = 1,
5624   SpellingNotCalculated = 15
5625 
5626   };
5627 
5628   // Factory methods
5629   static HLSLControlFlowHintAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
5630   static HLSLControlFlowHintAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
5631   static HLSLControlFlowHintAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Microsoft_branch);
5632   static HLSLControlFlowHintAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Microsoft_branch);
5633 
5634   // Constructors
5635   HLSLControlFlowHintAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
5636              );
5637 
5638   HLSLControlFlowHintAttr *clone(ASTContext &C) const;
5639   void printPretty(raw_ostream &OS,
5640                    const PrintingPolicy &Policy) const;
5641   const char *getSpelling() const;
5642   Spelling getSemanticSpelling() const;
5643 
5644 
5645   static bool classof(const Attr *A) { return A->getKind() == attr::HLSLControlFlowHint; }
5646 };
5647 
5648 class CLANG_ABI HLSLGroupSharedAddressSpaceAttr : public TypeAttr {
5649 public:
5650   // Factory methods
5651   static HLSLGroupSharedAddressSpaceAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
5652   static HLSLGroupSharedAddressSpaceAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
5653   static HLSLGroupSharedAddressSpaceAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
5654   static HLSLGroupSharedAddressSpaceAttr *Create(ASTContext &Ctx, SourceRange Range = {});
5655 
5656   // Constructors
5657   HLSLGroupSharedAddressSpaceAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
5658              );
5659 
5660   HLSLGroupSharedAddressSpaceAttr *clone(ASTContext &C) const;
5661   void printPretty(raw_ostream &OS,
5662                    const PrintingPolicy &Policy) const;
5663   const char *getSpelling() const;
5664 
5665 
5666   static bool classof(const Attr *A) { return A->getKind() == attr::HLSLGroupSharedAddressSpace; }
5667 };
5668 
5669 class CLANG_ABI HLSLLoopHintAttr : public StmtAttr {
5670 unsigned directive;
5671 
5672 public:
5673   enum Spelling {
5674     Microsoft_unroll = 0,
5675     Microsoft_loop = 1,
5676   SpellingNotCalculated = 15
5677 
5678   };
5679 
5680   // Factory methods
5681   static HLSLLoopHintAttr *CreateImplicit(ASTContext &Ctx, unsigned Directive, const AttributeCommonInfo &CommonInfo);
5682   static HLSLLoopHintAttr *Create(ASTContext &Ctx, unsigned Directive, const AttributeCommonInfo &CommonInfo);
5683   static HLSLLoopHintAttr *CreateImplicit(ASTContext &Ctx, unsigned Directive, SourceRange Range = {}, Spelling S = Microsoft_unroll);
5684   static HLSLLoopHintAttr *Create(ASTContext &Ctx, unsigned Directive, SourceRange Range = {}, Spelling S = Microsoft_unroll);
5685 
5686   // Constructors
5687   HLSLLoopHintAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
5688               , unsigned Directive
5689              );
5690   HLSLLoopHintAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
5691              );
5692 
5693   HLSLLoopHintAttr *clone(ASTContext &C) const;
5694   void printPretty(raw_ostream &OS,
5695                    const PrintingPolicy &Policy) const;
5696   const char *getSpelling() const;
5697   Spelling getSemanticSpelling() const;
5698   unsigned getDirective() const {
5699     return directive;
5700   }
5701 
5702 
5703 
5704   static bool classof(const Attr *A) { return A->getKind() == attr::HLSLLoopHint; }
5705 };
5706 
5707 class CLANG_ABI HLSLNumThreadsAttr : public InheritableAttr {
5708 int x;
5709 
5710 int y;
5711 
5712 int z;
5713 
5714 public:
5715   // Factory methods
5716   static HLSLNumThreadsAttr *CreateImplicit(ASTContext &Ctx, int X, int Y, int Z, const AttributeCommonInfo &CommonInfo);
5717   static HLSLNumThreadsAttr *Create(ASTContext &Ctx, int X, int Y, int Z, const AttributeCommonInfo &CommonInfo);
5718   static HLSLNumThreadsAttr *CreateImplicit(ASTContext &Ctx, int X, int Y, int Z, SourceRange Range = {});
5719   static HLSLNumThreadsAttr *Create(ASTContext &Ctx, int X, int Y, int Z, SourceRange Range = {});
5720 
5721   // Constructors
5722   HLSLNumThreadsAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
5723               , int X
5724               , int Y
5725               , int Z
5726              );
5727 
5728   HLSLNumThreadsAttr *clone(ASTContext &C) const;
5729   void printPretty(raw_ostream &OS,
5730                    const PrintingPolicy &Policy) const;
5731   const char *getSpelling() const;
5732   int getX() const {
5733     return x;
5734   }
5735 
5736   int getY() const {
5737     return y;
5738   }
5739 
5740   int getZ() const {
5741     return z;
5742   }
5743 
5744 
5745 
5746   static bool classof(const Attr *A) { return A->getKind() == attr::HLSLNumThreads; }
5747 };
5748 
5749 class CLANG_ABI HLSLPackOffsetAttr : public HLSLAnnotationAttr {
5750 int subcomponent;
5751 
5752 int component;
5753 
5754 public:
5755   // Factory methods
5756   static HLSLPackOffsetAttr *CreateImplicit(ASTContext &Ctx, int Subcomponent, int Component, const AttributeCommonInfo &CommonInfo);
5757   static HLSLPackOffsetAttr *Create(ASTContext &Ctx, int Subcomponent, int Component, const AttributeCommonInfo &CommonInfo);
5758   static HLSLPackOffsetAttr *CreateImplicit(ASTContext &Ctx, int Subcomponent, int Component, SourceRange Range = {});
5759   static HLSLPackOffsetAttr *Create(ASTContext &Ctx, int Subcomponent, int Component, SourceRange Range = {});
5760 
5761   // Constructors
5762   HLSLPackOffsetAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
5763               , int Subcomponent
5764               , int Component
5765              );
5766 
5767   HLSLPackOffsetAttr *clone(ASTContext &C) const;
5768   void printPretty(raw_ostream &OS,
5769                    const PrintingPolicy &Policy) const;
5770   const char *getSpelling() const;
5771   int getSubcomponent() const {
5772     return subcomponent;
5773   }
5774 
5775   int getComponent() const {
5776     return component;
5777   }
5778 
5779 
5780   unsigned getOffsetInBytes() {
5781     return subcomponent * 16 + component * 4;
5782   }
5783   
5784 
5785   static bool classof(const Attr *A) { return A->getKind() == attr::HLSLPackOffset; }
5786 };
5787 
5788 class CLANG_ABI HLSLParamModifierAttr : public ParameterABIAttr {
5789 bool mergedSpelling;
5790 
5791 public:
5792   enum Spelling {
5793     Keyword_in = 0,
5794     Keyword_inout = 1,
5795     Keyword_out = 2,
5796   SpellingNotCalculated = 15
5797 
5798   };
5799 
5800   // Factory methods
5801   static HLSLParamModifierAttr *CreateImplicit(ASTContext &Ctx, bool MergedSpelling, const AttributeCommonInfo &CommonInfo);
5802   static HLSLParamModifierAttr *Create(ASTContext &Ctx, bool MergedSpelling, const AttributeCommonInfo &CommonInfo);
5803   static HLSLParamModifierAttr *CreateImplicit(ASTContext &Ctx, bool MergedSpelling, SourceRange Range = {}, Spelling S = Keyword_in);
5804   static HLSLParamModifierAttr *Create(ASTContext &Ctx, bool MergedSpelling, SourceRange Range = {}, Spelling S = Keyword_in);
5805   static HLSLParamModifierAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
5806   static HLSLParamModifierAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
5807   static HLSLParamModifierAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Keyword_in);
5808   static HLSLParamModifierAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Keyword_in);
5809 
5810   // Constructors
5811   HLSLParamModifierAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
5812               , bool MergedSpelling
5813              );
5814   HLSLParamModifierAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
5815              );
5816 
5817   HLSLParamModifierAttr *clone(ASTContext &C) const;
5818   void printPretty(raw_ostream &OS,
5819                    const PrintingPolicy &Policy) const;
5820   const char *getSpelling() const;
5821   Spelling getSemanticSpelling() const;
5822   bool isIn() const { return getAttributeSpellingListIndex() == 0; }
5823   bool isInOut() const { return getAttributeSpellingListIndex() == 1; }
5824   bool isOut() const { return getAttributeSpellingListIndex() == 2; }
5825   bool isAnyOut() const { return getAttributeSpellingListIndex() == 2 ||
5826     getAttributeSpellingListIndex() == 1; }
5827   bool isAnyIn() const { return getAttributeSpellingListIndex() == 0 ||
5828     getAttributeSpellingListIndex() == 1; }
5829   bool getMergedSpelling() const {
5830     return mergedSpelling;
5831   }
5832 
5833   static const bool DefaultMergedSpelling = false;
5834 
5835 
5836 
5837   static bool classof(const Attr *A) { return A->getKind() == attr::HLSLParamModifier; }
5838 };
5839 
5840 class CLANG_ABI HLSLROVAttr : public TypeAttr {
5841 public:
5842   // Factory methods
5843   static HLSLROVAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
5844   static HLSLROVAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
5845   static HLSLROVAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
5846   static HLSLROVAttr *Create(ASTContext &Ctx, SourceRange Range = {});
5847 
5848   // Constructors
5849   HLSLROVAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
5850              );
5851 
5852   HLSLROVAttr *clone(ASTContext &C) const;
5853   void printPretty(raw_ostream &OS,
5854                    const PrintingPolicy &Policy) const;
5855   const char *getSpelling() const;
5856 
5857 
5858   static bool classof(const Attr *A) { return A->getKind() == attr::HLSLROV; }
5859 };
5860 
5861 class CLANG_ABI HLSLRawBufferAttr : public TypeAttr {
5862 public:
5863   // Factory methods
5864   static HLSLRawBufferAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
5865   static HLSLRawBufferAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
5866   static HLSLRawBufferAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
5867   static HLSLRawBufferAttr *Create(ASTContext &Ctx, SourceRange Range = {});
5868 
5869   // Constructors
5870   HLSLRawBufferAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
5871              );
5872 
5873   HLSLRawBufferAttr *clone(ASTContext &C) const;
5874   void printPretty(raw_ostream &OS,
5875                    const PrintingPolicy &Policy) const;
5876   const char *getSpelling() const;
5877 
5878 
5879   static bool classof(const Attr *A) { return A->getKind() == attr::HLSLRawBuffer; }
5880 };
5881 
5882 class CLANG_ABI HLSLResourceAttr : public InheritableAttr {
5883 private:
5884   llvm::hlsl::ResourceKind resourceKind;
5885 
5886 public:
5887   // Factory methods
5888   static HLSLResourceAttr *CreateImplicit(ASTContext &Ctx, llvm::hlsl::ResourceKind ResourceKind, const AttributeCommonInfo &CommonInfo);
5889   static HLSLResourceAttr *Create(ASTContext &Ctx, llvm::hlsl::ResourceKind ResourceKind, const AttributeCommonInfo &CommonInfo);
5890   static HLSLResourceAttr *CreateImplicit(ASTContext &Ctx, llvm::hlsl::ResourceKind ResourceKind, SourceRange Range = {});
5891   static HLSLResourceAttr *Create(ASTContext &Ctx, llvm::hlsl::ResourceKind ResourceKind, SourceRange Range = {});
5892 
5893   // Constructors
5894   HLSLResourceAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
5895               , llvm::hlsl::ResourceKind ResourceKind
5896              );
5897 
5898   HLSLResourceAttr *clone(ASTContext &C) const;
5899   void printPretty(raw_ostream &OS,
5900                    const PrintingPolicy &Policy) const;
5901   const char *getSpelling() const;
5902   llvm::hlsl::ResourceKind getResourceKind() const {
5903     return resourceKind;
5904   }
5905 
5906   static bool ConvertStrToResourceKind(StringRef Val, llvm::hlsl::ResourceKind &Out);
5907   static const char *ConvertResourceKindToStr(llvm::hlsl::ResourceKind Val);
5908 
5909 
5910   static bool classof(const Attr *A) { return A->getKind() == attr::HLSLResource; }
5911 };
5912 
5913 class CLANG_ABI HLSLResourceBindingAttr : public InheritableAttr {
5914 unsigned slotLength;
5915 char *slot;
5916 
5917 unsigned spaceLength;
5918 char *space;
5919 
5920 public:
5921   // Factory methods
5922   static HLSLResourceBindingAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Slot, llvm::StringRef Space, const AttributeCommonInfo &CommonInfo);
5923   static HLSLResourceBindingAttr *Create(ASTContext &Ctx, llvm::StringRef Slot, llvm::StringRef Space, const AttributeCommonInfo &CommonInfo);
5924   static HLSLResourceBindingAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Slot, llvm::StringRef Space, SourceRange Range = {});
5925   static HLSLResourceBindingAttr *Create(ASTContext &Ctx, llvm::StringRef Slot, llvm::StringRef Space, SourceRange Range = {});
5926 
5927   // Constructors
5928   HLSLResourceBindingAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
5929               , llvm::StringRef Slot
5930               , llvm::StringRef Space
5931              );
5932   HLSLResourceBindingAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
5933               , llvm::StringRef Slot
5934              );
5935 
5936   HLSLResourceBindingAttr *clone(ASTContext &C) const;
5937   void printPretty(raw_ostream &OS,
5938                    const PrintingPolicy &Policy) const;
5939   const char *getSpelling() const;
5940   llvm::StringRef getSlot() const {
5941     return llvm::StringRef(slot, slotLength);
5942   }
5943   unsigned getSlotLength() const {
5944     return slotLength;
5945   }
5946   void setSlot(ASTContext &C, llvm::StringRef S) {
5947     slotLength = S.size();
5948     this->slot = new (C, 1) char [slotLength];
5949     if (!S.empty())
5950       std::memcpy(this->slot, S.data(), slotLength);
5951   }
5952 
5953   llvm::StringRef getSpace() const {
5954     return llvm::StringRef(space, spaceLength);
5955   }
5956   unsigned getSpaceLength() const {
5957     return spaceLength;
5958   }
5959   void setSpace(ASTContext &C, llvm::StringRef S) {
5960     spaceLength = S.size();
5961     this->space = new (C, 1) char [spaceLength];
5962     if (!S.empty())
5963       std::memcpy(this->space, S.data(), spaceLength);
5964   }
5965 
5966 
5967   public:
5968       enum class RegisterType : unsigned { SRV, UAV, CBuffer, Sampler, C, I };
5969 
5970   private:
5971       RegisterType RegType;
5972       unsigned SlotNumber;
5973       unsigned SpaceNumber;
5974 
5975   public:
5976       void setBinding(RegisterType RT, unsigned SlotNum, unsigned SpaceNum) {
5977         RegType = RT;
5978         SlotNumber = SlotNum;
5979         SpaceNumber = SpaceNum;
5980       }
5981       RegisterType getRegisterType() const {
5982         return RegType;
5983       }
5984       unsigned getSlotNumber() const {
5985         return SlotNumber;
5986       }
5987       unsigned getSpaceNumber() const {
5988         return SpaceNumber;
5989       }
5990   
5991 
5992   static bool classof(const Attr *A) { return A->getKind() == attr::HLSLResourceBinding; }
5993 };
5994 
5995 class CLANG_ABI HLSLResourceClassAttr : public TypeAttr {
5996 private:
5997   llvm::hlsl::ResourceClass resourceClass;
5998 
5999 public:
6000   // Factory methods
6001   static HLSLResourceClassAttr *CreateImplicit(ASTContext &Ctx, llvm::hlsl::ResourceClass ResourceClass, const AttributeCommonInfo &CommonInfo);
6002   static HLSLResourceClassAttr *Create(ASTContext &Ctx, llvm::hlsl::ResourceClass ResourceClass, const AttributeCommonInfo &CommonInfo);
6003   static HLSLResourceClassAttr *CreateImplicit(ASTContext &Ctx, llvm::hlsl::ResourceClass ResourceClass, SourceRange Range = {});
6004   static HLSLResourceClassAttr *Create(ASTContext &Ctx, llvm::hlsl::ResourceClass ResourceClass, SourceRange Range = {});
6005 
6006   // Constructors
6007   HLSLResourceClassAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6008               , llvm::hlsl::ResourceClass ResourceClass
6009              );
6010 
6011   HLSLResourceClassAttr *clone(ASTContext &C) const;
6012   void printPretty(raw_ostream &OS,
6013                    const PrintingPolicy &Policy) const;
6014   const char *getSpelling() const;
6015   llvm::hlsl::ResourceClass getResourceClass() const {
6016     return resourceClass;
6017   }
6018 
6019   static bool ConvertStrToResourceClass(StringRef Val, llvm::hlsl::ResourceClass &Out);
6020   static const char *ConvertResourceClassToStr(llvm::hlsl::ResourceClass Val);
6021 
6022 
6023   static bool classof(const Attr *A) { return A->getKind() == attr::HLSLResourceClass; }
6024 };
6025 
6026 class CLANG_ABI HLSLSV_DispatchThreadIDAttr : public HLSLAnnotationAttr {
6027 public:
6028   // Factory methods
6029   static HLSLSV_DispatchThreadIDAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
6030   static HLSLSV_DispatchThreadIDAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
6031   static HLSLSV_DispatchThreadIDAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
6032   static HLSLSV_DispatchThreadIDAttr *Create(ASTContext &Ctx, SourceRange Range = {});
6033 
6034   // Constructors
6035   HLSLSV_DispatchThreadIDAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6036              );
6037 
6038   HLSLSV_DispatchThreadIDAttr *clone(ASTContext &C) const;
6039   void printPretty(raw_ostream &OS,
6040                    const PrintingPolicy &Policy) const;
6041   const char *getSpelling() const;
6042 
6043 
6044   static bool classof(const Attr *A) { return A->getKind() == attr::HLSLSV_DispatchThreadID; }
6045 };
6046 
6047 class CLANG_ABI HLSLSV_GroupIDAttr : public HLSLAnnotationAttr {
6048 public:
6049   // Factory methods
6050   static HLSLSV_GroupIDAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
6051   static HLSLSV_GroupIDAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
6052   static HLSLSV_GroupIDAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
6053   static HLSLSV_GroupIDAttr *Create(ASTContext &Ctx, SourceRange Range = {});
6054 
6055   // Constructors
6056   HLSLSV_GroupIDAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6057              );
6058 
6059   HLSLSV_GroupIDAttr *clone(ASTContext &C) const;
6060   void printPretty(raw_ostream &OS,
6061                    const PrintingPolicy &Policy) const;
6062   const char *getSpelling() const;
6063 
6064 
6065   static bool classof(const Attr *A) { return A->getKind() == attr::HLSLSV_GroupID; }
6066 };
6067 
6068 class CLANG_ABI HLSLSV_GroupIndexAttr : public HLSLAnnotationAttr {
6069 public:
6070   // Factory methods
6071   static HLSLSV_GroupIndexAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
6072   static HLSLSV_GroupIndexAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
6073   static HLSLSV_GroupIndexAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
6074   static HLSLSV_GroupIndexAttr *Create(ASTContext &Ctx, SourceRange Range = {});
6075 
6076   // Constructors
6077   HLSLSV_GroupIndexAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6078              );
6079 
6080   HLSLSV_GroupIndexAttr *clone(ASTContext &C) const;
6081   void printPretty(raw_ostream &OS,
6082                    const PrintingPolicy &Policy) const;
6083   const char *getSpelling() const;
6084 
6085 
6086   static bool classof(const Attr *A) { return A->getKind() == attr::HLSLSV_GroupIndex; }
6087 };
6088 
6089 class CLANG_ABI HLSLSV_GroupThreadIDAttr : public HLSLAnnotationAttr {
6090 public:
6091   // Factory methods
6092   static HLSLSV_GroupThreadIDAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
6093   static HLSLSV_GroupThreadIDAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
6094   static HLSLSV_GroupThreadIDAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
6095   static HLSLSV_GroupThreadIDAttr *Create(ASTContext &Ctx, SourceRange Range = {});
6096 
6097   // Constructors
6098   HLSLSV_GroupThreadIDAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6099              );
6100 
6101   HLSLSV_GroupThreadIDAttr *clone(ASTContext &C) const;
6102   void printPretty(raw_ostream &OS,
6103                    const PrintingPolicy &Policy) const;
6104   const char *getSpelling() const;
6105 
6106 
6107   static bool classof(const Attr *A) { return A->getKind() == attr::HLSLSV_GroupThreadID; }
6108 };
6109 
6110 class CLANG_ABI HLSLShaderAttr : public InheritableAttr {
6111 private:
6112   llvm::Triple::EnvironmentType type;
6113 
6114 public:
6115   // Factory methods
6116   static HLSLShaderAttr *CreateImplicit(ASTContext &Ctx, llvm::Triple::EnvironmentType Type, const AttributeCommonInfo &CommonInfo);
6117   static HLSLShaderAttr *Create(ASTContext &Ctx, llvm::Triple::EnvironmentType Type, const AttributeCommonInfo &CommonInfo);
6118   static HLSLShaderAttr *CreateImplicit(ASTContext &Ctx, llvm::Triple::EnvironmentType Type, SourceRange Range = {});
6119   static HLSLShaderAttr *Create(ASTContext &Ctx, llvm::Triple::EnvironmentType Type, SourceRange Range = {});
6120 
6121   // Constructors
6122   HLSLShaderAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6123               , llvm::Triple::EnvironmentType Type
6124              );
6125 
6126   HLSLShaderAttr *clone(ASTContext &C) const;
6127   void printPretty(raw_ostream &OS,
6128                    const PrintingPolicy &Policy) const;
6129   const char *getSpelling() const;
6130   llvm::Triple::EnvironmentType getType() const {
6131     return type;
6132   }
6133 
6134   static bool ConvertStrToEnvironmentType(StringRef Val, llvm::Triple::EnvironmentType &Out);
6135   static const char *ConvertEnvironmentTypeToStr(llvm::Triple::EnvironmentType Val);
6136 
6137   static bool isValidShaderType(llvm::Triple::EnvironmentType ShaderType) {
6138     return ShaderType >= llvm::Triple::Pixel && ShaderType <= llvm::Triple::Amplification;
6139   }
6140 
6141 
6142   static bool classof(const Attr *A) { return A->getKind() == attr::HLSLShader; }
6143 };
6144 
6145 class CLANG_ABI HLSLWaveSizeAttr : public InheritableAttr {
6146 int min;
6147 
6148 int max;
6149 
6150 int preferred;
6151 
6152 public:
6153   // Factory methods
6154   static HLSLWaveSizeAttr *CreateImplicit(ASTContext &Ctx, int Min, int Max, int Preferred, const AttributeCommonInfo &CommonInfo);
6155   static HLSLWaveSizeAttr *Create(ASTContext &Ctx, int Min, int Max, int Preferred, const AttributeCommonInfo &CommonInfo);
6156   static HLSLWaveSizeAttr *CreateImplicit(ASTContext &Ctx, int Min, int Max, int Preferred, SourceRange Range = {});
6157   static HLSLWaveSizeAttr *Create(ASTContext &Ctx, int Min, int Max, int Preferred, SourceRange Range = {});
6158 
6159   // Constructors
6160   HLSLWaveSizeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6161               , int Min
6162               , int Max
6163               , int Preferred
6164              );
6165   HLSLWaveSizeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6166               , int Min
6167              );
6168 
6169   HLSLWaveSizeAttr *clone(ASTContext &C) const;
6170   void printPretty(raw_ostream &OS,
6171                    const PrintingPolicy &Policy) const;
6172   const char *getSpelling() const;
6173   int getMin() const {
6174     return min;
6175   }
6176 
6177   int getMax() const {
6178     return max;
6179   }
6180 
6181   static const int DefaultMax = 0;
6182 
6183   int getPreferred() const {
6184     return preferred;
6185   }
6186 
6187   static const int DefaultPreferred = 0;
6188 
6189 
6190     private:
6191       int SpelledArgsCount = 0;
6192 
6193     public:
6194       void setSpelledArgsCount(int C) { SpelledArgsCount = C; }
6195       int getSpelledArgsCount() const { return SpelledArgsCount; }
6196   
6197 
6198   static bool classof(const Attr *A) { return A->getKind() == attr::HLSLWaveSize; }
6199 };
6200 
6201 class CLANG_ABI HotAttr : public InheritableAttr {
6202 public:
6203   enum Spelling {
6204     GNU_hot = 0,
6205     CXX11_gnu_hot = 1,
6206     C23_gnu_hot = 2,
6207   SpellingNotCalculated = 15
6208 
6209   };
6210 
6211   // Factory methods
6212   static HotAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
6213   static HotAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
6214   static HotAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_hot);
6215   static HotAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_hot);
6216 
6217   // Constructors
6218   HotAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6219              );
6220 
6221   HotAttr *clone(ASTContext &C) const;
6222   void printPretty(raw_ostream &OS,
6223                    const PrintingPolicy &Policy) const;
6224   const char *getSpelling() const;
6225 
6226 
6227   static bool classof(const Attr *A) { return A->getKind() == attr::Hot; }
6228 };
6229 
6230 class CLANG_ABI HybridPatchableAttr : public InheritableAttr {
6231 public:
6232   enum Spelling {
6233     Declspec_hybrid_patchable = 0,
6234     GNU_hybrid_patchable = 1,
6235     CXX11_clang_hybrid_patchable = 2,
6236     C23_clang_hybrid_patchable = 3,
6237   SpellingNotCalculated = 15
6238 
6239   };
6240 
6241   // Factory methods
6242   static HybridPatchableAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
6243   static HybridPatchableAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
6244   static HybridPatchableAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Declspec_hybrid_patchable);
6245   static HybridPatchableAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Declspec_hybrid_patchable);
6246 
6247   // Constructors
6248   HybridPatchableAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6249              );
6250 
6251   HybridPatchableAttr *clone(ASTContext &C) const;
6252   void printPretty(raw_ostream &OS,
6253                    const PrintingPolicy &Policy) const;
6254   const char *getSpelling() const;
6255 
6256 
6257   static bool classof(const Attr *A) { return A->getKind() == attr::HybridPatchable; }
6258 };
6259 
6260 class CLANG_ABI IBActionAttr : public InheritableAttr {
6261 public:
6262   enum Spelling {
6263     GNU_ibaction = 0,
6264     CXX11_clang_ibaction = 1,
6265     C23_clang_ibaction = 2,
6266   SpellingNotCalculated = 15
6267 
6268   };
6269 
6270   // Factory methods
6271   static IBActionAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
6272   static IBActionAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
6273   static IBActionAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_ibaction);
6274   static IBActionAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_ibaction);
6275 
6276   // Constructors
6277   IBActionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6278              );
6279 
6280   IBActionAttr *clone(ASTContext &C) const;
6281   void printPretty(raw_ostream &OS,
6282                    const PrintingPolicy &Policy) const;
6283   const char *getSpelling() const;
6284 
6285 
6286   static bool classof(const Attr *A) { return A->getKind() == attr::IBAction; }
6287 };
6288 
6289 class CLANG_ABI IBOutletAttr : public InheritableAttr {
6290 public:
6291   enum Spelling {
6292     GNU_iboutlet = 0,
6293     CXX11_clang_iboutlet = 1,
6294     C23_clang_iboutlet = 2,
6295   SpellingNotCalculated = 15
6296 
6297   };
6298 
6299   // Factory methods
6300   static IBOutletAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
6301   static IBOutletAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
6302   static IBOutletAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_iboutlet);
6303   static IBOutletAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_iboutlet);
6304 
6305   // Constructors
6306   IBOutletAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6307              );
6308 
6309   IBOutletAttr *clone(ASTContext &C) const;
6310   void printPretty(raw_ostream &OS,
6311                    const PrintingPolicy &Policy) const;
6312   const char *getSpelling() const;
6313 
6314 
6315   static bool classof(const Attr *A) { return A->getKind() == attr::IBOutlet; }
6316 };
6317 
6318 class CLANG_ABI IBOutletCollectionAttr : public InheritableAttr {
6319 TypeSourceInfo * interface_;
6320 
6321 public:
6322   enum Spelling {
6323     GNU_iboutletcollection = 0,
6324     CXX11_clang_iboutletcollection = 1,
6325     C23_clang_iboutletcollection = 2,
6326   SpellingNotCalculated = 15
6327 
6328   };
6329 
6330   // Factory methods
6331   static IBOutletCollectionAttr *CreateImplicit(ASTContext &Ctx, TypeSourceInfo * Interface, const AttributeCommonInfo &CommonInfo);
6332   static IBOutletCollectionAttr *Create(ASTContext &Ctx, TypeSourceInfo * Interface, const AttributeCommonInfo &CommonInfo);
6333   static IBOutletCollectionAttr *CreateImplicit(ASTContext &Ctx, TypeSourceInfo * Interface, SourceRange Range = {}, Spelling S = GNU_iboutletcollection);
6334   static IBOutletCollectionAttr *Create(ASTContext &Ctx, TypeSourceInfo * Interface, SourceRange Range = {}, Spelling S = GNU_iboutletcollection);
6335 
6336   // Constructors
6337   IBOutletCollectionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6338               , TypeSourceInfo * Interface
6339              );
6340   IBOutletCollectionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6341              );
6342 
6343   IBOutletCollectionAttr *clone(ASTContext &C) const;
6344   void printPretty(raw_ostream &OS,
6345                    const PrintingPolicy &Policy) const;
6346   const char *getSpelling() const;
6347   QualType getInterface() const {
6348     return interface_->getType();
6349   }  TypeSourceInfo * getInterfaceLoc() const {
6350     return interface_;
6351   }
6352 
6353 
6354 
6355   static bool classof(const Attr *A) { return A->getKind() == attr::IBOutletCollection; }
6356 };
6357 
6358 class CLANG_ABI IFuncAttr : public Attr {
6359 unsigned resolverLength;
6360 char *resolver;
6361 
6362 public:
6363   enum Spelling {
6364     GNU_ifunc = 0,
6365     CXX11_gnu_ifunc = 1,
6366     C23_gnu_ifunc = 2,
6367   SpellingNotCalculated = 15
6368 
6369   };
6370 
6371   // Factory methods
6372   static IFuncAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Resolver, const AttributeCommonInfo &CommonInfo);
6373   static IFuncAttr *Create(ASTContext &Ctx, llvm::StringRef Resolver, const AttributeCommonInfo &CommonInfo);
6374   static IFuncAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Resolver, SourceRange Range = {}, Spelling S = GNU_ifunc);
6375   static IFuncAttr *Create(ASTContext &Ctx, llvm::StringRef Resolver, SourceRange Range = {}, Spelling S = GNU_ifunc);
6376 
6377   // Constructors
6378   IFuncAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6379               , llvm::StringRef Resolver
6380              );
6381 
6382   IFuncAttr *clone(ASTContext &C) const;
6383   void printPretty(raw_ostream &OS,
6384                    const PrintingPolicy &Policy) const;
6385   const char *getSpelling() const;
6386   llvm::StringRef getResolver() const {
6387     return llvm::StringRef(resolver, resolverLength);
6388   }
6389   unsigned getResolverLength() const {
6390     return resolverLength;
6391   }
6392   void setResolver(ASTContext &C, llvm::StringRef S) {
6393     resolverLength = S.size();
6394     this->resolver = new (C, 1) char [resolverLength];
6395     if (!S.empty())
6396       std::memcpy(this->resolver, S.data(), resolverLength);
6397   }
6398 
6399 
6400 
6401   static bool classof(const Attr *A) { return A->getKind() == attr::IFunc; }
6402 };
6403 
6404 class CLANG_ABI InitPriorityAttr : public InheritableAttr {
6405 unsigned priority;
6406 
6407 public:
6408   enum Spelling {
6409     GNU_init_priority = 0,
6410     CXX11_gnu_init_priority = 1,
6411   SpellingNotCalculated = 15
6412 
6413   };
6414 
6415   // Factory methods
6416   static InitPriorityAttr *CreateImplicit(ASTContext &Ctx, unsigned Priority, const AttributeCommonInfo &CommonInfo);
6417   static InitPriorityAttr *Create(ASTContext &Ctx, unsigned Priority, const AttributeCommonInfo &CommonInfo);
6418   static InitPriorityAttr *CreateImplicit(ASTContext &Ctx, unsigned Priority, SourceRange Range = {}, Spelling S = GNU_init_priority);
6419   static InitPriorityAttr *Create(ASTContext &Ctx, unsigned Priority, SourceRange Range = {}, Spelling S = GNU_init_priority);
6420 
6421   // Constructors
6422   InitPriorityAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6423               , unsigned Priority
6424              );
6425 
6426   InitPriorityAttr *clone(ASTContext &C) const;
6427   void printPretty(raw_ostream &OS,
6428                    const PrintingPolicy &Policy) const;
6429   const char *getSpelling() const;
6430   unsigned getPriority() const {
6431     return priority;
6432   }
6433 
6434 
6435 
6436   static bool classof(const Attr *A) { return A->getKind() == attr::InitPriority; }
6437 };
6438 
6439 class CLANG_ABI InitSegAttr : public Attr {
6440 unsigned sectionLength;
6441 char *section;
6442 
6443 public:
6444   // Factory methods
6445   static InitSegAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Section, const AttributeCommonInfo &CommonInfo);
6446   static InitSegAttr *Create(ASTContext &Ctx, llvm::StringRef Section, const AttributeCommonInfo &CommonInfo);
6447   static InitSegAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Section, SourceRange Range = {});
6448   static InitSegAttr *Create(ASTContext &Ctx, llvm::StringRef Section, SourceRange Range = {});
6449 
6450   // Constructors
6451   InitSegAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6452               , llvm::StringRef Section
6453              );
6454 
6455   InitSegAttr *clone(ASTContext &C) const;
6456   void printPretty(raw_ostream &OS,
6457                    const PrintingPolicy &Policy) const;
6458   const char *getSpelling() const;
6459   llvm::StringRef getSection() const {
6460     return llvm::StringRef(section, sectionLength);
6461   }
6462   unsigned getSectionLength() const {
6463     return sectionLength;
6464   }
6465   void setSection(ASTContext &C, llvm::StringRef S) {
6466     sectionLength = S.size();
6467     this->section = new (C, 1) char [sectionLength];
6468     if (!S.empty())
6469       std::memcpy(this->section, S.data(), sectionLength);
6470   }
6471 
6472 
6473   void printPrettyPragma(raw_ostream &OS, const PrintingPolicy &Policy) const {
6474     OS << " (" << getSection() << ')';
6475   }
6476   
6477 
6478   static bool classof(const Attr *A) { return A->getKind() == attr::InitSeg; }
6479 };
6480 
6481 class CLANG_ABI IntelOclBiccAttr : public InheritableAttr {
6482 public:
6483   enum Spelling {
6484     GNU_intel_ocl_bicc = 0,
6485     CXX11_clang_intel_ocl_bicc = 1,
6486   SpellingNotCalculated = 15
6487 
6488   };
6489 
6490   // Factory methods
6491   static IntelOclBiccAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
6492   static IntelOclBiccAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
6493   static IntelOclBiccAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_intel_ocl_bicc);
6494   static IntelOclBiccAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_intel_ocl_bicc);
6495 
6496   // Constructors
6497   IntelOclBiccAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6498              );
6499 
6500   IntelOclBiccAttr *clone(ASTContext &C) const;
6501   void printPretty(raw_ostream &OS,
6502                    const PrintingPolicy &Policy) const;
6503   const char *getSpelling() const;
6504 
6505 
6506   static bool classof(const Attr *A) { return A->getKind() == attr::IntelOclBicc; }
6507 };
6508 
6509 class CLANG_ABI InternalLinkageAttr : public InheritableAttr {
6510 public:
6511   enum Spelling {
6512     GNU_internal_linkage = 0,
6513     CXX11_clang_internal_linkage = 1,
6514     C23_clang_internal_linkage = 2,
6515   SpellingNotCalculated = 15
6516 
6517   };
6518 
6519   // Factory methods
6520   static InternalLinkageAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
6521   static InternalLinkageAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
6522   static InternalLinkageAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_internal_linkage);
6523   static InternalLinkageAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_internal_linkage);
6524 
6525   // Constructors
6526   InternalLinkageAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6527              );
6528 
6529   InternalLinkageAttr *clone(ASTContext &C) const;
6530   void printPretty(raw_ostream &OS,
6531                    const PrintingPolicy &Policy) const;
6532   const char *getSpelling() const;
6533 
6534 
6535   static bool classof(const Attr *A) { return A->getKind() == attr::InternalLinkage; }
6536 };
6537 
6538 class CLANG_ABI LTOVisibilityPublicAttr : public InheritableAttr {
6539 public:
6540   enum Spelling {
6541     GNU_lto_visibility_public = 0,
6542     CXX11_clang_lto_visibility_public = 1,
6543     C23_clang_lto_visibility_public = 2,
6544   SpellingNotCalculated = 15
6545 
6546   };
6547 
6548   // Factory methods
6549   static LTOVisibilityPublicAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
6550   static LTOVisibilityPublicAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
6551   static LTOVisibilityPublicAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_lto_visibility_public);
6552   static LTOVisibilityPublicAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_lto_visibility_public);
6553 
6554   // Constructors
6555   LTOVisibilityPublicAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6556              );
6557 
6558   LTOVisibilityPublicAttr *clone(ASTContext &C) const;
6559   void printPretty(raw_ostream &OS,
6560                    const PrintingPolicy &Policy) const;
6561   const char *getSpelling() const;
6562 
6563 
6564   static bool classof(const Attr *A) { return A->getKind() == attr::LTOVisibilityPublic; }
6565 };
6566 
6567 class CLANG_ABI LayoutVersionAttr : public InheritableAttr {
6568 unsigned version;
6569 
6570 public:
6571   // Factory methods
6572   static LayoutVersionAttr *CreateImplicit(ASTContext &Ctx, unsigned Version, const AttributeCommonInfo &CommonInfo);
6573   static LayoutVersionAttr *Create(ASTContext &Ctx, unsigned Version, const AttributeCommonInfo &CommonInfo);
6574   static LayoutVersionAttr *CreateImplicit(ASTContext &Ctx, unsigned Version, SourceRange Range = {});
6575   static LayoutVersionAttr *Create(ASTContext &Ctx, unsigned Version, SourceRange Range = {});
6576 
6577   // Constructors
6578   LayoutVersionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6579               , unsigned Version
6580              );
6581 
6582   LayoutVersionAttr *clone(ASTContext &C) const;
6583   void printPretty(raw_ostream &OS,
6584                    const PrintingPolicy &Policy) const;
6585   const char *getSpelling() const;
6586   unsigned getVersion() const {
6587     return version;
6588   }
6589 
6590 
6591 
6592   static bool classof(const Attr *A) { return A->getKind() == attr::LayoutVersion; }
6593 };
6594 
6595 class CLANG_ABI LeafAttr : public InheritableAttr {
6596 public:
6597   enum Spelling {
6598     GNU_leaf = 0,
6599     CXX11_gnu_leaf = 1,
6600     C23_gnu_leaf = 2,
6601   SpellingNotCalculated = 15
6602 
6603   };
6604 
6605   // Factory methods
6606   static LeafAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
6607   static LeafAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
6608   static LeafAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_leaf);
6609   static LeafAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_leaf);
6610 
6611   // Constructors
6612   LeafAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6613              );
6614 
6615   LeafAttr *clone(ASTContext &C) const;
6616   void printPretty(raw_ostream &OS,
6617                    const PrintingPolicy &Policy) const;
6618   const char *getSpelling() const;
6619 
6620 
6621   static bool classof(const Attr *A) { return A->getKind() == attr::Leaf; }
6622 };
6623 
6624 class CLANG_ABI LifetimeBoundAttr : public InheritableAttr {
6625 public:
6626   enum Spelling {
6627     GNU_lifetimebound = 0,
6628     CXX11_clang_lifetimebound = 1,
6629   SpellingNotCalculated = 15
6630 
6631   };
6632 
6633   // Factory methods
6634   static LifetimeBoundAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
6635   static LifetimeBoundAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
6636   static LifetimeBoundAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_lifetimebound);
6637   static LifetimeBoundAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_lifetimebound);
6638 
6639   // Constructors
6640   LifetimeBoundAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6641              );
6642 
6643   LifetimeBoundAttr *clone(ASTContext &C) const;
6644   void printPretty(raw_ostream &OS,
6645                    const PrintingPolicy &Policy) const;
6646   const char *getSpelling() const;
6647 
6648 
6649   static bool classof(const Attr *A) { return A->getKind() == attr::LifetimeBound; }
6650 };
6651 
6652 class CLANG_ABI LifetimeCaptureByAttr : public InheritableAttr {
6653   unsigned params_Size;
6654   int *params_;
6655 
6656 public:
6657   enum Spelling {
6658     GNU_lifetime_capture_by = 0,
6659     CXX11_clang_lifetime_capture_by = 1,
6660   SpellingNotCalculated = 15
6661 
6662   };
6663 
6664   // Factory methods
6665   static LifetimeCaptureByAttr *CreateImplicit(ASTContext &Ctx, int *Params, unsigned ParamsSize, const AttributeCommonInfo &CommonInfo);
6666   static LifetimeCaptureByAttr *Create(ASTContext &Ctx, int *Params, unsigned ParamsSize, const AttributeCommonInfo &CommonInfo);
6667   static LifetimeCaptureByAttr *CreateImplicit(ASTContext &Ctx, int *Params, unsigned ParamsSize, SourceRange Range = {}, Spelling S = GNU_lifetime_capture_by);
6668   static LifetimeCaptureByAttr *Create(ASTContext &Ctx, int *Params, unsigned ParamsSize, SourceRange Range = {}, Spelling S = GNU_lifetime_capture_by);
6669 
6670   // Constructors
6671   LifetimeCaptureByAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6672               , int *Params, unsigned ParamsSize
6673              );
6674   LifetimeCaptureByAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6675              );
6676 
6677   LifetimeCaptureByAttr *clone(ASTContext &C) const;
6678   void printPretty(raw_ostream &OS,
6679                    const PrintingPolicy &Policy) const;
6680   const char *getSpelling() const;
6681   typedef int* params_iterator;
6682   params_iterator params_begin() const { return params_; }
6683   params_iterator params_end() const { return params_ + params_Size; }
6684   unsigned params_size() const { return params_Size; }
6685   llvm::iterator_range<params_iterator> params() const { return llvm::make_range(params_begin(), params_end()); }
6686 
6687 
6688 
6689 private:
6690   ArrayRef<IdentifierInfo*> ArgIdents;
6691   ArrayRef<SourceLocation> ArgLocs;
6692 
6693 public:
6694   static constexpr int THIS = 0;
6695   static constexpr int INVALID = -1;
6696   static constexpr int UNKNOWN = -2;
6697   static constexpr int GLOBAL = -3;
6698 
6699   void setArgs(ArrayRef<IdentifierInfo*> Idents, ArrayRef<SourceLocation> Locs) {
6700     assert(Idents.size() == params_Size);
6701     assert(Locs.size() == params_Size);
6702     ArgIdents = Idents;
6703     ArgLocs = Locs;
6704   }
6705   auto getArgIdents() const { return ArgIdents; }
6706   auto getArgLocs() const { return ArgLocs; }
6707   void setParamIdx(size_t Idx, int Val) {
6708     assert(Idx < params_Size);
6709     params_[Idx] = Val;
6710   }
6711 
6712 
6713   static bool classof(const Attr *A) { return A->getKind() == attr::LifetimeCaptureBy; }
6714 };
6715 
6716 class CLANG_ABI LikelyAttr : public StmtAttr {
6717 public:
6718   enum Spelling {
6719     CXX11_likely = 0,
6720     C23_clang_likely = 1,
6721   SpellingNotCalculated = 15
6722 
6723   };
6724 
6725   // Factory methods
6726   static LikelyAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
6727   static LikelyAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
6728   static LikelyAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = CXX11_likely);
6729   static LikelyAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = CXX11_likely);
6730 
6731   // Constructors
6732   LikelyAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6733              );
6734 
6735   LikelyAttr *clone(ASTContext &C) const;
6736   void printPretty(raw_ostream &OS,
6737                    const PrintingPolicy &Policy) const;
6738   const char *getSpelling() const;
6739 
6740 
6741   static bool classof(const Attr *A) { return A->getKind() == attr::Likely; }
6742 };
6743 
6744 class CLANG_ABI LoaderUninitializedAttr : public Attr {
6745 public:
6746   enum Spelling {
6747     GNU_loader_uninitialized = 0,
6748     CXX11_clang_loader_uninitialized = 1,
6749     C23_clang_loader_uninitialized = 2,
6750   SpellingNotCalculated = 15
6751 
6752   };
6753 
6754   // Factory methods
6755   static LoaderUninitializedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
6756   static LoaderUninitializedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
6757   static LoaderUninitializedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_loader_uninitialized);
6758   static LoaderUninitializedAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_loader_uninitialized);
6759 
6760   // Constructors
6761   LoaderUninitializedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6762              );
6763 
6764   LoaderUninitializedAttr *clone(ASTContext &C) const;
6765   void printPretty(raw_ostream &OS,
6766                    const PrintingPolicy &Policy) const;
6767   const char *getSpelling() const;
6768 
6769 
6770   static bool classof(const Attr *A) { return A->getKind() == attr::LoaderUninitialized; }
6771 };
6772 
6773 class CLANG_ABI LockReturnedAttr : public InheritableAttr {
6774 Expr * arg;
6775 
6776 public:
6777   // Factory methods
6778   static LockReturnedAttr *CreateImplicit(ASTContext &Ctx, Expr * Arg, const AttributeCommonInfo &CommonInfo);
6779   static LockReturnedAttr *Create(ASTContext &Ctx, Expr * Arg, const AttributeCommonInfo &CommonInfo);
6780   static LockReturnedAttr *CreateImplicit(ASTContext &Ctx, Expr * Arg, SourceRange Range = {});
6781   static LockReturnedAttr *Create(ASTContext &Ctx, Expr * Arg, SourceRange Range = {});
6782 
6783   // Constructors
6784   LockReturnedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6785               , Expr * Arg
6786              );
6787 
6788   LockReturnedAttr *clone(ASTContext &C) const;
6789   void printPretty(raw_ostream &OS,
6790                    const PrintingPolicy &Policy) const;
6791   const char *getSpelling() const;
6792   Expr * getArg() const {
6793     return arg;
6794   }
6795 
6796 
6797 
6798   static bool classof(const Attr *A) { return A->getKind() == attr::LockReturned; }
6799 };
6800 
6801 class CLANG_ABI LocksExcludedAttr : public InheritableAttr {
6802   unsigned args_Size;
6803   Expr * *args_;
6804 
6805 public:
6806   // Factory methods
6807   static LocksExcludedAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);
6808   static LocksExcludedAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);
6809   static LocksExcludedAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range = {});
6810   static LocksExcludedAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range = {});
6811 
6812   // Constructors
6813   LocksExcludedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6814               , Expr * *Args, unsigned ArgsSize
6815              );
6816   LocksExcludedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6817              );
6818 
6819   LocksExcludedAttr *clone(ASTContext &C) const;
6820   void printPretty(raw_ostream &OS,
6821                    const PrintingPolicy &Policy) const;
6822   const char *getSpelling() const;
6823   typedef Expr ** args_iterator;
6824   args_iterator args_begin() const { return args_; }
6825   args_iterator args_end() const { return args_ + args_Size; }
6826   unsigned args_size() const { return args_Size; }
6827   llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); }
6828 
6829 
6830 
6831 
6832   static bool classof(const Attr *A) { return A->getKind() == attr::LocksExcluded; }
6833 };
6834 
6835 class CLANG_ABI LoopHintAttr : public Attr {
6836 public:
6837   enum OptionType {
6838     Vectorize,
6839     VectorizeWidth,
6840     Interleave,
6841     InterleaveCount,
6842     Unroll,
6843     UnrollCount,
6844     UnrollAndJam,
6845     UnrollAndJamCount,
6846     PipelineDisabled,
6847     PipelineInitiationInterval,
6848     Distribute,
6849     VectorizePredicate
6850   };
6851 private:
6852   LoopHintAttr::OptionType option;
6853 
6854 public:
6855   enum LoopHintState {
6856     Enable,
6857     Disable,
6858     Numeric,
6859     FixedWidth,
6860     ScalableWidth,
6861     AssumeSafety,
6862     Full
6863   };
6864 private:
6865   LoopHintAttr::LoopHintState state;
6866 
6867 Expr * value;
6868 
6869 public:
6870   enum Spelling {
6871     Pragma_clang_loop = 0,
6872     Pragma_unroll = 1,
6873     Pragma_nounroll = 2,
6874     Pragma_unroll_and_jam = 3,
6875     Pragma_nounroll_and_jam = 4,
6876   SpellingNotCalculated = 15
6877 
6878   };
6879 
6880   // Factory methods
6881   static LoopHintAttr *CreateImplicit(ASTContext &Ctx, LoopHintAttr::OptionType Option, LoopHintAttr::LoopHintState State, Expr * Value, const AttributeCommonInfo &CommonInfo);
6882   static LoopHintAttr *Create(ASTContext &Ctx, LoopHintAttr::OptionType Option, LoopHintAttr::LoopHintState State, Expr * Value, const AttributeCommonInfo &CommonInfo);
6883   static LoopHintAttr *CreateImplicit(ASTContext &Ctx, LoopHintAttr::OptionType Option, LoopHintAttr::LoopHintState State, Expr * Value, SourceRange Range = {}, Spelling S = Pragma_clang_loop);
6884   static LoopHintAttr *Create(ASTContext &Ctx, LoopHintAttr::OptionType Option, LoopHintAttr::LoopHintState State, Expr * Value, SourceRange Range = {}, Spelling S = Pragma_clang_loop);
6885 
6886   // Constructors
6887   LoopHintAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6888               , LoopHintAttr::OptionType Option
6889               , LoopHintAttr::LoopHintState State
6890               , Expr * Value
6891              );
6892 
6893   LoopHintAttr *clone(ASTContext &C) const;
6894   void printPretty(raw_ostream &OS,
6895                    const PrintingPolicy &Policy) const;
6896   const char *getSpelling() const;
6897   Spelling getSemanticSpelling() const;
6898   LoopHintAttr::OptionType getOption() const {
6899     return option;
6900   }
6901 
6902   static bool ConvertStrToOptionType(StringRef Val, LoopHintAttr::OptionType &Out);
6903   static const char *ConvertOptionTypeToStr(LoopHintAttr::OptionType Val);
6904   LoopHintAttr::LoopHintState getState() const {
6905     return state;
6906   }
6907 
6908   static bool ConvertStrToLoopHintState(StringRef Val, LoopHintAttr::LoopHintState &Out);
6909   static const char *ConvertLoopHintStateToStr(LoopHintAttr::LoopHintState Val);
6910   Expr * getValue() const {
6911     return value;
6912   }
6913 
6914 
6915   static const char *getOptionName(int Option) {
6916     switch(Option) {
6917     case Vectorize: return "vectorize";
6918     case VectorizeWidth: return "vectorize_width";
6919     case Interleave: return "interleave";
6920     case InterleaveCount: return "interleave_count";
6921     case Unroll: return "unroll";
6922     case UnrollCount: return "unroll_count";
6923     case UnrollAndJam: return "unroll_and_jam";
6924     case UnrollAndJamCount: return "unroll_and_jam_count";
6925     case PipelineDisabled: return "pipeline";
6926     case PipelineInitiationInterval: return "pipeline_initiation_interval";
6927     case Distribute: return "distribute";
6928     case VectorizePredicate: return "vectorize_predicate";
6929     }
6930     llvm_unreachable("Unhandled LoopHint option.");
6931   }
6932 
6933   void printPrettyPragma(raw_ostream &OS, const PrintingPolicy &Policy) const;
6934 
6935   // Return a string containing the loop hint argument including the
6936   // enclosing parentheses.
6937   std::string getValueString(const PrintingPolicy &Policy) const;
6938 
6939   // Return a string suitable for identifying this attribute in diagnostics.
6940   std::string getDiagnosticName(const PrintingPolicy &Policy) const;
6941   
6942 
6943   static bool classof(const Attr *A) { return A->getKind() == attr::LoopHint; }
6944 };
6945 
6946 class CLANG_ABI M68kInterruptAttr : public InheritableAttr {
6947 unsigned number;
6948 
6949 public:
6950   // Factory methods
6951   static M68kInterruptAttr *CreateImplicit(ASTContext &Ctx, unsigned Number, const AttributeCommonInfo &CommonInfo);
6952   static M68kInterruptAttr *Create(ASTContext &Ctx, unsigned Number, const AttributeCommonInfo &CommonInfo);
6953   static M68kInterruptAttr *CreateImplicit(ASTContext &Ctx, unsigned Number, SourceRange Range = {});
6954   static M68kInterruptAttr *Create(ASTContext &Ctx, unsigned Number, SourceRange Range = {});
6955 
6956   // Constructors
6957   M68kInterruptAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6958               , unsigned Number
6959              );
6960 
6961   M68kInterruptAttr *clone(ASTContext &C) const;
6962   void printPretty(raw_ostream &OS,
6963                    const PrintingPolicy &Policy) const;
6964   const char *getSpelling() const;
6965   unsigned getNumber() const {
6966     return number;
6967   }
6968 
6969 
6970 
6971   static bool classof(const Attr *A) { return A->getKind() == attr::M68kInterrupt; }
6972 };
6973 
6974 class CLANG_ABI M68kRTDAttr : public InheritableAttr {
6975 public:
6976   enum Spelling {
6977     GNU_m68k_rtd = 0,
6978     CXX11_clang_m68k_rtd = 1,
6979     C23_clang_m68k_rtd = 2,
6980   SpellingNotCalculated = 15
6981 
6982   };
6983 
6984   // Factory methods
6985   static M68kRTDAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
6986   static M68kRTDAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
6987   static M68kRTDAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_m68k_rtd);
6988   static M68kRTDAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_m68k_rtd);
6989 
6990   // Constructors
6991   M68kRTDAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
6992              );
6993 
6994   M68kRTDAttr *clone(ASTContext &C) const;
6995   void printPretty(raw_ostream &OS,
6996                    const PrintingPolicy &Policy) const;
6997   const char *getSpelling() const;
6998 
6999 
7000   static bool classof(const Attr *A) { return A->getKind() == attr::M68kRTD; }
7001 };
7002 
7003 class CLANG_ABI MIGServerRoutineAttr : public InheritableAttr {
7004 public:
7005   enum Spelling {
7006     GNU_mig_server_routine = 0,
7007     CXX11_clang_mig_server_routine = 1,
7008     C23_clang_mig_server_routine = 2,
7009   SpellingNotCalculated = 15
7010 
7011   };
7012 
7013   // Factory methods
7014   static MIGServerRoutineAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7015   static MIGServerRoutineAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7016   static MIGServerRoutineAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_mig_server_routine);
7017   static MIGServerRoutineAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_mig_server_routine);
7018 
7019   // Constructors
7020   MIGServerRoutineAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7021              );
7022 
7023   MIGServerRoutineAttr *clone(ASTContext &C) const;
7024   void printPretty(raw_ostream &OS,
7025                    const PrintingPolicy &Policy) const;
7026   const char *getSpelling() const;
7027 
7028 
7029   static bool classof(const Attr *A) { return A->getKind() == attr::MIGServerRoutine; }
7030 };
7031 
7032 class CLANG_ABI MSABIAttr : public InheritableAttr {
7033 public:
7034   enum Spelling {
7035     GNU_ms_abi = 0,
7036     CXX11_gnu_ms_abi = 1,
7037     C23_gnu_ms_abi = 2,
7038   SpellingNotCalculated = 15
7039 
7040   };
7041 
7042   // Factory methods
7043   static MSABIAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7044   static MSABIAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7045   static MSABIAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_ms_abi);
7046   static MSABIAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_ms_abi);
7047 
7048   // Constructors
7049   MSABIAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7050              );
7051 
7052   MSABIAttr *clone(ASTContext &C) const;
7053   void printPretty(raw_ostream &OS,
7054                    const PrintingPolicy &Policy) const;
7055   const char *getSpelling() const;
7056 
7057 
7058   static bool classof(const Attr *A) { return A->getKind() == attr::MSABI; }
7059 };
7060 
7061 class CLANG_ABI MSAllocatorAttr : public InheritableAttr {
7062 public:
7063   // Factory methods
7064   static MSAllocatorAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7065   static MSAllocatorAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7066   static MSAllocatorAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
7067   static MSAllocatorAttr *Create(ASTContext &Ctx, SourceRange Range = {});
7068 
7069   // Constructors
7070   MSAllocatorAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7071              );
7072 
7073   MSAllocatorAttr *clone(ASTContext &C) const;
7074   void printPretty(raw_ostream &OS,
7075                    const PrintingPolicy &Policy) const;
7076   const char *getSpelling() const;
7077 
7078 
7079   static bool classof(const Attr *A) { return A->getKind() == attr::MSAllocator; }
7080 };
7081 
7082 class CLANG_ABI MSConstexprAttr : public InheritableAttr {
7083 public:
7084   // Factory methods
7085   static MSConstexprAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7086   static MSConstexprAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7087   static MSConstexprAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
7088   static MSConstexprAttr *Create(ASTContext &Ctx, SourceRange Range = {});
7089 
7090   // Constructors
7091   MSConstexprAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7092              );
7093 
7094   MSConstexprAttr *clone(ASTContext &C) const;
7095   void printPretty(raw_ostream &OS,
7096                    const PrintingPolicy &Policy) const;
7097   const char *getSpelling() const;
7098 
7099 
7100   static bool classof(const Attr *A) { return A->getKind() == attr::MSConstexpr; }
7101 };
7102 
7103 class CLANG_ABI MSInheritanceAttr : public InheritableAttr {
7104 bool bestCase;
7105 
7106 public:
7107   enum Spelling {
7108     Keyword_single_inheritance = 0,
7109     Keyword_multiple_inheritance = 1,
7110     Keyword_virtual_inheritance = 2,
7111     Keyword_unspecified_inheritance = 3,
7112   SpellingNotCalculated = 15
7113 
7114   };
7115 
7116   // Factory methods
7117   static MSInheritanceAttr *CreateImplicit(ASTContext &Ctx, bool BestCase, const AttributeCommonInfo &CommonInfo);
7118   static MSInheritanceAttr *Create(ASTContext &Ctx, bool BestCase, const AttributeCommonInfo &CommonInfo);
7119   static MSInheritanceAttr *CreateImplicit(ASTContext &Ctx, bool BestCase, SourceRange Range = {}, Spelling S = Keyword_single_inheritance);
7120   static MSInheritanceAttr *Create(ASTContext &Ctx, bool BestCase, SourceRange Range = {}, Spelling S = Keyword_single_inheritance);
7121   static MSInheritanceAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7122   static MSInheritanceAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7123   static MSInheritanceAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Keyword_single_inheritance);
7124   static MSInheritanceAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Keyword_single_inheritance);
7125 
7126   // Constructors
7127   MSInheritanceAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7128               , bool BestCase
7129              );
7130   MSInheritanceAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7131              );
7132 
7133   MSInheritanceAttr *clone(ASTContext &C) const;
7134   void printPretty(raw_ostream &OS,
7135                    const PrintingPolicy &Policy) const;
7136   const char *getSpelling() const;
7137   Spelling getSemanticSpelling() const;
7138   bool getBestCase() const {
7139     return bestCase;
7140   }
7141 
7142   static const bool DefaultBestCase = true;
7143 
7144 
7145   MSInheritanceModel getInheritanceModel() const {
7146     // The spelling enum should agree with MSInheritanceModel.
7147     return MSInheritanceModel(getSemanticSpelling());
7148   }
7149   
7150 
7151   static bool classof(const Attr *A) { return A->getKind() == attr::MSInheritance; }
7152 };
7153 
7154 class CLANG_ABI MSNoVTableAttr : public InheritableAttr {
7155 public:
7156   // Factory methods
7157   static MSNoVTableAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7158   static MSNoVTableAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7159   static MSNoVTableAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
7160   static MSNoVTableAttr *Create(ASTContext &Ctx, SourceRange Range = {});
7161 
7162   // Constructors
7163   MSNoVTableAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7164              );
7165 
7166   MSNoVTableAttr *clone(ASTContext &C) const;
7167   void printPretty(raw_ostream &OS,
7168                    const PrintingPolicy &Policy) const;
7169   const char *getSpelling() const;
7170 
7171 
7172   static bool classof(const Attr *A) { return A->getKind() == attr::MSNoVTable; }
7173 };
7174 
7175 class CLANG_ABI MSP430InterruptAttr : public InheritableAttr {
7176 unsigned number;
7177 
7178 public:
7179   enum Spelling {
7180     GNU_interrupt = 0,
7181     CXX11_gnu_interrupt = 1,
7182     C23_gnu_interrupt = 2,
7183   SpellingNotCalculated = 15
7184 
7185   };
7186 
7187   // Factory methods
7188   static MSP430InterruptAttr *CreateImplicit(ASTContext &Ctx, unsigned Number, const AttributeCommonInfo &CommonInfo);
7189   static MSP430InterruptAttr *Create(ASTContext &Ctx, unsigned Number, const AttributeCommonInfo &CommonInfo);
7190   static MSP430InterruptAttr *CreateImplicit(ASTContext &Ctx, unsigned Number, SourceRange Range = {}, Spelling S = GNU_interrupt);
7191   static MSP430InterruptAttr *Create(ASTContext &Ctx, unsigned Number, SourceRange Range = {}, Spelling S = GNU_interrupt);
7192 
7193   // Constructors
7194   MSP430InterruptAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7195               , unsigned Number
7196              );
7197 
7198   MSP430InterruptAttr *clone(ASTContext &C) const;
7199   void printPretty(raw_ostream &OS,
7200                    const PrintingPolicy &Policy) const;
7201   const char *getSpelling() const;
7202   unsigned getNumber() const {
7203     return number;
7204   }
7205 
7206 
7207 
7208   static bool classof(const Attr *A) { return A->getKind() == attr::MSP430Interrupt; }
7209 };
7210 
7211 class CLANG_ABI MSStructAttr : public InheritableAttr {
7212 public:
7213   enum Spelling {
7214     GNU_ms_struct = 0,
7215     CXX11_gnu_ms_struct = 1,
7216     C23_gnu_ms_struct = 2,
7217   SpellingNotCalculated = 15
7218 
7219   };
7220 
7221   // Factory methods
7222   static MSStructAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7223   static MSStructAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7224   static MSStructAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_ms_struct);
7225   static MSStructAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_ms_struct);
7226 
7227   // Constructors
7228   MSStructAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7229              );
7230 
7231   MSStructAttr *clone(ASTContext &C) const;
7232   void printPretty(raw_ostream &OS,
7233                    const PrintingPolicy &Policy) const;
7234   const char *getSpelling() const;
7235 
7236 
7237   static bool classof(const Attr *A) { return A->getKind() == attr::MSStruct; }
7238 };
7239 
7240 class CLANG_ABI MSVtorDispAttr : public InheritableAttr {
7241 unsigned vdm;
7242 
7243 public:
7244   // Factory methods
7245   static MSVtorDispAttr *CreateImplicit(ASTContext &Ctx, unsigned Vdm, const AttributeCommonInfo &CommonInfo);
7246   static MSVtorDispAttr *Create(ASTContext &Ctx, unsigned Vdm, const AttributeCommonInfo &CommonInfo);
7247   static MSVtorDispAttr *CreateImplicit(ASTContext &Ctx, unsigned Vdm, SourceRange Range = {});
7248   static MSVtorDispAttr *Create(ASTContext &Ctx, unsigned Vdm, SourceRange Range = {});
7249 
7250   // Constructors
7251   MSVtorDispAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7252               , unsigned Vdm
7253              );
7254 
7255   MSVtorDispAttr *clone(ASTContext &C) const;
7256   void printPretty(raw_ostream &OS,
7257                    const PrintingPolicy &Policy) const;
7258   const char *getSpelling() const;
7259   unsigned getVdm() const {
7260     return vdm;
7261   }
7262 
7263 
7264   MSVtorDispMode getVtorDispMode() const { return MSVtorDispMode(vdm); }
7265   
7266 
7267   static bool classof(const Attr *A) { return A->getKind() == attr::MSVtorDisp; }
7268 };
7269 
7270 class CLANG_ABI MaxFieldAlignmentAttr : public InheritableAttr {
7271 unsigned alignment;
7272 
7273 public:
7274   // Factory methods
7275   static MaxFieldAlignmentAttr *CreateImplicit(ASTContext &Ctx, unsigned Alignment, const AttributeCommonInfo &CommonInfo);
7276   static MaxFieldAlignmentAttr *Create(ASTContext &Ctx, unsigned Alignment, const AttributeCommonInfo &CommonInfo);
7277   static MaxFieldAlignmentAttr *CreateImplicit(ASTContext &Ctx, unsigned Alignment, SourceRange Range = {});
7278   static MaxFieldAlignmentAttr *Create(ASTContext &Ctx, unsigned Alignment, SourceRange Range = {});
7279 
7280   // Constructors
7281   MaxFieldAlignmentAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7282               , unsigned Alignment
7283              );
7284 
7285   MaxFieldAlignmentAttr *clone(ASTContext &C) const;
7286   void printPretty(raw_ostream &OS,
7287                    const PrintingPolicy &Policy) const;
7288   const char *getSpelling() const;
7289   unsigned getAlignment() const {
7290     return alignment;
7291   }
7292 
7293 
7294 
7295   static bool classof(const Attr *A) { return A->getKind() == attr::MaxFieldAlignment; }
7296 };
7297 
7298 class CLANG_ABI MayAliasAttr : public InheritableAttr {
7299 public:
7300   enum Spelling {
7301     GNU_may_alias = 0,
7302     CXX11_gnu_may_alias = 1,
7303     C23_gnu_may_alias = 2,
7304   SpellingNotCalculated = 15
7305 
7306   };
7307 
7308   // Factory methods
7309   static MayAliasAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7310   static MayAliasAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7311   static MayAliasAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_may_alias);
7312   static MayAliasAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_may_alias);
7313 
7314   // Constructors
7315   MayAliasAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7316              );
7317 
7318   MayAliasAttr *clone(ASTContext &C) const;
7319   void printPretty(raw_ostream &OS,
7320                    const PrintingPolicy &Policy) const;
7321   const char *getSpelling() const;
7322 
7323 
7324   static bool classof(const Attr *A) { return A->getKind() == attr::MayAlias; }
7325 };
7326 
7327 class CLANG_ABI MaybeUndefAttr : public InheritableAttr {
7328 public:
7329   enum Spelling {
7330     GNU_maybe_undef = 0,
7331     CXX11_clang_maybe_undef = 1,
7332     C23_clang_maybe_undef = 2,
7333   SpellingNotCalculated = 15
7334 
7335   };
7336 
7337   // Factory methods
7338   static MaybeUndefAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7339   static MaybeUndefAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7340   static MaybeUndefAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_maybe_undef);
7341   static MaybeUndefAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_maybe_undef);
7342 
7343   // Constructors
7344   MaybeUndefAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7345              );
7346 
7347   MaybeUndefAttr *clone(ASTContext &C) const;
7348   void printPretty(raw_ostream &OS,
7349                    const PrintingPolicy &Policy) const;
7350   const char *getSpelling() const;
7351 
7352 
7353   static bool classof(const Attr *A) { return A->getKind() == attr::MaybeUndef; }
7354 };
7355 
7356 class CLANG_ABI MicroMipsAttr : public InheritableAttr {
7357 public:
7358   enum Spelling {
7359     GNU_micromips = 0,
7360     CXX11_gnu_micromips = 1,
7361     C23_gnu_micromips = 2,
7362   SpellingNotCalculated = 15
7363 
7364   };
7365 
7366   // Factory methods
7367   static MicroMipsAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7368   static MicroMipsAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7369   static MicroMipsAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_micromips);
7370   static MicroMipsAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_micromips);
7371 
7372   // Constructors
7373   MicroMipsAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7374              );
7375 
7376   MicroMipsAttr *clone(ASTContext &C) const;
7377   void printPretty(raw_ostream &OS,
7378                    const PrintingPolicy &Policy) const;
7379   const char *getSpelling() const;
7380 
7381 
7382   static bool classof(const Attr *A) { return A->getKind() == attr::MicroMips; }
7383 };
7384 
7385 class CLANG_ABI MinSizeAttr : public InheritableAttr {
7386 public:
7387   enum Spelling {
7388     GNU_minsize = 0,
7389     CXX11_clang_minsize = 1,
7390     C23_clang_minsize = 2,
7391   SpellingNotCalculated = 15
7392 
7393   };
7394 
7395   // Factory methods
7396   static MinSizeAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7397   static MinSizeAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7398   static MinSizeAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_minsize);
7399   static MinSizeAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_minsize);
7400 
7401   // Constructors
7402   MinSizeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7403              );
7404 
7405   MinSizeAttr *clone(ASTContext &C) const;
7406   void printPretty(raw_ostream &OS,
7407                    const PrintingPolicy &Policy) const;
7408   const char *getSpelling() const;
7409 
7410 
7411   static bool classof(const Attr *A) { return A->getKind() == attr::MinSize; }
7412 };
7413 
7414 class CLANG_ABI MinVectorWidthAttr : public InheritableAttr {
7415 unsigned vectorWidth;
7416 
7417 public:
7418   enum Spelling {
7419     GNU_min_vector_width = 0,
7420     CXX11_clang_min_vector_width = 1,
7421     C23_clang_min_vector_width = 2,
7422   SpellingNotCalculated = 15
7423 
7424   };
7425 
7426   // Factory methods
7427   static MinVectorWidthAttr *CreateImplicit(ASTContext &Ctx, unsigned VectorWidth, const AttributeCommonInfo &CommonInfo);
7428   static MinVectorWidthAttr *Create(ASTContext &Ctx, unsigned VectorWidth, const AttributeCommonInfo &CommonInfo);
7429   static MinVectorWidthAttr *CreateImplicit(ASTContext &Ctx, unsigned VectorWidth, SourceRange Range = {}, Spelling S = GNU_min_vector_width);
7430   static MinVectorWidthAttr *Create(ASTContext &Ctx, unsigned VectorWidth, SourceRange Range = {}, Spelling S = GNU_min_vector_width);
7431 
7432   // Constructors
7433   MinVectorWidthAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7434               , unsigned VectorWidth
7435              );
7436 
7437   MinVectorWidthAttr *clone(ASTContext &C) const;
7438   void printPretty(raw_ostream &OS,
7439                    const PrintingPolicy &Policy) const;
7440   const char *getSpelling() const;
7441   unsigned getVectorWidth() const {
7442     return vectorWidth;
7443   }
7444 
7445 
7446 
7447   static bool classof(const Attr *A) { return A->getKind() == attr::MinVectorWidth; }
7448 };
7449 
7450 class CLANG_ABI Mips16Attr : public InheritableAttr {
7451 public:
7452   enum Spelling {
7453     GNU_mips16 = 0,
7454     CXX11_gnu_mips16 = 1,
7455     C23_gnu_mips16 = 2,
7456   SpellingNotCalculated = 15
7457 
7458   };
7459 
7460   // Factory methods
7461   static Mips16Attr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7462   static Mips16Attr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7463   static Mips16Attr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_mips16);
7464   static Mips16Attr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_mips16);
7465 
7466   // Constructors
7467   Mips16Attr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7468              );
7469 
7470   Mips16Attr *clone(ASTContext &C) const;
7471   void printPretty(raw_ostream &OS,
7472                    const PrintingPolicy &Policy) const;
7473   const char *getSpelling() const;
7474 
7475 
7476   static bool classof(const Attr *A) { return A->getKind() == attr::Mips16; }
7477 };
7478 
7479 class CLANG_ABI MipsInterruptAttr : public InheritableAttr {
7480 public:
7481   enum InterruptType {
7482     sw0,
7483     sw1,
7484     hw0,
7485     hw1,
7486     hw2,
7487     hw3,
7488     hw4,
7489     hw5,
7490     eic
7491   };
7492 private:
7493   MipsInterruptAttr::InterruptType interrupt;
7494 
7495 public:
7496   enum Spelling {
7497     GNU_interrupt = 0,
7498     CXX11_gnu_interrupt = 1,
7499     C23_gnu_interrupt = 2,
7500   SpellingNotCalculated = 15
7501 
7502   };
7503 
7504   // Factory methods
7505   static MipsInterruptAttr *CreateImplicit(ASTContext &Ctx, MipsInterruptAttr::InterruptType Interrupt, const AttributeCommonInfo &CommonInfo);
7506   static MipsInterruptAttr *Create(ASTContext &Ctx, MipsInterruptAttr::InterruptType Interrupt, const AttributeCommonInfo &CommonInfo);
7507   static MipsInterruptAttr *CreateImplicit(ASTContext &Ctx, MipsInterruptAttr::InterruptType Interrupt, SourceRange Range = {}, Spelling S = GNU_interrupt);
7508   static MipsInterruptAttr *Create(ASTContext &Ctx, MipsInterruptAttr::InterruptType Interrupt, SourceRange Range = {}, Spelling S = GNU_interrupt);
7509 
7510   // Constructors
7511   MipsInterruptAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7512               , MipsInterruptAttr::InterruptType Interrupt
7513              );
7514 
7515   MipsInterruptAttr *clone(ASTContext &C) const;
7516   void printPretty(raw_ostream &OS,
7517                    const PrintingPolicy &Policy) const;
7518   const char *getSpelling() const;
7519   MipsInterruptAttr::InterruptType getInterrupt() const {
7520     return interrupt;
7521   }
7522 
7523   static bool ConvertStrToInterruptType(StringRef Val, MipsInterruptAttr::InterruptType &Out);
7524   static const char *ConvertInterruptTypeToStr(MipsInterruptAttr::InterruptType Val);
7525 
7526 
7527   static bool classof(const Attr *A) { return A->getKind() == attr::MipsInterrupt; }
7528 };
7529 
7530 class CLANG_ABI MipsLongCallAttr : public InheritableAttr {
7531 public:
7532   enum Spelling {
7533     GNU_long_call = 0,
7534     CXX11_gnu_long_call = 1,
7535     C23_gnu_long_call = 2,
7536     GNU_far = 3,
7537     CXX11_gnu_far = 4,
7538     C23_gnu_far = 5,
7539   SpellingNotCalculated = 15
7540 
7541   };
7542 
7543   // Factory methods
7544   static MipsLongCallAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7545   static MipsLongCallAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7546   static MipsLongCallAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_long_call);
7547   static MipsLongCallAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_long_call);
7548 
7549   // Constructors
7550   MipsLongCallAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7551              );
7552 
7553   MipsLongCallAttr *clone(ASTContext &C) const;
7554   void printPretty(raw_ostream &OS,
7555                    const PrintingPolicy &Policy) const;
7556   const char *getSpelling() const;
7557   Spelling getSemanticSpelling() const;
7558 
7559 
7560   static bool classof(const Attr *A) { return A->getKind() == attr::MipsLongCall; }
7561 };
7562 
7563 class CLANG_ABI MipsShortCallAttr : public InheritableAttr {
7564 public:
7565   enum Spelling {
7566     GNU_short_call = 0,
7567     CXX11_gnu_short_call = 1,
7568     C23_gnu_short_call = 2,
7569     GNU_near = 3,
7570     CXX11_gnu_near = 4,
7571     C23_gnu_near = 5,
7572   SpellingNotCalculated = 15
7573 
7574   };
7575 
7576   // Factory methods
7577   static MipsShortCallAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7578   static MipsShortCallAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7579   static MipsShortCallAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_short_call);
7580   static MipsShortCallAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_short_call);
7581 
7582   // Constructors
7583   MipsShortCallAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7584              );
7585 
7586   MipsShortCallAttr *clone(ASTContext &C) const;
7587   void printPretty(raw_ostream &OS,
7588                    const PrintingPolicy &Policy) const;
7589   const char *getSpelling() const;
7590   Spelling getSemanticSpelling() const;
7591 
7592 
7593   static bool classof(const Attr *A) { return A->getKind() == attr::MipsShortCall; }
7594 };
7595 
7596 class CLANG_ABI ModeAttr : public Attr {
7597 IdentifierInfo * mode;
7598 
7599 public:
7600   enum Spelling {
7601     GNU_mode = 0,
7602     CXX11_gnu_mode = 1,
7603     C23_gnu_mode = 2,
7604   SpellingNotCalculated = 15
7605 
7606   };
7607 
7608   // Factory methods
7609   static ModeAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * Mode, const AttributeCommonInfo &CommonInfo);
7610   static ModeAttr *Create(ASTContext &Ctx, IdentifierInfo * Mode, const AttributeCommonInfo &CommonInfo);
7611   static ModeAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * Mode, SourceRange Range = {}, Spelling S = GNU_mode);
7612   static ModeAttr *Create(ASTContext &Ctx, IdentifierInfo * Mode, SourceRange Range = {}, Spelling S = GNU_mode);
7613 
7614   // Constructors
7615   ModeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7616               , IdentifierInfo * Mode
7617              );
7618 
7619   ModeAttr *clone(ASTContext &C) const;
7620   void printPretty(raw_ostream &OS,
7621                    const PrintingPolicy &Policy) const;
7622   const char *getSpelling() const;
7623   IdentifierInfo * getMode() const {
7624     return mode;
7625   }
7626 
7627 
7628 
7629   static bool classof(const Attr *A) { return A->getKind() == attr::Mode; }
7630 };
7631 
7632 class CLANG_ABI MustTailAttr : public StmtAttr {
7633 public:
7634   enum Spelling {
7635     GNU_musttail = 0,
7636     CXX11_clang_musttail = 1,
7637     C23_clang_musttail = 2,
7638   SpellingNotCalculated = 15
7639 
7640   };
7641 
7642   // Factory methods
7643   static MustTailAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7644   static MustTailAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7645   static MustTailAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_musttail);
7646   static MustTailAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_musttail);
7647 
7648   // Constructors
7649   MustTailAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7650              );
7651 
7652   MustTailAttr *clone(ASTContext &C) const;
7653   void printPretty(raw_ostream &OS,
7654                    const PrintingPolicy &Policy) const;
7655   const char *getSpelling() const;
7656 
7657 
7658   static bool classof(const Attr *A) { return A->getKind() == attr::MustTail; }
7659 };
7660 
7661 class CLANG_ABI NSConsumedAttr : public InheritableParamAttr {
7662 public:
7663   enum Spelling {
7664     GNU_ns_consumed = 0,
7665     CXX11_clang_ns_consumed = 1,
7666     C23_clang_ns_consumed = 2,
7667   SpellingNotCalculated = 15
7668 
7669   };
7670 
7671   // Factory methods
7672   static NSConsumedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7673   static NSConsumedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7674   static NSConsumedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_ns_consumed);
7675   static NSConsumedAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_ns_consumed);
7676 
7677   // Constructors
7678   NSConsumedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7679              );
7680 
7681   NSConsumedAttr *clone(ASTContext &C) const;
7682   void printPretty(raw_ostream &OS,
7683                    const PrintingPolicy &Policy) const;
7684   const char *getSpelling() const;
7685 
7686 
7687   static bool classof(const Attr *A) { return A->getKind() == attr::NSConsumed; }
7688 };
7689 
7690 class CLANG_ABI NSConsumesSelfAttr : public InheritableAttr {
7691 public:
7692   enum Spelling {
7693     GNU_ns_consumes_self = 0,
7694     CXX11_clang_ns_consumes_self = 1,
7695     C23_clang_ns_consumes_self = 2,
7696   SpellingNotCalculated = 15
7697 
7698   };
7699 
7700   // Factory methods
7701   static NSConsumesSelfAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7702   static NSConsumesSelfAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7703   static NSConsumesSelfAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_ns_consumes_self);
7704   static NSConsumesSelfAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_ns_consumes_self);
7705 
7706   // Constructors
7707   NSConsumesSelfAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7708              );
7709 
7710   NSConsumesSelfAttr *clone(ASTContext &C) const;
7711   void printPretty(raw_ostream &OS,
7712                    const PrintingPolicy &Policy) const;
7713   const char *getSpelling() const;
7714 
7715 
7716   static bool classof(const Attr *A) { return A->getKind() == attr::NSConsumesSelf; }
7717 };
7718 
7719 class CLANG_ABI NSErrorDomainAttr : public InheritableAttr {
7720 IdentifierInfo * errorDomain;
7721 
7722 public:
7723   // Factory methods
7724   static NSErrorDomainAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * ErrorDomain, const AttributeCommonInfo &CommonInfo);
7725   static NSErrorDomainAttr *Create(ASTContext &Ctx, IdentifierInfo * ErrorDomain, const AttributeCommonInfo &CommonInfo);
7726   static NSErrorDomainAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * ErrorDomain, SourceRange Range = {});
7727   static NSErrorDomainAttr *Create(ASTContext &Ctx, IdentifierInfo * ErrorDomain, SourceRange Range = {});
7728 
7729   // Constructors
7730   NSErrorDomainAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7731               , IdentifierInfo * ErrorDomain
7732              );
7733 
7734   NSErrorDomainAttr *clone(ASTContext &C) const;
7735   void printPretty(raw_ostream &OS,
7736                    const PrintingPolicy &Policy) const;
7737   const char *getSpelling() const;
7738   IdentifierInfo * getErrorDomain() const {
7739     return errorDomain;
7740   }
7741 
7742 
7743 
7744   static bool classof(const Attr *A) { return A->getKind() == attr::NSErrorDomain; }
7745 };
7746 
7747 class CLANG_ABI NSReturnsAutoreleasedAttr : public InheritableAttr {
7748 public:
7749   enum Spelling {
7750     GNU_ns_returns_autoreleased = 0,
7751     CXX11_clang_ns_returns_autoreleased = 1,
7752     C23_clang_ns_returns_autoreleased = 2,
7753   SpellingNotCalculated = 15
7754 
7755   };
7756 
7757   // Factory methods
7758   static NSReturnsAutoreleasedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7759   static NSReturnsAutoreleasedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7760   static NSReturnsAutoreleasedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_ns_returns_autoreleased);
7761   static NSReturnsAutoreleasedAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_ns_returns_autoreleased);
7762 
7763   // Constructors
7764   NSReturnsAutoreleasedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7765              );
7766 
7767   NSReturnsAutoreleasedAttr *clone(ASTContext &C) const;
7768   void printPretty(raw_ostream &OS,
7769                    const PrintingPolicy &Policy) const;
7770   const char *getSpelling() const;
7771 
7772 
7773   static bool classof(const Attr *A) { return A->getKind() == attr::NSReturnsAutoreleased; }
7774 };
7775 
7776 class CLANG_ABI NSReturnsNotRetainedAttr : public InheritableAttr {
7777 public:
7778   enum Spelling {
7779     GNU_ns_returns_not_retained = 0,
7780     CXX11_clang_ns_returns_not_retained = 1,
7781     C23_clang_ns_returns_not_retained = 2,
7782   SpellingNotCalculated = 15
7783 
7784   };
7785 
7786   // Factory methods
7787   static NSReturnsNotRetainedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7788   static NSReturnsNotRetainedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7789   static NSReturnsNotRetainedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_ns_returns_not_retained);
7790   static NSReturnsNotRetainedAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_ns_returns_not_retained);
7791 
7792   // Constructors
7793   NSReturnsNotRetainedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7794              );
7795 
7796   NSReturnsNotRetainedAttr *clone(ASTContext &C) const;
7797   void printPretty(raw_ostream &OS,
7798                    const PrintingPolicy &Policy) const;
7799   const char *getSpelling() const;
7800 
7801 
7802   static bool classof(const Attr *A) { return A->getKind() == attr::NSReturnsNotRetained; }
7803 };
7804 
7805 class CLANG_ABI NSReturnsRetainedAttr : public InheritableAttr {
7806 public:
7807   enum Spelling {
7808     GNU_ns_returns_retained = 0,
7809     CXX11_clang_ns_returns_retained = 1,
7810     C23_clang_ns_returns_retained = 2,
7811   SpellingNotCalculated = 15
7812 
7813   };
7814 
7815   // Factory methods
7816   static NSReturnsRetainedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7817   static NSReturnsRetainedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7818   static NSReturnsRetainedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_ns_returns_retained);
7819   static NSReturnsRetainedAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_ns_returns_retained);
7820 
7821   // Constructors
7822   NSReturnsRetainedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7823              );
7824 
7825   NSReturnsRetainedAttr *clone(ASTContext &C) const;
7826   void printPretty(raw_ostream &OS,
7827                    const PrintingPolicy &Policy) const;
7828   const char *getSpelling() const;
7829 
7830 
7831   static bool classof(const Attr *A) { return A->getKind() == attr::NSReturnsRetained; }
7832 };
7833 
7834 class CLANG_ABI NVPTXKernelAttr : public InheritableAttr {
7835 public:
7836   enum Spelling {
7837     GNU_nvptx_kernel = 0,
7838     CXX11_clang_nvptx_kernel = 1,
7839     C23_clang_nvptx_kernel = 2,
7840   SpellingNotCalculated = 15
7841 
7842   };
7843 
7844   // Factory methods
7845   static NVPTXKernelAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7846   static NVPTXKernelAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7847   static NVPTXKernelAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_nvptx_kernel);
7848   static NVPTXKernelAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_nvptx_kernel);
7849 
7850   // Constructors
7851   NVPTXKernelAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7852              );
7853 
7854   NVPTXKernelAttr *clone(ASTContext &C) const;
7855   void printPretty(raw_ostream &OS,
7856                    const PrintingPolicy &Policy) const;
7857   const char *getSpelling() const;
7858 
7859 
7860   static bool classof(const Attr *A) { return A->getKind() == attr::NVPTXKernel; }
7861 };
7862 
7863 class CLANG_ABI NakedAttr : public InheritableAttr {
7864 public:
7865   enum Spelling {
7866     GNU_naked = 0,
7867     CXX11_gnu_naked = 1,
7868     C23_gnu_naked = 2,
7869     Declspec_naked = 3,
7870   SpellingNotCalculated = 15
7871 
7872   };
7873 
7874   // Factory methods
7875   static NakedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7876   static NakedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7877   static NakedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_naked);
7878   static NakedAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_naked);
7879 
7880   // Constructors
7881   NakedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7882              );
7883 
7884   NakedAttr *clone(ASTContext &C) const;
7885   void printPretty(raw_ostream &OS,
7886                    const PrintingPolicy &Policy) const;
7887   const char *getSpelling() const;
7888 
7889 
7890   static bool classof(const Attr *A) { return A->getKind() == attr::Naked; }
7891 };
7892 
7893 class CLANG_ABI NoAliasAttr : public InheritableAttr {
7894 public:
7895   // Factory methods
7896   static NoAliasAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7897   static NoAliasAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7898   static NoAliasAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
7899   static NoAliasAttr *Create(ASTContext &Ctx, SourceRange Range = {});
7900 
7901   // Constructors
7902   NoAliasAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7903              );
7904 
7905   NoAliasAttr *clone(ASTContext &C) const;
7906   void printPretty(raw_ostream &OS,
7907                    const PrintingPolicy &Policy) const;
7908   const char *getSpelling() const;
7909 
7910 
7911   static bool classof(const Attr *A) { return A->getKind() == attr::NoAlias; }
7912 };
7913 
7914 class CLANG_ABI NoBuiltinAttr : public Attr {
7915   unsigned builtinNames_Size;
7916   StringRef *builtinNames_;
7917 
7918 public:
7919   enum Spelling {
7920     GNU_no_builtin = 0,
7921     CXX11_clang_no_builtin = 1,
7922     C23_clang_no_builtin = 2,
7923   SpellingNotCalculated = 15
7924 
7925   };
7926 
7927   // Factory methods
7928   static NoBuiltinAttr *CreateImplicit(ASTContext &Ctx, StringRef *BuiltinNames, unsigned BuiltinNamesSize, const AttributeCommonInfo &CommonInfo);
7929   static NoBuiltinAttr *Create(ASTContext &Ctx, StringRef *BuiltinNames, unsigned BuiltinNamesSize, const AttributeCommonInfo &CommonInfo);
7930   static NoBuiltinAttr *CreateImplicit(ASTContext &Ctx, StringRef *BuiltinNames, unsigned BuiltinNamesSize, SourceRange Range = {}, Spelling S = GNU_no_builtin);
7931   static NoBuiltinAttr *Create(ASTContext &Ctx, StringRef *BuiltinNames, unsigned BuiltinNamesSize, SourceRange Range = {}, Spelling S = GNU_no_builtin);
7932 
7933   // Constructors
7934   NoBuiltinAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7935               , StringRef *BuiltinNames, unsigned BuiltinNamesSize
7936              );
7937   NoBuiltinAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7938              );
7939 
7940   NoBuiltinAttr *clone(ASTContext &C) const;
7941   void printPretty(raw_ostream &OS,
7942                    const PrintingPolicy &Policy) const;
7943   const char *getSpelling() const;
7944   typedef StringRef* builtinNames_iterator;
7945   builtinNames_iterator builtinNames_begin() const { return builtinNames_; }
7946   builtinNames_iterator builtinNames_end() const { return builtinNames_ + builtinNames_Size; }
7947   unsigned builtinNames_size() const { return builtinNames_Size; }
7948   llvm::iterator_range<builtinNames_iterator> builtinNames() const { return llvm::make_range(builtinNames_begin(), builtinNames_end()); }
7949 
7950 
7951 
7952 
7953   static bool classof(const Attr *A) { return A->getKind() == attr::NoBuiltin; }
7954 };
7955 
7956 class CLANG_ABI NoCommonAttr : public InheritableAttr {
7957 public:
7958   enum Spelling {
7959     GNU_nocommon = 0,
7960     CXX11_gnu_nocommon = 1,
7961     C23_gnu_nocommon = 2,
7962   SpellingNotCalculated = 15
7963 
7964   };
7965 
7966   // Factory methods
7967   static NoCommonAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7968   static NoCommonAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7969   static NoCommonAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_nocommon);
7970   static NoCommonAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_nocommon);
7971 
7972   // Constructors
7973   NoCommonAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
7974              );
7975 
7976   NoCommonAttr *clone(ASTContext &C) const;
7977   void printPretty(raw_ostream &OS,
7978                    const PrintingPolicy &Policy) const;
7979   const char *getSpelling() const;
7980 
7981 
7982   static bool classof(const Attr *A) { return A->getKind() == attr::NoCommon; }
7983 };
7984 
7985 class CLANG_ABI NoConvergentAttr : public InheritableAttr {
7986 public:
7987   enum Spelling {
7988     GNU_noconvergent = 0,
7989     CXX11_clang_noconvergent = 1,
7990     C23_clang_noconvergent = 2,
7991     Declspec_noconvergent = 3,
7992   SpellingNotCalculated = 15
7993 
7994   };
7995 
7996   // Factory methods
7997   static NoConvergentAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7998   static NoConvergentAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
7999   static NoConvergentAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_noconvergent);
8000   static NoConvergentAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_noconvergent);
8001 
8002   // Constructors
8003   NoConvergentAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8004              );
8005 
8006   NoConvergentAttr *clone(ASTContext &C) const;
8007   void printPretty(raw_ostream &OS,
8008                    const PrintingPolicy &Policy) const;
8009   const char *getSpelling() const;
8010 
8011 
8012   static bool classof(const Attr *A) { return A->getKind() == attr::NoConvergent; }
8013 };
8014 
8015 class CLANG_ABI NoDebugAttr : public InheritableAttr {
8016 public:
8017   enum Spelling {
8018     GNU_nodebug = 0,
8019     CXX11_gnu_nodebug = 1,
8020     C23_gnu_nodebug = 2,
8021   SpellingNotCalculated = 15
8022 
8023   };
8024 
8025   // Factory methods
8026   static NoDebugAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8027   static NoDebugAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8028   static NoDebugAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_nodebug);
8029   static NoDebugAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_nodebug);
8030 
8031   // Constructors
8032   NoDebugAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8033              );
8034 
8035   NoDebugAttr *clone(ASTContext &C) const;
8036   void printPretty(raw_ostream &OS,
8037                    const PrintingPolicy &Policy) const;
8038   const char *getSpelling() const;
8039 
8040 
8041   static bool classof(const Attr *A) { return A->getKind() == attr::NoDebug; }
8042 };
8043 
8044 class CLANG_ABI NoDerefAttr : public TypeAttr {
8045 public:
8046   enum Spelling {
8047     GNU_noderef = 0,
8048     CXX11_clang_noderef = 1,
8049     C23_clang_noderef = 2,
8050   SpellingNotCalculated = 15
8051 
8052   };
8053 
8054   // Factory methods
8055   static NoDerefAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8056   static NoDerefAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8057   static NoDerefAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_noderef);
8058   static NoDerefAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_noderef);
8059 
8060   // Constructors
8061   NoDerefAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8062              );
8063 
8064   NoDerefAttr *clone(ASTContext &C) const;
8065   void printPretty(raw_ostream &OS,
8066                    const PrintingPolicy &Policy) const;
8067   const char *getSpelling() const;
8068 
8069 
8070   static bool classof(const Attr *A) { return A->getKind() == attr::NoDeref; }
8071 };
8072 
8073 class CLANG_ABI NoDestroyAttr : public InheritableAttr {
8074 public:
8075   enum Spelling {
8076     GNU_no_destroy = 0,
8077     CXX11_clang_no_destroy = 1,
8078   SpellingNotCalculated = 15
8079 
8080   };
8081 
8082   // Factory methods
8083   static NoDestroyAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8084   static NoDestroyAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8085   static NoDestroyAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_no_destroy);
8086   static NoDestroyAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_no_destroy);
8087 
8088   // Constructors
8089   NoDestroyAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8090              );
8091 
8092   NoDestroyAttr *clone(ASTContext &C) const;
8093   void printPretty(raw_ostream &OS,
8094                    const PrintingPolicy &Policy) const;
8095   const char *getSpelling() const;
8096 
8097 
8098   static bool classof(const Attr *A) { return A->getKind() == attr::NoDestroy; }
8099 };
8100 
8101 class CLANG_ABI NoDuplicateAttr : public InheritableAttr {
8102 public:
8103   enum Spelling {
8104     GNU_noduplicate = 0,
8105     CXX11_clang_noduplicate = 1,
8106     C23_clang_noduplicate = 2,
8107   SpellingNotCalculated = 15
8108 
8109   };
8110 
8111   // Factory methods
8112   static NoDuplicateAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8113   static NoDuplicateAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8114   static NoDuplicateAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_noduplicate);
8115   static NoDuplicateAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_noduplicate);
8116 
8117   // Constructors
8118   NoDuplicateAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8119              );
8120 
8121   NoDuplicateAttr *clone(ASTContext &C) const;
8122   void printPretty(raw_ostream &OS,
8123                    const PrintingPolicy &Policy) const;
8124   const char *getSpelling() const;
8125 
8126 
8127   static bool classof(const Attr *A) { return A->getKind() == attr::NoDuplicate; }
8128 };
8129 
8130 class CLANG_ABI NoEscapeAttr : public Attr {
8131 public:
8132   enum Spelling {
8133     GNU_noescape = 0,
8134     CXX11_clang_noescape = 1,
8135     C23_clang_noescape = 2,
8136   SpellingNotCalculated = 15
8137 
8138   };
8139 
8140   // Factory methods
8141   static NoEscapeAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8142   static NoEscapeAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8143   static NoEscapeAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_noescape);
8144   static NoEscapeAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_noescape);
8145 
8146   // Constructors
8147   NoEscapeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8148              );
8149 
8150   NoEscapeAttr *clone(ASTContext &C) const;
8151   void printPretty(raw_ostream &OS,
8152                    const PrintingPolicy &Policy) const;
8153   const char *getSpelling() const;
8154 
8155 
8156   static bool classof(const Attr *A) { return A->getKind() == attr::NoEscape; }
8157 };
8158 
8159 class CLANG_ABI NoInlineAttr : public DeclOrStmtAttr {
8160 public:
8161   enum Spelling {
8162     Keyword_noinline = 0,
8163     GNU_noinline = 1,
8164     CXX11_gnu_noinline = 2,
8165     C23_gnu_noinline = 3,
8166     CXX11_clang_noinline = 4,
8167     C23_clang_noinline = 5,
8168     CXX11_msvc_noinline = 6,
8169     C23_msvc_noinline = 7,
8170     Declspec_noinline = 8,
8171   SpellingNotCalculated = 15
8172 
8173   };
8174 
8175   // Factory methods
8176   static NoInlineAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8177   static NoInlineAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8178   static NoInlineAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Keyword_noinline);
8179   static NoInlineAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Keyword_noinline);
8180 
8181   // Constructors
8182   NoInlineAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8183              );
8184 
8185   NoInlineAttr *clone(ASTContext &C) const;
8186   void printPretty(raw_ostream &OS,
8187                    const PrintingPolicy &Policy) const;
8188   const char *getSpelling() const;
8189   bool isStmtNoInline() const { return getAttributeSpellingListIndex() == 4 ||
8190     getAttributeSpellingListIndex() == 5 ||
8191     getAttributeSpellingListIndex() == 6 ||
8192     getAttributeSpellingListIndex() == 7; }
8193 
8194 
8195   static bool classof(const Attr *A) { return A->getKind() == attr::NoInline; }
8196 };
8197 
8198 class CLANG_ABI NoInstrumentFunctionAttr : public InheritableAttr {
8199 public:
8200   enum Spelling {
8201     GNU_no_instrument_function = 0,
8202     CXX11_gnu_no_instrument_function = 1,
8203     C23_gnu_no_instrument_function = 2,
8204   SpellingNotCalculated = 15
8205 
8206   };
8207 
8208   // Factory methods
8209   static NoInstrumentFunctionAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8210   static NoInstrumentFunctionAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8211   static NoInstrumentFunctionAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_no_instrument_function);
8212   static NoInstrumentFunctionAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_no_instrument_function);
8213 
8214   // Constructors
8215   NoInstrumentFunctionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8216              );
8217 
8218   NoInstrumentFunctionAttr *clone(ASTContext &C) const;
8219   void printPretty(raw_ostream &OS,
8220                    const PrintingPolicy &Policy) const;
8221   const char *getSpelling() const;
8222 
8223 
8224   static bool classof(const Attr *A) { return A->getKind() == attr::NoInstrumentFunction; }
8225 };
8226 
8227 class CLANG_ABI NoMergeAttr : public DeclOrStmtAttr {
8228 public:
8229   enum Spelling {
8230     GNU_nomerge = 0,
8231     CXX11_clang_nomerge = 1,
8232     C23_clang_nomerge = 2,
8233   SpellingNotCalculated = 15
8234 
8235   };
8236 
8237   // Factory methods
8238   static NoMergeAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8239   static NoMergeAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8240   static NoMergeAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_nomerge);
8241   static NoMergeAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_nomerge);
8242 
8243   // Constructors
8244   NoMergeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8245              );
8246 
8247   NoMergeAttr *clone(ASTContext &C) const;
8248   void printPretty(raw_ostream &OS,
8249                    const PrintingPolicy &Policy) const;
8250   const char *getSpelling() const;
8251 
8252 
8253   static bool classof(const Attr *A) { return A->getKind() == attr::NoMerge; }
8254 };
8255 
8256 class CLANG_ABI NoMicroMipsAttr : public InheritableAttr {
8257 public:
8258   enum Spelling {
8259     GNU_nomicromips = 0,
8260     CXX11_gnu_nomicromips = 1,
8261     C23_gnu_nomicromips = 2,
8262   SpellingNotCalculated = 15
8263 
8264   };
8265 
8266   // Factory methods
8267   static NoMicroMipsAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8268   static NoMicroMipsAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8269   static NoMicroMipsAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_nomicromips);
8270   static NoMicroMipsAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_nomicromips);
8271 
8272   // Constructors
8273   NoMicroMipsAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8274              );
8275 
8276   NoMicroMipsAttr *clone(ASTContext &C) const;
8277   void printPretty(raw_ostream &OS,
8278                    const PrintingPolicy &Policy) const;
8279   const char *getSpelling() const;
8280 
8281 
8282   static bool classof(const Attr *A) { return A->getKind() == attr::NoMicroMips; }
8283 };
8284 
8285 class CLANG_ABI NoMips16Attr : public InheritableAttr {
8286 public:
8287   enum Spelling {
8288     GNU_nomips16 = 0,
8289     CXX11_gnu_nomips16 = 1,
8290     C23_gnu_nomips16 = 2,
8291   SpellingNotCalculated = 15
8292 
8293   };
8294 
8295   // Factory methods
8296   static NoMips16Attr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8297   static NoMips16Attr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8298   static NoMips16Attr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_nomips16);
8299   static NoMips16Attr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_nomips16);
8300 
8301   // Constructors
8302   NoMips16Attr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8303              );
8304 
8305   NoMips16Attr *clone(ASTContext &C) const;
8306   void printPretty(raw_ostream &OS,
8307                    const PrintingPolicy &Policy) const;
8308   const char *getSpelling() const;
8309 
8310 
8311   static bool classof(const Attr *A) { return A->getKind() == attr::NoMips16; }
8312 };
8313 
8314 class CLANG_ABI NoProfileFunctionAttr : public InheritableAttr {
8315 public:
8316   enum Spelling {
8317     GNU_no_profile_instrument_function = 0,
8318     CXX11_gnu_no_profile_instrument_function = 1,
8319     C23_gnu_no_profile_instrument_function = 2,
8320   SpellingNotCalculated = 15
8321 
8322   };
8323 
8324   // Factory methods
8325   static NoProfileFunctionAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8326   static NoProfileFunctionAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8327   static NoProfileFunctionAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_no_profile_instrument_function);
8328   static NoProfileFunctionAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_no_profile_instrument_function);
8329 
8330   // Constructors
8331   NoProfileFunctionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8332              );
8333 
8334   NoProfileFunctionAttr *clone(ASTContext &C) const;
8335   void printPretty(raw_ostream &OS,
8336                    const PrintingPolicy &Policy) const;
8337   const char *getSpelling() const;
8338 
8339 
8340   static bool classof(const Attr *A) { return A->getKind() == attr::NoProfileFunction; }
8341 };
8342 
8343 class CLANG_ABI NoRandomizeLayoutAttr : public InheritableAttr {
8344 public:
8345   enum Spelling {
8346     GNU_no_randomize_layout = 0,
8347     CXX11_gnu_no_randomize_layout = 1,
8348     C23_gnu_no_randomize_layout = 2,
8349   SpellingNotCalculated = 15
8350 
8351   };
8352 
8353   // Factory methods
8354   static NoRandomizeLayoutAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8355   static NoRandomizeLayoutAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8356   static NoRandomizeLayoutAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_no_randomize_layout);
8357   static NoRandomizeLayoutAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_no_randomize_layout);
8358 
8359   // Constructors
8360   NoRandomizeLayoutAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8361              );
8362 
8363   NoRandomizeLayoutAttr *clone(ASTContext &C) const;
8364   void printPretty(raw_ostream &OS,
8365                    const PrintingPolicy &Policy) const;
8366   const char *getSpelling() const;
8367 
8368 
8369   static bool classof(const Attr *A) { return A->getKind() == attr::NoRandomizeLayout; }
8370 };
8371 
8372 class CLANG_ABI NoReturnAttr : public InheritableAttr {
8373 public:
8374   enum Spelling {
8375     GNU_noreturn = 0,
8376     CXX11_gnu_noreturn = 1,
8377     C23_gnu_noreturn = 2,
8378     Declspec_noreturn = 3,
8379   SpellingNotCalculated = 15
8380 
8381   };
8382 
8383   // Factory methods
8384   static NoReturnAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8385   static NoReturnAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8386   static NoReturnAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_noreturn);
8387   static NoReturnAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_noreturn);
8388 
8389   // Constructors
8390   NoReturnAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8391              );
8392 
8393   NoReturnAttr *clone(ASTContext &C) const;
8394   void printPretty(raw_ostream &OS,
8395                    const PrintingPolicy &Policy) const;
8396   const char *getSpelling() const;
8397 
8398 
8399   static bool classof(const Attr *A) { return A->getKind() == attr::NoReturn; }
8400 };
8401 
8402 class CLANG_ABI NoSanitizeAttr : public InheritableAttr {
8403   unsigned sanitizers_Size;
8404   StringRef *sanitizers_;
8405 
8406 public:
8407   enum Spelling {
8408     GNU_no_sanitize = 0,
8409     CXX11_clang_no_sanitize = 1,
8410     C23_clang_no_sanitize = 2,
8411   SpellingNotCalculated = 15
8412 
8413   };
8414 
8415   // Factory methods
8416   static NoSanitizeAttr *CreateImplicit(ASTContext &Ctx, StringRef *Sanitizers, unsigned SanitizersSize, const AttributeCommonInfo &CommonInfo);
8417   static NoSanitizeAttr *Create(ASTContext &Ctx, StringRef *Sanitizers, unsigned SanitizersSize, const AttributeCommonInfo &CommonInfo);
8418   static NoSanitizeAttr *CreateImplicit(ASTContext &Ctx, StringRef *Sanitizers, unsigned SanitizersSize, SourceRange Range = {}, Spelling S = GNU_no_sanitize);
8419   static NoSanitizeAttr *Create(ASTContext &Ctx, StringRef *Sanitizers, unsigned SanitizersSize, SourceRange Range = {}, Spelling S = GNU_no_sanitize);
8420 
8421   // Constructors
8422   NoSanitizeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8423               , StringRef *Sanitizers, unsigned SanitizersSize
8424              );
8425   NoSanitizeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8426              );
8427 
8428   NoSanitizeAttr *clone(ASTContext &C) const;
8429   void printPretty(raw_ostream &OS,
8430                    const PrintingPolicy &Policy) const;
8431   const char *getSpelling() const;
8432   typedef StringRef* sanitizers_iterator;
8433   sanitizers_iterator sanitizers_begin() const { return sanitizers_; }
8434   sanitizers_iterator sanitizers_end() const { return sanitizers_ + sanitizers_Size; }
8435   unsigned sanitizers_size() const { return sanitizers_Size; }
8436   llvm::iterator_range<sanitizers_iterator> sanitizers() const { return llvm::make_range(sanitizers_begin(), sanitizers_end()); }
8437 
8438 
8439 
8440     SanitizerMask getMask() const {
8441       SanitizerMask Mask;
8442       for (auto SanitizerName : sanitizers()) {
8443         SanitizerMask ParsedMask =
8444             parseSanitizerValue(SanitizerName, /*AllowGroups=*/true);
8445         Mask |= expandSanitizerGroups(ParsedMask);
8446       }
8447       return Mask;
8448     }
8449 
8450     bool hasCoverage() const {
8451       return llvm::is_contained(sanitizers(), "coverage");
8452     }
8453   
8454 
8455   static bool classof(const Attr *A) { return A->getKind() == attr::NoSanitize; }
8456 };
8457 
8458 class CLANG_ABI NoSpecializationsAttr : public InheritableAttr {
8459 unsigned messageLength;
8460 char *message;
8461 
8462 public:
8463   enum Spelling {
8464     GNU_no_specializations = 0,
8465     CXX11_clang_no_specializations = 1,
8466   SpellingNotCalculated = 15
8467 
8468   };
8469 
8470   // Factory methods
8471   static NoSpecializationsAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Message, const AttributeCommonInfo &CommonInfo);
8472   static NoSpecializationsAttr *Create(ASTContext &Ctx, llvm::StringRef Message, const AttributeCommonInfo &CommonInfo);
8473   static NoSpecializationsAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Message, SourceRange Range = {}, Spelling S = GNU_no_specializations);
8474   static NoSpecializationsAttr *Create(ASTContext &Ctx, llvm::StringRef Message, SourceRange Range = {}, Spelling S = GNU_no_specializations);
8475 
8476   // Constructors
8477   NoSpecializationsAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8478               , llvm::StringRef Message
8479              );
8480   NoSpecializationsAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8481              );
8482 
8483   NoSpecializationsAttr *clone(ASTContext &C) const;
8484   void printPretty(raw_ostream &OS,
8485                    const PrintingPolicy &Policy) const;
8486   const char *getSpelling() const;
8487   llvm::StringRef getMessage() const {
8488     return llvm::StringRef(message, messageLength);
8489   }
8490   unsigned getMessageLength() const {
8491     return messageLength;
8492   }
8493   void setMessage(ASTContext &C, llvm::StringRef S) {
8494     messageLength = S.size();
8495     this->message = new (C, 1) char [messageLength];
8496     if (!S.empty())
8497       std::memcpy(this->message, S.data(), messageLength);
8498   }
8499 
8500 
8501 
8502   static bool classof(const Attr *A) { return A->getKind() == attr::NoSpecializations; }
8503 };
8504 
8505 class CLANG_ABI NoSpeculativeLoadHardeningAttr : public InheritableAttr {
8506 public:
8507   enum Spelling {
8508     GNU_no_speculative_load_hardening = 0,
8509     CXX11_clang_no_speculative_load_hardening = 1,
8510     C23_clang_no_speculative_load_hardening = 2,
8511   SpellingNotCalculated = 15
8512 
8513   };
8514 
8515   // Factory methods
8516   static NoSpeculativeLoadHardeningAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8517   static NoSpeculativeLoadHardeningAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8518   static NoSpeculativeLoadHardeningAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_no_speculative_load_hardening);
8519   static NoSpeculativeLoadHardeningAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_no_speculative_load_hardening);
8520 
8521   // Constructors
8522   NoSpeculativeLoadHardeningAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8523              );
8524 
8525   NoSpeculativeLoadHardeningAttr *clone(ASTContext &C) const;
8526   void printPretty(raw_ostream &OS,
8527                    const PrintingPolicy &Policy) const;
8528   const char *getSpelling() const;
8529 
8530 
8531   static bool classof(const Attr *A) { return A->getKind() == attr::NoSpeculativeLoadHardening; }
8532 };
8533 
8534 class CLANG_ABI NoSplitStackAttr : public InheritableAttr {
8535 public:
8536   enum Spelling {
8537     GNU_no_split_stack = 0,
8538     CXX11_gnu_no_split_stack = 1,
8539     C23_gnu_no_split_stack = 2,
8540   SpellingNotCalculated = 15
8541 
8542   };
8543 
8544   // Factory methods
8545   static NoSplitStackAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8546   static NoSplitStackAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8547   static NoSplitStackAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_no_split_stack);
8548   static NoSplitStackAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_no_split_stack);
8549 
8550   // Constructors
8551   NoSplitStackAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8552              );
8553 
8554   NoSplitStackAttr *clone(ASTContext &C) const;
8555   void printPretty(raw_ostream &OS,
8556                    const PrintingPolicy &Policy) const;
8557   const char *getSpelling() const;
8558 
8559 
8560   static bool classof(const Attr *A) { return A->getKind() == attr::NoSplitStack; }
8561 };
8562 
8563 class CLANG_ABI NoStackProtectorAttr : public InheritableAttr {
8564 public:
8565   enum Spelling {
8566     GNU_no_stack_protector = 0,
8567     CXX11_clang_no_stack_protector = 1,
8568     C23_clang_no_stack_protector = 2,
8569     CXX11_gnu_no_stack_protector = 3,
8570     C23_gnu_no_stack_protector = 4,
8571     Declspec_safebuffers = 5,
8572   SpellingNotCalculated = 15
8573 
8574   };
8575 
8576   // Factory methods
8577   static NoStackProtectorAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8578   static NoStackProtectorAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8579   static NoStackProtectorAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_no_stack_protector);
8580   static NoStackProtectorAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_no_stack_protector);
8581 
8582   // Constructors
8583   NoStackProtectorAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8584              );
8585 
8586   NoStackProtectorAttr *clone(ASTContext &C) const;
8587   void printPretty(raw_ostream &OS,
8588                    const PrintingPolicy &Policy) const;
8589   const char *getSpelling() const;
8590   Spelling getSemanticSpelling() const;
8591 
8592 
8593   static bool classof(const Attr *A) { return A->getKind() == attr::NoStackProtector; }
8594 };
8595 
8596 class CLANG_ABI NoThreadSafetyAnalysisAttr : public InheritableAttr {
8597 public:
8598   enum Spelling {
8599     GNU_no_thread_safety_analysis = 0,
8600     CXX11_clang_no_thread_safety_analysis = 1,
8601     C23_clang_no_thread_safety_analysis = 2,
8602   SpellingNotCalculated = 15
8603 
8604   };
8605 
8606   // Factory methods
8607   static NoThreadSafetyAnalysisAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8608   static NoThreadSafetyAnalysisAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8609   static NoThreadSafetyAnalysisAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_no_thread_safety_analysis);
8610   static NoThreadSafetyAnalysisAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_no_thread_safety_analysis);
8611 
8612   // Constructors
8613   NoThreadSafetyAnalysisAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8614              );
8615 
8616   NoThreadSafetyAnalysisAttr *clone(ASTContext &C) const;
8617   void printPretty(raw_ostream &OS,
8618                    const PrintingPolicy &Policy) const;
8619   const char *getSpelling() const;
8620 
8621 
8622   static bool classof(const Attr *A) { return A->getKind() == attr::NoThreadSafetyAnalysis; }
8623 };
8624 
8625 class CLANG_ABI NoThrowAttr : public InheritableAttr {
8626 public:
8627   enum Spelling {
8628     GNU_nothrow = 0,
8629     CXX11_gnu_nothrow = 1,
8630     C23_gnu_nothrow = 2,
8631     Declspec_nothrow = 3,
8632   SpellingNotCalculated = 15
8633 
8634   };
8635 
8636   // Factory methods
8637   static NoThrowAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8638   static NoThrowAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8639   static NoThrowAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_nothrow);
8640   static NoThrowAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_nothrow);
8641 
8642   // Constructors
8643   NoThrowAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8644              );
8645 
8646   NoThrowAttr *clone(ASTContext &C) const;
8647   void printPretty(raw_ostream &OS,
8648                    const PrintingPolicy &Policy) const;
8649   const char *getSpelling() const;
8650 
8651 
8652   static bool classof(const Attr *A) { return A->getKind() == attr::NoThrow; }
8653 };
8654 
8655 class CLANG_ABI NoTrivialAutoVarInitAttr : public InheritableAttr {
8656 public:
8657   // Factory methods
8658   static NoTrivialAutoVarInitAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8659   static NoTrivialAutoVarInitAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8660   static NoTrivialAutoVarInitAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
8661   static NoTrivialAutoVarInitAttr *Create(ASTContext &Ctx, SourceRange Range = {});
8662 
8663   // Constructors
8664   NoTrivialAutoVarInitAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8665              );
8666 
8667   NoTrivialAutoVarInitAttr *clone(ASTContext &C) const;
8668   void printPretty(raw_ostream &OS,
8669                    const PrintingPolicy &Policy) const;
8670   const char *getSpelling() const;
8671 
8672 
8673   static bool classof(const Attr *A) { return A->getKind() == attr::NoTrivialAutoVarInit; }
8674 };
8675 
8676 class CLANG_ABI NoUniqueAddressAttr : public InheritableAttr {
8677 public:
8678   enum Spelling {
8679     CXX11_no_unique_address = 0,
8680     CXX11_msvc_no_unique_address = 1,
8681   SpellingNotCalculated = 15
8682 
8683   };
8684 
8685   // Factory methods
8686   static NoUniqueAddressAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8687   static NoUniqueAddressAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8688   static NoUniqueAddressAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = CXX11_no_unique_address);
8689   static NoUniqueAddressAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = CXX11_no_unique_address);
8690 
8691   // Constructors
8692   NoUniqueAddressAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8693              );
8694 
8695   NoUniqueAddressAttr *clone(ASTContext &C) const;
8696   void printPretty(raw_ostream &OS,
8697                    const PrintingPolicy &Policy) const;
8698   const char *getSpelling() const;
8699 
8700 
8701   static bool classof(const Attr *A) { return A->getKind() == attr::NoUniqueAddress; }
8702 };
8703 
8704 class CLANG_ABI NoUwtableAttr : public InheritableAttr {
8705 public:
8706   enum Spelling {
8707     GNU_nouwtable = 0,
8708     CXX11_clang_nouwtable = 1,
8709     C23_clang_nouwtable = 2,
8710   SpellingNotCalculated = 15
8711 
8712   };
8713 
8714   // Factory methods
8715   static NoUwtableAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8716   static NoUwtableAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8717   static NoUwtableAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_nouwtable);
8718   static NoUwtableAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_nouwtable);
8719 
8720   // Constructors
8721   NoUwtableAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8722              );
8723 
8724   NoUwtableAttr *clone(ASTContext &C) const;
8725   void printPretty(raw_ostream &OS,
8726                    const PrintingPolicy &Policy) const;
8727   const char *getSpelling() const;
8728 
8729 
8730   static bool classof(const Attr *A) { return A->getKind() == attr::NoUwtable; }
8731 };
8732 
8733 class CLANG_ABI NonAllocatingAttr : public TypeAttr {
8734 Expr * cond;
8735 
8736 public:
8737   enum Spelling {
8738     GNU_nonallocating = 0,
8739     CXX11_clang_nonallocating = 1,
8740     C23_clang_nonallocating = 2,
8741   SpellingNotCalculated = 15
8742 
8743   };
8744 
8745   // Factory methods
8746   static NonAllocatingAttr *CreateImplicit(ASTContext &Ctx, Expr * Cond, const AttributeCommonInfo &CommonInfo);
8747   static NonAllocatingAttr *Create(ASTContext &Ctx, Expr * Cond, const AttributeCommonInfo &CommonInfo);
8748   static NonAllocatingAttr *CreateImplicit(ASTContext &Ctx, Expr * Cond, SourceRange Range = {}, Spelling S = GNU_nonallocating);
8749   static NonAllocatingAttr *Create(ASTContext &Ctx, Expr * Cond, SourceRange Range = {}, Spelling S = GNU_nonallocating);
8750 
8751   // Constructors
8752   NonAllocatingAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8753               , Expr * Cond
8754              );
8755   NonAllocatingAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8756              );
8757 
8758   NonAllocatingAttr *clone(ASTContext &C) const;
8759   void printPretty(raw_ostream &OS,
8760                    const PrintingPolicy &Policy) const;
8761   const char *getSpelling() const;
8762   Expr * getCond() const {
8763     return cond;
8764   }
8765 
8766 
8767 
8768   static bool classof(const Attr *A) { return A->getKind() == attr::NonAllocating; }
8769 };
8770 
8771 class CLANG_ABI NonBlockingAttr : public TypeAttr {
8772 Expr * cond;
8773 
8774 public:
8775   enum Spelling {
8776     GNU_nonblocking = 0,
8777     CXX11_clang_nonblocking = 1,
8778     C23_clang_nonblocking = 2,
8779   SpellingNotCalculated = 15
8780 
8781   };
8782 
8783   // Factory methods
8784   static NonBlockingAttr *CreateImplicit(ASTContext &Ctx, Expr * Cond, const AttributeCommonInfo &CommonInfo);
8785   static NonBlockingAttr *Create(ASTContext &Ctx, Expr * Cond, const AttributeCommonInfo &CommonInfo);
8786   static NonBlockingAttr *CreateImplicit(ASTContext &Ctx, Expr * Cond, SourceRange Range = {}, Spelling S = GNU_nonblocking);
8787   static NonBlockingAttr *Create(ASTContext &Ctx, Expr * Cond, SourceRange Range = {}, Spelling S = GNU_nonblocking);
8788 
8789   // Constructors
8790   NonBlockingAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8791               , Expr * Cond
8792              );
8793   NonBlockingAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8794              );
8795 
8796   NonBlockingAttr *clone(ASTContext &C) const;
8797   void printPretty(raw_ostream &OS,
8798                    const PrintingPolicy &Policy) const;
8799   const char *getSpelling() const;
8800   Expr * getCond() const {
8801     return cond;
8802   }
8803 
8804 
8805 
8806   static bool classof(const Attr *A) { return A->getKind() == attr::NonBlocking; }
8807 };
8808 
8809 class CLANG_ABI NonNullAttr : public InheritableParamAttr {
8810   unsigned args_Size;
8811   ParamIdx *args_;
8812 
8813 public:
8814   enum Spelling {
8815     GNU_nonnull = 0,
8816     CXX11_gnu_nonnull = 1,
8817     C23_gnu_nonnull = 2,
8818   SpellingNotCalculated = 15
8819 
8820   };
8821 
8822   // Factory methods
8823   static NonNullAttr *CreateImplicit(ASTContext &Ctx, ParamIdx *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);
8824   static NonNullAttr *Create(ASTContext &Ctx, ParamIdx *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);
8825   static NonNullAttr *CreateImplicit(ASTContext &Ctx, ParamIdx *Args, unsigned ArgsSize, SourceRange Range = {}, Spelling S = GNU_nonnull);
8826   static NonNullAttr *Create(ASTContext &Ctx, ParamIdx *Args, unsigned ArgsSize, SourceRange Range = {}, Spelling S = GNU_nonnull);
8827 
8828   // Constructors
8829   NonNullAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8830               , ParamIdx *Args, unsigned ArgsSize
8831              );
8832   NonNullAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8833              );
8834 
8835   NonNullAttr *clone(ASTContext &C) const;
8836   void printPretty(raw_ostream &OS,
8837                    const PrintingPolicy &Policy) const;
8838   const char *getSpelling() const;
8839   typedef ParamIdx* args_iterator;
8840   args_iterator args_begin() const { return args_; }
8841   args_iterator args_end() const { return args_ + args_Size; }
8842   unsigned args_size() const { return args_Size; }
8843   llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); }
8844 
8845 
8846 
8847     bool isNonNull(unsigned IdxAST) const {
8848       if (!args_size())
8849         return true;
8850       return llvm::any_of(args(), [=](const ParamIdx &Idx) {
8851         return Idx.getASTIndex() == IdxAST;
8852       });
8853     }
8854   
8855 
8856   static bool classof(const Attr *A) { return A->getKind() == attr::NonNull; }
8857 };
8858 
8859 class CLANG_ABI NotTailCalledAttr : public InheritableAttr {
8860 public:
8861   enum Spelling {
8862     GNU_not_tail_called = 0,
8863     CXX11_clang_not_tail_called = 1,
8864     C23_clang_not_tail_called = 2,
8865   SpellingNotCalculated = 15
8866 
8867   };
8868 
8869   // Factory methods
8870   static NotTailCalledAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8871   static NotTailCalledAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
8872   static NotTailCalledAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_not_tail_called);
8873   static NotTailCalledAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_not_tail_called);
8874 
8875   // Constructors
8876   NotTailCalledAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8877              );
8878 
8879   NotTailCalledAttr *clone(ASTContext &C) const;
8880   void printPretty(raw_ostream &OS,
8881                    const PrintingPolicy &Policy) const;
8882   const char *getSpelling() const;
8883 
8884 
8885   static bool classof(const Attr *A) { return A->getKind() == attr::NotTailCalled; }
8886 };
8887 
8888 class CLANG_ABI OMPAllocateDeclAttr : public InheritableAttr {
8889 public:
8890   enum AllocatorTypeTy {
8891     OMPNullMemAlloc,
8892     OMPDefaultMemAlloc,
8893     OMPLargeCapMemAlloc,
8894     OMPConstMemAlloc,
8895     OMPHighBWMemAlloc,
8896     OMPLowLatMemAlloc,
8897     OMPCGroupMemAlloc,
8898     OMPPTeamMemAlloc,
8899     OMPThreadMemAlloc,
8900     OMPUserDefinedMemAlloc
8901   };
8902 private:
8903   OMPAllocateDeclAttr::AllocatorTypeTy allocatorType;
8904 
8905 Expr * allocator;
8906 
8907 Expr * alignment;
8908 
8909 public:
8910   // Factory methods
8911   static OMPAllocateDeclAttr *CreateImplicit(ASTContext &Ctx, OMPAllocateDeclAttr::AllocatorTypeTy AllocatorType, Expr * Allocator, Expr * Alignment, const AttributeCommonInfo &CommonInfo);
8912   static OMPAllocateDeclAttr *Create(ASTContext &Ctx, OMPAllocateDeclAttr::AllocatorTypeTy AllocatorType, Expr * Allocator, Expr * Alignment, const AttributeCommonInfo &CommonInfo);
8913   static OMPAllocateDeclAttr *CreateImplicit(ASTContext &Ctx, OMPAllocateDeclAttr::AllocatorTypeTy AllocatorType, Expr * Allocator, Expr * Alignment, SourceRange Range = {});
8914   static OMPAllocateDeclAttr *Create(ASTContext &Ctx, OMPAllocateDeclAttr::AllocatorTypeTy AllocatorType, Expr * Allocator, Expr * Alignment, SourceRange Range = {});
8915 
8916   // Constructors
8917   OMPAllocateDeclAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8918               , OMPAllocateDeclAttr::AllocatorTypeTy AllocatorType
8919               , Expr * Allocator
8920               , Expr * Alignment
8921              );
8922 
8923   OMPAllocateDeclAttr *clone(ASTContext &C) const;
8924   void printPretty(raw_ostream &OS,
8925                    const PrintingPolicy &Policy) const;
8926   const char *getSpelling() const;
8927   OMPAllocateDeclAttr::AllocatorTypeTy getAllocatorType() const {
8928     return allocatorType;
8929   }
8930 
8931   static bool ConvertStrToAllocatorTypeTy(StringRef Val, OMPAllocateDeclAttr::AllocatorTypeTy &Out);
8932   static const char *ConvertAllocatorTypeTyToStr(OMPAllocateDeclAttr::AllocatorTypeTy Val);
8933   Expr * getAllocator() const {
8934     return allocator;
8935   }
8936 
8937   Expr * getAlignment() const {
8938     return alignment;
8939   }
8940 
8941 
8942 
8943   static bool classof(const Attr *A) { return A->getKind() == attr::OMPAllocateDecl; }
8944 };
8945 
8946 class CLANG_ABI OMPAssumeAttr : public InheritableAttr {
8947 unsigned assumptionLength;
8948 char *assumption;
8949 
8950 public:
8951   // Factory methods
8952   static OMPAssumeAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Assumption, const AttributeCommonInfo &CommonInfo);
8953   static OMPAssumeAttr *Create(ASTContext &Ctx, llvm::StringRef Assumption, const AttributeCommonInfo &CommonInfo);
8954   static OMPAssumeAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Assumption, SourceRange Range = {});
8955   static OMPAssumeAttr *Create(ASTContext &Ctx, llvm::StringRef Assumption, SourceRange Range = {});
8956 
8957   // Constructors
8958   OMPAssumeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8959               , llvm::StringRef Assumption
8960              );
8961 
8962   OMPAssumeAttr *clone(ASTContext &C) const;
8963   void printPretty(raw_ostream &OS,
8964                    const PrintingPolicy &Policy) const;
8965   const char *getSpelling() const;
8966   llvm::StringRef getAssumption() const {
8967     return llvm::StringRef(assumption, assumptionLength);
8968   }
8969   unsigned getAssumptionLength() const {
8970     return assumptionLength;
8971   }
8972   void setAssumption(ASTContext &C, llvm::StringRef S) {
8973     assumptionLength = S.size();
8974     this->assumption = new (C, 1) char [assumptionLength];
8975     if (!S.empty())
8976       std::memcpy(this->assumption, S.data(), assumptionLength);
8977   }
8978 
8979 
8980 
8981   static bool classof(const Attr *A) { return A->getKind() == attr::OMPAssume; }
8982 };
8983 
8984 class CLANG_ABI OMPCaptureKindAttr : public Attr {
8985 unsigned captureKindVal;
8986 
8987 public:
8988   // Factory methods
8989   static OMPCaptureKindAttr *CreateImplicit(ASTContext &Ctx, unsigned CaptureKindVal, const AttributeCommonInfo &CommonInfo);
8990   static OMPCaptureKindAttr *Create(ASTContext &Ctx, unsigned CaptureKindVal, const AttributeCommonInfo &CommonInfo);
8991   static OMPCaptureKindAttr *CreateImplicit(ASTContext &Ctx, unsigned CaptureKindVal, SourceRange Range = {});
8992   static OMPCaptureKindAttr *Create(ASTContext &Ctx, unsigned CaptureKindVal, SourceRange Range = {});
8993 
8994   // Constructors
8995   OMPCaptureKindAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
8996               , unsigned CaptureKindVal
8997              );
8998 
8999   OMPCaptureKindAttr *clone(ASTContext &C) const;
9000   void printPretty(raw_ostream &OS,
9001                    const PrintingPolicy &Policy) const;
9002   const char *getSpelling() const;
9003   unsigned getCaptureKindVal() const {
9004     return captureKindVal;
9005   }
9006 
9007 
9008     llvm::omp::Clause getCaptureKind() const {
9009       return static_cast<llvm::omp::Clause>(getCaptureKindVal());
9010     }
9011   
9012 
9013   static bool classof(const Attr *A) { return A->getKind() == attr::OMPCaptureKind; }
9014 };
9015 
9016 class CLANG_ABI OMPCaptureNoInitAttr : public InheritableAttr {
9017 public:
9018   // Factory methods
9019   static OMPCaptureNoInitAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9020   static OMPCaptureNoInitAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9021   static OMPCaptureNoInitAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
9022   static OMPCaptureNoInitAttr *Create(ASTContext &Ctx, SourceRange Range = {});
9023 
9024   // Constructors
9025   OMPCaptureNoInitAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
9026              );
9027 
9028   OMPCaptureNoInitAttr *clone(ASTContext &C) const;
9029   void printPretty(raw_ostream &OS,
9030                    const PrintingPolicy &Policy) const;
9031   const char *getSpelling() const;
9032 
9033 
9034   static bool classof(const Attr *A) { return A->getKind() == attr::OMPCaptureNoInit; }
9035 };
9036 
9037 class CLANG_ABI OMPDeclareSimdDeclAttr : public Attr {
9038 public:
9039   enum BranchStateTy {
9040     BS_Undefined,
9041     BS_Inbranch,
9042     BS_Notinbranch
9043   };
9044 private:
9045   OMPDeclareSimdDeclAttr::BranchStateTy branchState;
9046 
9047 Expr * simdlen;
9048 
9049   unsigned uniforms_Size;
9050   Expr * *uniforms_;
9051 
9052   unsigned aligneds_Size;
9053   Expr * *aligneds_;
9054 
9055   unsigned alignments_Size;
9056   Expr * *alignments_;
9057 
9058   unsigned linears_Size;
9059   Expr * *linears_;
9060 
9061   unsigned modifiers_Size;
9062   unsigned *modifiers_;
9063 
9064   unsigned steps_Size;
9065   Expr * *steps_;
9066 
9067 public:
9068   // Factory methods
9069   static OMPDeclareSimdDeclAttr *CreateImplicit(ASTContext &Ctx, OMPDeclareSimdDeclAttr::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);
9070   static OMPDeclareSimdDeclAttr *Create(ASTContext &Ctx, OMPDeclareSimdDeclAttr::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);
9071   static OMPDeclareSimdDeclAttr *CreateImplicit(ASTContext &Ctx, OMPDeclareSimdDeclAttr::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 = {});
9072   static OMPDeclareSimdDeclAttr *Create(ASTContext &Ctx, OMPDeclareSimdDeclAttr::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 = {});
9073 
9074   // Constructors
9075   OMPDeclareSimdDeclAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
9076               , OMPDeclareSimdDeclAttr::BranchStateTy BranchState
9077               , Expr * Simdlen
9078               , Expr * *Uniforms, unsigned UniformsSize
9079               , Expr * *Aligneds, unsigned AlignedsSize
9080               , Expr * *Alignments, unsigned AlignmentsSize
9081               , Expr * *Linears, unsigned LinearsSize
9082               , unsigned *Modifiers, unsigned ModifiersSize
9083               , Expr * *Steps, unsigned StepsSize
9084              );
9085   OMPDeclareSimdDeclAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
9086               , OMPDeclareSimdDeclAttr::BranchStateTy BranchState
9087               , Expr * Simdlen
9088              );
9089 
9090   OMPDeclareSimdDeclAttr *clone(ASTContext &C) const;
9091   void printPretty(raw_ostream &OS,
9092                    const PrintingPolicy &Policy) const;
9093   const char *getSpelling() const;
9094   OMPDeclareSimdDeclAttr::BranchStateTy getBranchState() const {
9095     return branchState;
9096   }
9097 
9098   static bool ConvertStrToBranchStateTy(StringRef Val, OMPDeclareSimdDeclAttr::BranchStateTy &Out);
9099   static const char *ConvertBranchStateTyToStr(OMPDeclareSimdDeclAttr::BranchStateTy Val);
9100   Expr * getSimdlen() const {
9101     return simdlen;
9102   }
9103 
9104   typedef Expr ** uniforms_iterator;
9105   uniforms_iterator uniforms_begin() const { return uniforms_; }
9106   uniforms_iterator uniforms_end() const { return uniforms_ + uniforms_Size; }
9107   unsigned uniforms_size() const { return uniforms_Size; }
9108   llvm::iterator_range<uniforms_iterator> uniforms() const { return llvm::make_range(uniforms_begin(), uniforms_end()); }
9109 
9110 
9111   typedef Expr ** aligneds_iterator;
9112   aligneds_iterator aligneds_begin() const { return aligneds_; }
9113   aligneds_iterator aligneds_end() const { return aligneds_ + aligneds_Size; }
9114   unsigned aligneds_size() const { return aligneds_Size; }
9115   llvm::iterator_range<aligneds_iterator> aligneds() const { return llvm::make_range(aligneds_begin(), aligneds_end()); }
9116 
9117 
9118   typedef Expr ** alignments_iterator;
9119   alignments_iterator alignments_begin() const { return alignments_; }
9120   alignments_iterator alignments_end() const { return alignments_ + alignments_Size; }
9121   unsigned alignments_size() const { return alignments_Size; }
9122   llvm::iterator_range<alignments_iterator> alignments() const { return llvm::make_range(alignments_begin(), alignments_end()); }
9123 
9124 
9125   typedef Expr ** linears_iterator;
9126   linears_iterator linears_begin() const { return linears_; }
9127   linears_iterator linears_end() const { return linears_ + linears_Size; }
9128   unsigned linears_size() const { return linears_Size; }
9129   llvm::iterator_range<linears_iterator> linears() const { return llvm::make_range(linears_begin(), linears_end()); }
9130 
9131 
9132   typedef unsigned* modifiers_iterator;
9133   modifiers_iterator modifiers_begin() const { return modifiers_; }
9134   modifiers_iterator modifiers_end() const { return modifiers_ + modifiers_Size; }
9135   unsigned modifiers_size() const { return modifiers_Size; }
9136   llvm::iterator_range<modifiers_iterator> modifiers() const { return llvm::make_range(modifiers_begin(), modifiers_end()); }
9137 
9138 
9139   typedef Expr ** steps_iterator;
9140   steps_iterator steps_begin() const { return steps_; }
9141   steps_iterator steps_end() const { return steps_ + steps_Size; }
9142   unsigned steps_size() const { return steps_Size; }
9143   llvm::iterator_range<steps_iterator> steps() const { return llvm::make_range(steps_begin(), steps_end()); }
9144 
9145 
9146 
9147     void printPrettyPragma(raw_ostream & OS, const PrintingPolicy &Policy)
9148         const;
9149   
9150 
9151   static bool classof(const Attr *A) { return A->getKind() == attr::OMPDeclareSimdDecl; }
9152 };
9153 
9154 class CLANG_ABI OMPDeclareTargetDeclAttr : public InheritableAttr {
9155 public:
9156   enum MapTypeTy {
9157     MT_To,
9158     MT_Enter,
9159     MT_Link
9160   };
9161 private:
9162   OMPDeclareTargetDeclAttr::MapTypeTy mapType;
9163 
9164 public:
9165   enum DevTypeTy {
9166     DT_Host,
9167     DT_NoHost,
9168     DT_Any
9169   };
9170 private:
9171   OMPDeclareTargetDeclAttr::DevTypeTy devType;
9172 
9173 Expr * indirectExpr;
9174 
9175 bool indirect;
9176 
9177 unsigned level;
9178 
9179 public:
9180   // Factory methods
9181   static OMPDeclareTargetDeclAttr *CreateImplicit(ASTContext &Ctx, OMPDeclareTargetDeclAttr::MapTypeTy MapType, OMPDeclareTargetDeclAttr::DevTypeTy DevType, Expr * IndirectExpr, bool Indirect, unsigned Level, const AttributeCommonInfo &CommonInfo);
9182   static OMPDeclareTargetDeclAttr *Create(ASTContext &Ctx, OMPDeclareTargetDeclAttr::MapTypeTy MapType, OMPDeclareTargetDeclAttr::DevTypeTy DevType, Expr * IndirectExpr, bool Indirect, unsigned Level, const AttributeCommonInfo &CommonInfo);
9183   static OMPDeclareTargetDeclAttr *CreateImplicit(ASTContext &Ctx, OMPDeclareTargetDeclAttr::MapTypeTy MapType, OMPDeclareTargetDeclAttr::DevTypeTy DevType, Expr * IndirectExpr, bool Indirect, unsigned Level, SourceRange Range = {});
9184   static OMPDeclareTargetDeclAttr *Create(ASTContext &Ctx, OMPDeclareTargetDeclAttr::MapTypeTy MapType, OMPDeclareTargetDeclAttr::DevTypeTy DevType, Expr * IndirectExpr, bool Indirect, unsigned Level, SourceRange Range = {});
9185 
9186   // Constructors
9187   OMPDeclareTargetDeclAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
9188               , OMPDeclareTargetDeclAttr::MapTypeTy MapType
9189               , OMPDeclareTargetDeclAttr::DevTypeTy DevType
9190               , Expr * IndirectExpr
9191               , bool Indirect
9192               , unsigned Level
9193              );
9194 
9195   OMPDeclareTargetDeclAttr *clone(ASTContext &C) const;
9196   void printPretty(raw_ostream &OS,
9197                    const PrintingPolicy &Policy) const;
9198   const char *getSpelling() const;
9199   OMPDeclareTargetDeclAttr::MapTypeTy getMapType() const {
9200     return mapType;
9201   }
9202 
9203   static bool ConvertStrToMapTypeTy(StringRef Val, OMPDeclareTargetDeclAttr::MapTypeTy &Out);
9204   static const char *ConvertMapTypeTyToStr(OMPDeclareTargetDeclAttr::MapTypeTy Val);
9205   OMPDeclareTargetDeclAttr::DevTypeTy getDevType() const {
9206     return devType;
9207   }
9208 
9209   static bool ConvertStrToDevTypeTy(StringRef Val, OMPDeclareTargetDeclAttr::DevTypeTy &Out);
9210   static const char *ConvertDevTypeTyToStr(OMPDeclareTargetDeclAttr::DevTypeTy Val);
9211   Expr * getIndirectExpr() const {
9212     return indirectExpr;
9213   }
9214 
9215   bool getIndirect() const {
9216     return indirect;
9217   }
9218 
9219   unsigned getLevel() const {
9220     return level;
9221   }
9222 
9223 
9224     void printPrettyPragma(raw_ostream &OS, const PrintingPolicy &Policy) const;
9225     static std::optional<MapTypeTy>
9226     isDeclareTargetDeclaration(const ValueDecl *VD);
9227     static std::optional<OMPDeclareTargetDeclAttr*> getActiveAttr(const ValueDecl *VD);
9228     static std::optional<DevTypeTy> getDeviceType(const ValueDecl *VD);
9229     static std::optional<SourceLocation> getLocation(const ValueDecl *VD);
9230   
9231 
9232   static bool classof(const Attr *A) { return A->getKind() == attr::OMPDeclareTargetDecl; }
9233 };
9234 
9235 class CLANG_ABI OMPDeclareVariantAttr : public InheritableAttr {
9236 Expr * variantFuncRef;
9237 
9238 OMPTraitInfo * traitInfos;
9239 
9240   unsigned adjustArgsNothing_Size;
9241   Expr * *adjustArgsNothing_;
9242 
9243   unsigned adjustArgsNeedDevicePtr_Size;
9244   Expr * *adjustArgsNeedDevicePtr_;
9245 
9246   unsigned appendArgs_Size;
9247   OMPInteropInfo *appendArgs_;
9248 
9249 public:
9250   // Factory methods
9251   static OMPDeclareVariantAttr *CreateImplicit(ASTContext &Ctx, Expr * VariantFuncRef, OMPTraitInfo * TraitInfos, Expr * *AdjustArgsNothing, unsigned AdjustArgsNothingSize, Expr * *AdjustArgsNeedDevicePtr, unsigned AdjustArgsNeedDevicePtrSize, OMPInteropInfo *AppendArgs, unsigned AppendArgsSize, const AttributeCommonInfo &CommonInfo);
9252   static OMPDeclareVariantAttr *Create(ASTContext &Ctx, Expr * VariantFuncRef, OMPTraitInfo * TraitInfos, Expr * *AdjustArgsNothing, unsigned AdjustArgsNothingSize, Expr * *AdjustArgsNeedDevicePtr, unsigned AdjustArgsNeedDevicePtrSize, OMPInteropInfo *AppendArgs, unsigned AppendArgsSize, const AttributeCommonInfo &CommonInfo);
9253   static OMPDeclareVariantAttr *CreateImplicit(ASTContext &Ctx, Expr * VariantFuncRef, OMPTraitInfo * TraitInfos, Expr * *AdjustArgsNothing, unsigned AdjustArgsNothingSize, Expr * *AdjustArgsNeedDevicePtr, unsigned AdjustArgsNeedDevicePtrSize, OMPInteropInfo *AppendArgs, unsigned AppendArgsSize, SourceRange Range = {});
9254   static OMPDeclareVariantAttr *Create(ASTContext &Ctx, Expr * VariantFuncRef, OMPTraitInfo * TraitInfos, Expr * *AdjustArgsNothing, unsigned AdjustArgsNothingSize, Expr * *AdjustArgsNeedDevicePtr, unsigned AdjustArgsNeedDevicePtrSize, OMPInteropInfo *AppendArgs, unsigned AppendArgsSize, SourceRange Range = {});
9255 
9256   // Constructors
9257   OMPDeclareVariantAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
9258               , Expr * VariantFuncRef
9259               , OMPTraitInfo * TraitInfos
9260               , Expr * *AdjustArgsNothing, unsigned AdjustArgsNothingSize
9261               , Expr * *AdjustArgsNeedDevicePtr, unsigned AdjustArgsNeedDevicePtrSize
9262               , OMPInteropInfo *AppendArgs, unsigned AppendArgsSize
9263              );
9264   OMPDeclareVariantAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
9265               , Expr * VariantFuncRef
9266               , OMPTraitInfo * TraitInfos
9267               , OMPInteropInfo *AppendArgs, unsigned AppendArgsSize
9268              );
9269 
9270   OMPDeclareVariantAttr *clone(ASTContext &C) const;
9271   void printPretty(raw_ostream &OS,
9272                    const PrintingPolicy &Policy) const;
9273   const char *getSpelling() const;
9274   Expr * getVariantFuncRef() const {
9275     return variantFuncRef;
9276   }
9277 
9278   OMPTraitInfo * getTraitInfos() const {
9279     return traitInfos;
9280   }
9281 
9282   typedef Expr ** adjustArgsNothing_iterator;
9283   adjustArgsNothing_iterator adjustArgsNothing_begin() const { return adjustArgsNothing_; }
9284   adjustArgsNothing_iterator adjustArgsNothing_end() const { return adjustArgsNothing_ + adjustArgsNothing_Size; }
9285   unsigned adjustArgsNothing_size() const { return adjustArgsNothing_Size; }
9286   llvm::iterator_range<adjustArgsNothing_iterator> adjustArgsNothing() const { return llvm::make_range(adjustArgsNothing_begin(), adjustArgsNothing_end()); }
9287 
9288 
9289   typedef Expr ** adjustArgsNeedDevicePtr_iterator;
9290   adjustArgsNeedDevicePtr_iterator adjustArgsNeedDevicePtr_begin() const { return adjustArgsNeedDevicePtr_; }
9291   adjustArgsNeedDevicePtr_iterator adjustArgsNeedDevicePtr_end() const { return adjustArgsNeedDevicePtr_ + adjustArgsNeedDevicePtr_Size; }
9292   unsigned adjustArgsNeedDevicePtr_size() const { return adjustArgsNeedDevicePtr_Size; }
9293   llvm::iterator_range<adjustArgsNeedDevicePtr_iterator> adjustArgsNeedDevicePtr() const { return llvm::make_range(adjustArgsNeedDevicePtr_begin(), adjustArgsNeedDevicePtr_end()); }
9294 
9295 
9296   typedef OMPInteropInfo* appendArgs_iterator;
9297   appendArgs_iterator appendArgs_begin() const { return appendArgs_; }
9298   appendArgs_iterator appendArgs_end() const { return appendArgs_ + appendArgs_Size; }
9299   unsigned appendArgs_size() const { return appendArgs_Size; }
9300   llvm::iterator_range<appendArgs_iterator> appendArgs() const { return llvm::make_range(appendArgs_begin(), appendArgs_end()); }
9301 
9302 
9303 
9304     OMPTraitInfo &getTraitInfo() { return *traitInfos; }
9305     void printPrettyPragma(raw_ostream & OS, const PrintingPolicy &Policy)
9306         const;
9307     static StringRef getInteropTypeString(const OMPInteropInfo *I) {
9308       if (I->IsTarget && I->IsTargetSync)
9309         return "target,targetsync";
9310       if (I->IsTarget)
9311         return "target";
9312       return "targetsync";
9313     }
9314   
9315 
9316   static bool classof(const Attr *A) { return A->getKind() == attr::OMPDeclareVariant; }
9317 };
9318 
9319 class CLANG_ABI OMPReferencedVarAttr : public Attr {
9320 Expr * ref;
9321 
9322 public:
9323   // Factory methods
9324   static OMPReferencedVarAttr *CreateImplicit(ASTContext &Ctx, Expr * Ref, const AttributeCommonInfo &CommonInfo);
9325   static OMPReferencedVarAttr *Create(ASTContext &Ctx, Expr * Ref, const AttributeCommonInfo &CommonInfo);
9326   static OMPReferencedVarAttr *CreateImplicit(ASTContext &Ctx, Expr * Ref, SourceRange Range = {});
9327   static OMPReferencedVarAttr *Create(ASTContext &Ctx, Expr * Ref, SourceRange Range = {});
9328 
9329   // Constructors
9330   OMPReferencedVarAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
9331               , Expr * Ref
9332              );
9333 
9334   OMPReferencedVarAttr *clone(ASTContext &C) const;
9335   void printPretty(raw_ostream &OS,
9336                    const PrintingPolicy &Policy) const;
9337   const char *getSpelling() const;
9338   Expr * getRef() const {
9339     return ref;
9340   }
9341 
9342 
9343 
9344   static bool classof(const Attr *A) { return A->getKind() == attr::OMPReferencedVar; }
9345 };
9346 
9347 class CLANG_ABI OMPThreadPrivateDeclAttr : public InheritableAttr {
9348 public:
9349   // Factory methods
9350   static OMPThreadPrivateDeclAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9351   static OMPThreadPrivateDeclAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9352   static OMPThreadPrivateDeclAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
9353   static OMPThreadPrivateDeclAttr *Create(ASTContext &Ctx, SourceRange Range = {});
9354 
9355   // Constructors
9356   OMPThreadPrivateDeclAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
9357              );
9358 
9359   OMPThreadPrivateDeclAttr *clone(ASTContext &C) const;
9360   void printPretty(raw_ostream &OS,
9361                    const PrintingPolicy &Policy) const;
9362   const char *getSpelling() const;
9363 
9364 
9365   static bool classof(const Attr *A) { return A->getKind() == attr::OMPThreadPrivateDecl; }
9366 };
9367 
9368 class CLANG_ABI OSConsumedAttr : public InheritableParamAttr {
9369 public:
9370   enum Spelling {
9371     GNU_os_consumed = 0,
9372     CXX11_clang_os_consumed = 1,
9373     C23_clang_os_consumed = 2,
9374   SpellingNotCalculated = 15
9375 
9376   };
9377 
9378   // Factory methods
9379   static OSConsumedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9380   static OSConsumedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9381   static OSConsumedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_os_consumed);
9382   static OSConsumedAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_os_consumed);
9383 
9384   // Constructors
9385   OSConsumedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
9386              );
9387 
9388   OSConsumedAttr *clone(ASTContext &C) const;
9389   void printPretty(raw_ostream &OS,
9390                    const PrintingPolicy &Policy) const;
9391   const char *getSpelling() const;
9392 
9393 
9394   static bool classof(const Attr *A) { return A->getKind() == attr::OSConsumed; }
9395 };
9396 
9397 class CLANG_ABI OSConsumesThisAttr : public InheritableAttr {
9398 public:
9399   enum Spelling {
9400     GNU_os_consumes_this = 0,
9401     CXX11_clang_os_consumes_this = 1,
9402     C23_clang_os_consumes_this = 2,
9403   SpellingNotCalculated = 15
9404 
9405   };
9406 
9407   // Factory methods
9408   static OSConsumesThisAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9409   static OSConsumesThisAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9410   static OSConsumesThisAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_os_consumes_this);
9411   static OSConsumesThisAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_os_consumes_this);
9412 
9413   // Constructors
9414   OSConsumesThisAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
9415              );
9416 
9417   OSConsumesThisAttr *clone(ASTContext &C) const;
9418   void printPretty(raw_ostream &OS,
9419                    const PrintingPolicy &Policy) const;
9420   const char *getSpelling() const;
9421 
9422 
9423   static bool classof(const Attr *A) { return A->getKind() == attr::OSConsumesThis; }
9424 };
9425 
9426 class CLANG_ABI OSReturnsNotRetainedAttr : public InheritableAttr {
9427 public:
9428   enum Spelling {
9429     GNU_os_returns_not_retained = 0,
9430     CXX11_clang_os_returns_not_retained = 1,
9431     C23_clang_os_returns_not_retained = 2,
9432   SpellingNotCalculated = 15
9433 
9434   };
9435 
9436   // Factory methods
9437   static OSReturnsNotRetainedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9438   static OSReturnsNotRetainedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9439   static OSReturnsNotRetainedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_os_returns_not_retained);
9440   static OSReturnsNotRetainedAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_os_returns_not_retained);
9441 
9442   // Constructors
9443   OSReturnsNotRetainedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
9444              );
9445 
9446   OSReturnsNotRetainedAttr *clone(ASTContext &C) const;
9447   void printPretty(raw_ostream &OS,
9448                    const PrintingPolicy &Policy) const;
9449   const char *getSpelling() const;
9450 
9451 
9452   static bool classof(const Attr *A) { return A->getKind() == attr::OSReturnsNotRetained; }
9453 };
9454 
9455 class CLANG_ABI OSReturnsRetainedAttr : public InheritableAttr {
9456 public:
9457   enum Spelling {
9458     GNU_os_returns_retained = 0,
9459     CXX11_clang_os_returns_retained = 1,
9460     C23_clang_os_returns_retained = 2,
9461   SpellingNotCalculated = 15
9462 
9463   };
9464 
9465   // Factory methods
9466   static OSReturnsRetainedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9467   static OSReturnsRetainedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9468   static OSReturnsRetainedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_os_returns_retained);
9469   static OSReturnsRetainedAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_os_returns_retained);
9470 
9471   // Constructors
9472   OSReturnsRetainedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
9473              );
9474 
9475   OSReturnsRetainedAttr *clone(ASTContext &C) const;
9476   void printPretty(raw_ostream &OS,
9477                    const PrintingPolicy &Policy) const;
9478   const char *getSpelling() const;
9479 
9480 
9481   static bool classof(const Attr *A) { return A->getKind() == attr::OSReturnsRetained; }
9482 };
9483 
9484 class CLANG_ABI OSReturnsRetainedOnNonZeroAttr : public InheritableAttr {
9485 public:
9486   enum Spelling {
9487     GNU_os_returns_retained_on_non_zero = 0,
9488     CXX11_clang_os_returns_retained_on_non_zero = 1,
9489     C23_clang_os_returns_retained_on_non_zero = 2,
9490   SpellingNotCalculated = 15
9491 
9492   };
9493 
9494   // Factory methods
9495   static OSReturnsRetainedOnNonZeroAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9496   static OSReturnsRetainedOnNonZeroAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9497   static OSReturnsRetainedOnNonZeroAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_os_returns_retained_on_non_zero);
9498   static OSReturnsRetainedOnNonZeroAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_os_returns_retained_on_non_zero);
9499 
9500   // Constructors
9501   OSReturnsRetainedOnNonZeroAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
9502              );
9503 
9504   OSReturnsRetainedOnNonZeroAttr *clone(ASTContext &C) const;
9505   void printPretty(raw_ostream &OS,
9506                    const PrintingPolicy &Policy) const;
9507   const char *getSpelling() const;
9508 
9509 
9510   static bool classof(const Attr *A) { return A->getKind() == attr::OSReturnsRetainedOnNonZero; }
9511 };
9512 
9513 class CLANG_ABI OSReturnsRetainedOnZeroAttr : public InheritableAttr {
9514 public:
9515   enum Spelling {
9516     GNU_os_returns_retained_on_zero = 0,
9517     CXX11_clang_os_returns_retained_on_zero = 1,
9518     C23_clang_os_returns_retained_on_zero = 2,
9519   SpellingNotCalculated = 15
9520 
9521   };
9522 
9523   // Factory methods
9524   static OSReturnsRetainedOnZeroAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9525   static OSReturnsRetainedOnZeroAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9526   static OSReturnsRetainedOnZeroAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_os_returns_retained_on_zero);
9527   static OSReturnsRetainedOnZeroAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_os_returns_retained_on_zero);
9528 
9529   // Constructors
9530   OSReturnsRetainedOnZeroAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
9531              );
9532 
9533   OSReturnsRetainedOnZeroAttr *clone(ASTContext &C) const;
9534   void printPretty(raw_ostream &OS,
9535                    const PrintingPolicy &Policy) const;
9536   const char *getSpelling() const;
9537 
9538 
9539   static bool classof(const Attr *A) { return A->getKind() == attr::OSReturnsRetainedOnZero; }
9540 };
9541 
9542 class CLANG_ABI ObjCBoxableAttr : public Attr {
9543 public:
9544   enum Spelling {
9545     GNU_objc_boxable = 0,
9546     CXX11_clang_objc_boxable = 1,
9547     C23_clang_objc_boxable = 2,
9548   SpellingNotCalculated = 15
9549 
9550   };
9551 
9552   // Factory methods
9553   static ObjCBoxableAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9554   static ObjCBoxableAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9555   static ObjCBoxableAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_boxable);
9556   static ObjCBoxableAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_boxable);
9557 
9558   // Constructors
9559   ObjCBoxableAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
9560              );
9561 
9562   ObjCBoxableAttr *clone(ASTContext &C) const;
9563   void printPretty(raw_ostream &OS,
9564                    const PrintingPolicy &Policy) const;
9565   const char *getSpelling() const;
9566 
9567 
9568   static bool classof(const Attr *A) { return A->getKind() == attr::ObjCBoxable; }
9569 };
9570 
9571 class CLANG_ABI ObjCBridgeAttr : public InheritableAttr {
9572 IdentifierInfo * bridgedType;
9573 
9574 public:
9575   enum Spelling {
9576     GNU_objc_bridge = 0,
9577     CXX11_clang_objc_bridge = 1,
9578     C23_clang_objc_bridge = 2,
9579   SpellingNotCalculated = 15
9580 
9581   };
9582 
9583   // Factory methods
9584   static ObjCBridgeAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * BridgedType, const AttributeCommonInfo &CommonInfo);
9585   static ObjCBridgeAttr *Create(ASTContext &Ctx, IdentifierInfo * BridgedType, const AttributeCommonInfo &CommonInfo);
9586   static ObjCBridgeAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * BridgedType, SourceRange Range = {}, Spelling S = GNU_objc_bridge);
9587   static ObjCBridgeAttr *Create(ASTContext &Ctx, IdentifierInfo * BridgedType, SourceRange Range = {}, Spelling S = GNU_objc_bridge);
9588 
9589   // Constructors
9590   ObjCBridgeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
9591               , IdentifierInfo * BridgedType
9592              );
9593 
9594   ObjCBridgeAttr *clone(ASTContext &C) const;
9595   void printPretty(raw_ostream &OS,
9596                    const PrintingPolicy &Policy) const;
9597   const char *getSpelling() const;
9598   IdentifierInfo * getBridgedType() const {
9599     return bridgedType;
9600   }
9601 
9602 
9603 
9604   static bool classof(const Attr *A) { return A->getKind() == attr::ObjCBridge; }
9605 };
9606 
9607 class CLANG_ABI ObjCBridgeMutableAttr : public InheritableAttr {
9608 IdentifierInfo * bridgedType;
9609 
9610 public:
9611   enum Spelling {
9612     GNU_objc_bridge_mutable = 0,
9613     CXX11_clang_objc_bridge_mutable = 1,
9614     C23_clang_objc_bridge_mutable = 2,
9615   SpellingNotCalculated = 15
9616 
9617   };
9618 
9619   // Factory methods
9620   static ObjCBridgeMutableAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * BridgedType, const AttributeCommonInfo &CommonInfo);
9621   static ObjCBridgeMutableAttr *Create(ASTContext &Ctx, IdentifierInfo * BridgedType, const AttributeCommonInfo &CommonInfo);
9622   static ObjCBridgeMutableAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * BridgedType, SourceRange Range = {}, Spelling S = GNU_objc_bridge_mutable);
9623   static ObjCBridgeMutableAttr *Create(ASTContext &Ctx, IdentifierInfo * BridgedType, SourceRange Range = {}, Spelling S = GNU_objc_bridge_mutable);
9624 
9625   // Constructors
9626   ObjCBridgeMutableAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
9627               , IdentifierInfo * BridgedType
9628              );
9629 
9630   ObjCBridgeMutableAttr *clone(ASTContext &C) const;
9631   void printPretty(raw_ostream &OS,
9632                    const PrintingPolicy &Policy) const;
9633   const char *getSpelling() const;
9634   IdentifierInfo * getBridgedType() const {
9635     return bridgedType;
9636   }
9637 
9638 
9639 
9640   static bool classof(const Attr *A) { return A->getKind() == attr::ObjCBridgeMutable; }
9641 };
9642 
9643 class CLANG_ABI ObjCBridgeRelatedAttr : public InheritableAttr {
9644 IdentifierInfo * relatedClass;
9645 
9646 IdentifierInfo * classMethod;
9647 
9648 IdentifierInfo * instanceMethod;
9649 
9650 public:
9651   enum Spelling {
9652     GNU_objc_bridge_related = 0,
9653     CXX11_clang_objc_bridge_related = 1,
9654     C23_clang_objc_bridge_related = 2,
9655   SpellingNotCalculated = 15
9656 
9657   };
9658 
9659   // Factory methods
9660   static ObjCBridgeRelatedAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * RelatedClass, IdentifierInfo * ClassMethod, IdentifierInfo * InstanceMethod, const AttributeCommonInfo &CommonInfo);
9661   static ObjCBridgeRelatedAttr *Create(ASTContext &Ctx, IdentifierInfo * RelatedClass, IdentifierInfo * ClassMethod, IdentifierInfo * InstanceMethod, const AttributeCommonInfo &CommonInfo);
9662   static ObjCBridgeRelatedAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * RelatedClass, IdentifierInfo * ClassMethod, IdentifierInfo * InstanceMethod, SourceRange Range = {}, Spelling S = GNU_objc_bridge_related);
9663   static ObjCBridgeRelatedAttr *Create(ASTContext &Ctx, IdentifierInfo * RelatedClass, IdentifierInfo * ClassMethod, IdentifierInfo * InstanceMethod, SourceRange Range = {}, Spelling S = GNU_objc_bridge_related);
9664 
9665   // Constructors
9666   ObjCBridgeRelatedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
9667               , IdentifierInfo * RelatedClass
9668               , IdentifierInfo * ClassMethod
9669               , IdentifierInfo * InstanceMethod
9670              );
9671 
9672   ObjCBridgeRelatedAttr *clone(ASTContext &C) const;
9673   void printPretty(raw_ostream &OS,
9674                    const PrintingPolicy &Policy) const;
9675   const char *getSpelling() const;
9676   IdentifierInfo * getRelatedClass() const {
9677     return relatedClass;
9678   }
9679 
9680   IdentifierInfo * getClassMethod() const {
9681     return classMethod;
9682   }
9683 
9684   IdentifierInfo * getInstanceMethod() const {
9685     return instanceMethod;
9686   }
9687 
9688 
9689 
9690   static bool classof(const Attr *A) { return A->getKind() == attr::ObjCBridgeRelated; }
9691 };
9692 
9693 class CLANG_ABI ObjCClassStubAttr : public Attr {
9694 public:
9695   enum Spelling {
9696     GNU_objc_class_stub = 0,
9697     CXX11_clang_objc_class_stub = 1,
9698     C23_clang_objc_class_stub = 2,
9699   SpellingNotCalculated = 15
9700 
9701   };
9702 
9703   // Factory methods
9704   static ObjCClassStubAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9705   static ObjCClassStubAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9706   static ObjCClassStubAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_class_stub);
9707   static ObjCClassStubAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_class_stub);
9708 
9709   // Constructors
9710   ObjCClassStubAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
9711              );
9712 
9713   ObjCClassStubAttr *clone(ASTContext &C) const;
9714   void printPretty(raw_ostream &OS,
9715                    const PrintingPolicy &Policy) const;
9716   const char *getSpelling() const;
9717 
9718 
9719   static bool classof(const Attr *A) { return A->getKind() == attr::ObjCClassStub; }
9720 };
9721 
9722 class CLANG_ABI ObjCDesignatedInitializerAttr : public Attr {
9723 public:
9724   enum Spelling {
9725     GNU_objc_designated_initializer = 0,
9726     CXX11_clang_objc_designated_initializer = 1,
9727     C23_clang_objc_designated_initializer = 2,
9728   SpellingNotCalculated = 15
9729 
9730   };
9731 
9732   // Factory methods
9733   static ObjCDesignatedInitializerAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9734   static ObjCDesignatedInitializerAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9735   static ObjCDesignatedInitializerAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_designated_initializer);
9736   static ObjCDesignatedInitializerAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_designated_initializer);
9737 
9738   // Constructors
9739   ObjCDesignatedInitializerAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
9740              );
9741 
9742   ObjCDesignatedInitializerAttr *clone(ASTContext &C) const;
9743   void printPretty(raw_ostream &OS,
9744                    const PrintingPolicy &Policy) const;
9745   const char *getSpelling() const;
9746 
9747 
9748   static bool classof(const Attr *A) { return A->getKind() == attr::ObjCDesignatedInitializer; }
9749 };
9750 
9751 class CLANG_ABI ObjCDirectAttr : public Attr {
9752 public:
9753   enum Spelling {
9754     GNU_objc_direct = 0,
9755     CXX11_clang_objc_direct = 1,
9756     C23_clang_objc_direct = 2,
9757   SpellingNotCalculated = 15
9758 
9759   };
9760 
9761   // Factory methods
9762   static ObjCDirectAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9763   static ObjCDirectAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9764   static ObjCDirectAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_direct);
9765   static ObjCDirectAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_direct);
9766 
9767   // Constructors
9768   ObjCDirectAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
9769              );
9770 
9771   ObjCDirectAttr *clone(ASTContext &C) const;
9772   void printPretty(raw_ostream &OS,
9773                    const PrintingPolicy &Policy) const;
9774   const char *getSpelling() const;
9775 
9776 
9777   static bool classof(const Attr *A) { return A->getKind() == attr::ObjCDirect; }
9778 };
9779 
9780 class CLANG_ABI ObjCDirectMembersAttr : public Attr {
9781 public:
9782   enum Spelling {
9783     GNU_objc_direct_members = 0,
9784     CXX11_clang_objc_direct_members = 1,
9785     C23_clang_objc_direct_members = 2,
9786   SpellingNotCalculated = 15
9787 
9788   };
9789 
9790   // Factory methods
9791   static ObjCDirectMembersAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9792   static ObjCDirectMembersAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9793   static ObjCDirectMembersAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_direct_members);
9794   static ObjCDirectMembersAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_direct_members);
9795 
9796   // Constructors
9797   ObjCDirectMembersAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
9798              );
9799 
9800   ObjCDirectMembersAttr *clone(ASTContext &C) const;
9801   void printPretty(raw_ostream &OS,
9802                    const PrintingPolicy &Policy) const;
9803   const char *getSpelling() const;
9804 
9805 
9806   static bool classof(const Attr *A) { return A->getKind() == attr::ObjCDirectMembers; }
9807 };
9808 
9809 class CLANG_ABI ObjCExceptionAttr : public InheritableAttr {
9810 public:
9811   enum Spelling {
9812     GNU_objc_exception = 0,
9813     CXX11_clang_objc_exception = 1,
9814     C23_clang_objc_exception = 2,
9815   SpellingNotCalculated = 15
9816 
9817   };
9818 
9819   // Factory methods
9820   static ObjCExceptionAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9821   static ObjCExceptionAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9822   static ObjCExceptionAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_exception);
9823   static ObjCExceptionAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_exception);
9824 
9825   // Constructors
9826   ObjCExceptionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
9827              );
9828 
9829   ObjCExceptionAttr *clone(ASTContext &C) const;
9830   void printPretty(raw_ostream &OS,
9831                    const PrintingPolicy &Policy) const;
9832   const char *getSpelling() const;
9833 
9834 
9835   static bool classof(const Attr *A) { return A->getKind() == attr::ObjCException; }
9836 };
9837 
9838 class CLANG_ABI ObjCExplicitProtocolImplAttr : public InheritableAttr {
9839 public:
9840   enum Spelling {
9841     GNU_objc_protocol_requires_explicit_implementation = 0,
9842     CXX11_clang_objc_protocol_requires_explicit_implementation = 1,
9843     C23_clang_objc_protocol_requires_explicit_implementation = 2,
9844   SpellingNotCalculated = 15
9845 
9846   };
9847 
9848   // Factory methods
9849   static ObjCExplicitProtocolImplAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9850   static ObjCExplicitProtocolImplAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9851   static ObjCExplicitProtocolImplAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_protocol_requires_explicit_implementation);
9852   static ObjCExplicitProtocolImplAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_protocol_requires_explicit_implementation);
9853 
9854   // Constructors
9855   ObjCExplicitProtocolImplAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
9856              );
9857 
9858   ObjCExplicitProtocolImplAttr *clone(ASTContext &C) const;
9859   void printPretty(raw_ostream &OS,
9860                    const PrintingPolicy &Policy) const;
9861   const char *getSpelling() const;
9862 
9863 
9864   static bool classof(const Attr *A) { return A->getKind() == attr::ObjCExplicitProtocolImpl; }
9865 };
9866 
9867 class CLANG_ABI ObjCExternallyRetainedAttr : public InheritableAttr {
9868 public:
9869   enum Spelling {
9870     GNU_objc_externally_retained = 0,
9871     CXX11_clang_objc_externally_retained = 1,
9872     C23_clang_objc_externally_retained = 2,
9873   SpellingNotCalculated = 15
9874 
9875   };
9876 
9877   // Factory methods
9878   static ObjCExternallyRetainedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9879   static ObjCExternallyRetainedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9880   static ObjCExternallyRetainedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_externally_retained);
9881   static ObjCExternallyRetainedAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_externally_retained);
9882 
9883   // Constructors
9884   ObjCExternallyRetainedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
9885              );
9886 
9887   ObjCExternallyRetainedAttr *clone(ASTContext &C) const;
9888   void printPretty(raw_ostream &OS,
9889                    const PrintingPolicy &Policy) const;
9890   const char *getSpelling() const;
9891 
9892 
9893   static bool classof(const Attr *A) { return A->getKind() == attr::ObjCExternallyRetained; }
9894 };
9895 
9896 class CLANG_ABI ObjCGCAttr : public TypeAttr {
9897 IdentifierInfo * kind;
9898 
9899 public:
9900   enum Spelling {
9901     GNU_objc_gc = 0,
9902     CXX11_clang_objc_gc = 1,
9903     C23_clang_objc_gc = 2,
9904   SpellingNotCalculated = 15
9905 
9906   };
9907 
9908   // Factory methods
9909   static ObjCGCAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * Kind, const AttributeCommonInfo &CommonInfo);
9910   static ObjCGCAttr *Create(ASTContext &Ctx, IdentifierInfo * Kind, const AttributeCommonInfo &CommonInfo);
9911   static ObjCGCAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * Kind, SourceRange Range = {}, Spelling S = GNU_objc_gc);
9912   static ObjCGCAttr *Create(ASTContext &Ctx, IdentifierInfo * Kind, SourceRange Range = {}, Spelling S = GNU_objc_gc);
9913 
9914   // Constructors
9915   ObjCGCAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
9916               , IdentifierInfo * Kind
9917              );
9918 
9919   ObjCGCAttr *clone(ASTContext &C) const;
9920   void printPretty(raw_ostream &OS,
9921                    const PrintingPolicy &Policy) const;
9922   const char *getSpelling() const;
9923   IdentifierInfo * getKind() const {
9924     return kind;
9925   }
9926 
9927 
9928 
9929   static bool classof(const Attr *A) { return A->getKind() == attr::ObjCGC; }
9930 };
9931 
9932 class CLANG_ABI ObjCIndependentClassAttr : public InheritableAttr {
9933 public:
9934   enum Spelling {
9935     GNU_objc_independent_class = 0,
9936     CXX11_clang_objc_independent_class = 1,
9937     C23_clang_objc_independent_class = 2,
9938   SpellingNotCalculated = 15
9939 
9940   };
9941 
9942   // Factory methods
9943   static ObjCIndependentClassAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9944   static ObjCIndependentClassAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9945   static ObjCIndependentClassAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_independent_class);
9946   static ObjCIndependentClassAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_independent_class);
9947 
9948   // Constructors
9949   ObjCIndependentClassAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
9950              );
9951 
9952   ObjCIndependentClassAttr *clone(ASTContext &C) const;
9953   void printPretty(raw_ostream &OS,
9954                    const PrintingPolicy &Policy) const;
9955   const char *getSpelling() const;
9956 
9957 
9958   static bool classof(const Attr *A) { return A->getKind() == attr::ObjCIndependentClass; }
9959 };
9960 
9961 class CLANG_ABI ObjCInertUnsafeUnretainedAttr : public TypeAttr {
9962 public:
9963   // Factory methods
9964   static ObjCInertUnsafeUnretainedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9965   static ObjCInertUnsafeUnretainedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9966   static ObjCInertUnsafeUnretainedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
9967   static ObjCInertUnsafeUnretainedAttr *Create(ASTContext &Ctx, SourceRange Range = {});
9968 
9969   // Constructors
9970   ObjCInertUnsafeUnretainedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
9971              );
9972 
9973   ObjCInertUnsafeUnretainedAttr *clone(ASTContext &C) const;
9974   void printPretty(raw_ostream &OS,
9975                    const PrintingPolicy &Policy) const;
9976   const char *getSpelling() const;
9977 
9978 
9979   static bool classof(const Attr *A) { return A->getKind() == attr::ObjCInertUnsafeUnretained; }
9980 };
9981 
9982 class CLANG_ABI ObjCKindOfAttr : public TypeAttr {
9983 public:
9984   // Factory methods
9985   static ObjCKindOfAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9986   static ObjCKindOfAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
9987   static ObjCKindOfAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
9988   static ObjCKindOfAttr *Create(ASTContext &Ctx, SourceRange Range = {});
9989 
9990   // Constructors
9991   ObjCKindOfAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
9992              );
9993 
9994   ObjCKindOfAttr *clone(ASTContext &C) const;
9995   void printPretty(raw_ostream &OS,
9996                    const PrintingPolicy &Policy) const;
9997   const char *getSpelling() const;
9998 
9999 
10000   static bool classof(const Attr *A) { return A->getKind() == attr::ObjCKindOf; }
10001 };
10002 
10003 class CLANG_ABI ObjCMethodFamilyAttr : public InheritableAttr {
10004 public:
10005   enum FamilyKind {
10006     OMF_None,
10007     OMF_alloc,
10008     OMF_copy,
10009     OMF_init,
10010     OMF_mutableCopy,
10011     OMF_new
10012   };
10013 private:
10014   ObjCMethodFamilyAttr::FamilyKind family;
10015 
10016 public:
10017   enum Spelling {
10018     GNU_objc_method_family = 0,
10019     CXX11_clang_objc_method_family = 1,
10020     C23_clang_objc_method_family = 2,
10021   SpellingNotCalculated = 15
10022 
10023   };
10024 
10025   // Factory methods
10026   static ObjCMethodFamilyAttr *CreateImplicit(ASTContext &Ctx, ObjCMethodFamilyAttr::FamilyKind Family, const AttributeCommonInfo &CommonInfo);
10027   static ObjCMethodFamilyAttr *Create(ASTContext &Ctx, ObjCMethodFamilyAttr::FamilyKind Family, const AttributeCommonInfo &CommonInfo);
10028   static ObjCMethodFamilyAttr *CreateImplicit(ASTContext &Ctx, ObjCMethodFamilyAttr::FamilyKind Family, SourceRange Range = {}, Spelling S = GNU_objc_method_family);
10029   static ObjCMethodFamilyAttr *Create(ASTContext &Ctx, ObjCMethodFamilyAttr::FamilyKind Family, SourceRange Range = {}, Spelling S = GNU_objc_method_family);
10030 
10031   // Constructors
10032   ObjCMethodFamilyAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10033               , ObjCMethodFamilyAttr::FamilyKind Family
10034              );
10035 
10036   ObjCMethodFamilyAttr *clone(ASTContext &C) const;
10037   void printPretty(raw_ostream &OS,
10038                    const PrintingPolicy &Policy) const;
10039   const char *getSpelling() const;
10040   ObjCMethodFamilyAttr::FamilyKind getFamily() const {
10041     return family;
10042   }
10043 
10044   static bool ConvertStrToFamilyKind(StringRef Val, ObjCMethodFamilyAttr::FamilyKind &Out);
10045   static const char *ConvertFamilyKindToStr(ObjCMethodFamilyAttr::FamilyKind Val);
10046 
10047 
10048   static bool classof(const Attr *A) { return A->getKind() == attr::ObjCMethodFamily; }
10049 };
10050 
10051 class CLANG_ABI ObjCNSObjectAttr : public InheritableAttr {
10052 public:
10053   enum Spelling {
10054     GNU_NSObject = 0,
10055     CXX11_clang_NSObject = 1,
10056     C23_clang_NSObject = 2,
10057   SpellingNotCalculated = 15
10058 
10059   };
10060 
10061   // Factory methods
10062   static ObjCNSObjectAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10063   static ObjCNSObjectAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10064   static ObjCNSObjectAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_NSObject);
10065   static ObjCNSObjectAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_NSObject);
10066 
10067   // Constructors
10068   ObjCNSObjectAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10069              );
10070 
10071   ObjCNSObjectAttr *clone(ASTContext &C) const;
10072   void printPretty(raw_ostream &OS,
10073                    const PrintingPolicy &Policy) const;
10074   const char *getSpelling() const;
10075 
10076 
10077   static bool classof(const Attr *A) { return A->getKind() == attr::ObjCNSObject; }
10078 };
10079 
10080 class CLANG_ABI ObjCNonLazyClassAttr : public Attr {
10081 public:
10082   enum Spelling {
10083     GNU_objc_nonlazy_class = 0,
10084     CXX11_clang_objc_nonlazy_class = 1,
10085     C23_clang_objc_nonlazy_class = 2,
10086   SpellingNotCalculated = 15
10087 
10088   };
10089 
10090   // Factory methods
10091   static ObjCNonLazyClassAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10092   static ObjCNonLazyClassAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10093   static ObjCNonLazyClassAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_nonlazy_class);
10094   static ObjCNonLazyClassAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_nonlazy_class);
10095 
10096   // Constructors
10097   ObjCNonLazyClassAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10098              );
10099 
10100   ObjCNonLazyClassAttr *clone(ASTContext &C) const;
10101   void printPretty(raw_ostream &OS,
10102                    const PrintingPolicy &Policy) const;
10103   const char *getSpelling() const;
10104 
10105 
10106   static bool classof(const Attr *A) { return A->getKind() == attr::ObjCNonLazyClass; }
10107 };
10108 
10109 class CLANG_ABI ObjCNonRuntimeProtocolAttr : public Attr {
10110 public:
10111   enum Spelling {
10112     GNU_objc_non_runtime_protocol = 0,
10113     CXX11_clang_objc_non_runtime_protocol = 1,
10114     C23_clang_objc_non_runtime_protocol = 2,
10115   SpellingNotCalculated = 15
10116 
10117   };
10118 
10119   // Factory methods
10120   static ObjCNonRuntimeProtocolAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10121   static ObjCNonRuntimeProtocolAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10122   static ObjCNonRuntimeProtocolAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_non_runtime_protocol);
10123   static ObjCNonRuntimeProtocolAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_non_runtime_protocol);
10124 
10125   // Constructors
10126   ObjCNonRuntimeProtocolAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10127              );
10128 
10129   ObjCNonRuntimeProtocolAttr *clone(ASTContext &C) const;
10130   void printPretty(raw_ostream &OS,
10131                    const PrintingPolicy &Policy) const;
10132   const char *getSpelling() const;
10133 
10134 
10135   static bool classof(const Attr *A) { return A->getKind() == attr::ObjCNonRuntimeProtocol; }
10136 };
10137 
10138 class CLANG_ABI ObjCOwnershipAttr : public InheritableAttr {
10139 IdentifierInfo * kind;
10140 
10141 public:
10142   enum Spelling {
10143     GNU_objc_ownership = 0,
10144     CXX11_clang_objc_ownership = 1,
10145     C23_clang_objc_ownership = 2,
10146   SpellingNotCalculated = 15
10147 
10148   };
10149 
10150   // Factory methods
10151   static ObjCOwnershipAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * Kind, const AttributeCommonInfo &CommonInfo);
10152   static ObjCOwnershipAttr *Create(ASTContext &Ctx, IdentifierInfo * Kind, const AttributeCommonInfo &CommonInfo);
10153   static ObjCOwnershipAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * Kind, SourceRange Range = {}, Spelling S = GNU_objc_ownership);
10154   static ObjCOwnershipAttr *Create(ASTContext &Ctx, IdentifierInfo * Kind, SourceRange Range = {}, Spelling S = GNU_objc_ownership);
10155 
10156   // Constructors
10157   ObjCOwnershipAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10158               , IdentifierInfo * Kind
10159              );
10160 
10161   ObjCOwnershipAttr *clone(ASTContext &C) const;
10162   void printPretty(raw_ostream &OS,
10163                    const PrintingPolicy &Policy) const;
10164   const char *getSpelling() const;
10165   IdentifierInfo * getKind() const {
10166     return kind;
10167   }
10168 
10169 
10170 
10171   static bool classof(const Attr *A) { return A->getKind() == attr::ObjCOwnership; }
10172 };
10173 
10174 class CLANG_ABI ObjCPreciseLifetimeAttr : public InheritableAttr {
10175 public:
10176   enum Spelling {
10177     GNU_objc_precise_lifetime = 0,
10178     CXX11_clang_objc_precise_lifetime = 1,
10179     C23_clang_objc_precise_lifetime = 2,
10180   SpellingNotCalculated = 15
10181 
10182   };
10183 
10184   // Factory methods
10185   static ObjCPreciseLifetimeAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10186   static ObjCPreciseLifetimeAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10187   static ObjCPreciseLifetimeAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_precise_lifetime);
10188   static ObjCPreciseLifetimeAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_precise_lifetime);
10189 
10190   // Constructors
10191   ObjCPreciseLifetimeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10192              );
10193 
10194   ObjCPreciseLifetimeAttr *clone(ASTContext &C) const;
10195   void printPretty(raw_ostream &OS,
10196                    const PrintingPolicy &Policy) const;
10197   const char *getSpelling() const;
10198 
10199 
10200   static bool classof(const Attr *A) { return A->getKind() == attr::ObjCPreciseLifetime; }
10201 };
10202 
10203 class CLANG_ABI ObjCRequiresPropertyDefsAttr : public InheritableAttr {
10204 public:
10205   enum Spelling {
10206     GNU_objc_requires_property_definitions = 0,
10207     CXX11_clang_objc_requires_property_definitions = 1,
10208     C23_clang_objc_requires_property_definitions = 2,
10209   SpellingNotCalculated = 15
10210 
10211   };
10212 
10213   // Factory methods
10214   static ObjCRequiresPropertyDefsAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10215   static ObjCRequiresPropertyDefsAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10216   static ObjCRequiresPropertyDefsAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_requires_property_definitions);
10217   static ObjCRequiresPropertyDefsAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_requires_property_definitions);
10218 
10219   // Constructors
10220   ObjCRequiresPropertyDefsAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10221              );
10222 
10223   ObjCRequiresPropertyDefsAttr *clone(ASTContext &C) const;
10224   void printPretty(raw_ostream &OS,
10225                    const PrintingPolicy &Policy) const;
10226   const char *getSpelling() const;
10227 
10228 
10229   static bool classof(const Attr *A) { return A->getKind() == attr::ObjCRequiresPropertyDefs; }
10230 };
10231 
10232 class CLANG_ABI ObjCRequiresSuperAttr : public InheritableAttr {
10233 public:
10234   enum Spelling {
10235     GNU_objc_requires_super = 0,
10236     CXX11_clang_objc_requires_super = 1,
10237     C23_clang_objc_requires_super = 2,
10238   SpellingNotCalculated = 15
10239 
10240   };
10241 
10242   // Factory methods
10243   static ObjCRequiresSuperAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10244   static ObjCRequiresSuperAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10245   static ObjCRequiresSuperAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_requires_super);
10246   static ObjCRequiresSuperAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_requires_super);
10247 
10248   // Constructors
10249   ObjCRequiresSuperAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10250              );
10251 
10252   ObjCRequiresSuperAttr *clone(ASTContext &C) const;
10253   void printPretty(raw_ostream &OS,
10254                    const PrintingPolicy &Policy) const;
10255   const char *getSpelling() const;
10256 
10257 
10258   static bool classof(const Attr *A) { return A->getKind() == attr::ObjCRequiresSuper; }
10259 };
10260 
10261 class CLANG_ABI ObjCReturnsInnerPointerAttr : public InheritableAttr {
10262 public:
10263   enum Spelling {
10264     GNU_objc_returns_inner_pointer = 0,
10265     CXX11_clang_objc_returns_inner_pointer = 1,
10266     C23_clang_objc_returns_inner_pointer = 2,
10267   SpellingNotCalculated = 15
10268 
10269   };
10270 
10271   // Factory methods
10272   static ObjCReturnsInnerPointerAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10273   static ObjCReturnsInnerPointerAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10274   static ObjCReturnsInnerPointerAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_returns_inner_pointer);
10275   static ObjCReturnsInnerPointerAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_returns_inner_pointer);
10276 
10277   // Constructors
10278   ObjCReturnsInnerPointerAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10279              );
10280 
10281   ObjCReturnsInnerPointerAttr *clone(ASTContext &C) const;
10282   void printPretty(raw_ostream &OS,
10283                    const PrintingPolicy &Policy) const;
10284   const char *getSpelling() const;
10285 
10286 
10287   static bool classof(const Attr *A) { return A->getKind() == attr::ObjCReturnsInnerPointer; }
10288 };
10289 
10290 class CLANG_ABI ObjCRootClassAttr : public InheritableAttr {
10291 public:
10292   enum Spelling {
10293     GNU_objc_root_class = 0,
10294     CXX11_clang_objc_root_class = 1,
10295     C23_clang_objc_root_class = 2,
10296   SpellingNotCalculated = 15
10297 
10298   };
10299 
10300   // Factory methods
10301   static ObjCRootClassAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10302   static ObjCRootClassAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10303   static ObjCRootClassAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_root_class);
10304   static ObjCRootClassAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_root_class);
10305 
10306   // Constructors
10307   ObjCRootClassAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10308              );
10309 
10310   ObjCRootClassAttr *clone(ASTContext &C) const;
10311   void printPretty(raw_ostream &OS,
10312                    const PrintingPolicy &Policy) const;
10313   const char *getSpelling() const;
10314 
10315 
10316   static bool classof(const Attr *A) { return A->getKind() == attr::ObjCRootClass; }
10317 };
10318 
10319 class CLANG_ABI ObjCRuntimeNameAttr : public Attr {
10320 unsigned metadataNameLength;
10321 char *metadataName;
10322 
10323 public:
10324   enum Spelling {
10325     GNU_objc_runtime_name = 0,
10326     CXX11_clang_objc_runtime_name = 1,
10327     C23_clang_objc_runtime_name = 2,
10328   SpellingNotCalculated = 15
10329 
10330   };
10331 
10332   // Factory methods
10333   static ObjCRuntimeNameAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef MetadataName, const AttributeCommonInfo &CommonInfo);
10334   static ObjCRuntimeNameAttr *Create(ASTContext &Ctx, llvm::StringRef MetadataName, const AttributeCommonInfo &CommonInfo);
10335   static ObjCRuntimeNameAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef MetadataName, SourceRange Range = {}, Spelling S = GNU_objc_runtime_name);
10336   static ObjCRuntimeNameAttr *Create(ASTContext &Ctx, llvm::StringRef MetadataName, SourceRange Range = {}, Spelling S = GNU_objc_runtime_name);
10337 
10338   // Constructors
10339   ObjCRuntimeNameAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10340               , llvm::StringRef MetadataName
10341              );
10342 
10343   ObjCRuntimeNameAttr *clone(ASTContext &C) const;
10344   void printPretty(raw_ostream &OS,
10345                    const PrintingPolicy &Policy) const;
10346   const char *getSpelling() const;
10347   llvm::StringRef getMetadataName() const {
10348     return llvm::StringRef(metadataName, metadataNameLength);
10349   }
10350   unsigned getMetadataNameLength() const {
10351     return metadataNameLength;
10352   }
10353   void setMetadataName(ASTContext &C, llvm::StringRef S) {
10354     metadataNameLength = S.size();
10355     this->metadataName = new (C, 1) char [metadataNameLength];
10356     if (!S.empty())
10357       std::memcpy(this->metadataName, S.data(), metadataNameLength);
10358   }
10359 
10360 
10361 
10362   static bool classof(const Attr *A) { return A->getKind() == attr::ObjCRuntimeName; }
10363 };
10364 
10365 class CLANG_ABI ObjCRuntimeVisibleAttr : public Attr {
10366 public:
10367   enum Spelling {
10368     GNU_objc_runtime_visible = 0,
10369     CXX11_clang_objc_runtime_visible = 1,
10370     C23_clang_objc_runtime_visible = 2,
10371   SpellingNotCalculated = 15
10372 
10373   };
10374 
10375   // Factory methods
10376   static ObjCRuntimeVisibleAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10377   static ObjCRuntimeVisibleAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10378   static ObjCRuntimeVisibleAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_runtime_visible);
10379   static ObjCRuntimeVisibleAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_runtime_visible);
10380 
10381   // Constructors
10382   ObjCRuntimeVisibleAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10383              );
10384 
10385   ObjCRuntimeVisibleAttr *clone(ASTContext &C) const;
10386   void printPretty(raw_ostream &OS,
10387                    const PrintingPolicy &Policy) const;
10388   const char *getSpelling() const;
10389 
10390 
10391   static bool classof(const Attr *A) { return A->getKind() == attr::ObjCRuntimeVisible; }
10392 };
10393 
10394 class CLANG_ABI ObjCSubclassingRestrictedAttr : public InheritableAttr {
10395 public:
10396   enum Spelling {
10397     GNU_objc_subclassing_restricted = 0,
10398     CXX11_clang_objc_subclassing_restricted = 1,
10399     C23_clang_objc_subclassing_restricted = 2,
10400   SpellingNotCalculated = 15
10401 
10402   };
10403 
10404   // Factory methods
10405   static ObjCSubclassingRestrictedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10406   static ObjCSubclassingRestrictedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10407   static ObjCSubclassingRestrictedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_subclassing_restricted);
10408   static ObjCSubclassingRestrictedAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_objc_subclassing_restricted);
10409 
10410   // Constructors
10411   ObjCSubclassingRestrictedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10412              );
10413 
10414   ObjCSubclassingRestrictedAttr *clone(ASTContext &C) const;
10415   void printPretty(raw_ostream &OS,
10416                    const PrintingPolicy &Policy) const;
10417   const char *getSpelling() const;
10418 
10419 
10420   static bool classof(const Attr *A) { return A->getKind() == attr::ObjCSubclassingRestricted; }
10421 };
10422 
10423 class CLANG_ABI OpenCLAccessAttr : public Attr {
10424 public:
10425   enum Spelling {
10426     Keyword_read_only = 0,
10427     Keyword_write_only = 2,
10428     Keyword_read_write = 4,
10429   SpellingNotCalculated = 15
10430 
10431   };
10432 
10433   // Factory methods
10434   static OpenCLAccessAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10435   static OpenCLAccessAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10436   static OpenCLAccessAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Keyword_read_only);
10437   static OpenCLAccessAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Keyword_read_only);
10438 
10439   // Constructors
10440   OpenCLAccessAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10441              );
10442 
10443   OpenCLAccessAttr *clone(ASTContext &C) const;
10444   void printPretty(raw_ostream &OS,
10445                    const PrintingPolicy &Policy) const;
10446   const char *getSpelling() const;
10447   Spelling getSemanticSpelling() const;
10448   bool isReadOnly() const { return getAttributeSpellingListIndex() == 0 ||
10449     getAttributeSpellingListIndex() == 1; }
10450   bool isReadWrite() const { return getAttributeSpellingListIndex() == 4 ||
10451     getAttributeSpellingListIndex() == 5; }
10452   bool isWriteOnly() const { return getAttributeSpellingListIndex() == 2 ||
10453     getAttributeSpellingListIndex() == 3; }
10454 
10455 
10456   static bool classof(const Attr *A) { return A->getKind() == attr::OpenCLAccess; }
10457 };
10458 
10459 class CLANG_ABI OpenCLConstantAddressSpaceAttr : public TypeAttr {
10460 public:
10461   enum Spelling {
10462     Keyword_constant = 0,
10463     GNU_opencl_constant = 2,
10464     CXX11_clang_opencl_constant = 3,
10465     C23_clang_opencl_constant = 4,
10466   SpellingNotCalculated = 15
10467 
10468   };
10469 
10470   // Factory methods
10471   static OpenCLConstantAddressSpaceAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10472   static OpenCLConstantAddressSpaceAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10473   static OpenCLConstantAddressSpaceAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Keyword_constant);
10474   static OpenCLConstantAddressSpaceAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Keyword_constant);
10475 
10476   // Constructors
10477   OpenCLConstantAddressSpaceAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10478              );
10479 
10480   OpenCLConstantAddressSpaceAttr *clone(ASTContext &C) const;
10481   void printPretty(raw_ostream &OS,
10482                    const PrintingPolicy &Policy) const;
10483   const char *getSpelling() const;
10484   Spelling getSemanticSpelling() const;
10485 
10486 
10487   static bool classof(const Attr *A) { return A->getKind() == attr::OpenCLConstantAddressSpace; }
10488 };
10489 
10490 class CLANG_ABI OpenCLGenericAddressSpaceAttr : public TypeAttr {
10491 public:
10492   enum Spelling {
10493     Keyword_generic = 0,
10494     GNU_opencl_generic = 2,
10495     CXX11_clang_opencl_generic = 3,
10496     C23_clang_opencl_generic = 4,
10497   SpellingNotCalculated = 15
10498 
10499   };
10500 
10501   // Factory methods
10502   static OpenCLGenericAddressSpaceAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10503   static OpenCLGenericAddressSpaceAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10504   static OpenCLGenericAddressSpaceAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Keyword_generic);
10505   static OpenCLGenericAddressSpaceAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Keyword_generic);
10506 
10507   // Constructors
10508   OpenCLGenericAddressSpaceAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10509              );
10510 
10511   OpenCLGenericAddressSpaceAttr *clone(ASTContext &C) const;
10512   void printPretty(raw_ostream &OS,
10513                    const PrintingPolicy &Policy) const;
10514   const char *getSpelling() const;
10515   Spelling getSemanticSpelling() const;
10516 
10517 
10518   static bool classof(const Attr *A) { return A->getKind() == attr::OpenCLGenericAddressSpace; }
10519 };
10520 
10521 class CLANG_ABI OpenCLGlobalAddressSpaceAttr : public TypeAttr {
10522 public:
10523   enum Spelling {
10524     Keyword_global = 0,
10525     GNU_opencl_global = 2,
10526     CXX11_clang_opencl_global = 3,
10527     C23_clang_opencl_global = 4,
10528   SpellingNotCalculated = 15
10529 
10530   };
10531 
10532   // Factory methods
10533   static OpenCLGlobalAddressSpaceAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10534   static OpenCLGlobalAddressSpaceAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10535   static OpenCLGlobalAddressSpaceAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Keyword_global);
10536   static OpenCLGlobalAddressSpaceAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Keyword_global);
10537 
10538   // Constructors
10539   OpenCLGlobalAddressSpaceAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10540              );
10541 
10542   OpenCLGlobalAddressSpaceAttr *clone(ASTContext &C) const;
10543   void printPretty(raw_ostream &OS,
10544                    const PrintingPolicy &Policy) const;
10545   const char *getSpelling() const;
10546   Spelling getSemanticSpelling() const;
10547 
10548 
10549   static bool classof(const Attr *A) { return A->getKind() == attr::OpenCLGlobalAddressSpace; }
10550 };
10551 
10552 class CLANG_ABI OpenCLGlobalDeviceAddressSpaceAttr : public TypeAttr {
10553 public:
10554   enum Spelling {
10555     GNU_opencl_global_device = 0,
10556     CXX11_clang_opencl_global_device = 1,
10557     C23_clang_opencl_global_device = 2,
10558   SpellingNotCalculated = 15
10559 
10560   };
10561 
10562   // Factory methods
10563   static OpenCLGlobalDeviceAddressSpaceAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10564   static OpenCLGlobalDeviceAddressSpaceAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10565   static OpenCLGlobalDeviceAddressSpaceAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_opencl_global_device);
10566   static OpenCLGlobalDeviceAddressSpaceAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_opencl_global_device);
10567 
10568   // Constructors
10569   OpenCLGlobalDeviceAddressSpaceAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10570              );
10571 
10572   OpenCLGlobalDeviceAddressSpaceAttr *clone(ASTContext &C) const;
10573   void printPretty(raw_ostream &OS,
10574                    const PrintingPolicy &Policy) const;
10575   const char *getSpelling() const;
10576 
10577 
10578   static bool classof(const Attr *A) { return A->getKind() == attr::OpenCLGlobalDeviceAddressSpace; }
10579 };
10580 
10581 class CLANG_ABI OpenCLGlobalHostAddressSpaceAttr : public TypeAttr {
10582 public:
10583   enum Spelling {
10584     GNU_opencl_global_host = 0,
10585     CXX11_clang_opencl_global_host = 1,
10586     C23_clang_opencl_global_host = 2,
10587   SpellingNotCalculated = 15
10588 
10589   };
10590 
10591   // Factory methods
10592   static OpenCLGlobalHostAddressSpaceAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10593   static OpenCLGlobalHostAddressSpaceAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10594   static OpenCLGlobalHostAddressSpaceAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_opencl_global_host);
10595   static OpenCLGlobalHostAddressSpaceAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_opencl_global_host);
10596 
10597   // Constructors
10598   OpenCLGlobalHostAddressSpaceAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10599              );
10600 
10601   OpenCLGlobalHostAddressSpaceAttr *clone(ASTContext &C) const;
10602   void printPretty(raw_ostream &OS,
10603                    const PrintingPolicy &Policy) const;
10604   const char *getSpelling() const;
10605 
10606 
10607   static bool classof(const Attr *A) { return A->getKind() == attr::OpenCLGlobalHostAddressSpace; }
10608 };
10609 
10610 class CLANG_ABI OpenCLIntelReqdSubGroupSizeAttr : public InheritableAttr {
10611 unsigned subGroupSize;
10612 
10613 public:
10614   // Factory methods
10615   static OpenCLIntelReqdSubGroupSizeAttr *CreateImplicit(ASTContext &Ctx, unsigned SubGroupSize, const AttributeCommonInfo &CommonInfo);
10616   static OpenCLIntelReqdSubGroupSizeAttr *Create(ASTContext &Ctx, unsigned SubGroupSize, const AttributeCommonInfo &CommonInfo);
10617   static OpenCLIntelReqdSubGroupSizeAttr *CreateImplicit(ASTContext &Ctx, unsigned SubGroupSize, SourceRange Range = {});
10618   static OpenCLIntelReqdSubGroupSizeAttr *Create(ASTContext &Ctx, unsigned SubGroupSize, SourceRange Range = {});
10619 
10620   // Constructors
10621   OpenCLIntelReqdSubGroupSizeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10622               , unsigned SubGroupSize
10623              );
10624 
10625   OpenCLIntelReqdSubGroupSizeAttr *clone(ASTContext &C) const;
10626   void printPretty(raw_ostream &OS,
10627                    const PrintingPolicy &Policy) const;
10628   const char *getSpelling() const;
10629   unsigned getSubGroupSize() const {
10630     return subGroupSize;
10631   }
10632 
10633 
10634 
10635   static bool classof(const Attr *A) { return A->getKind() == attr::OpenCLIntelReqdSubGroupSize; }
10636 };
10637 
10638 class CLANG_ABI OpenCLKernelAttr : public InheritableAttr {
10639 public:
10640   enum Spelling {
10641     Keyword_kernel = 0,
10642   SpellingNotCalculated = 15
10643 
10644   };
10645 
10646   // Factory methods
10647   static OpenCLKernelAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10648   static OpenCLKernelAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10649   static OpenCLKernelAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Keyword_kernel);
10650   static OpenCLKernelAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Keyword_kernel);
10651 
10652   // Constructors
10653   OpenCLKernelAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10654              );
10655 
10656   OpenCLKernelAttr *clone(ASTContext &C) const;
10657   void printPretty(raw_ostream &OS,
10658                    const PrintingPolicy &Policy) const;
10659   const char *getSpelling() const;
10660 
10661 
10662   static bool classof(const Attr *A) { return A->getKind() == attr::OpenCLKernel; }
10663 };
10664 
10665 class CLANG_ABI OpenCLLocalAddressSpaceAttr : public TypeAttr {
10666 public:
10667   enum Spelling {
10668     Keyword_local = 0,
10669     GNU_opencl_local = 2,
10670     CXX11_clang_opencl_local = 3,
10671     C23_clang_opencl_local = 4,
10672   SpellingNotCalculated = 15
10673 
10674   };
10675 
10676   // Factory methods
10677   static OpenCLLocalAddressSpaceAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10678   static OpenCLLocalAddressSpaceAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10679   static OpenCLLocalAddressSpaceAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Keyword_local);
10680   static OpenCLLocalAddressSpaceAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Keyword_local);
10681 
10682   // Constructors
10683   OpenCLLocalAddressSpaceAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10684              );
10685 
10686   OpenCLLocalAddressSpaceAttr *clone(ASTContext &C) const;
10687   void printPretty(raw_ostream &OS,
10688                    const PrintingPolicy &Policy) const;
10689   const char *getSpelling() const;
10690   Spelling getSemanticSpelling() const;
10691 
10692 
10693   static bool classof(const Attr *A) { return A->getKind() == attr::OpenCLLocalAddressSpace; }
10694 };
10695 
10696 class CLANG_ABI OpenCLPrivateAddressSpaceAttr : public TypeAttr {
10697 public:
10698   enum Spelling {
10699     Keyword_private = 0,
10700     GNU_opencl_private = 2,
10701     CXX11_clang_opencl_private = 3,
10702     C23_clang_opencl_private = 4,
10703   SpellingNotCalculated = 15
10704 
10705   };
10706 
10707   // Factory methods
10708   static OpenCLPrivateAddressSpaceAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10709   static OpenCLPrivateAddressSpaceAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10710   static OpenCLPrivateAddressSpaceAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Keyword_private);
10711   static OpenCLPrivateAddressSpaceAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Keyword_private);
10712 
10713   // Constructors
10714   OpenCLPrivateAddressSpaceAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10715              );
10716 
10717   OpenCLPrivateAddressSpaceAttr *clone(ASTContext &C) const;
10718   void printPretty(raw_ostream &OS,
10719                    const PrintingPolicy &Policy) const;
10720   const char *getSpelling() const;
10721   Spelling getSemanticSpelling() const;
10722 
10723 
10724   static bool classof(const Attr *A) { return A->getKind() == attr::OpenCLPrivateAddressSpace; }
10725 };
10726 
10727 class CLANG_ABI OpenCLUnrollHintAttr : public StmtAttr {
10728 unsigned unrollHint;
10729 
10730 public:
10731   // Factory methods
10732   static OpenCLUnrollHintAttr *CreateImplicit(ASTContext &Ctx, unsigned UnrollHint, const AttributeCommonInfo &CommonInfo);
10733   static OpenCLUnrollHintAttr *Create(ASTContext &Ctx, unsigned UnrollHint, const AttributeCommonInfo &CommonInfo);
10734   static OpenCLUnrollHintAttr *CreateImplicit(ASTContext &Ctx, unsigned UnrollHint, SourceRange Range = {});
10735   static OpenCLUnrollHintAttr *Create(ASTContext &Ctx, unsigned UnrollHint, SourceRange Range = {});
10736 
10737   // Constructors
10738   OpenCLUnrollHintAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10739               , unsigned UnrollHint
10740              );
10741   OpenCLUnrollHintAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10742              );
10743 
10744   OpenCLUnrollHintAttr *clone(ASTContext &C) const;
10745   void printPretty(raw_ostream &OS,
10746                    const PrintingPolicy &Policy) const;
10747   const char *getSpelling() const;
10748   unsigned getUnrollHint() const {
10749     return unrollHint;
10750   }
10751 
10752 
10753 
10754   static bool classof(const Attr *A) { return A->getKind() == attr::OpenCLUnrollHint; }
10755 };
10756 
10757 class CLANG_ABI OptimizeNoneAttr : public InheritableAttr {
10758 public:
10759   enum Spelling {
10760     GNU_optnone = 0,
10761     CXX11_clang_optnone = 1,
10762     C23_clang_optnone = 2,
10763   SpellingNotCalculated = 15
10764 
10765   };
10766 
10767   // Factory methods
10768   static OptimizeNoneAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10769   static OptimizeNoneAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10770   static OptimizeNoneAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_optnone);
10771   static OptimizeNoneAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_optnone);
10772 
10773   // Constructors
10774   OptimizeNoneAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10775              );
10776 
10777   OptimizeNoneAttr *clone(ASTContext &C) const;
10778   void printPretty(raw_ostream &OS,
10779                    const PrintingPolicy &Policy) const;
10780   const char *getSpelling() const;
10781 
10782 
10783   static bool classof(const Attr *A) { return A->getKind() == attr::OptimizeNone; }
10784 };
10785 
10786 class CLANG_ABI OverloadableAttr : public Attr {
10787 public:
10788   enum Spelling {
10789     GNU_overloadable = 0,
10790     CXX11_clang_overloadable = 1,
10791     C23_clang_overloadable = 2,
10792   SpellingNotCalculated = 15
10793 
10794   };
10795 
10796   // Factory methods
10797   static OverloadableAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10798   static OverloadableAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10799   static OverloadableAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_overloadable);
10800   static OverloadableAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_overloadable);
10801 
10802   // Constructors
10803   OverloadableAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10804              );
10805 
10806   OverloadableAttr *clone(ASTContext &C) const;
10807   void printPretty(raw_ostream &OS,
10808                    const PrintingPolicy &Policy) const;
10809   const char *getSpelling() const;
10810 
10811 
10812   static bool classof(const Attr *A) { return A->getKind() == attr::Overloadable; }
10813 };
10814 
10815 class CLANG_ABI OverrideAttr : public InheritableAttr {
10816 public:
10817   // Factory methods
10818   static OverrideAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10819   static OverrideAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10820   static OverrideAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
10821   static OverrideAttr *Create(ASTContext &Ctx, SourceRange Range = {});
10822 
10823   // Constructors
10824   OverrideAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10825              );
10826 
10827   OverrideAttr *clone(ASTContext &C) const;
10828   void printPretty(raw_ostream &OS,
10829                    const PrintingPolicy &Policy) const;
10830   const char *getSpelling() const;
10831 
10832 
10833   static bool classof(const Attr *A) { return A->getKind() == attr::Override; }
10834 };
10835 
10836 class CLANG_ABI OwnerAttr : public InheritableAttr {
10837 TypeSourceInfo * derefType;
10838 
10839 public:
10840   // Factory methods
10841   static OwnerAttr *CreateImplicit(ASTContext &Ctx, TypeSourceInfo * DerefType, const AttributeCommonInfo &CommonInfo);
10842   static OwnerAttr *Create(ASTContext &Ctx, TypeSourceInfo * DerefType, const AttributeCommonInfo &CommonInfo);
10843   static OwnerAttr *CreateImplicit(ASTContext &Ctx, TypeSourceInfo * DerefType, SourceRange Range = {});
10844   static OwnerAttr *Create(ASTContext &Ctx, TypeSourceInfo * DerefType, SourceRange Range = {});
10845 
10846   // Constructors
10847   OwnerAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10848               , TypeSourceInfo * DerefType
10849              );
10850   OwnerAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10851              );
10852 
10853   OwnerAttr *clone(ASTContext &C) const;
10854   void printPretty(raw_ostream &OS,
10855                    const PrintingPolicy &Policy) const;
10856   const char *getSpelling() const;
10857   QualType getDerefType() const {
10858     return derefType->getType();
10859   }  TypeSourceInfo * getDerefTypeLoc() const {
10860     return derefType;
10861   }
10862 
10863 
10864 
10865   static bool classof(const Attr *A) { return A->getKind() == attr::Owner; }
10866 };
10867 
10868 class CLANG_ABI OwnershipAttr : public InheritableAttr {
10869 IdentifierInfo * module;
10870 
10871   unsigned args_Size;
10872   ParamIdx *args_;
10873 
10874 public:
10875   enum Spelling {
10876     GNU_ownership_holds = 0,
10877     CXX11_clang_ownership_holds = 1,
10878     C23_clang_ownership_holds = 2,
10879     GNU_ownership_returns = 3,
10880     CXX11_clang_ownership_returns = 4,
10881     C23_clang_ownership_returns = 5,
10882     GNU_ownership_takes = 6,
10883     CXX11_clang_ownership_takes = 7,
10884     C23_clang_ownership_takes = 8,
10885   SpellingNotCalculated = 15
10886 
10887   };
10888 
10889   // Factory methods
10890   static OwnershipAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * Module, ParamIdx *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);
10891   static OwnershipAttr *Create(ASTContext &Ctx, IdentifierInfo * Module, ParamIdx *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);
10892   static OwnershipAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * Module, ParamIdx *Args, unsigned ArgsSize, SourceRange Range = {}, Spelling S = GNU_ownership_holds);
10893   static OwnershipAttr *Create(ASTContext &Ctx, IdentifierInfo * Module, ParamIdx *Args, unsigned ArgsSize, SourceRange Range = {}, Spelling S = GNU_ownership_holds);
10894 
10895   // Constructors
10896   OwnershipAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10897               , IdentifierInfo * Module
10898               , ParamIdx *Args, unsigned ArgsSize
10899              );
10900   OwnershipAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10901               , IdentifierInfo * Module
10902              );
10903 
10904   OwnershipAttr *clone(ASTContext &C) const;
10905   void printPretty(raw_ostream &OS,
10906                    const PrintingPolicy &Policy) const;
10907   const char *getSpelling() const;
10908   Spelling getSemanticSpelling() const;
10909   bool isHolds() const { return getAttributeSpellingListIndex() == 0 ||
10910     getAttributeSpellingListIndex() == 1 ||
10911     getAttributeSpellingListIndex() == 2; }
10912   bool isReturns() const { return getAttributeSpellingListIndex() == 3 ||
10913     getAttributeSpellingListIndex() == 4 ||
10914     getAttributeSpellingListIndex() == 5; }
10915   bool isTakes() const { return getAttributeSpellingListIndex() == 6 ||
10916     getAttributeSpellingListIndex() == 7 ||
10917     getAttributeSpellingListIndex() == 8; }
10918   IdentifierInfo * getModule() const {
10919     return module;
10920   }
10921 
10922   typedef ParamIdx* args_iterator;
10923   args_iterator args_begin() const { return args_; }
10924   args_iterator args_end() const { return args_ + args_Size; }
10925   unsigned args_size() const { return args_Size; }
10926   llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); }
10927 
10928 
10929 
10930     enum OwnershipKind { Holds, Returns, Takes };
10931     OwnershipKind getOwnKind() const {
10932       return isHolds() ? Holds :
10933              isTakes() ? Takes :
10934              Returns;
10935     }
10936   
10937 
10938   static bool classof(const Attr *A) { return A->getKind() == attr::Ownership; }
10939 };
10940 
10941 class CLANG_ABI PackedAttr : public InheritableAttr {
10942 public:
10943   enum Spelling {
10944     GNU_packed = 0,
10945     CXX11_gnu_packed = 1,
10946     C23_gnu_packed = 2,
10947   SpellingNotCalculated = 15
10948 
10949   };
10950 
10951   // Factory methods
10952   static PackedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10953   static PackedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
10954   static PackedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_packed);
10955   static PackedAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_packed);
10956 
10957   // Constructors
10958   PackedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10959              );
10960 
10961   PackedAttr *clone(ASTContext &C) const;
10962   void printPretty(raw_ostream &OS,
10963                    const PrintingPolicy &Policy) const;
10964   const char *getSpelling() const;
10965 
10966 
10967   static bool classof(const Attr *A) { return A->getKind() == attr::Packed; }
10968 };
10969 
10970 class CLANG_ABI ParamTypestateAttr : public InheritableAttr {
10971 public:
10972   enum ConsumedState {
10973     Unknown,
10974     Consumed,
10975     Unconsumed
10976   };
10977 private:
10978   ParamTypestateAttr::ConsumedState paramState;
10979 
10980 public:
10981   enum Spelling {
10982     GNU_param_typestate = 0,
10983     CXX11_clang_param_typestate = 1,
10984   SpellingNotCalculated = 15
10985 
10986   };
10987 
10988   // Factory methods
10989   static ParamTypestateAttr *CreateImplicit(ASTContext &Ctx, ParamTypestateAttr::ConsumedState ParamState, const AttributeCommonInfo &CommonInfo);
10990   static ParamTypestateAttr *Create(ASTContext &Ctx, ParamTypestateAttr::ConsumedState ParamState, const AttributeCommonInfo &CommonInfo);
10991   static ParamTypestateAttr *CreateImplicit(ASTContext &Ctx, ParamTypestateAttr::ConsumedState ParamState, SourceRange Range = {}, Spelling S = GNU_param_typestate);
10992   static ParamTypestateAttr *Create(ASTContext &Ctx, ParamTypestateAttr::ConsumedState ParamState, SourceRange Range = {}, Spelling S = GNU_param_typestate);
10993 
10994   // Constructors
10995   ParamTypestateAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
10996               , ParamTypestateAttr::ConsumedState ParamState
10997              );
10998 
10999   ParamTypestateAttr *clone(ASTContext &C) const;
11000   void printPretty(raw_ostream &OS,
11001                    const PrintingPolicy &Policy) const;
11002   const char *getSpelling() const;
11003   ParamTypestateAttr::ConsumedState getParamState() const {
11004     return paramState;
11005   }
11006 
11007   static bool ConvertStrToConsumedState(StringRef Val, ParamTypestateAttr::ConsumedState &Out);
11008   static const char *ConvertConsumedStateToStr(ParamTypestateAttr::ConsumedState Val);
11009 
11010 
11011   static bool classof(const Attr *A) { return A->getKind() == attr::ParamTypestate; }
11012 };
11013 
11014 class CLANG_ABI PascalAttr : public InheritableAttr {
11015 public:
11016   enum Spelling {
11017     GNU_pascal = 0,
11018     CXX11_clang_pascal = 1,
11019     C23_clang_pascal = 2,
11020     Keyword_pascal = 3,
11021   SpellingNotCalculated = 15
11022 
11023   };
11024 
11025   // Factory methods
11026   static PascalAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
11027   static PascalAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
11028   static PascalAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_pascal);
11029   static PascalAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_pascal);
11030 
11031   // Constructors
11032   PascalAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11033              );
11034 
11035   PascalAttr *clone(ASTContext &C) const;
11036   void printPretty(raw_ostream &OS,
11037                    const PrintingPolicy &Policy) const;
11038   const char *getSpelling() const;
11039 
11040 
11041   static bool classof(const Attr *A) { return A->getKind() == attr::Pascal; }
11042 };
11043 
11044 class CLANG_ABI PassObjectSizeAttr : public InheritableParamAttr {
11045 int type;
11046 
11047 public:
11048   enum Spelling {
11049     GNU_pass_object_size = 0,
11050     CXX11_clang_pass_object_size = 1,
11051     C23_clang_pass_object_size = 2,
11052     GNU_pass_dynamic_object_size = 3,
11053     CXX11_clang_pass_dynamic_object_size = 4,
11054     C23_clang_pass_dynamic_object_size = 5,
11055   SpellingNotCalculated = 15
11056 
11057   };
11058 
11059   // Factory methods
11060   static PassObjectSizeAttr *CreateImplicit(ASTContext &Ctx, int Type, const AttributeCommonInfo &CommonInfo);
11061   static PassObjectSizeAttr *Create(ASTContext &Ctx, int Type, const AttributeCommonInfo &CommonInfo);
11062   static PassObjectSizeAttr *CreateImplicit(ASTContext &Ctx, int Type, SourceRange Range = {}, Spelling S = GNU_pass_object_size);
11063   static PassObjectSizeAttr *Create(ASTContext &Ctx, int Type, SourceRange Range = {}, Spelling S = GNU_pass_object_size);
11064 
11065   // Constructors
11066   PassObjectSizeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11067               , int Type
11068              );
11069 
11070   PassObjectSizeAttr *clone(ASTContext &C) const;
11071   void printPretty(raw_ostream &OS,
11072                    const PrintingPolicy &Policy) const;
11073   const char *getSpelling() const;
11074   Spelling getSemanticSpelling() const;
11075   bool isDynamic() const { return getAttributeSpellingListIndex() == 3 ||
11076     getAttributeSpellingListIndex() == 4 ||
11077     getAttributeSpellingListIndex() == 5; }
11078   int getType() const {
11079     return type;
11080   }
11081 
11082 
11083 
11084   static bool classof(const Attr *A) { return A->getKind() == attr::PassObjectSize; }
11085 };
11086 
11087 class CLANG_ABI PatchableFunctionEntryAttr : public InheritableAttr {
11088 unsigned count;
11089 
11090 int offset;
11091 
11092 public:
11093   enum Spelling {
11094     GNU_patchable_function_entry = 0,
11095     CXX11_gnu_patchable_function_entry = 1,
11096     C23_gnu_patchable_function_entry = 2,
11097   SpellingNotCalculated = 15
11098 
11099   };
11100 
11101   // Factory methods
11102   static PatchableFunctionEntryAttr *CreateImplicit(ASTContext &Ctx, unsigned Count, int Offset, const AttributeCommonInfo &CommonInfo);
11103   static PatchableFunctionEntryAttr *Create(ASTContext &Ctx, unsigned Count, int Offset, const AttributeCommonInfo &CommonInfo);
11104   static PatchableFunctionEntryAttr *CreateImplicit(ASTContext &Ctx, unsigned Count, int Offset, SourceRange Range = {}, Spelling S = GNU_patchable_function_entry);
11105   static PatchableFunctionEntryAttr *Create(ASTContext &Ctx, unsigned Count, int Offset, SourceRange Range = {}, Spelling S = GNU_patchable_function_entry);
11106 
11107   // Constructors
11108   PatchableFunctionEntryAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11109               , unsigned Count
11110               , int Offset
11111              );
11112   PatchableFunctionEntryAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11113               , unsigned Count
11114              );
11115 
11116   PatchableFunctionEntryAttr *clone(ASTContext &C) const;
11117   void printPretty(raw_ostream &OS,
11118                    const PrintingPolicy &Policy) const;
11119   const char *getSpelling() const;
11120   unsigned getCount() const {
11121     return count;
11122   }
11123 
11124   int getOffset() const {
11125     return offset;
11126   }
11127 
11128   static const int DefaultOffset = 0;
11129 
11130 
11131 
11132   static bool classof(const Attr *A) { return A->getKind() == attr::PatchableFunctionEntry; }
11133 };
11134 
11135 class CLANG_ABI PcsAttr : public InheritableAttr {
11136 public:
11137   enum PCSType {
11138     AAPCS,
11139     AAPCS_VFP
11140   };
11141 private:
11142   PcsAttr::PCSType pCS;
11143 
11144 public:
11145   enum Spelling {
11146     GNU_pcs = 0,
11147     CXX11_gnu_pcs = 1,
11148     C23_gnu_pcs = 2,
11149   SpellingNotCalculated = 15
11150 
11151   };
11152 
11153   // Factory methods
11154   static PcsAttr *CreateImplicit(ASTContext &Ctx, PcsAttr::PCSType PCS, const AttributeCommonInfo &CommonInfo);
11155   static PcsAttr *Create(ASTContext &Ctx, PcsAttr::PCSType PCS, const AttributeCommonInfo &CommonInfo);
11156   static PcsAttr *CreateImplicit(ASTContext &Ctx, PcsAttr::PCSType PCS, SourceRange Range = {}, Spelling S = GNU_pcs);
11157   static PcsAttr *Create(ASTContext &Ctx, PcsAttr::PCSType PCS, SourceRange Range = {}, Spelling S = GNU_pcs);
11158 
11159   // Constructors
11160   PcsAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11161               , PcsAttr::PCSType PCS
11162              );
11163 
11164   PcsAttr *clone(ASTContext &C) const;
11165   void printPretty(raw_ostream &OS,
11166                    const PrintingPolicy &Policy) const;
11167   const char *getSpelling() const;
11168   PcsAttr::PCSType getPCS() const {
11169     return pCS;
11170   }
11171 
11172   static bool ConvertStrToPCSType(StringRef Val, PcsAttr::PCSType &Out);
11173   static const char *ConvertPCSTypeToStr(PcsAttr::PCSType Val);
11174 
11175 
11176   static bool classof(const Attr *A) { return A->getKind() == attr::Pcs; }
11177 };
11178 
11179 class CLANG_ABI PointerAttr : public InheritableAttr {
11180 TypeSourceInfo * derefType;
11181 
11182 public:
11183   // Factory methods
11184   static PointerAttr *CreateImplicit(ASTContext &Ctx, TypeSourceInfo * DerefType, const AttributeCommonInfo &CommonInfo);
11185   static PointerAttr *Create(ASTContext &Ctx, TypeSourceInfo * DerefType, const AttributeCommonInfo &CommonInfo);
11186   static PointerAttr *CreateImplicit(ASTContext &Ctx, TypeSourceInfo * DerefType, SourceRange Range = {});
11187   static PointerAttr *Create(ASTContext &Ctx, TypeSourceInfo * DerefType, SourceRange Range = {});
11188 
11189   // Constructors
11190   PointerAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11191               , TypeSourceInfo * DerefType
11192              );
11193   PointerAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11194              );
11195 
11196   PointerAttr *clone(ASTContext &C) const;
11197   void printPretty(raw_ostream &OS,
11198                    const PrintingPolicy &Policy) const;
11199   const char *getSpelling() const;
11200   QualType getDerefType() const {
11201     return derefType->getType();
11202   }  TypeSourceInfo * getDerefTypeLoc() const {
11203     return derefType;
11204   }
11205 
11206 
11207 
11208   static bool classof(const Attr *A) { return A->getKind() == attr::Pointer; }
11209 };
11210 
11211 class CLANG_ABI PragmaClangBSSSectionAttr : public InheritableAttr {
11212 unsigned nameLength;
11213 char *name;
11214 
11215 public:
11216   // Factory methods
11217   static PragmaClangBSSSectionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo);
11218   static PragmaClangBSSSectionAttr *Create(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo);
11219   static PragmaClangBSSSectionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range = {});
11220   static PragmaClangBSSSectionAttr *Create(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range = {});
11221 
11222   // Constructors
11223   PragmaClangBSSSectionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11224               , llvm::StringRef Name
11225              );
11226 
11227   PragmaClangBSSSectionAttr *clone(ASTContext &C) const;
11228   void printPretty(raw_ostream &OS,
11229                    const PrintingPolicy &Policy) const;
11230   const char *getSpelling() const;
11231   llvm::StringRef getName() const {
11232     return llvm::StringRef(name, nameLength);
11233   }
11234   unsigned getNameLength() const {
11235     return nameLength;
11236   }
11237   void setName(ASTContext &C, llvm::StringRef S) {
11238     nameLength = S.size();
11239     this->name = new (C, 1) char [nameLength];
11240     if (!S.empty())
11241       std::memcpy(this->name, S.data(), nameLength);
11242   }
11243 
11244 
11245 
11246   static bool classof(const Attr *A) { return A->getKind() == attr::PragmaClangBSSSection; }
11247 };
11248 
11249 class CLANG_ABI PragmaClangDataSectionAttr : public InheritableAttr {
11250 unsigned nameLength;
11251 char *name;
11252 
11253 public:
11254   // Factory methods
11255   static PragmaClangDataSectionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo);
11256   static PragmaClangDataSectionAttr *Create(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo);
11257   static PragmaClangDataSectionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range = {});
11258   static PragmaClangDataSectionAttr *Create(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range = {});
11259 
11260   // Constructors
11261   PragmaClangDataSectionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11262               , llvm::StringRef Name
11263              );
11264 
11265   PragmaClangDataSectionAttr *clone(ASTContext &C) const;
11266   void printPretty(raw_ostream &OS,
11267                    const PrintingPolicy &Policy) const;
11268   const char *getSpelling() const;
11269   llvm::StringRef getName() const {
11270     return llvm::StringRef(name, nameLength);
11271   }
11272   unsigned getNameLength() const {
11273     return nameLength;
11274   }
11275   void setName(ASTContext &C, llvm::StringRef S) {
11276     nameLength = S.size();
11277     this->name = new (C, 1) char [nameLength];
11278     if (!S.empty())
11279       std::memcpy(this->name, S.data(), nameLength);
11280   }
11281 
11282 
11283 
11284   static bool classof(const Attr *A) { return A->getKind() == attr::PragmaClangDataSection; }
11285 };
11286 
11287 class CLANG_ABI PragmaClangRelroSectionAttr : public InheritableAttr {
11288 unsigned nameLength;
11289 char *name;
11290 
11291 public:
11292   // Factory methods
11293   static PragmaClangRelroSectionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo);
11294   static PragmaClangRelroSectionAttr *Create(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo);
11295   static PragmaClangRelroSectionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range = {});
11296   static PragmaClangRelroSectionAttr *Create(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range = {});
11297 
11298   // Constructors
11299   PragmaClangRelroSectionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11300               , llvm::StringRef Name
11301              );
11302 
11303   PragmaClangRelroSectionAttr *clone(ASTContext &C) const;
11304   void printPretty(raw_ostream &OS,
11305                    const PrintingPolicy &Policy) const;
11306   const char *getSpelling() const;
11307   llvm::StringRef getName() const {
11308     return llvm::StringRef(name, nameLength);
11309   }
11310   unsigned getNameLength() const {
11311     return nameLength;
11312   }
11313   void setName(ASTContext &C, llvm::StringRef S) {
11314     nameLength = S.size();
11315     this->name = new (C, 1) char [nameLength];
11316     if (!S.empty())
11317       std::memcpy(this->name, S.data(), nameLength);
11318   }
11319 
11320 
11321 
11322   static bool classof(const Attr *A) { return A->getKind() == attr::PragmaClangRelroSection; }
11323 };
11324 
11325 class CLANG_ABI PragmaClangRodataSectionAttr : public InheritableAttr {
11326 unsigned nameLength;
11327 char *name;
11328 
11329 public:
11330   // Factory methods
11331   static PragmaClangRodataSectionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo);
11332   static PragmaClangRodataSectionAttr *Create(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo);
11333   static PragmaClangRodataSectionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range = {});
11334   static PragmaClangRodataSectionAttr *Create(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range = {});
11335 
11336   // Constructors
11337   PragmaClangRodataSectionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11338               , llvm::StringRef Name
11339              );
11340 
11341   PragmaClangRodataSectionAttr *clone(ASTContext &C) const;
11342   void printPretty(raw_ostream &OS,
11343                    const PrintingPolicy &Policy) const;
11344   const char *getSpelling() const;
11345   llvm::StringRef getName() const {
11346     return llvm::StringRef(name, nameLength);
11347   }
11348   unsigned getNameLength() const {
11349     return nameLength;
11350   }
11351   void setName(ASTContext &C, llvm::StringRef S) {
11352     nameLength = S.size();
11353     this->name = new (C, 1) char [nameLength];
11354     if (!S.empty())
11355       std::memcpy(this->name, S.data(), nameLength);
11356   }
11357 
11358 
11359 
11360   static bool classof(const Attr *A) { return A->getKind() == attr::PragmaClangRodataSection; }
11361 };
11362 
11363 class CLANG_ABI PragmaClangTextSectionAttr : public InheritableAttr {
11364 unsigned nameLength;
11365 char *name;
11366 
11367 public:
11368   // Factory methods
11369   static PragmaClangTextSectionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo);
11370   static PragmaClangTextSectionAttr *Create(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo);
11371   static PragmaClangTextSectionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range = {});
11372   static PragmaClangTextSectionAttr *Create(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range = {});
11373 
11374   // Constructors
11375   PragmaClangTextSectionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11376               , llvm::StringRef Name
11377              );
11378 
11379   PragmaClangTextSectionAttr *clone(ASTContext &C) const;
11380   void printPretty(raw_ostream &OS,
11381                    const PrintingPolicy &Policy) const;
11382   const char *getSpelling() const;
11383   llvm::StringRef getName() const {
11384     return llvm::StringRef(name, nameLength);
11385   }
11386   unsigned getNameLength() const {
11387     return nameLength;
11388   }
11389   void setName(ASTContext &C, llvm::StringRef S) {
11390     nameLength = S.size();
11391     this->name = new (C, 1) char [nameLength];
11392     if (!S.empty())
11393       std::memcpy(this->name, S.data(), nameLength);
11394   }
11395 
11396 
11397 
11398   static bool classof(const Attr *A) { return A->getKind() == attr::PragmaClangTextSection; }
11399 };
11400 
11401 class CLANG_ABI PreferredNameAttr : public InheritableAttr {
11402 TypeSourceInfo * typedefType;
11403 
11404 public:
11405   enum Spelling {
11406     GNU_preferred_name = 0,
11407     CXX11_clang_preferred_name = 1,
11408   SpellingNotCalculated = 15
11409 
11410   };
11411 
11412   // Factory methods
11413   static PreferredNameAttr *CreateImplicit(ASTContext &Ctx, TypeSourceInfo * TypedefType, const AttributeCommonInfo &CommonInfo);
11414   static PreferredNameAttr *Create(ASTContext &Ctx, TypeSourceInfo * TypedefType, const AttributeCommonInfo &CommonInfo);
11415   static PreferredNameAttr *CreateImplicit(ASTContext &Ctx, TypeSourceInfo * TypedefType, SourceRange Range = {}, Spelling S = GNU_preferred_name);
11416   static PreferredNameAttr *Create(ASTContext &Ctx, TypeSourceInfo * TypedefType, SourceRange Range = {}, Spelling S = GNU_preferred_name);
11417 
11418   // Constructors
11419   PreferredNameAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11420               , TypeSourceInfo * TypedefType
11421              );
11422 
11423   PreferredNameAttr *clone(ASTContext &C) const;
11424   void printPretty(raw_ostream &OS,
11425                    const PrintingPolicy &Policy) const;
11426   const char *getSpelling() const;
11427   QualType getTypedefType() const {
11428     return typedefType->getType();
11429   }  TypeSourceInfo * getTypedefTypeLoc() const {
11430     return typedefType;
11431   }
11432 
11433 
11434 
11435   static bool classof(const Attr *A) { return A->getKind() == attr::PreferredName; }
11436 };
11437 
11438 class CLANG_ABI PreferredTypeAttr : public InheritableAttr {
11439 TypeSourceInfo * type;
11440 
11441 public:
11442   enum Spelling {
11443     GNU_preferred_type = 0,
11444     CXX11_clang_preferred_type = 1,
11445     C23_clang_preferred_type = 2,
11446   SpellingNotCalculated = 15
11447 
11448   };
11449 
11450   // Factory methods
11451   static PreferredTypeAttr *CreateImplicit(ASTContext &Ctx, TypeSourceInfo * Type, const AttributeCommonInfo &CommonInfo);
11452   static PreferredTypeAttr *Create(ASTContext &Ctx, TypeSourceInfo * Type, const AttributeCommonInfo &CommonInfo);
11453   static PreferredTypeAttr *CreateImplicit(ASTContext &Ctx, TypeSourceInfo * Type, SourceRange Range = {}, Spelling S = GNU_preferred_type);
11454   static PreferredTypeAttr *Create(ASTContext &Ctx, TypeSourceInfo * Type, SourceRange Range = {}, Spelling S = GNU_preferred_type);
11455 
11456   // Constructors
11457   PreferredTypeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11458               , TypeSourceInfo * Type
11459              );
11460   PreferredTypeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11461              );
11462 
11463   PreferredTypeAttr *clone(ASTContext &C) const;
11464   void printPretty(raw_ostream &OS,
11465                    const PrintingPolicy &Policy) const;
11466   const char *getSpelling() const;
11467   QualType getType() const {
11468     return type->getType();
11469   }  TypeSourceInfo * getTypeLoc() const {
11470     return type;
11471   }
11472 
11473 
11474 
11475   static bool classof(const Attr *A) { return A->getKind() == attr::PreferredType; }
11476 };
11477 
11478 class CLANG_ABI PreserveAllAttr : public InheritableAttr {
11479 public:
11480   enum Spelling {
11481     GNU_preserve_all = 0,
11482     CXX11_clang_preserve_all = 1,
11483     C23_clang_preserve_all = 2,
11484   SpellingNotCalculated = 15
11485 
11486   };
11487 
11488   // Factory methods
11489   static PreserveAllAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
11490   static PreserveAllAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
11491   static PreserveAllAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_preserve_all);
11492   static PreserveAllAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_preserve_all);
11493 
11494   // Constructors
11495   PreserveAllAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11496              );
11497 
11498   PreserveAllAttr *clone(ASTContext &C) const;
11499   void printPretty(raw_ostream &OS,
11500                    const PrintingPolicy &Policy) const;
11501   const char *getSpelling() const;
11502 
11503 
11504   static bool classof(const Attr *A) { return A->getKind() == attr::PreserveAll; }
11505 };
11506 
11507 class CLANG_ABI PreserveMostAttr : public InheritableAttr {
11508 public:
11509   enum Spelling {
11510     GNU_preserve_most = 0,
11511     CXX11_clang_preserve_most = 1,
11512     C23_clang_preserve_most = 2,
11513   SpellingNotCalculated = 15
11514 
11515   };
11516 
11517   // Factory methods
11518   static PreserveMostAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
11519   static PreserveMostAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
11520   static PreserveMostAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_preserve_most);
11521   static PreserveMostAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_preserve_most);
11522 
11523   // Constructors
11524   PreserveMostAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11525              );
11526 
11527   PreserveMostAttr *clone(ASTContext &C) const;
11528   void printPretty(raw_ostream &OS,
11529                    const PrintingPolicy &Policy) const;
11530   const char *getSpelling() const;
11531 
11532 
11533   static bool classof(const Attr *A) { return A->getKind() == attr::PreserveMost; }
11534 };
11535 
11536 class CLANG_ABI PreserveNoneAttr : public InheritableAttr {
11537 public:
11538   enum Spelling {
11539     GNU_preserve_none = 0,
11540     CXX11_clang_preserve_none = 1,
11541     C23_clang_preserve_none = 2,
11542   SpellingNotCalculated = 15
11543 
11544   };
11545 
11546   // Factory methods
11547   static PreserveNoneAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
11548   static PreserveNoneAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
11549   static PreserveNoneAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_preserve_none);
11550   static PreserveNoneAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_preserve_none);
11551 
11552   // Constructors
11553   PreserveNoneAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11554              );
11555 
11556   PreserveNoneAttr *clone(ASTContext &C) const;
11557   void printPretty(raw_ostream &OS,
11558                    const PrintingPolicy &Policy) const;
11559   const char *getSpelling() const;
11560 
11561 
11562   static bool classof(const Attr *A) { return A->getKind() == attr::PreserveNone; }
11563 };
11564 
11565 class CLANG_ABI PtGuardedByAttr : public InheritableAttr {
11566 Expr * arg;
11567 
11568 public:
11569   // Factory methods
11570   static PtGuardedByAttr *CreateImplicit(ASTContext &Ctx, Expr * Arg, const AttributeCommonInfo &CommonInfo);
11571   static PtGuardedByAttr *Create(ASTContext &Ctx, Expr * Arg, const AttributeCommonInfo &CommonInfo);
11572   static PtGuardedByAttr *CreateImplicit(ASTContext &Ctx, Expr * Arg, SourceRange Range = {});
11573   static PtGuardedByAttr *Create(ASTContext &Ctx, Expr * Arg, SourceRange Range = {});
11574 
11575   // Constructors
11576   PtGuardedByAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11577               , Expr * Arg
11578              );
11579 
11580   PtGuardedByAttr *clone(ASTContext &C) const;
11581   void printPretty(raw_ostream &OS,
11582                    const PrintingPolicy &Policy) const;
11583   const char *getSpelling() const;
11584   Expr * getArg() const {
11585     return arg;
11586   }
11587 
11588 
11589 
11590   static bool classof(const Attr *A) { return A->getKind() == attr::PtGuardedBy; }
11591 };
11592 
11593 class CLANG_ABI PtGuardedVarAttr : public InheritableAttr {
11594 public:
11595   enum Spelling {
11596     GNU_pt_guarded_var = 0,
11597     CXX11_clang_pt_guarded_var = 1,
11598   SpellingNotCalculated = 15
11599 
11600   };
11601 
11602   // Factory methods
11603   static PtGuardedVarAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
11604   static PtGuardedVarAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
11605   static PtGuardedVarAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_pt_guarded_var);
11606   static PtGuardedVarAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_pt_guarded_var);
11607 
11608   // Constructors
11609   PtGuardedVarAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11610              );
11611 
11612   PtGuardedVarAttr *clone(ASTContext &C) const;
11613   void printPretty(raw_ostream &OS,
11614                    const PrintingPolicy &Policy) const;
11615   const char *getSpelling() const;
11616 
11617 
11618   static bool classof(const Attr *A) { return A->getKind() == attr::PtGuardedVar; }
11619 };
11620 
11621 class CLANG_ABI Ptr32Attr : public TypeAttr {
11622 public:
11623   // Factory methods
11624   static Ptr32Attr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
11625   static Ptr32Attr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
11626   static Ptr32Attr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
11627   static Ptr32Attr *Create(ASTContext &Ctx, SourceRange Range = {});
11628 
11629   // Constructors
11630   Ptr32Attr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11631              );
11632 
11633   Ptr32Attr *clone(ASTContext &C) const;
11634   void printPretty(raw_ostream &OS,
11635                    const PrintingPolicy &Policy) const;
11636   const char *getSpelling() const;
11637 
11638 
11639   static bool classof(const Attr *A) { return A->getKind() == attr::Ptr32; }
11640 };
11641 
11642 class CLANG_ABI Ptr64Attr : public TypeAttr {
11643 public:
11644   // Factory methods
11645   static Ptr64Attr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
11646   static Ptr64Attr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
11647   static Ptr64Attr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
11648   static Ptr64Attr *Create(ASTContext &Ctx, SourceRange Range = {});
11649 
11650   // Constructors
11651   Ptr64Attr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11652              );
11653 
11654   Ptr64Attr *clone(ASTContext &C) const;
11655   void printPretty(raw_ostream &OS,
11656                    const PrintingPolicy &Policy) const;
11657   const char *getSpelling() const;
11658 
11659 
11660   static bool classof(const Attr *A) { return A->getKind() == attr::Ptr64; }
11661 };
11662 
11663 class CLANG_ABI PureAttr : public InheritableAttr {
11664 public:
11665   enum Spelling {
11666     GNU_pure = 0,
11667     CXX11_gnu_pure = 1,
11668     C23_gnu_pure = 2,
11669   SpellingNotCalculated = 15
11670 
11671   };
11672 
11673   // Factory methods
11674   static PureAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
11675   static PureAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
11676   static PureAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_pure);
11677   static PureAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_pure);
11678 
11679   // Constructors
11680   PureAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11681              );
11682 
11683   PureAttr *clone(ASTContext &C) const;
11684   void printPretty(raw_ostream &OS,
11685                    const PrintingPolicy &Policy) const;
11686   const char *getSpelling() const;
11687 
11688 
11689   static bool classof(const Attr *A) { return A->getKind() == attr::Pure; }
11690 };
11691 
11692 class CLANG_ABI RISCVInterruptAttr : public InheritableAttr {
11693 public:
11694   enum InterruptType {
11695     supervisor,
11696     machine
11697   };
11698 private:
11699   RISCVInterruptAttr::InterruptType interrupt;
11700 
11701 public:
11702   enum Spelling {
11703     GNU_interrupt = 0,
11704     CXX11_gnu_interrupt = 1,
11705     C23_gnu_interrupt = 2,
11706   SpellingNotCalculated = 15
11707 
11708   };
11709 
11710   // Factory methods
11711   static RISCVInterruptAttr *CreateImplicit(ASTContext &Ctx, RISCVInterruptAttr::InterruptType Interrupt, const AttributeCommonInfo &CommonInfo);
11712   static RISCVInterruptAttr *Create(ASTContext &Ctx, RISCVInterruptAttr::InterruptType Interrupt, const AttributeCommonInfo &CommonInfo);
11713   static RISCVInterruptAttr *CreateImplicit(ASTContext &Ctx, RISCVInterruptAttr::InterruptType Interrupt, SourceRange Range = {}, Spelling S = GNU_interrupt);
11714   static RISCVInterruptAttr *Create(ASTContext &Ctx, RISCVInterruptAttr::InterruptType Interrupt, SourceRange Range = {}, Spelling S = GNU_interrupt);
11715 
11716   // Constructors
11717   RISCVInterruptAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11718               , RISCVInterruptAttr::InterruptType Interrupt
11719              );
11720   RISCVInterruptAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11721              );
11722 
11723   RISCVInterruptAttr *clone(ASTContext &C) const;
11724   void printPretty(raw_ostream &OS,
11725                    const PrintingPolicy &Policy) const;
11726   const char *getSpelling() const;
11727   RISCVInterruptAttr::InterruptType getInterrupt() const {
11728     return interrupt;
11729   }
11730 
11731   static bool ConvertStrToInterruptType(StringRef Val, RISCVInterruptAttr::InterruptType &Out);
11732   static const char *ConvertInterruptTypeToStr(RISCVInterruptAttr::InterruptType Val);
11733 
11734 
11735   static bool classof(const Attr *A) { return A->getKind() == attr::RISCVInterrupt; }
11736 };
11737 
11738 class CLANG_ABI RISCVVectorCCAttr : public InheritableAttr {
11739 public:
11740   enum Spelling {
11741     CXX11_riscv_vector_cc = 0,
11742     C23_riscv_vector_cc = 1,
11743     GNU_riscv_vector_cc = 2,
11744     CXX11_clang_riscv_vector_cc = 3,
11745     C23_clang_riscv_vector_cc = 4,
11746   SpellingNotCalculated = 15
11747 
11748   };
11749 
11750   // Factory methods
11751   static RISCVVectorCCAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
11752   static RISCVVectorCCAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
11753   static RISCVVectorCCAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = CXX11_riscv_vector_cc);
11754   static RISCVVectorCCAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = CXX11_riscv_vector_cc);
11755 
11756   // Constructors
11757   RISCVVectorCCAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11758              );
11759 
11760   RISCVVectorCCAttr *clone(ASTContext &C) const;
11761   void printPretty(raw_ostream &OS,
11762                    const PrintingPolicy &Policy) const;
11763   const char *getSpelling() const;
11764   Spelling getSemanticSpelling() const;
11765 
11766 
11767   static bool classof(const Attr *A) { return A->getKind() == attr::RISCVVectorCC; }
11768 };
11769 
11770 class CLANG_ABI RandomizeLayoutAttr : public InheritableAttr {
11771 public:
11772   enum Spelling {
11773     GNU_randomize_layout = 0,
11774     CXX11_gnu_randomize_layout = 1,
11775     C23_gnu_randomize_layout = 2,
11776   SpellingNotCalculated = 15
11777 
11778   };
11779 
11780   // Factory methods
11781   static RandomizeLayoutAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
11782   static RandomizeLayoutAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
11783   static RandomizeLayoutAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_randomize_layout);
11784   static RandomizeLayoutAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_randomize_layout);
11785 
11786   // Constructors
11787   RandomizeLayoutAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11788              );
11789 
11790   RandomizeLayoutAttr *clone(ASTContext &C) const;
11791   void printPretty(raw_ostream &OS,
11792                    const PrintingPolicy &Policy) const;
11793   const char *getSpelling() const;
11794 
11795 
11796   static bool classof(const Attr *A) { return A->getKind() == attr::RandomizeLayout; }
11797 };
11798 
11799 class CLANG_ABI ReadOnlyPlacementAttr : public InheritableAttr {
11800 public:
11801   enum Spelling {
11802     GNU_enforce_read_only_placement = 0,
11803     CXX11_clang_enforce_read_only_placement = 1,
11804     C23_clang_enforce_read_only_placement = 2,
11805   SpellingNotCalculated = 15
11806 
11807   };
11808 
11809   // Factory methods
11810   static ReadOnlyPlacementAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
11811   static ReadOnlyPlacementAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
11812   static ReadOnlyPlacementAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_enforce_read_only_placement);
11813   static ReadOnlyPlacementAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_enforce_read_only_placement);
11814 
11815   // Constructors
11816   ReadOnlyPlacementAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11817              );
11818 
11819   ReadOnlyPlacementAttr *clone(ASTContext &C) const;
11820   void printPretty(raw_ostream &OS,
11821                    const PrintingPolicy &Policy) const;
11822   const char *getSpelling() const;
11823 
11824 
11825   static bool classof(const Attr *A) { return A->getKind() == attr::ReadOnlyPlacement; }
11826 };
11827 
11828 class CLANG_ABI RegCallAttr : public InheritableAttr {
11829 public:
11830   enum Spelling {
11831     GNU_regcall = 0,
11832     CXX11_gnu_regcall = 1,
11833     C23_gnu_regcall = 2,
11834     Keyword_regcall = 3,
11835   SpellingNotCalculated = 15
11836 
11837   };
11838 
11839   // Factory methods
11840   static RegCallAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
11841   static RegCallAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
11842   static RegCallAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_regcall);
11843   static RegCallAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_regcall);
11844 
11845   // Constructors
11846   RegCallAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11847              );
11848 
11849   RegCallAttr *clone(ASTContext &C) const;
11850   void printPretty(raw_ostream &OS,
11851                    const PrintingPolicy &Policy) const;
11852   const char *getSpelling() const;
11853 
11854 
11855   static bool classof(const Attr *A) { return A->getKind() == attr::RegCall; }
11856 };
11857 
11858 class CLANG_ABI ReinitializesAttr : public InheritableAttr {
11859 public:
11860   enum Spelling {
11861     GNU_reinitializes = 0,
11862     CXX11_clang_reinitializes = 1,
11863   SpellingNotCalculated = 15
11864 
11865   };
11866 
11867   // Factory methods
11868   static ReinitializesAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
11869   static ReinitializesAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
11870   static ReinitializesAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_reinitializes);
11871   static ReinitializesAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_reinitializes);
11872 
11873   // Constructors
11874   ReinitializesAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11875              );
11876 
11877   ReinitializesAttr *clone(ASTContext &C) const;
11878   void printPretty(raw_ostream &OS,
11879                    const PrintingPolicy &Policy) const;
11880   const char *getSpelling() const;
11881 
11882 
11883   static bool classof(const Attr *A) { return A->getKind() == attr::Reinitializes; }
11884 };
11885 
11886 class CLANG_ABI ReleaseCapabilityAttr : public InheritableAttr {
11887   unsigned args_Size;
11888   Expr * *args_;
11889 
11890 public:
11891   enum Spelling {
11892     GNU_release_capability = 0,
11893     CXX11_clang_release_capability = 1,
11894     GNU_release_shared_capability = 2,
11895     CXX11_clang_release_shared_capability = 3,
11896     GNU_release_generic_capability = 4,
11897     CXX11_clang_release_generic_capability = 5,
11898     GNU_unlock_function = 6,
11899     CXX11_clang_unlock_function = 7,
11900   SpellingNotCalculated = 15
11901 
11902   };
11903 
11904   // Factory methods
11905   static ReleaseCapabilityAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);
11906   static ReleaseCapabilityAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);
11907   static ReleaseCapabilityAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range = {}, Spelling S = GNU_release_capability);
11908   static ReleaseCapabilityAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range = {}, Spelling S = GNU_release_capability);
11909 
11910   // Constructors
11911   ReleaseCapabilityAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11912               , Expr * *Args, unsigned ArgsSize
11913              );
11914   ReleaseCapabilityAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11915              );
11916 
11917   ReleaseCapabilityAttr *clone(ASTContext &C) const;
11918   void printPretty(raw_ostream &OS,
11919                    const PrintingPolicy &Policy) const;
11920   const char *getSpelling() const;
11921   Spelling getSemanticSpelling() const;
11922   bool isShared() const { return getAttributeSpellingListIndex() == 2 ||
11923     getAttributeSpellingListIndex() == 3; }
11924   bool isGeneric() const { return getAttributeSpellingListIndex() == 4 ||
11925     getAttributeSpellingListIndex() == 5 ||
11926     getAttributeSpellingListIndex() == 6 ||
11927     getAttributeSpellingListIndex() == 7; }
11928   typedef Expr ** args_iterator;
11929   args_iterator args_begin() const { return args_; }
11930   args_iterator args_end() const { return args_ + args_Size; }
11931   unsigned args_size() const { return args_Size; }
11932   llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); }
11933 
11934 
11935 
11936 
11937   static bool classof(const Attr *A) { return A->getKind() == attr::ReleaseCapability; }
11938 };
11939 
11940 class CLANG_ABI ReleaseHandleAttr : public InheritableParamAttr {
11941 unsigned handleTypeLength;
11942 char *handleType;
11943 
11944 public:
11945   enum Spelling {
11946     GNU_release_handle = 0,
11947     CXX11_clang_release_handle = 1,
11948     C23_clang_release_handle = 2,
11949   SpellingNotCalculated = 15
11950 
11951   };
11952 
11953   // Factory methods
11954   static ReleaseHandleAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef HandleType, const AttributeCommonInfo &CommonInfo);
11955   static ReleaseHandleAttr *Create(ASTContext &Ctx, llvm::StringRef HandleType, const AttributeCommonInfo &CommonInfo);
11956   static ReleaseHandleAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef HandleType, SourceRange Range = {}, Spelling S = GNU_release_handle);
11957   static ReleaseHandleAttr *Create(ASTContext &Ctx, llvm::StringRef HandleType, SourceRange Range = {}, Spelling S = GNU_release_handle);
11958 
11959   // Constructors
11960   ReleaseHandleAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
11961               , llvm::StringRef HandleType
11962              );
11963 
11964   ReleaseHandleAttr *clone(ASTContext &C) const;
11965   void printPretty(raw_ostream &OS,
11966                    const PrintingPolicy &Policy) const;
11967   const char *getSpelling() const;
11968   llvm::StringRef getHandleType() const {
11969     return llvm::StringRef(handleType, handleTypeLength);
11970   }
11971   unsigned getHandleTypeLength() const {
11972     return handleTypeLength;
11973   }
11974   void setHandleType(ASTContext &C, llvm::StringRef S) {
11975     handleTypeLength = S.size();
11976     this->handleType = new (C, 1) char [handleTypeLength];
11977     if (!S.empty())
11978       std::memcpy(this->handleType, S.data(), handleTypeLength);
11979   }
11980 
11981 
11982 
11983   static bool classof(const Attr *A) { return A->getKind() == attr::ReleaseHandle; }
11984 };
11985 
11986 class CLANG_ABI ReqdWorkGroupSizeAttr : public InheritableAttr {
11987 unsigned xDim;
11988 
11989 unsigned yDim;
11990 
11991 unsigned zDim;
11992 
11993 public:
11994   // Factory methods
11995   static ReqdWorkGroupSizeAttr *CreateImplicit(ASTContext &Ctx, unsigned XDim, unsigned YDim, unsigned ZDim, const AttributeCommonInfo &CommonInfo);
11996   static ReqdWorkGroupSizeAttr *Create(ASTContext &Ctx, unsigned XDim, unsigned YDim, unsigned ZDim, const AttributeCommonInfo &CommonInfo);
11997   static ReqdWorkGroupSizeAttr *CreateImplicit(ASTContext &Ctx, unsigned XDim, unsigned YDim, unsigned ZDim, SourceRange Range = {});
11998   static ReqdWorkGroupSizeAttr *Create(ASTContext &Ctx, unsigned XDim, unsigned YDim, unsigned ZDim, SourceRange Range = {});
11999 
12000   // Constructors
12001   ReqdWorkGroupSizeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12002               , unsigned XDim
12003               , unsigned YDim
12004               , unsigned ZDim
12005              );
12006 
12007   ReqdWorkGroupSizeAttr *clone(ASTContext &C) const;
12008   void printPretty(raw_ostream &OS,
12009                    const PrintingPolicy &Policy) const;
12010   const char *getSpelling() const;
12011   unsigned getXDim() const {
12012     return xDim;
12013   }
12014 
12015   unsigned getYDim() const {
12016     return yDim;
12017   }
12018 
12019   unsigned getZDim() const {
12020     return zDim;
12021   }
12022 
12023 
12024 
12025   static bool classof(const Attr *A) { return A->getKind() == attr::ReqdWorkGroupSize; }
12026 };
12027 
12028 class CLANG_ABI RequiresCapabilityAttr : public InheritableAttr {
12029   unsigned args_Size;
12030   Expr * *args_;
12031 
12032 public:
12033   enum Spelling {
12034     GNU_requires_capability = 0,
12035     CXX11_clang_requires_capability = 1,
12036     GNU_exclusive_locks_required = 2,
12037     CXX11_clang_exclusive_locks_required = 3,
12038     GNU_requires_shared_capability = 4,
12039     CXX11_clang_requires_shared_capability = 5,
12040     GNU_shared_locks_required = 6,
12041     CXX11_clang_shared_locks_required = 7,
12042   SpellingNotCalculated = 15
12043 
12044   };
12045 
12046   // Factory methods
12047   static RequiresCapabilityAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);
12048   static RequiresCapabilityAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);
12049   static RequiresCapabilityAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range = {}, Spelling S = GNU_requires_capability);
12050   static RequiresCapabilityAttr *Create(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Range = {}, Spelling S = GNU_requires_capability);
12051 
12052   // Constructors
12053   RequiresCapabilityAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12054               , Expr * *Args, unsigned ArgsSize
12055              );
12056   RequiresCapabilityAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12057              );
12058 
12059   RequiresCapabilityAttr *clone(ASTContext &C) const;
12060   void printPretty(raw_ostream &OS,
12061                    const PrintingPolicy &Policy) const;
12062   const char *getSpelling() const;
12063   Spelling getSemanticSpelling() const;
12064   bool isShared() const { return getAttributeSpellingListIndex() == 4 ||
12065     getAttributeSpellingListIndex() == 5 ||
12066     getAttributeSpellingListIndex() == 6 ||
12067     getAttributeSpellingListIndex() == 7; }
12068   typedef Expr ** args_iterator;
12069   args_iterator args_begin() const { return args_; }
12070   args_iterator args_end() const { return args_ + args_Size; }
12071   unsigned args_size() const { return args_Size; }
12072   llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); }
12073 
12074 
12075 
12076 
12077   static bool classof(const Attr *A) { return A->getKind() == attr::RequiresCapability; }
12078 };
12079 
12080 class CLANG_ABI RestrictAttr : public InheritableAttr {
12081 public:
12082   enum Spelling {
12083     Declspec_restrict = 0,
12084     GNU_malloc = 1,
12085     CXX11_gnu_malloc = 2,
12086     C23_gnu_malloc = 3,
12087   SpellingNotCalculated = 15
12088 
12089   };
12090 
12091   // Factory methods
12092   static RestrictAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
12093   static RestrictAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
12094   static RestrictAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Declspec_restrict);
12095   static RestrictAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Declspec_restrict);
12096 
12097   // Constructors
12098   RestrictAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12099              );
12100 
12101   RestrictAttr *clone(ASTContext &C) const;
12102   void printPretty(raw_ostream &OS,
12103                    const PrintingPolicy &Policy) const;
12104   const char *getSpelling() const;
12105   Spelling getSemanticSpelling() const;
12106 
12107 
12108   static bool classof(const Attr *A) { return A->getKind() == attr::Restrict; }
12109 };
12110 
12111 class CLANG_ABI RetainAttr : public InheritableAttr {
12112 public:
12113   enum Spelling {
12114     GNU_retain = 0,
12115     CXX11_gnu_retain = 1,
12116     C23_gnu_retain = 2,
12117   SpellingNotCalculated = 15
12118 
12119   };
12120 
12121   // Factory methods
12122   static RetainAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
12123   static RetainAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
12124   static RetainAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_retain);
12125   static RetainAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_retain);
12126 
12127   // Constructors
12128   RetainAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12129              );
12130 
12131   RetainAttr *clone(ASTContext &C) const;
12132   void printPretty(raw_ostream &OS,
12133                    const PrintingPolicy &Policy) const;
12134   const char *getSpelling() const;
12135 
12136 
12137   static bool classof(const Attr *A) { return A->getKind() == attr::Retain; }
12138 };
12139 
12140 class CLANG_ABI ReturnTypestateAttr : public InheritableAttr {
12141 public:
12142   enum ConsumedState {
12143     Unknown,
12144     Consumed,
12145     Unconsumed
12146   };
12147 private:
12148   ReturnTypestateAttr::ConsumedState state;
12149 
12150 public:
12151   enum Spelling {
12152     GNU_return_typestate = 0,
12153     CXX11_clang_return_typestate = 1,
12154   SpellingNotCalculated = 15
12155 
12156   };
12157 
12158   // Factory methods
12159   static ReturnTypestateAttr *CreateImplicit(ASTContext &Ctx, ReturnTypestateAttr::ConsumedState State, const AttributeCommonInfo &CommonInfo);
12160   static ReturnTypestateAttr *Create(ASTContext &Ctx, ReturnTypestateAttr::ConsumedState State, const AttributeCommonInfo &CommonInfo);
12161   static ReturnTypestateAttr *CreateImplicit(ASTContext &Ctx, ReturnTypestateAttr::ConsumedState State, SourceRange Range = {}, Spelling S = GNU_return_typestate);
12162   static ReturnTypestateAttr *Create(ASTContext &Ctx, ReturnTypestateAttr::ConsumedState State, SourceRange Range = {}, Spelling S = GNU_return_typestate);
12163 
12164   // Constructors
12165   ReturnTypestateAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12166               , ReturnTypestateAttr::ConsumedState State
12167              );
12168 
12169   ReturnTypestateAttr *clone(ASTContext &C) const;
12170   void printPretty(raw_ostream &OS,
12171                    const PrintingPolicy &Policy) const;
12172   const char *getSpelling() const;
12173   ReturnTypestateAttr::ConsumedState getState() const {
12174     return state;
12175   }
12176 
12177   static bool ConvertStrToConsumedState(StringRef Val, ReturnTypestateAttr::ConsumedState &Out);
12178   static const char *ConvertConsumedStateToStr(ReturnTypestateAttr::ConsumedState Val);
12179 
12180 
12181   static bool classof(const Attr *A) { return A->getKind() == attr::ReturnTypestate; }
12182 };
12183 
12184 class CLANG_ABI ReturnsNonNullAttr : public InheritableAttr {
12185 public:
12186   enum Spelling {
12187     GNU_returns_nonnull = 0,
12188     CXX11_gnu_returns_nonnull = 1,
12189     C23_gnu_returns_nonnull = 2,
12190   SpellingNotCalculated = 15
12191 
12192   };
12193 
12194   // Factory methods
12195   static ReturnsNonNullAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
12196   static ReturnsNonNullAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
12197   static ReturnsNonNullAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_returns_nonnull);
12198   static ReturnsNonNullAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_returns_nonnull);
12199 
12200   // Constructors
12201   ReturnsNonNullAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12202              );
12203 
12204   ReturnsNonNullAttr *clone(ASTContext &C) const;
12205   void printPretty(raw_ostream &OS,
12206                    const PrintingPolicy &Policy) const;
12207   const char *getSpelling() const;
12208 
12209 
12210   static bool classof(const Attr *A) { return A->getKind() == attr::ReturnsNonNull; }
12211 };
12212 
12213 class CLANG_ABI ReturnsTwiceAttr : public InheritableAttr {
12214 public:
12215   enum Spelling {
12216     GNU_returns_twice = 0,
12217     CXX11_gnu_returns_twice = 1,
12218     C23_gnu_returns_twice = 2,
12219   SpellingNotCalculated = 15
12220 
12221   };
12222 
12223   // Factory methods
12224   static ReturnsTwiceAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
12225   static ReturnsTwiceAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
12226   static ReturnsTwiceAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_returns_twice);
12227   static ReturnsTwiceAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_returns_twice);
12228 
12229   // Constructors
12230   ReturnsTwiceAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12231              );
12232 
12233   ReturnsTwiceAttr *clone(ASTContext &C) const;
12234   void printPretty(raw_ostream &OS,
12235                    const PrintingPolicy &Policy) const;
12236   const char *getSpelling() const;
12237 
12238 
12239   static bool classof(const Attr *A) { return A->getKind() == attr::ReturnsTwice; }
12240 };
12241 
12242 class CLANG_ABI SPtrAttr : public TypeAttr {
12243 public:
12244   // Factory methods
12245   static SPtrAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
12246   static SPtrAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
12247   static SPtrAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
12248   static SPtrAttr *Create(ASTContext &Ctx, SourceRange Range = {});
12249 
12250   // Constructors
12251   SPtrAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12252              );
12253 
12254   SPtrAttr *clone(ASTContext &C) const;
12255   void printPretty(raw_ostream &OS,
12256                    const PrintingPolicy &Policy) const;
12257   const char *getSpelling() const;
12258 
12259 
12260   static bool classof(const Attr *A) { return A->getKind() == attr::SPtr; }
12261 };
12262 
12263 class CLANG_ABI SYCLKernelAttr : public InheritableAttr {
12264 public:
12265   enum Spelling {
12266     GNU_sycl_kernel = 0,
12267     CXX11_clang_sycl_kernel = 1,
12268     C23_clang_sycl_kernel = 2,
12269   SpellingNotCalculated = 15
12270 
12271   };
12272 
12273   // Factory methods
12274   static SYCLKernelAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
12275   static SYCLKernelAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
12276   static SYCLKernelAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_sycl_kernel);
12277   static SYCLKernelAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_sycl_kernel);
12278 
12279   // Constructors
12280   SYCLKernelAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12281              );
12282 
12283   SYCLKernelAttr *clone(ASTContext &C) const;
12284   void printPretty(raw_ostream &OS,
12285                    const PrintingPolicy &Policy) const;
12286   const char *getSpelling() const;
12287 
12288 
12289   static bool classof(const Attr *A) { return A->getKind() == attr::SYCLKernel; }
12290 };
12291 
12292 class CLANG_ABI SYCLKernelEntryPointAttr : public InheritableAttr {
12293 TypeSourceInfo * kernelName;
12294 
12295 bool invalid;
12296 
12297 public:
12298   enum Spelling {
12299     GNU_sycl_kernel_entry_point = 0,
12300     CXX11_clang_sycl_kernel_entry_point = 1,
12301     C23_clang_sycl_kernel_entry_point = 2,
12302   SpellingNotCalculated = 15
12303 
12304   };
12305 
12306   // Factory methods
12307   static SYCLKernelEntryPointAttr *CreateImplicit(ASTContext &Ctx, TypeSourceInfo * KernelName, bool Invalid, const AttributeCommonInfo &CommonInfo);
12308   static SYCLKernelEntryPointAttr *Create(ASTContext &Ctx, TypeSourceInfo * KernelName, bool Invalid, const AttributeCommonInfo &CommonInfo);
12309   static SYCLKernelEntryPointAttr *CreateImplicit(ASTContext &Ctx, TypeSourceInfo * KernelName, bool Invalid, SourceRange Range = {}, Spelling S = GNU_sycl_kernel_entry_point);
12310   static SYCLKernelEntryPointAttr *Create(ASTContext &Ctx, TypeSourceInfo * KernelName, bool Invalid, SourceRange Range = {}, Spelling S = GNU_sycl_kernel_entry_point);
12311   static SYCLKernelEntryPointAttr *CreateImplicit(ASTContext &Ctx, TypeSourceInfo * KernelName, const AttributeCommonInfo &CommonInfo);
12312   static SYCLKernelEntryPointAttr *Create(ASTContext &Ctx, TypeSourceInfo * KernelName, const AttributeCommonInfo &CommonInfo);
12313   static SYCLKernelEntryPointAttr *CreateImplicit(ASTContext &Ctx, TypeSourceInfo * KernelName, SourceRange Range = {}, Spelling S = GNU_sycl_kernel_entry_point);
12314   static SYCLKernelEntryPointAttr *Create(ASTContext &Ctx, TypeSourceInfo * KernelName, SourceRange Range = {}, Spelling S = GNU_sycl_kernel_entry_point);
12315 
12316   // Constructors
12317   SYCLKernelEntryPointAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12318               , TypeSourceInfo * KernelName
12319               , bool Invalid
12320              );
12321   SYCLKernelEntryPointAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12322               , TypeSourceInfo * KernelName
12323              );
12324 
12325   SYCLKernelEntryPointAttr *clone(ASTContext &C) const;
12326   void printPretty(raw_ostream &OS,
12327                    const PrintingPolicy &Policy) const;
12328   const char *getSpelling() const;
12329   QualType getKernelName() const {
12330     return kernelName->getType();
12331   }  TypeSourceInfo * getKernelNameLoc() const {
12332     return kernelName;
12333   }
12334 
12335   bool getInvalid() const {
12336     return invalid;
12337   }
12338 
12339   static const bool DefaultInvalid = false;
12340 
12341 
12342     void setInvalidAttr() { invalid = true; }
12343     bool isInvalidAttr() const { return invalid; }
12344   
12345 
12346   static bool classof(const Attr *A) { return A->getKind() == attr::SYCLKernelEntryPoint; }
12347 };
12348 
12349 class CLANG_ABI SYCLSpecialClassAttr : public InheritableAttr {
12350 public:
12351   enum Spelling {
12352     GNU_sycl_special_class = 0,
12353     CXX11_clang_sycl_special_class = 1,
12354     C23_clang_sycl_special_class = 2,
12355   SpellingNotCalculated = 15
12356 
12357   };
12358 
12359   // Factory methods
12360   static SYCLSpecialClassAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
12361   static SYCLSpecialClassAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
12362   static SYCLSpecialClassAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_sycl_special_class);
12363   static SYCLSpecialClassAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_sycl_special_class);
12364 
12365   // Constructors
12366   SYCLSpecialClassAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12367              );
12368 
12369   SYCLSpecialClassAttr *clone(ASTContext &C) const;
12370   void printPretty(raw_ostream &OS,
12371                    const PrintingPolicy &Policy) const;
12372   const char *getSpelling() const;
12373 
12374 
12375   static bool classof(const Attr *A) { return A->getKind() == attr::SYCLSpecialClass; }
12376 };
12377 
12378 class CLANG_ABI ScopedLockableAttr : public InheritableAttr {
12379 public:
12380   enum Spelling {
12381     GNU_scoped_lockable = 0,
12382     CXX11_clang_scoped_lockable = 1,
12383   SpellingNotCalculated = 15
12384 
12385   };
12386 
12387   // Factory methods
12388   static ScopedLockableAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
12389   static ScopedLockableAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
12390   static ScopedLockableAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_scoped_lockable);
12391   static ScopedLockableAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_scoped_lockable);
12392 
12393   // Constructors
12394   ScopedLockableAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12395              );
12396 
12397   ScopedLockableAttr *clone(ASTContext &C) const;
12398   void printPretty(raw_ostream &OS,
12399                    const PrintingPolicy &Policy) const;
12400   const char *getSpelling() const;
12401 
12402 
12403   static bool classof(const Attr *A) { return A->getKind() == attr::ScopedLockable; }
12404 };
12405 
12406 class CLANG_ABI SectionAttr : public InheritableAttr {
12407 unsigned nameLength;
12408 char *name;
12409 
12410 public:
12411   enum Spelling {
12412     GNU_section = 0,
12413     CXX11_gnu_section = 1,
12414     C23_gnu_section = 2,
12415     Declspec_allocate = 3,
12416   SpellingNotCalculated = 15
12417 
12418   };
12419 
12420   // Factory methods
12421   static SectionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo);
12422   static SectionAttr *Create(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo);
12423   static SectionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range = {}, Spelling S = GNU_section);
12424   static SectionAttr *Create(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range = {}, Spelling S = GNU_section);
12425 
12426   // Constructors
12427   SectionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12428               , llvm::StringRef Name
12429              );
12430 
12431   SectionAttr *clone(ASTContext &C) const;
12432   void printPretty(raw_ostream &OS,
12433                    const PrintingPolicy &Policy) const;
12434   const char *getSpelling() const;
12435   Spelling getSemanticSpelling() const;
12436   llvm::StringRef getName() const {
12437     return llvm::StringRef(name, nameLength);
12438   }
12439   unsigned getNameLength() const {
12440     return nameLength;
12441   }
12442   void setName(ASTContext &C, llvm::StringRef S) {
12443     nameLength = S.size();
12444     this->name = new (C, 1) char [nameLength];
12445     if (!S.empty())
12446       std::memcpy(this->name, S.data(), nameLength);
12447   }
12448 
12449 
12450 
12451   static bool classof(const Attr *A) { return A->getKind() == attr::Section; }
12452 };
12453 
12454 class CLANG_ABI SelectAnyAttr : public InheritableAttr {
12455 public:
12456   enum Spelling {
12457     Declspec_selectany = 0,
12458     GNU_selectany = 1,
12459     CXX11_gnu_selectany = 2,
12460     C23_gnu_selectany = 3,
12461   SpellingNotCalculated = 15
12462 
12463   };
12464 
12465   // Factory methods
12466   static SelectAnyAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
12467   static SelectAnyAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
12468   static SelectAnyAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Declspec_selectany);
12469   static SelectAnyAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = Declspec_selectany);
12470 
12471   // Constructors
12472   SelectAnyAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12473              );
12474 
12475   SelectAnyAttr *clone(ASTContext &C) const;
12476   void printPretty(raw_ostream &OS,
12477                    const PrintingPolicy &Policy) const;
12478   const char *getSpelling() const;
12479 
12480 
12481   static bool classof(const Attr *A) { return A->getKind() == attr::SelectAny; }
12482 };
12483 
12484 class CLANG_ABI SentinelAttr : public InheritableAttr {
12485 int sentinel;
12486 
12487 int nullPos;
12488 
12489 public:
12490   enum Spelling {
12491     GNU_sentinel = 0,
12492     CXX11_gnu_sentinel = 1,
12493     C23_gnu_sentinel = 2,
12494   SpellingNotCalculated = 15
12495 
12496   };
12497 
12498   // Factory methods
12499   static SentinelAttr *CreateImplicit(ASTContext &Ctx, int Sentinel, int NullPos, const AttributeCommonInfo &CommonInfo);
12500   static SentinelAttr *Create(ASTContext &Ctx, int Sentinel, int NullPos, const AttributeCommonInfo &CommonInfo);
12501   static SentinelAttr *CreateImplicit(ASTContext &Ctx, int Sentinel, int NullPos, SourceRange Range = {}, Spelling S = GNU_sentinel);
12502   static SentinelAttr *Create(ASTContext &Ctx, int Sentinel, int NullPos, SourceRange Range = {}, Spelling S = GNU_sentinel);
12503 
12504   // Constructors
12505   SentinelAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12506               , int Sentinel
12507               , int NullPos
12508              );
12509   SentinelAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12510              );
12511 
12512   SentinelAttr *clone(ASTContext &C) const;
12513   void printPretty(raw_ostream &OS,
12514                    const PrintingPolicy &Policy) const;
12515   const char *getSpelling() const;
12516   int getSentinel() const {
12517     return sentinel;
12518   }
12519 
12520   static const int DefaultSentinel = 0;
12521 
12522   int getNullPos() const {
12523     return nullPos;
12524   }
12525 
12526   static const int DefaultNullPos = 0;
12527 
12528 
12529 
12530   static bool classof(const Attr *A) { return A->getKind() == attr::Sentinel; }
12531 };
12532 
12533 class CLANG_ABI SetTypestateAttr : public InheritableAttr {
12534 public:
12535   enum ConsumedState {
12536     Unknown,
12537     Consumed,
12538     Unconsumed
12539   };
12540 private:
12541   SetTypestateAttr::ConsumedState newState;
12542 
12543 public:
12544   enum Spelling {
12545     GNU_set_typestate = 0,
12546     CXX11_clang_set_typestate = 1,
12547   SpellingNotCalculated = 15
12548 
12549   };
12550 
12551   // Factory methods
12552   static SetTypestateAttr *CreateImplicit(ASTContext &Ctx, SetTypestateAttr::ConsumedState NewState, const AttributeCommonInfo &CommonInfo);
12553   static SetTypestateAttr *Create(ASTContext &Ctx, SetTypestateAttr::ConsumedState NewState, const AttributeCommonInfo &CommonInfo);
12554   static SetTypestateAttr *CreateImplicit(ASTContext &Ctx, SetTypestateAttr::ConsumedState NewState, SourceRange Range = {}, Spelling S = GNU_set_typestate);
12555   static SetTypestateAttr *Create(ASTContext &Ctx, SetTypestateAttr::ConsumedState NewState, SourceRange Range = {}, Spelling S = GNU_set_typestate);
12556 
12557   // Constructors
12558   SetTypestateAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12559               , SetTypestateAttr::ConsumedState NewState
12560              );
12561 
12562   SetTypestateAttr *clone(ASTContext &C) const;
12563   void printPretty(raw_ostream &OS,
12564                    const PrintingPolicy &Policy) const;
12565   const char *getSpelling() const;
12566   SetTypestateAttr::ConsumedState getNewState() const {
12567     return newState;
12568   }
12569 
12570   static bool ConvertStrToConsumedState(StringRef Val, SetTypestateAttr::ConsumedState &Out);
12571   static const char *ConvertConsumedStateToStr(SetTypestateAttr::ConsumedState Val);
12572 
12573 
12574   static bool classof(const Attr *A) { return A->getKind() == attr::SetTypestate; }
12575 };
12576 
12577 class CLANG_ABI SharedTrylockFunctionAttr : public InheritableAttr {
12578 Expr * successValue;
12579 
12580   unsigned args_Size;
12581   Expr * *args_;
12582 
12583 public:
12584   // Factory methods
12585   static SharedTrylockFunctionAttr *CreateImplicit(ASTContext &Ctx, Expr * SuccessValue, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);
12586   static SharedTrylockFunctionAttr *Create(ASTContext &Ctx, Expr * SuccessValue, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);
12587   static SharedTrylockFunctionAttr *CreateImplicit(ASTContext &Ctx, Expr * SuccessValue, Expr * *Args, unsigned ArgsSize, SourceRange Range = {});
12588   static SharedTrylockFunctionAttr *Create(ASTContext &Ctx, Expr * SuccessValue, Expr * *Args, unsigned ArgsSize, SourceRange Range = {});
12589 
12590   // Constructors
12591   SharedTrylockFunctionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12592               , Expr * SuccessValue
12593               , Expr * *Args, unsigned ArgsSize
12594              );
12595   SharedTrylockFunctionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12596               , Expr * SuccessValue
12597              );
12598 
12599   SharedTrylockFunctionAttr *clone(ASTContext &C) const;
12600   void printPretty(raw_ostream &OS,
12601                    const PrintingPolicy &Policy) const;
12602   const char *getSpelling() const;
12603   Expr * getSuccessValue() const {
12604     return successValue;
12605   }
12606 
12607   typedef Expr ** args_iterator;
12608   args_iterator args_begin() const { return args_; }
12609   args_iterator args_end() const { return args_ + args_Size; }
12610   unsigned args_size() const { return args_Size; }
12611   llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); }
12612 
12613 
12614 
12615 
12616   static bool classof(const Attr *A) { return A->getKind() == attr::SharedTrylockFunction; }
12617 };
12618 
12619 class CLANG_ABI SizedByAttr : public InheritableAttr {
12620 Expr * size;
12621 
12622 int nestedLevel;
12623 
12624 public:
12625   enum Spelling {
12626     GNU_sized_by = 0,
12627     CXX11_clang_sized_by = 1,
12628     C23_clang_sized_by = 2,
12629   SpellingNotCalculated = 15
12630 
12631   };
12632 
12633   // Factory methods
12634   static SizedByAttr *CreateImplicit(ASTContext &Ctx, Expr * Size, int NestedLevel, const AttributeCommonInfo &CommonInfo);
12635   static SizedByAttr *Create(ASTContext &Ctx, Expr * Size, int NestedLevel, const AttributeCommonInfo &CommonInfo);
12636   static SizedByAttr *CreateImplicit(ASTContext &Ctx, Expr * Size, int NestedLevel, SourceRange Range = {}, Spelling S = GNU_sized_by);
12637   static SizedByAttr *Create(ASTContext &Ctx, Expr * Size, int NestedLevel, SourceRange Range = {}, Spelling S = GNU_sized_by);
12638 
12639   // Constructors
12640   SizedByAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12641               , Expr * Size
12642               , int NestedLevel
12643              );
12644   SizedByAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12645               , Expr * Size
12646              );
12647 
12648   SizedByAttr *clone(ASTContext &C) const;
12649   void printPretty(raw_ostream &OS,
12650                    const PrintingPolicy &Policy) const;
12651   const char *getSpelling() const;
12652   Expr * getSize() const {
12653     return size;
12654   }
12655 
12656   int getNestedLevel() const {
12657     return nestedLevel;
12658   }
12659 
12660 
12661 
12662   static bool classof(const Attr *A) { return A->getKind() == attr::SizedBy; }
12663 };
12664 
12665 class CLANG_ABI SizedByOrNullAttr : public InheritableAttr {
12666 Expr * size;
12667 
12668 int nestedLevel;
12669 
12670 public:
12671   enum Spelling {
12672     GNU_sized_by_or_null = 0,
12673     CXX11_clang_sized_by_or_null = 1,
12674     C23_clang_sized_by_or_null = 2,
12675   SpellingNotCalculated = 15
12676 
12677   };
12678 
12679   // Factory methods
12680   static SizedByOrNullAttr *CreateImplicit(ASTContext &Ctx, Expr * Size, int NestedLevel, const AttributeCommonInfo &CommonInfo);
12681   static SizedByOrNullAttr *Create(ASTContext &Ctx, Expr * Size, int NestedLevel, const AttributeCommonInfo &CommonInfo);
12682   static SizedByOrNullAttr *CreateImplicit(ASTContext &Ctx, Expr * Size, int NestedLevel, SourceRange Range = {}, Spelling S = GNU_sized_by_or_null);
12683   static SizedByOrNullAttr *Create(ASTContext &Ctx, Expr * Size, int NestedLevel, SourceRange Range = {}, Spelling S = GNU_sized_by_or_null);
12684 
12685   // Constructors
12686   SizedByOrNullAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12687               , Expr * Size
12688               , int NestedLevel
12689              );
12690   SizedByOrNullAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12691               , Expr * Size
12692              );
12693 
12694   SizedByOrNullAttr *clone(ASTContext &C) const;
12695   void printPretty(raw_ostream &OS,
12696                    const PrintingPolicy &Policy) const;
12697   const char *getSpelling() const;
12698   Expr * getSize() const {
12699     return size;
12700   }
12701 
12702   int getNestedLevel() const {
12703     return nestedLevel;
12704   }
12705 
12706 
12707 
12708   static bool classof(const Attr *A) { return A->getKind() == attr::SizedByOrNull; }
12709 };
12710 
12711 class CLANG_ABI SpeculativeLoadHardeningAttr : public InheritableAttr {
12712 public:
12713   enum Spelling {
12714     GNU_speculative_load_hardening = 0,
12715     CXX11_clang_speculative_load_hardening = 1,
12716     C23_clang_speculative_load_hardening = 2,
12717   SpellingNotCalculated = 15
12718 
12719   };
12720 
12721   // Factory methods
12722   static SpeculativeLoadHardeningAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
12723   static SpeculativeLoadHardeningAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
12724   static SpeculativeLoadHardeningAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_speculative_load_hardening);
12725   static SpeculativeLoadHardeningAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_speculative_load_hardening);
12726 
12727   // Constructors
12728   SpeculativeLoadHardeningAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12729              );
12730 
12731   SpeculativeLoadHardeningAttr *clone(ASTContext &C) const;
12732   void printPretty(raw_ostream &OS,
12733                    const PrintingPolicy &Policy) const;
12734   const char *getSpelling() const;
12735 
12736 
12737   static bool classof(const Attr *A) { return A->getKind() == attr::SpeculativeLoadHardening; }
12738 };
12739 
12740 class CLANG_ABI StandaloneDebugAttr : public InheritableAttr {
12741 public:
12742   enum Spelling {
12743     GNU_standalone_debug = 0,
12744     CXX11_clang_standalone_debug = 1,
12745   SpellingNotCalculated = 15
12746 
12747   };
12748 
12749   // Factory methods
12750   static StandaloneDebugAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
12751   static StandaloneDebugAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
12752   static StandaloneDebugAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_standalone_debug);
12753   static StandaloneDebugAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_standalone_debug);
12754 
12755   // Constructors
12756   StandaloneDebugAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12757              );
12758 
12759   StandaloneDebugAttr *clone(ASTContext &C) const;
12760   void printPretty(raw_ostream &OS,
12761                    const PrintingPolicy &Policy) const;
12762   const char *getSpelling() const;
12763 
12764 
12765   static bool classof(const Attr *A) { return A->getKind() == attr::StandaloneDebug; }
12766 };
12767 
12768 class CLANG_ABI StdCallAttr : public InheritableAttr {
12769 public:
12770   enum Spelling {
12771     GNU_stdcall = 0,
12772     CXX11_gnu_stdcall = 1,
12773     C23_gnu_stdcall = 2,
12774     Keyword_stdcall = 3,
12775   SpellingNotCalculated = 15
12776 
12777   };
12778 
12779   // Factory methods
12780   static StdCallAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
12781   static StdCallAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
12782   static StdCallAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_stdcall);
12783   static StdCallAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_stdcall);
12784 
12785   // Constructors
12786   StdCallAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12787              );
12788 
12789   StdCallAttr *clone(ASTContext &C) const;
12790   void printPretty(raw_ostream &OS,
12791                    const PrintingPolicy &Policy) const;
12792   const char *getSpelling() const;
12793 
12794 
12795   static bool classof(const Attr *A) { return A->getKind() == attr::StdCall; }
12796 };
12797 
12798 class CLANG_ABI StrictFPAttr : public InheritableAttr {
12799 public:
12800   // Factory methods
12801   static StrictFPAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
12802   static StrictFPAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
12803   static StrictFPAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
12804   static StrictFPAttr *Create(ASTContext &Ctx, SourceRange Range = {});
12805 
12806   // Constructors
12807   StrictFPAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12808              );
12809 
12810   StrictFPAttr *clone(ASTContext &C) const;
12811   void printPretty(raw_ostream &OS,
12812                    const PrintingPolicy &Policy) const;
12813   const char *getSpelling() const;
12814 
12815 
12816   static bool classof(const Attr *A) { return A->getKind() == attr::StrictFP; }
12817 };
12818 
12819 class CLANG_ABI StrictGuardStackCheckAttr : public InheritableAttr {
12820 public:
12821   // Factory methods
12822   static StrictGuardStackCheckAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
12823   static StrictGuardStackCheckAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
12824   static StrictGuardStackCheckAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
12825   static StrictGuardStackCheckAttr *Create(ASTContext &Ctx, SourceRange Range = {});
12826 
12827   // Constructors
12828   StrictGuardStackCheckAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12829              );
12830 
12831   StrictGuardStackCheckAttr *clone(ASTContext &C) const;
12832   void printPretty(raw_ostream &OS,
12833                    const PrintingPolicy &Policy) const;
12834   const char *getSpelling() const;
12835 
12836 
12837   static bool classof(const Attr *A) { return A->getKind() == attr::StrictGuardStackCheck; }
12838 };
12839 
12840 class CLANG_ABI SuppressAttr : public DeclOrStmtAttr {
12841   unsigned diagnosticIdentifiers_Size;
12842   StringRef *diagnosticIdentifiers_;
12843 
12844 public:
12845   enum Spelling {
12846     CXX11_gsl_suppress = 0,
12847     GNU_suppress = 1,
12848     CXX11_clang_suppress = 2,
12849     C23_clang_suppress = 3,
12850   SpellingNotCalculated = 15
12851 
12852   };
12853 
12854   // Factory methods
12855   static SuppressAttr *CreateImplicit(ASTContext &Ctx, StringRef *DiagnosticIdentifiers, unsigned DiagnosticIdentifiersSize, const AttributeCommonInfo &CommonInfo);
12856   static SuppressAttr *Create(ASTContext &Ctx, StringRef *DiagnosticIdentifiers, unsigned DiagnosticIdentifiersSize, const AttributeCommonInfo &CommonInfo);
12857   static SuppressAttr *CreateImplicit(ASTContext &Ctx, StringRef *DiagnosticIdentifiers, unsigned DiagnosticIdentifiersSize, SourceRange Range = {}, Spelling S = CXX11_gsl_suppress);
12858   static SuppressAttr *Create(ASTContext &Ctx, StringRef *DiagnosticIdentifiers, unsigned DiagnosticIdentifiersSize, SourceRange Range = {}, Spelling S = CXX11_gsl_suppress);
12859 
12860   // Constructors
12861   SuppressAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12862               , StringRef *DiagnosticIdentifiers, unsigned DiagnosticIdentifiersSize
12863              );
12864   SuppressAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12865              );
12866 
12867   SuppressAttr *clone(ASTContext &C) const;
12868   void printPretty(raw_ostream &OS,
12869                    const PrintingPolicy &Policy) const;
12870   const char *getSpelling() const;
12871   bool isGSL() const { return getAttributeSpellingListIndex() == 0; }
12872   typedef StringRef* diagnosticIdentifiers_iterator;
12873   diagnosticIdentifiers_iterator diagnosticIdentifiers_begin() const { return diagnosticIdentifiers_; }
12874   diagnosticIdentifiers_iterator diagnosticIdentifiers_end() const { return diagnosticIdentifiers_ + diagnosticIdentifiers_Size; }
12875   unsigned diagnosticIdentifiers_size() const { return diagnosticIdentifiers_Size; }
12876   llvm::iterator_range<diagnosticIdentifiers_iterator> diagnosticIdentifiers() const { return llvm::make_range(diagnosticIdentifiers_begin(), diagnosticIdentifiers_end()); }
12877 
12878 
12879 
12880 
12881   static bool classof(const Attr *A) { return A->getKind() == attr::Suppress; }
12882 };
12883 
12884 class CLANG_ABI SwiftAsyncAttr : public InheritableAttr {
12885 public:
12886   enum Kind {
12887     None,
12888     SwiftPrivate,
12889     NotSwiftPrivate
12890   };
12891 private:
12892   SwiftAsyncAttr::Kind kind;
12893 
12894 ParamIdx completionHandlerIndex;
12895 
12896 public:
12897   enum Spelling {
12898     GNU_swift_async = 0,
12899     CXX11_clang_swift_async = 1,
12900     C23_clang_swift_async = 2,
12901   SpellingNotCalculated = 15
12902 
12903   };
12904 
12905   // Factory methods
12906   static SwiftAsyncAttr *CreateImplicit(ASTContext &Ctx, SwiftAsyncAttr::Kind Kind, ParamIdx CompletionHandlerIndex, const AttributeCommonInfo &CommonInfo);
12907   static SwiftAsyncAttr *Create(ASTContext &Ctx, SwiftAsyncAttr::Kind Kind, ParamIdx CompletionHandlerIndex, const AttributeCommonInfo &CommonInfo);
12908   static SwiftAsyncAttr *CreateImplicit(ASTContext &Ctx, SwiftAsyncAttr::Kind Kind, ParamIdx CompletionHandlerIndex, SourceRange Range = {}, Spelling S = GNU_swift_async);
12909   static SwiftAsyncAttr *Create(ASTContext &Ctx, SwiftAsyncAttr::Kind Kind, ParamIdx CompletionHandlerIndex, SourceRange Range = {}, Spelling S = GNU_swift_async);
12910 
12911   // Constructors
12912   SwiftAsyncAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12913               , SwiftAsyncAttr::Kind Kind
12914               , ParamIdx CompletionHandlerIndex
12915              );
12916   SwiftAsyncAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12917               , SwiftAsyncAttr::Kind Kind
12918              );
12919 
12920   SwiftAsyncAttr *clone(ASTContext &C) const;
12921   void printPretty(raw_ostream &OS,
12922                    const PrintingPolicy &Policy) const;
12923   const char *getSpelling() const;
12924   SwiftAsyncAttr::Kind getKind() const {
12925     return kind;
12926   }
12927 
12928   static bool ConvertStrToKind(StringRef Val, SwiftAsyncAttr::Kind &Out);
12929   static const char *ConvertKindToStr(SwiftAsyncAttr::Kind Val);
12930   ParamIdx getCompletionHandlerIndex() const {
12931     return completionHandlerIndex;
12932   }
12933 
12934 
12935 
12936   static bool classof(const Attr *A) { return A->getKind() == attr::SwiftAsync; }
12937 };
12938 
12939 class CLANG_ABI SwiftAsyncCallAttr : public InheritableAttr {
12940 public:
12941   enum Spelling {
12942     GNU_swiftasynccall = 0,
12943     CXX11_clang_swiftasynccall = 1,
12944     C23_clang_swiftasynccall = 2,
12945   SpellingNotCalculated = 15
12946 
12947   };
12948 
12949   // Factory methods
12950   static SwiftAsyncCallAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
12951   static SwiftAsyncCallAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
12952   static SwiftAsyncCallAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_swiftasynccall);
12953   static SwiftAsyncCallAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_swiftasynccall);
12954 
12955   // Constructors
12956   SwiftAsyncCallAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12957              );
12958 
12959   SwiftAsyncCallAttr *clone(ASTContext &C) const;
12960   void printPretty(raw_ostream &OS,
12961                    const PrintingPolicy &Policy) const;
12962   const char *getSpelling() const;
12963 
12964 
12965   static bool classof(const Attr *A) { return A->getKind() == attr::SwiftAsyncCall; }
12966 };
12967 
12968 class CLANG_ABI SwiftAsyncContextAttr : public ParameterABIAttr {
12969 public:
12970   enum Spelling {
12971     GNU_swift_async_context = 0,
12972     CXX11_clang_swift_async_context = 1,
12973     C23_clang_swift_async_context = 2,
12974   SpellingNotCalculated = 15
12975 
12976   };
12977 
12978   // Factory methods
12979   static SwiftAsyncContextAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
12980   static SwiftAsyncContextAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
12981   static SwiftAsyncContextAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_swift_async_context);
12982   static SwiftAsyncContextAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_swift_async_context);
12983 
12984   // Constructors
12985   SwiftAsyncContextAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
12986              );
12987 
12988   SwiftAsyncContextAttr *clone(ASTContext &C) const;
12989   void printPretty(raw_ostream &OS,
12990                    const PrintingPolicy &Policy) const;
12991   const char *getSpelling() const;
12992 
12993 
12994   static bool classof(const Attr *A) { return A->getKind() == attr::SwiftAsyncContext; }
12995 };
12996 
12997 class CLANG_ABI SwiftAsyncErrorAttr : public InheritableAttr {
12998 public:
12999   enum ConventionKind {
13000     None,
13001     NonNullError,
13002     ZeroArgument,
13003     NonZeroArgument
13004   };
13005 private:
13006   SwiftAsyncErrorAttr::ConventionKind convention;
13007 
13008 unsigned handlerParamIdx;
13009 
13010 public:
13011   enum Spelling {
13012     GNU_swift_async_error = 0,
13013     CXX11_clang_swift_async_error = 1,
13014     C23_clang_swift_async_error = 2,
13015   SpellingNotCalculated = 15
13016 
13017   };
13018 
13019   // Factory methods
13020   static SwiftAsyncErrorAttr *CreateImplicit(ASTContext &Ctx, SwiftAsyncErrorAttr::ConventionKind Convention, unsigned HandlerParamIdx, const AttributeCommonInfo &CommonInfo);
13021   static SwiftAsyncErrorAttr *Create(ASTContext &Ctx, SwiftAsyncErrorAttr::ConventionKind Convention, unsigned HandlerParamIdx, const AttributeCommonInfo &CommonInfo);
13022   static SwiftAsyncErrorAttr *CreateImplicit(ASTContext &Ctx, SwiftAsyncErrorAttr::ConventionKind Convention, unsigned HandlerParamIdx, SourceRange Range = {}, Spelling S = GNU_swift_async_error);
13023   static SwiftAsyncErrorAttr *Create(ASTContext &Ctx, SwiftAsyncErrorAttr::ConventionKind Convention, unsigned HandlerParamIdx, SourceRange Range = {}, Spelling S = GNU_swift_async_error);
13024 
13025   // Constructors
13026   SwiftAsyncErrorAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
13027               , SwiftAsyncErrorAttr::ConventionKind Convention
13028               , unsigned HandlerParamIdx
13029              );
13030   SwiftAsyncErrorAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
13031               , SwiftAsyncErrorAttr::ConventionKind Convention
13032              );
13033 
13034   SwiftAsyncErrorAttr *clone(ASTContext &C) const;
13035   void printPretty(raw_ostream &OS,
13036                    const PrintingPolicy &Policy) const;
13037   const char *getSpelling() const;
13038   SwiftAsyncErrorAttr::ConventionKind getConvention() const {
13039     return convention;
13040   }
13041 
13042   static bool ConvertStrToConventionKind(StringRef Val, SwiftAsyncErrorAttr::ConventionKind &Out);
13043   static const char *ConvertConventionKindToStr(SwiftAsyncErrorAttr::ConventionKind Val);
13044   unsigned getHandlerParamIdx() const {
13045     return handlerParamIdx;
13046   }
13047 
13048 
13049 
13050   static bool classof(const Attr *A) { return A->getKind() == attr::SwiftAsyncError; }
13051 };
13052 
13053 class CLANG_ABI SwiftAsyncNameAttr : public InheritableAttr {
13054 unsigned nameLength;
13055 char *name;
13056 
13057 public:
13058   // Factory methods
13059   static SwiftAsyncNameAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo);
13060   static SwiftAsyncNameAttr *Create(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo);
13061   static SwiftAsyncNameAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range = {});
13062   static SwiftAsyncNameAttr *Create(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range = {});
13063 
13064   // Constructors
13065   SwiftAsyncNameAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
13066               , llvm::StringRef Name
13067              );
13068 
13069   SwiftAsyncNameAttr *clone(ASTContext &C) const;
13070   void printPretty(raw_ostream &OS,
13071                    const PrintingPolicy &Policy) const;
13072   const char *getSpelling() const;
13073   llvm::StringRef getName() const {
13074     return llvm::StringRef(name, nameLength);
13075   }
13076   unsigned getNameLength() const {
13077     return nameLength;
13078   }
13079   void setName(ASTContext &C, llvm::StringRef S) {
13080     nameLength = S.size();
13081     this->name = new (C, 1) char [nameLength];
13082     if (!S.empty())
13083       std::memcpy(this->name, S.data(), nameLength);
13084   }
13085 
13086 
13087 
13088   static bool classof(const Attr *A) { return A->getKind() == attr::SwiftAsyncName; }
13089 };
13090 
13091 class CLANG_ABI SwiftAttrAttr : public InheritableAttr {
13092 unsigned attributeLength;
13093 char *attribute;
13094 
13095 public:
13096   // Factory methods
13097   static SwiftAttrAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Attribute, const AttributeCommonInfo &CommonInfo);
13098   static SwiftAttrAttr *Create(ASTContext &Ctx, llvm::StringRef Attribute, const AttributeCommonInfo &CommonInfo);
13099   static SwiftAttrAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Attribute, SourceRange Range = {});
13100   static SwiftAttrAttr *Create(ASTContext &Ctx, llvm::StringRef Attribute, SourceRange Range = {});
13101 
13102   // Constructors
13103   SwiftAttrAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
13104               , llvm::StringRef Attribute
13105              );
13106 
13107   SwiftAttrAttr *clone(ASTContext &C) const;
13108   void printPretty(raw_ostream &OS,
13109                    const PrintingPolicy &Policy) const;
13110   const char *getSpelling() const;
13111   llvm::StringRef getAttribute() const {
13112     return llvm::StringRef(attribute, attributeLength);
13113   }
13114   unsigned getAttributeLength() const {
13115     return attributeLength;
13116   }
13117   void setAttribute(ASTContext &C, llvm::StringRef S) {
13118     attributeLength = S.size();
13119     this->attribute = new (C, 1) char [attributeLength];
13120     if (!S.empty())
13121       std::memcpy(this->attribute, S.data(), attributeLength);
13122   }
13123 
13124 
13125 
13126   static bool classof(const Attr *A) { return A->getKind() == attr::SwiftAttr; }
13127 };
13128 
13129 class CLANG_ABI SwiftBridgeAttr : public InheritableAttr {
13130 unsigned swiftTypeLength;
13131 char *swiftType;
13132 
13133 public:
13134   // Factory methods
13135   static SwiftBridgeAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef SwiftType, const AttributeCommonInfo &CommonInfo);
13136   static SwiftBridgeAttr *Create(ASTContext &Ctx, llvm::StringRef SwiftType, const AttributeCommonInfo &CommonInfo);
13137   static SwiftBridgeAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef SwiftType, SourceRange Range = {});
13138   static SwiftBridgeAttr *Create(ASTContext &Ctx, llvm::StringRef SwiftType, SourceRange Range = {});
13139 
13140   // Constructors
13141   SwiftBridgeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
13142               , llvm::StringRef SwiftType
13143              );
13144 
13145   SwiftBridgeAttr *clone(ASTContext &C) const;
13146   void printPretty(raw_ostream &OS,
13147                    const PrintingPolicy &Policy) const;
13148   const char *getSpelling() const;
13149   llvm::StringRef getSwiftType() const {
13150     return llvm::StringRef(swiftType, swiftTypeLength);
13151   }
13152   unsigned getSwiftTypeLength() const {
13153     return swiftTypeLength;
13154   }
13155   void setSwiftType(ASTContext &C, llvm::StringRef S) {
13156     swiftTypeLength = S.size();
13157     this->swiftType = new (C, 1) char [swiftTypeLength];
13158     if (!S.empty())
13159       std::memcpy(this->swiftType, S.data(), swiftTypeLength);
13160   }
13161 
13162 
13163 
13164   static bool classof(const Attr *A) { return A->getKind() == attr::SwiftBridge; }
13165 };
13166 
13167 class CLANG_ABI SwiftBridgedTypedefAttr : public InheritableAttr {
13168 public:
13169   // Factory methods
13170   static SwiftBridgedTypedefAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
13171   static SwiftBridgedTypedefAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
13172   static SwiftBridgedTypedefAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
13173   static SwiftBridgedTypedefAttr *Create(ASTContext &Ctx, SourceRange Range = {});
13174 
13175   // Constructors
13176   SwiftBridgedTypedefAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
13177              );
13178 
13179   SwiftBridgedTypedefAttr *clone(ASTContext &C) const;
13180   void printPretty(raw_ostream &OS,
13181                    const PrintingPolicy &Policy) const;
13182   const char *getSpelling() const;
13183 
13184 
13185   static bool classof(const Attr *A) { return A->getKind() == attr::SwiftBridgedTypedef; }
13186 };
13187 
13188 class CLANG_ABI SwiftCallAttr : public InheritableAttr {
13189 public:
13190   enum Spelling {
13191     GNU_swiftcall = 0,
13192     CXX11_clang_swiftcall = 1,
13193     C23_clang_swiftcall = 2,
13194   SpellingNotCalculated = 15
13195 
13196   };
13197 
13198   // Factory methods
13199   static SwiftCallAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
13200   static SwiftCallAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
13201   static SwiftCallAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_swiftcall);
13202   static SwiftCallAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_swiftcall);
13203 
13204   // Constructors
13205   SwiftCallAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
13206              );
13207 
13208   SwiftCallAttr *clone(ASTContext &C) const;
13209   void printPretty(raw_ostream &OS,
13210                    const PrintingPolicy &Policy) const;
13211   const char *getSpelling() const;
13212 
13213 
13214   static bool classof(const Attr *A) { return A->getKind() == attr::SwiftCall; }
13215 };
13216 
13217 class CLANG_ABI SwiftContextAttr : public ParameterABIAttr {
13218 public:
13219   enum Spelling {
13220     GNU_swift_context = 0,
13221     CXX11_clang_swift_context = 1,
13222     C23_clang_swift_context = 2,
13223   SpellingNotCalculated = 15
13224 
13225   };
13226 
13227   // Factory methods
13228   static SwiftContextAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
13229   static SwiftContextAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
13230   static SwiftContextAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_swift_context);
13231   static SwiftContextAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_swift_context);
13232 
13233   // Constructors
13234   SwiftContextAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
13235              );
13236 
13237   SwiftContextAttr *clone(ASTContext &C) const;
13238   void printPretty(raw_ostream &OS,
13239                    const PrintingPolicy &Policy) const;
13240   const char *getSpelling() const;
13241 
13242 
13243   static bool classof(const Attr *A) { return A->getKind() == attr::SwiftContext; }
13244 };
13245 
13246 class CLANG_ABI SwiftErrorAttr : public InheritableAttr {
13247 public:
13248   enum ConventionKind {
13249     None,
13250     NonNullError,
13251     NullResult,
13252     ZeroResult,
13253     NonZeroResult
13254   };
13255 private:
13256   SwiftErrorAttr::ConventionKind convention;
13257 
13258 public:
13259   // Factory methods
13260   static SwiftErrorAttr *CreateImplicit(ASTContext &Ctx, SwiftErrorAttr::ConventionKind Convention, const AttributeCommonInfo &CommonInfo);
13261   static SwiftErrorAttr *Create(ASTContext &Ctx, SwiftErrorAttr::ConventionKind Convention, const AttributeCommonInfo &CommonInfo);
13262   static SwiftErrorAttr *CreateImplicit(ASTContext &Ctx, SwiftErrorAttr::ConventionKind Convention, SourceRange Range = {});
13263   static SwiftErrorAttr *Create(ASTContext &Ctx, SwiftErrorAttr::ConventionKind Convention, SourceRange Range = {});
13264 
13265   // Constructors
13266   SwiftErrorAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
13267               , SwiftErrorAttr::ConventionKind Convention
13268              );
13269 
13270   SwiftErrorAttr *clone(ASTContext &C) const;
13271   void printPretty(raw_ostream &OS,
13272                    const PrintingPolicy &Policy) const;
13273   const char *getSpelling() const;
13274   SwiftErrorAttr::ConventionKind getConvention() const {
13275     return convention;
13276   }
13277 
13278   static bool ConvertStrToConventionKind(StringRef Val, SwiftErrorAttr::ConventionKind &Out);
13279   static const char *ConvertConventionKindToStr(SwiftErrorAttr::ConventionKind Val);
13280 
13281 
13282   static bool classof(const Attr *A) { return A->getKind() == attr::SwiftError; }
13283 };
13284 
13285 class CLANG_ABI SwiftErrorResultAttr : public ParameterABIAttr {
13286 public:
13287   enum Spelling {
13288     GNU_swift_error_result = 0,
13289     CXX11_clang_swift_error_result = 1,
13290     C23_clang_swift_error_result = 2,
13291   SpellingNotCalculated = 15
13292 
13293   };
13294 
13295   // Factory methods
13296   static SwiftErrorResultAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
13297   static SwiftErrorResultAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
13298   static SwiftErrorResultAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_swift_error_result);
13299   static SwiftErrorResultAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_swift_error_result);
13300 
13301   // Constructors
13302   SwiftErrorResultAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
13303              );
13304 
13305   SwiftErrorResultAttr *clone(ASTContext &C) const;
13306   void printPretty(raw_ostream &OS,
13307                    const PrintingPolicy &Policy) const;
13308   const char *getSpelling() const;
13309 
13310 
13311   static bool classof(const Attr *A) { return A->getKind() == attr::SwiftErrorResult; }
13312 };
13313 
13314 class CLANG_ABI SwiftImportAsNonGenericAttr : public InheritableAttr {
13315 public:
13316   // Factory methods
13317   static SwiftImportAsNonGenericAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
13318   static SwiftImportAsNonGenericAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
13319   static SwiftImportAsNonGenericAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
13320   static SwiftImportAsNonGenericAttr *Create(ASTContext &Ctx, SourceRange Range = {});
13321 
13322   // Constructors
13323   SwiftImportAsNonGenericAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
13324              );
13325 
13326   SwiftImportAsNonGenericAttr *clone(ASTContext &C) const;
13327   void printPretty(raw_ostream &OS,
13328                    const PrintingPolicy &Policy) const;
13329   const char *getSpelling() const;
13330 
13331 
13332   static bool classof(const Attr *A) { return A->getKind() == attr::SwiftImportAsNonGeneric; }
13333 };
13334 
13335 class CLANG_ABI SwiftImportPropertyAsAccessorsAttr : public InheritableAttr {
13336 public:
13337   // Factory methods
13338   static SwiftImportPropertyAsAccessorsAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
13339   static SwiftImportPropertyAsAccessorsAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
13340   static SwiftImportPropertyAsAccessorsAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
13341   static SwiftImportPropertyAsAccessorsAttr *Create(ASTContext &Ctx, SourceRange Range = {});
13342 
13343   // Constructors
13344   SwiftImportPropertyAsAccessorsAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
13345              );
13346 
13347   SwiftImportPropertyAsAccessorsAttr *clone(ASTContext &C) const;
13348   void printPretty(raw_ostream &OS,
13349                    const PrintingPolicy &Policy) const;
13350   const char *getSpelling() const;
13351 
13352 
13353   static bool classof(const Attr *A) { return A->getKind() == attr::SwiftImportPropertyAsAccessors; }
13354 };
13355 
13356 class CLANG_ABI SwiftIndirectResultAttr : public ParameterABIAttr {
13357 public:
13358   enum Spelling {
13359     GNU_swift_indirect_result = 0,
13360     CXX11_clang_swift_indirect_result = 1,
13361     C23_clang_swift_indirect_result = 2,
13362   SpellingNotCalculated = 15
13363 
13364   };
13365 
13366   // Factory methods
13367   static SwiftIndirectResultAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
13368   static SwiftIndirectResultAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
13369   static SwiftIndirectResultAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_swift_indirect_result);
13370   static SwiftIndirectResultAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_swift_indirect_result);
13371 
13372   // Constructors
13373   SwiftIndirectResultAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
13374              );
13375 
13376   SwiftIndirectResultAttr *clone(ASTContext &C) const;
13377   void printPretty(raw_ostream &OS,
13378                    const PrintingPolicy &Policy) const;
13379   const char *getSpelling() const;
13380 
13381 
13382   static bool classof(const Attr *A) { return A->getKind() == attr::SwiftIndirectResult; }
13383 };
13384 
13385 class CLANG_ABI SwiftNameAttr : public InheritableAttr {
13386 unsigned nameLength;
13387 char *name;
13388 
13389 public:
13390   // Factory methods
13391   static SwiftNameAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo);
13392   static SwiftNameAttr *Create(ASTContext &Ctx, llvm::StringRef Name, const AttributeCommonInfo &CommonInfo);
13393   static SwiftNameAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range = {});
13394   static SwiftNameAttr *Create(ASTContext &Ctx, llvm::StringRef Name, SourceRange Range = {});
13395 
13396   // Constructors
13397   SwiftNameAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
13398               , llvm::StringRef Name
13399              );
13400 
13401   SwiftNameAttr *clone(ASTContext &C) const;
13402   void printPretty(raw_ostream &OS,
13403                    const PrintingPolicy &Policy) const;
13404   const char *getSpelling() const;
13405   llvm::StringRef getName() const {
13406     return llvm::StringRef(name, nameLength);
13407   }
13408   unsigned getNameLength() const {
13409     return nameLength;
13410   }
13411   void setName(ASTContext &C, llvm::StringRef S) {
13412     nameLength = S.size();
13413     this->name = new (C, 1) char [nameLength];
13414     if (!S.empty())
13415       std::memcpy(this->name, S.data(), nameLength);
13416   }
13417 
13418 
13419 
13420   static bool classof(const Attr *A) { return A->getKind() == attr::SwiftName; }
13421 };
13422 
13423 class CLANG_ABI SwiftNewTypeAttr : public InheritableAttr {
13424 public:
13425   enum NewtypeKind {
13426     NK_Struct,
13427     NK_Enum
13428   };
13429 private:
13430   SwiftNewTypeAttr::NewtypeKind newtypeKind;
13431 
13432 public:
13433   enum Spelling {
13434     GNU_swift_newtype = 0,
13435     GNU_swift_wrapper = 1,
13436   SpellingNotCalculated = 15
13437 
13438   };
13439 
13440   // Factory methods
13441   static SwiftNewTypeAttr *CreateImplicit(ASTContext &Ctx, SwiftNewTypeAttr::NewtypeKind NewtypeKind, const AttributeCommonInfo &CommonInfo);
13442   static SwiftNewTypeAttr *Create(ASTContext &Ctx, SwiftNewTypeAttr::NewtypeKind NewtypeKind, const AttributeCommonInfo &CommonInfo);
13443   static SwiftNewTypeAttr *CreateImplicit(ASTContext &Ctx, SwiftNewTypeAttr::NewtypeKind NewtypeKind, SourceRange Range = {}, Spelling S = GNU_swift_newtype);
13444   static SwiftNewTypeAttr *Create(ASTContext &Ctx, SwiftNewTypeAttr::NewtypeKind NewtypeKind, SourceRange Range = {}, Spelling S = GNU_swift_newtype);
13445 
13446   // Constructors
13447   SwiftNewTypeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
13448               , SwiftNewTypeAttr::NewtypeKind NewtypeKind
13449              );
13450 
13451   SwiftNewTypeAttr *clone(ASTContext &C) const;
13452   void printPretty(raw_ostream &OS,
13453                    const PrintingPolicy &Policy) const;
13454   const char *getSpelling() const;
13455   Spelling getSemanticSpelling() const;
13456   SwiftNewTypeAttr::NewtypeKind getNewtypeKind() const {
13457     return newtypeKind;
13458   }
13459 
13460   static bool ConvertStrToNewtypeKind(StringRef Val, SwiftNewTypeAttr::NewtypeKind &Out);
13461   static const char *ConvertNewtypeKindToStr(SwiftNewTypeAttr::NewtypeKind Val);
13462 
13463 
13464   static bool classof(const Attr *A) { return A->getKind() == attr::SwiftNewType; }
13465 };
13466 
13467 class CLANG_ABI SwiftObjCMembersAttr : public Attr {
13468 public:
13469   // Factory methods
13470   static SwiftObjCMembersAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
13471   static SwiftObjCMembersAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
13472   static SwiftObjCMembersAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
13473   static SwiftObjCMembersAttr *Create(ASTContext &Ctx, SourceRange Range = {});
13474 
13475   // Constructors
13476   SwiftObjCMembersAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
13477              );
13478 
13479   SwiftObjCMembersAttr *clone(ASTContext &C) const;
13480   void printPretty(raw_ostream &OS,
13481                    const PrintingPolicy &Policy) const;
13482   const char *getSpelling() const;
13483 
13484 
13485   static bool classof(const Attr *A) { return A->getKind() == attr::SwiftObjCMembers; }
13486 };
13487 
13488 class CLANG_ABI SwiftPrivateAttr : public InheritableAttr {
13489 public:
13490   // Factory methods
13491   static SwiftPrivateAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
13492   static SwiftPrivateAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
13493   static SwiftPrivateAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
13494   static SwiftPrivateAttr *Create(ASTContext &Ctx, SourceRange Range = {});
13495 
13496   // Constructors
13497   SwiftPrivateAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
13498              );
13499 
13500   SwiftPrivateAttr *clone(ASTContext &C) const;
13501   void printPretty(raw_ostream &OS,
13502                    const PrintingPolicy &Policy) const;
13503   const char *getSpelling() const;
13504 
13505 
13506   static bool classof(const Attr *A) { return A->getKind() == attr::SwiftPrivate; }
13507 };
13508 
13509 class CLANG_ABI SwiftVersionedAdditionAttr : public Attr {
13510 VersionTuple version;
13511 
13512 
13513 Attr * additionalAttr;
13514 
13515 bool isReplacedByActive;
13516 
13517 public:
13518   // Factory methods
13519   static SwiftVersionedAdditionAttr *CreateImplicit(ASTContext &Ctx, VersionTuple Version, Attr * AdditionalAttr, bool IsReplacedByActive, const AttributeCommonInfo &CommonInfo);
13520   static SwiftVersionedAdditionAttr *Create(ASTContext &Ctx, VersionTuple Version, Attr * AdditionalAttr, bool IsReplacedByActive, const AttributeCommonInfo &CommonInfo);
13521   static SwiftVersionedAdditionAttr *CreateImplicit(ASTContext &Ctx, VersionTuple Version, Attr * AdditionalAttr, bool IsReplacedByActive, SourceRange Range = {});
13522   static SwiftVersionedAdditionAttr *Create(ASTContext &Ctx, VersionTuple Version, Attr * AdditionalAttr, bool IsReplacedByActive, SourceRange Range = {});
13523 
13524   // Constructors
13525   SwiftVersionedAdditionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
13526               , VersionTuple Version
13527               , Attr * AdditionalAttr
13528               , bool IsReplacedByActive
13529              );
13530 
13531   SwiftVersionedAdditionAttr *clone(ASTContext &C) const;
13532   void printPretty(raw_ostream &OS,
13533                    const PrintingPolicy &Policy) const;
13534   const char *getSpelling() const;
13535   VersionTuple getVersion() const {
13536     return version;
13537   }
13538   void setVersion(ASTContext &C, VersionTuple V) {
13539     version = V;
13540   }
13541 
13542   Attr * getAdditionalAttr() const {
13543     return additionalAttr;
13544   }
13545 
13546   bool getIsReplacedByActive() const {
13547     return isReplacedByActive;
13548   }
13549 
13550 
13551 
13552   static bool classof(const Attr *A) { return A->getKind() == attr::SwiftVersionedAddition; }
13553 };
13554 
13555 class CLANG_ABI SwiftVersionedRemovalAttr : public Attr {
13556 VersionTuple version;
13557 
13558 
13559 unsigned rawKind;
13560 
13561 bool isReplacedByActive;
13562 
13563 public:
13564   // Factory methods
13565   static SwiftVersionedRemovalAttr *CreateImplicit(ASTContext &Ctx, VersionTuple Version, unsigned RawKind, bool IsReplacedByActive, const AttributeCommonInfo &CommonInfo);
13566   static SwiftVersionedRemovalAttr *Create(ASTContext &Ctx, VersionTuple Version, unsigned RawKind, bool IsReplacedByActive, const AttributeCommonInfo &CommonInfo);
13567   static SwiftVersionedRemovalAttr *CreateImplicit(ASTContext &Ctx, VersionTuple Version, unsigned RawKind, bool IsReplacedByActive, SourceRange Range = {});
13568   static SwiftVersionedRemovalAttr *Create(ASTContext &Ctx, VersionTuple Version, unsigned RawKind, bool IsReplacedByActive, SourceRange Range = {});
13569 
13570   // Constructors
13571   SwiftVersionedRemovalAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
13572               , VersionTuple Version
13573               , unsigned RawKind
13574               , bool IsReplacedByActive
13575              );
13576 
13577   SwiftVersionedRemovalAttr *clone(ASTContext &C) const;
13578   void printPretty(raw_ostream &OS,
13579                    const PrintingPolicy &Policy) const;
13580   const char *getSpelling() const;
13581   VersionTuple getVersion() const {
13582     return version;
13583   }
13584   void setVersion(ASTContext &C, VersionTuple V) {
13585     version = V;
13586   }
13587 
13588   unsigned getRawKind() const {
13589     return rawKind;
13590   }
13591 
13592   bool getIsReplacedByActive() const {
13593     return isReplacedByActive;
13594   }
13595 
13596 
13597     attr::Kind getAttrKindToRemove() const {
13598       return static_cast<attr::Kind>(getRawKind());
13599     }
13600   
13601 
13602   static bool classof(const Attr *A) { return A->getKind() == attr::SwiftVersionedRemoval; }
13603 };
13604 
13605 class CLANG_ABI SysVABIAttr : public InheritableAttr {
13606 public:
13607   enum Spelling {
13608     GNU_sysv_abi = 0,
13609     CXX11_gnu_sysv_abi = 1,
13610     C23_gnu_sysv_abi = 2,
13611   SpellingNotCalculated = 15
13612 
13613   };
13614 
13615   // Factory methods
13616   static SysVABIAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
13617   static SysVABIAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
13618   static SysVABIAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_sysv_abi);
13619   static SysVABIAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_sysv_abi);
13620 
13621   // Constructors
13622   SysVABIAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
13623              );
13624 
13625   SysVABIAttr *clone(ASTContext &C) const;
13626   void printPretty(raw_ostream &OS,
13627                    const PrintingPolicy &Policy) const;
13628   const char *getSpelling() const;
13629 
13630 
13631   static bool classof(const Attr *A) { return A->getKind() == attr::SysVABI; }
13632 };
13633 
13634 class CLANG_ABI TLSModelAttr : public InheritableAttr {
13635 unsigned modelLength;
13636 char *model;
13637 
13638 public:
13639   enum Spelling {
13640     GNU_tls_model = 0,
13641     CXX11_gnu_tls_model = 1,
13642     C23_gnu_tls_model = 2,
13643   SpellingNotCalculated = 15
13644 
13645   };
13646 
13647   // Factory methods
13648   static TLSModelAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Model, const AttributeCommonInfo &CommonInfo);
13649   static TLSModelAttr *Create(ASTContext &Ctx, llvm::StringRef Model, const AttributeCommonInfo &CommonInfo);
13650   static TLSModelAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Model, SourceRange Range = {}, Spelling S = GNU_tls_model);
13651   static TLSModelAttr *Create(ASTContext &Ctx, llvm::StringRef Model, SourceRange Range = {}, Spelling S = GNU_tls_model);
13652 
13653   // Constructors
13654   TLSModelAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
13655               , llvm::StringRef Model
13656              );
13657 
13658   TLSModelAttr *clone(ASTContext &C) const;
13659   void printPretty(raw_ostream &OS,
13660                    const PrintingPolicy &Policy) const;
13661   const char *getSpelling() const;
13662   llvm::StringRef getModel() const {
13663     return llvm::StringRef(model, modelLength);
13664   }
13665   unsigned getModelLength() const {
13666     return modelLength;
13667   }
13668   void setModel(ASTContext &C, llvm::StringRef S) {
13669     modelLength = S.size();
13670     this->model = new (C, 1) char [modelLength];
13671     if (!S.empty())
13672       std::memcpy(this->model, S.data(), modelLength);
13673   }
13674 
13675 
13676 
13677   static bool classof(const Attr *A) { return A->getKind() == attr::TLSModel; }
13678 };
13679 
13680 class CLANG_ABI TargetAttr : public InheritableAttr {
13681 unsigned featuresStrLength;
13682 char *featuresStr;
13683 
13684 public:
13685   enum Spelling {
13686     GNU_target = 0,
13687     CXX11_gnu_target = 1,
13688     C23_gnu_target = 2,
13689   SpellingNotCalculated = 15
13690 
13691   };
13692 
13693   // Factory methods
13694   static TargetAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef FeaturesStr, const AttributeCommonInfo &CommonInfo);
13695   static TargetAttr *Create(ASTContext &Ctx, llvm::StringRef FeaturesStr, const AttributeCommonInfo &CommonInfo);
13696   static TargetAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef FeaturesStr, SourceRange Range = {}, Spelling S = GNU_target);
13697   static TargetAttr *Create(ASTContext &Ctx, llvm::StringRef FeaturesStr, SourceRange Range = {}, Spelling S = GNU_target);
13698 
13699   // Constructors
13700   TargetAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
13701               , llvm::StringRef FeaturesStr
13702              );
13703 
13704   TargetAttr *clone(ASTContext &C) const;
13705   void printPretty(raw_ostream &OS,
13706                    const PrintingPolicy &Policy) const;
13707   const char *getSpelling() const;
13708   llvm::StringRef getFeaturesStr() const {
13709     return llvm::StringRef(featuresStr, featuresStrLength);
13710   }
13711   unsigned getFeaturesStrLength() const {
13712     return featuresStrLength;
13713   }
13714   void setFeaturesStr(ASTContext &C, llvm::StringRef S) {
13715     featuresStrLength = S.size();
13716     this->featuresStr = new (C, 1) char [featuresStrLength];
13717     if (!S.empty())
13718       std::memcpy(this->featuresStr, S.data(), featuresStrLength);
13719   }
13720 
13721 
13722     std::optional<StringRef> getX86Architecture() const {
13723       StringRef Features = getFeaturesStr();
13724       SmallVector<StringRef, 4> AttrFeatures;
13725       Features.split(AttrFeatures, ',');
13726       for (StringRef Feature : AttrFeatures) {
13727         Feature = Feature.trim();
13728         if (Feature.starts_with("arch="))
13729           return Feature.drop_front(sizeof("arch=") - 1);
13730       }
13731       return std::nullopt;
13732     }
13733 
13734     // Gets the list of features as simple string-refs with no +/- or 'no-'.
13735     // Only adds the items to 'Out' that are additions.
13736     void getX86AddedFeatures(llvm::SmallVectorImpl<StringRef> &Out) const {
13737       if (isDefaultVersion())
13738         return;
13739       StringRef Features = getFeaturesStr();
13740       SmallVector<StringRef, 4> AttrFeatures;
13741       Features.split(AttrFeatures, ',');
13742       for (auto &Feature : AttrFeatures) {
13743         Feature = Feature.trim();
13744         if (!Feature.starts_with("no-") && !Feature.starts_with("arch=") &&
13745             !Feature.starts_with("fpmath=") && !Feature.starts_with("tune="))
13746           Out.push_back(Feature);
13747       }
13748     }
13749 
13750     bool isDefaultVersion() const { return getFeaturesStr() == "default"; }
13751   
13752 
13753   static bool classof(const Attr *A) { return A->getKind() == attr::Target; }
13754 };
13755 
13756 class CLANG_ABI TargetClonesAttr : public InheritableAttr {
13757   unsigned featuresStrs_Size;
13758   StringRef *featuresStrs_;
13759 
13760 public:
13761   enum Spelling {
13762     GNU_target_clones = 0,
13763     CXX11_gnu_target_clones = 1,
13764     C23_gnu_target_clones = 2,
13765   SpellingNotCalculated = 15
13766 
13767   };
13768 
13769   // Factory methods
13770   static TargetClonesAttr *CreateImplicit(ASTContext &Ctx, StringRef *FeaturesStrs, unsigned FeaturesStrsSize, const AttributeCommonInfo &CommonInfo);
13771   static TargetClonesAttr *Create(ASTContext &Ctx, StringRef *FeaturesStrs, unsigned FeaturesStrsSize, const AttributeCommonInfo &CommonInfo);
13772   static TargetClonesAttr *CreateImplicit(ASTContext &Ctx, StringRef *FeaturesStrs, unsigned FeaturesStrsSize, SourceRange Range = {}, Spelling S = GNU_target_clones);
13773   static TargetClonesAttr *Create(ASTContext &Ctx, StringRef *FeaturesStrs, unsigned FeaturesStrsSize, SourceRange Range = {}, Spelling S = GNU_target_clones);
13774 
13775   // Constructors
13776   TargetClonesAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
13777               , StringRef *FeaturesStrs, unsigned FeaturesStrsSize
13778              );
13779   TargetClonesAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
13780              );
13781 
13782   TargetClonesAttr *clone(ASTContext &C) const;
13783   void printPretty(raw_ostream &OS,
13784                    const PrintingPolicy &Policy) const;
13785   const char *getSpelling() const;
13786   typedef StringRef* featuresStrs_iterator;
13787   featuresStrs_iterator featuresStrs_begin() const { return featuresStrs_; }
13788   featuresStrs_iterator featuresStrs_end() const { return featuresStrs_ + featuresStrs_Size; }
13789   unsigned featuresStrs_size() const { return featuresStrs_Size; }
13790   llvm::iterator_range<featuresStrs_iterator> featuresStrs() const { return llvm::make_range(featuresStrs_begin(), featuresStrs_end()); }
13791 
13792 
13793 
13794     StringRef getFeatureStr(unsigned Index) const {
13795       return *(featuresStrs_begin() + Index);
13796     }
13797 
13798     bool isDefaultVersion(unsigned Index) const {
13799       return getFeatureStr(Index) == "default";
13800     }
13801 
13802     void getFeatures(llvm::SmallVectorImpl<StringRef> &Out,
13803                      unsigned Index, char Delim = '+') const {
13804       if (isDefaultVersion(Index))
13805         return;
13806       StringRef Features = getFeatureStr(Index);
13807       SmallVector<StringRef, 4> AttrFeatures;
13808       Features.split(AttrFeatures, Delim);
13809       for (StringRef Feature : AttrFeatures) {
13810         Feature = Feature.trim();
13811         Out.push_back(Feature);
13812       }
13813     }
13814 
13815     std::optional<StringRef> getX86Architecture(unsigned Index) const {
13816       StringRef Feature = getFeatureStr(Index);
13817       if (Feature.starts_with("arch="))
13818         return Feature.drop_front(sizeof("arch=") - 1);
13819       return std::nullopt;
13820     }
13821 
13822     void getX86Feature(llvm::SmallVectorImpl<StringRef> &Out,
13823                        unsigned Index) const {
13824       if (isDefaultVersion(Index))
13825         return;
13826       if (getX86Architecture(Index))
13827         return;
13828       Out.push_back(getFeatureStr(Index));
13829     }
13830 
13831     // Given an index into the 'featuresStrs' sequence, compute a unique
13832     // ID to be used with function name mangling for the associated variant.
13833     // This mapping is necessary due to a requirement that the mangling ID
13834     // used for the "default" variant be the largest mangling ID in the
13835     // variant set. Duplicate variants present in 'featuresStrs' are also
13836     // assigned their own unique ID (the mapping is bijective).
13837     unsigned getMangledIndex(unsigned Index) const {
13838       if (getFeatureStr(Index) == "default")
13839         return std::count_if(featuresStrs_begin(), featuresStrs_end(),
13840                               [](StringRef S) { return S != "default"; });
13841 
13842       return std::count_if(featuresStrs_begin(), featuresStrs_begin() + Index,
13843                            [](StringRef S) { return S != "default"; });
13844     }
13845 
13846     // Given an index into the 'featuresStrs' sequence, determine if the
13847     // index corresponds to the first instance of the named variant. This
13848     // is used to skip over duplicate variant instances when iterating over
13849     // 'featuresStrs'.
13850     bool isFirstOfVersion(unsigned Index) const {
13851       StringRef FeatureStr(getFeatureStr(Index));
13852       return 0 == std::count_if(
13853                       featuresStrs_begin(), featuresStrs_begin() + Index,
13854                       [FeatureStr](StringRef S) { return S == FeatureStr; });
13855 
13856     }
13857   
13858 
13859   static bool classof(const Attr *A) { return A->getKind() == attr::TargetClones; }
13860 };
13861 
13862 class CLANG_ABI TargetVersionAttr : public InheritableAttr {
13863 unsigned namesStrLength;
13864 char *namesStr;
13865 
13866 public:
13867   enum Spelling {
13868     GNU_target_version = 0,
13869     CXX11_gnu_target_version = 1,
13870     C23_gnu_target_version = 2,
13871   SpellingNotCalculated = 15
13872 
13873   };
13874 
13875   // Factory methods
13876   static TargetVersionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef NamesStr, const AttributeCommonInfo &CommonInfo);
13877   static TargetVersionAttr *Create(ASTContext &Ctx, llvm::StringRef NamesStr, const AttributeCommonInfo &CommonInfo);
13878   static TargetVersionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef NamesStr, SourceRange Range = {}, Spelling S = GNU_target_version);
13879   static TargetVersionAttr *Create(ASTContext &Ctx, llvm::StringRef NamesStr, SourceRange Range = {}, Spelling S = GNU_target_version);
13880 
13881   // Constructors
13882   TargetVersionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
13883               , llvm::StringRef NamesStr
13884              );
13885 
13886   TargetVersionAttr *clone(ASTContext &C) const;
13887   void printPretty(raw_ostream &OS,
13888                    const PrintingPolicy &Policy) const;
13889   const char *getSpelling() const;
13890   llvm::StringRef getNamesStr() const {
13891     return llvm::StringRef(namesStr, namesStrLength);
13892   }
13893   unsigned getNamesStrLength() const {
13894     return namesStrLength;
13895   }
13896   void setNamesStr(ASTContext &C, llvm::StringRef S) {
13897     namesStrLength = S.size();
13898     this->namesStr = new (C, 1) char [namesStrLength];
13899     if (!S.empty())
13900       std::memcpy(this->namesStr, S.data(), namesStrLength);
13901   }
13902 
13903 
13904     StringRef getName() const { return getNamesStr().trim(); }
13905 
13906     bool isDefaultVersion() const { return getName() == "default"; }
13907 
13908     void getFeatures(llvm::SmallVectorImpl<StringRef> &Out,
13909                      char Delim = '+') const {
13910       if (isDefaultVersion())
13911         return;
13912       StringRef Features = getName();
13913       SmallVector<StringRef, 4> AttrFeatures;
13914       Features.split(AttrFeatures, Delim);
13915       for (StringRef Feature : AttrFeatures) {
13916         Feature = Feature.trim();
13917         Out.push_back(Feature);
13918       }
13919     }
13920   
13921 
13922   static bool classof(const Attr *A) { return A->getKind() == attr::TargetVersion; }
13923 };
13924 
13925 class CLANG_ABI TestTypestateAttr : public InheritableAttr {
13926 public:
13927   enum ConsumedState {
13928     Consumed,
13929     Unconsumed
13930   };
13931 private:
13932   TestTypestateAttr::ConsumedState testState;
13933 
13934 public:
13935   enum Spelling {
13936     GNU_test_typestate = 0,
13937     CXX11_clang_test_typestate = 1,
13938   SpellingNotCalculated = 15
13939 
13940   };
13941 
13942   // Factory methods
13943   static TestTypestateAttr *CreateImplicit(ASTContext &Ctx, TestTypestateAttr::ConsumedState TestState, const AttributeCommonInfo &CommonInfo);
13944   static TestTypestateAttr *Create(ASTContext &Ctx, TestTypestateAttr::ConsumedState TestState, const AttributeCommonInfo &CommonInfo);
13945   static TestTypestateAttr *CreateImplicit(ASTContext &Ctx, TestTypestateAttr::ConsumedState TestState, SourceRange Range = {}, Spelling S = GNU_test_typestate);
13946   static TestTypestateAttr *Create(ASTContext &Ctx, TestTypestateAttr::ConsumedState TestState, SourceRange Range = {}, Spelling S = GNU_test_typestate);
13947 
13948   // Constructors
13949   TestTypestateAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
13950               , TestTypestateAttr::ConsumedState TestState
13951              );
13952 
13953   TestTypestateAttr *clone(ASTContext &C) const;
13954   void printPretty(raw_ostream &OS,
13955                    const PrintingPolicy &Policy) const;
13956   const char *getSpelling() const;
13957   TestTypestateAttr::ConsumedState getTestState() const {
13958     return testState;
13959   }
13960 
13961   static bool ConvertStrToConsumedState(StringRef Val, TestTypestateAttr::ConsumedState &Out);
13962   static const char *ConvertConsumedStateToStr(TestTypestateAttr::ConsumedState Val);
13963 
13964 
13965   static bool classof(const Attr *A) { return A->getKind() == attr::TestTypestate; }
13966 };
13967 
13968 class CLANG_ABI ThisCallAttr : public InheritableAttr {
13969 public:
13970   enum Spelling {
13971     GNU_thiscall = 0,
13972     CXX11_gnu_thiscall = 1,
13973     C23_gnu_thiscall = 2,
13974     Keyword_thiscall = 3,
13975   SpellingNotCalculated = 15
13976 
13977   };
13978 
13979   // Factory methods
13980   static ThisCallAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
13981   static ThisCallAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
13982   static ThisCallAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_thiscall);
13983   static ThisCallAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_thiscall);
13984 
13985   // Constructors
13986   ThisCallAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
13987              );
13988 
13989   ThisCallAttr *clone(ASTContext &C) const;
13990   void printPretty(raw_ostream &OS,
13991                    const PrintingPolicy &Policy) const;
13992   const char *getSpelling() const;
13993 
13994 
13995   static bool classof(const Attr *A) { return A->getKind() == attr::ThisCall; }
13996 };
13997 
13998 class CLANG_ABI ThreadAttr : public Attr {
13999 public:
14000   // Factory methods
14001   static ThreadAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14002   static ThreadAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14003   static ThreadAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
14004   static ThreadAttr *Create(ASTContext &Ctx, SourceRange Range = {});
14005 
14006   // Constructors
14007   ThreadAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14008              );
14009 
14010   ThreadAttr *clone(ASTContext &C) const;
14011   void printPretty(raw_ostream &OS,
14012                    const PrintingPolicy &Policy) const;
14013   const char *getSpelling() const;
14014 
14015 
14016   static bool classof(const Attr *A) { return A->getKind() == attr::Thread; }
14017 };
14018 
14019 class CLANG_ABI TransparentUnionAttr : public InheritableAttr {
14020 public:
14021   enum Spelling {
14022     GNU_transparent_union = 0,
14023     CXX11_gnu_transparent_union = 1,
14024     C23_gnu_transparent_union = 2,
14025   SpellingNotCalculated = 15
14026 
14027   };
14028 
14029   // Factory methods
14030   static TransparentUnionAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14031   static TransparentUnionAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14032   static TransparentUnionAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_transparent_union);
14033   static TransparentUnionAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_transparent_union);
14034 
14035   // Constructors
14036   TransparentUnionAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14037              );
14038 
14039   TransparentUnionAttr *clone(ASTContext &C) const;
14040   void printPretty(raw_ostream &OS,
14041                    const PrintingPolicy &Policy) const;
14042   const char *getSpelling() const;
14043 
14044 
14045   static bool classof(const Attr *A) { return A->getKind() == attr::TransparentUnion; }
14046 };
14047 
14048 class CLANG_ABI TrivialABIAttr : public InheritableAttr {
14049 public:
14050   enum Spelling {
14051     GNU_trivial_abi = 0,
14052     CXX11_clang_trivial_abi = 1,
14053   SpellingNotCalculated = 15
14054 
14055   };
14056 
14057   // Factory methods
14058   static TrivialABIAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14059   static TrivialABIAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14060   static TrivialABIAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_trivial_abi);
14061   static TrivialABIAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_trivial_abi);
14062 
14063   // Constructors
14064   TrivialABIAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14065              );
14066 
14067   TrivialABIAttr *clone(ASTContext &C) const;
14068   void printPretty(raw_ostream &OS,
14069                    const PrintingPolicy &Policy) const;
14070   const char *getSpelling() const;
14071 
14072 
14073   static bool classof(const Attr *A) { return A->getKind() == attr::TrivialABI; }
14074 };
14075 
14076 class CLANG_ABI TryAcquireCapabilityAttr : public InheritableAttr {
14077 Expr * successValue;
14078 
14079   unsigned args_Size;
14080   Expr * *args_;
14081 
14082 public:
14083   enum Spelling {
14084     GNU_try_acquire_capability = 0,
14085     CXX11_clang_try_acquire_capability = 1,
14086     GNU_try_acquire_shared_capability = 2,
14087     CXX11_clang_try_acquire_shared_capability = 3,
14088   SpellingNotCalculated = 15
14089 
14090   };
14091 
14092   // Factory methods
14093   static TryAcquireCapabilityAttr *CreateImplicit(ASTContext &Ctx, Expr * SuccessValue, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);
14094   static TryAcquireCapabilityAttr *Create(ASTContext &Ctx, Expr * SuccessValue, Expr * *Args, unsigned ArgsSize, const AttributeCommonInfo &CommonInfo);
14095   static TryAcquireCapabilityAttr *CreateImplicit(ASTContext &Ctx, Expr * SuccessValue, Expr * *Args, unsigned ArgsSize, SourceRange Range = {}, Spelling S = GNU_try_acquire_capability);
14096   static TryAcquireCapabilityAttr *Create(ASTContext &Ctx, Expr * SuccessValue, Expr * *Args, unsigned ArgsSize, SourceRange Range = {}, Spelling S = GNU_try_acquire_capability);
14097 
14098   // Constructors
14099   TryAcquireCapabilityAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14100               , Expr * SuccessValue
14101               , Expr * *Args, unsigned ArgsSize
14102              );
14103   TryAcquireCapabilityAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14104               , Expr * SuccessValue
14105              );
14106 
14107   TryAcquireCapabilityAttr *clone(ASTContext &C) const;
14108   void printPretty(raw_ostream &OS,
14109                    const PrintingPolicy &Policy) const;
14110   const char *getSpelling() const;
14111   Spelling getSemanticSpelling() const;
14112   bool isShared() const { return getAttributeSpellingListIndex() == 2 ||
14113     getAttributeSpellingListIndex() == 3; }
14114   Expr * getSuccessValue() const {
14115     return successValue;
14116   }
14117 
14118   typedef Expr ** args_iterator;
14119   args_iterator args_begin() const { return args_; }
14120   args_iterator args_end() const { return args_ + args_Size; }
14121   unsigned args_size() const { return args_Size; }
14122   llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); }
14123 
14124 
14125 
14126 
14127   static bool classof(const Attr *A) { return A->getKind() == attr::TryAcquireCapability; }
14128 };
14129 
14130 class CLANG_ABI TypeNonNullAttr : public TypeAttr {
14131 public:
14132   // Factory methods
14133   static TypeNonNullAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14134   static TypeNonNullAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14135   static TypeNonNullAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
14136   static TypeNonNullAttr *Create(ASTContext &Ctx, SourceRange Range = {});
14137 
14138   // Constructors
14139   TypeNonNullAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14140              );
14141 
14142   TypeNonNullAttr *clone(ASTContext &C) const;
14143   void printPretty(raw_ostream &OS,
14144                    const PrintingPolicy &Policy) const;
14145   const char *getSpelling() const;
14146 
14147 
14148   static bool classof(const Attr *A) { return A->getKind() == attr::TypeNonNull; }
14149 };
14150 
14151 class CLANG_ABI TypeNullUnspecifiedAttr : public TypeAttr {
14152 public:
14153   // Factory methods
14154   static TypeNullUnspecifiedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14155   static TypeNullUnspecifiedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14156   static TypeNullUnspecifiedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
14157   static TypeNullUnspecifiedAttr *Create(ASTContext &Ctx, SourceRange Range = {});
14158 
14159   // Constructors
14160   TypeNullUnspecifiedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14161              );
14162 
14163   TypeNullUnspecifiedAttr *clone(ASTContext &C) const;
14164   void printPretty(raw_ostream &OS,
14165                    const PrintingPolicy &Policy) const;
14166   const char *getSpelling() const;
14167 
14168 
14169   static bool classof(const Attr *A) { return A->getKind() == attr::TypeNullUnspecified; }
14170 };
14171 
14172 class CLANG_ABI TypeNullableAttr : public InheritableAttr {
14173 public:
14174   // Factory methods
14175   static TypeNullableAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14176   static TypeNullableAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14177   static TypeNullableAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
14178   static TypeNullableAttr *Create(ASTContext &Ctx, SourceRange Range = {});
14179 
14180   // Constructors
14181   TypeNullableAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14182              );
14183 
14184   TypeNullableAttr *clone(ASTContext &C) const;
14185   void printPretty(raw_ostream &OS,
14186                    const PrintingPolicy &Policy) const;
14187   const char *getSpelling() const;
14188 
14189 
14190   static bool classof(const Attr *A) { return A->getKind() == attr::TypeNullable; }
14191 };
14192 
14193 class CLANG_ABI TypeNullableResultAttr : public TypeAttr {
14194 public:
14195   // Factory methods
14196   static TypeNullableResultAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14197   static TypeNullableResultAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14198   static TypeNullableResultAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
14199   static TypeNullableResultAttr *Create(ASTContext &Ctx, SourceRange Range = {});
14200 
14201   // Constructors
14202   TypeNullableResultAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14203              );
14204 
14205   TypeNullableResultAttr *clone(ASTContext &C) const;
14206   void printPretty(raw_ostream &OS,
14207                    const PrintingPolicy &Policy) const;
14208   const char *getSpelling() const;
14209 
14210 
14211   static bool classof(const Attr *A) { return A->getKind() == attr::TypeNullableResult; }
14212 };
14213 
14214 class CLANG_ABI TypeTagForDatatypeAttr : public InheritableAttr {
14215 IdentifierInfo * argumentKind;
14216 
14217 TypeSourceInfo * matchingCType;
14218 
14219 bool layoutCompatible;
14220 
14221 bool mustBeNull;
14222 
14223 public:
14224   enum Spelling {
14225     GNU_type_tag_for_datatype = 0,
14226     CXX11_clang_type_tag_for_datatype = 1,
14227     C23_clang_type_tag_for_datatype = 2,
14228   SpellingNotCalculated = 15
14229 
14230   };
14231 
14232   // Factory methods
14233   static TypeTagForDatatypeAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * ArgumentKind, TypeSourceInfo * MatchingCType, bool LayoutCompatible, bool MustBeNull, const AttributeCommonInfo &CommonInfo);
14234   static TypeTagForDatatypeAttr *Create(ASTContext &Ctx, IdentifierInfo * ArgumentKind, TypeSourceInfo * MatchingCType, bool LayoutCompatible, bool MustBeNull, const AttributeCommonInfo &CommonInfo);
14235   static TypeTagForDatatypeAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * ArgumentKind, TypeSourceInfo * MatchingCType, bool LayoutCompatible, bool MustBeNull, SourceRange Range = {}, Spelling S = GNU_type_tag_for_datatype);
14236   static TypeTagForDatatypeAttr *Create(ASTContext &Ctx, IdentifierInfo * ArgumentKind, TypeSourceInfo * MatchingCType, bool LayoutCompatible, bool MustBeNull, SourceRange Range = {}, Spelling S = GNU_type_tag_for_datatype);
14237 
14238   // Constructors
14239   TypeTagForDatatypeAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14240               , IdentifierInfo * ArgumentKind
14241               , TypeSourceInfo * MatchingCType
14242               , bool LayoutCompatible
14243               , bool MustBeNull
14244              );
14245 
14246   TypeTagForDatatypeAttr *clone(ASTContext &C) const;
14247   void printPretty(raw_ostream &OS,
14248                    const PrintingPolicy &Policy) const;
14249   const char *getSpelling() const;
14250   IdentifierInfo * getArgumentKind() const {
14251     return argumentKind;
14252   }
14253 
14254   QualType getMatchingCType() const {
14255     return matchingCType->getType();
14256   }  TypeSourceInfo * getMatchingCTypeLoc() const {
14257     return matchingCType;
14258   }
14259 
14260   bool getLayoutCompatible() const {
14261     return layoutCompatible;
14262   }
14263 
14264   bool getMustBeNull() const {
14265     return mustBeNull;
14266   }
14267 
14268 
14269 
14270   static bool classof(const Attr *A) { return A->getKind() == attr::TypeTagForDatatype; }
14271 };
14272 
14273 class CLANG_ABI TypeVisibilityAttr : public InheritableAttr {
14274 public:
14275   enum VisibilityType {
14276     Default,
14277     Hidden,
14278     Protected
14279   };
14280 private:
14281   TypeVisibilityAttr::VisibilityType visibility;
14282 
14283 public:
14284   enum Spelling {
14285     GNU_type_visibility = 0,
14286     CXX11_clang_type_visibility = 1,
14287     C23_clang_type_visibility = 2,
14288   SpellingNotCalculated = 15
14289 
14290   };
14291 
14292   // Factory methods
14293   static TypeVisibilityAttr *CreateImplicit(ASTContext &Ctx, TypeVisibilityAttr::VisibilityType Visibility, const AttributeCommonInfo &CommonInfo);
14294   static TypeVisibilityAttr *Create(ASTContext &Ctx, TypeVisibilityAttr::VisibilityType Visibility, const AttributeCommonInfo &CommonInfo);
14295   static TypeVisibilityAttr *CreateImplicit(ASTContext &Ctx, TypeVisibilityAttr::VisibilityType Visibility, SourceRange Range = {}, Spelling S = GNU_type_visibility);
14296   static TypeVisibilityAttr *Create(ASTContext &Ctx, TypeVisibilityAttr::VisibilityType Visibility, SourceRange Range = {}, Spelling S = GNU_type_visibility);
14297 
14298   // Constructors
14299   TypeVisibilityAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14300               , TypeVisibilityAttr::VisibilityType Visibility
14301              );
14302 
14303   TypeVisibilityAttr *clone(ASTContext &C) const;
14304   void printPretty(raw_ostream &OS,
14305                    const PrintingPolicy &Policy) const;
14306   const char *getSpelling() const;
14307   TypeVisibilityAttr::VisibilityType getVisibility() const {
14308     return visibility;
14309   }
14310 
14311   static bool ConvertStrToVisibilityType(StringRef Val, TypeVisibilityAttr::VisibilityType &Out);
14312   static const char *ConvertVisibilityTypeToStr(TypeVisibilityAttr::VisibilityType Val);
14313 
14314 
14315   static bool classof(const Attr *A) { return A->getKind() == attr::TypeVisibility; }
14316 };
14317 
14318 class CLANG_ABI UPtrAttr : public TypeAttr {
14319 public:
14320   // Factory methods
14321   static UPtrAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14322   static UPtrAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14323   static UPtrAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
14324   static UPtrAttr *Create(ASTContext &Ctx, SourceRange Range = {});
14325 
14326   // Constructors
14327   UPtrAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14328              );
14329 
14330   UPtrAttr *clone(ASTContext &C) const;
14331   void printPretty(raw_ostream &OS,
14332                    const PrintingPolicy &Policy) const;
14333   const char *getSpelling() const;
14334 
14335 
14336   static bool classof(const Attr *A) { return A->getKind() == attr::UPtr; }
14337 };
14338 
14339 class CLANG_ABI UnavailableAttr : public InheritableAttr {
14340 unsigned messageLength;
14341 char *message;
14342 
14343 public:
14344   enum ImplicitReason {
14345     IR_None,
14346     IR_ARCForbiddenType,
14347     IR_ForbiddenWeak,
14348     IR_ARCForbiddenConversion,
14349     IR_ARCInitReturnsUnrelated,
14350     IR_ARCFieldWithOwnership
14351   };
14352 private:
14353   UnavailableAttr::ImplicitReason implicitReason;
14354 
14355 public:
14356   enum Spelling {
14357     GNU_unavailable = 0,
14358     CXX11_clang_unavailable = 1,
14359     C23_clang_unavailable = 2,
14360   SpellingNotCalculated = 15
14361 
14362   };
14363 
14364   // Factory methods
14365   static UnavailableAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Message, UnavailableAttr::ImplicitReason ImplicitReason, const AttributeCommonInfo &CommonInfo);
14366   static UnavailableAttr *Create(ASTContext &Ctx, llvm::StringRef Message, UnavailableAttr::ImplicitReason ImplicitReason, const AttributeCommonInfo &CommonInfo);
14367   static UnavailableAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Message, UnavailableAttr::ImplicitReason ImplicitReason, SourceRange Range = {}, Spelling S = GNU_unavailable);
14368   static UnavailableAttr *Create(ASTContext &Ctx, llvm::StringRef Message, UnavailableAttr::ImplicitReason ImplicitReason, SourceRange Range = {}, Spelling S = GNU_unavailable);
14369   static UnavailableAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Message, const AttributeCommonInfo &CommonInfo);
14370   static UnavailableAttr *Create(ASTContext &Ctx, llvm::StringRef Message, const AttributeCommonInfo &CommonInfo);
14371   static UnavailableAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Message, SourceRange Range = {}, Spelling S = GNU_unavailable);
14372   static UnavailableAttr *Create(ASTContext &Ctx, llvm::StringRef Message, SourceRange Range = {}, Spelling S = GNU_unavailable);
14373 
14374   // Constructors
14375   UnavailableAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14376               , llvm::StringRef Message
14377               , UnavailableAttr::ImplicitReason ImplicitReason
14378              );
14379   UnavailableAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14380               , llvm::StringRef Message
14381              );
14382   UnavailableAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14383              );
14384 
14385   UnavailableAttr *clone(ASTContext &C) const;
14386   void printPretty(raw_ostream &OS,
14387                    const PrintingPolicy &Policy) const;
14388   const char *getSpelling() const;
14389   llvm::StringRef getMessage() const {
14390     return llvm::StringRef(message, messageLength);
14391   }
14392   unsigned getMessageLength() const {
14393     return messageLength;
14394   }
14395   void setMessage(ASTContext &C, llvm::StringRef S) {
14396     messageLength = S.size();
14397     this->message = new (C, 1) char [messageLength];
14398     if (!S.empty())
14399       std::memcpy(this->message, S.data(), messageLength);
14400   }
14401 
14402   UnavailableAttr::ImplicitReason getImplicitReason() const {
14403     return implicitReason;
14404   }
14405 
14406 
14407 
14408   static bool classof(const Attr *A) { return A->getKind() == attr::Unavailable; }
14409 };
14410 
14411 class CLANG_ABI UninitializedAttr : public InheritableAttr {
14412 public:
14413   enum Spelling {
14414     GNU_uninitialized = 0,
14415     CXX11_clang_uninitialized = 1,
14416   SpellingNotCalculated = 15
14417 
14418   };
14419 
14420   // Factory methods
14421   static UninitializedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14422   static UninitializedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14423   static UninitializedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_uninitialized);
14424   static UninitializedAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_uninitialized);
14425 
14426   // Constructors
14427   UninitializedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14428              );
14429 
14430   UninitializedAttr *clone(ASTContext &C) const;
14431   void printPretty(raw_ostream &OS,
14432                    const PrintingPolicy &Policy) const;
14433   const char *getSpelling() const;
14434 
14435 
14436   static bool classof(const Attr *A) { return A->getKind() == attr::Uninitialized; }
14437 };
14438 
14439 class CLANG_ABI UnlikelyAttr : public StmtAttr {
14440 public:
14441   enum Spelling {
14442     CXX11_unlikely = 0,
14443     C23_clang_unlikely = 1,
14444   SpellingNotCalculated = 15
14445 
14446   };
14447 
14448   // Factory methods
14449   static UnlikelyAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14450   static UnlikelyAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14451   static UnlikelyAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = CXX11_unlikely);
14452   static UnlikelyAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = CXX11_unlikely);
14453 
14454   // Constructors
14455   UnlikelyAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14456              );
14457 
14458   UnlikelyAttr *clone(ASTContext &C) const;
14459   void printPretty(raw_ostream &OS,
14460                    const PrintingPolicy &Policy) const;
14461   const char *getSpelling() const;
14462 
14463 
14464   static bool classof(const Attr *A) { return A->getKind() == attr::Unlikely; }
14465 };
14466 
14467 class CLANG_ABI UnsafeBufferUsageAttr : public InheritableAttr {
14468 public:
14469   enum Spelling {
14470     GNU_unsafe_buffer_usage = 0,
14471     CXX11_clang_unsafe_buffer_usage = 1,
14472     C23_clang_unsafe_buffer_usage = 2,
14473   SpellingNotCalculated = 15
14474 
14475   };
14476 
14477   // Factory methods
14478   static UnsafeBufferUsageAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14479   static UnsafeBufferUsageAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14480   static UnsafeBufferUsageAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_unsafe_buffer_usage);
14481   static UnsafeBufferUsageAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_unsafe_buffer_usage);
14482 
14483   // Constructors
14484   UnsafeBufferUsageAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14485              );
14486 
14487   UnsafeBufferUsageAttr *clone(ASTContext &C) const;
14488   void printPretty(raw_ostream &OS,
14489                    const PrintingPolicy &Policy) const;
14490   const char *getSpelling() const;
14491 
14492 
14493   static bool classof(const Attr *A) { return A->getKind() == attr::UnsafeBufferUsage; }
14494 };
14495 
14496 class CLANG_ABI UnusedAttr : public InheritableAttr {
14497 public:
14498   enum Spelling {
14499     CXX11_maybe_unused = 0,
14500     GNU_unused = 1,
14501     CXX11_gnu_unused = 2,
14502     C23_gnu_unused = 3,
14503     C23_maybe_unused = 4,
14504   SpellingNotCalculated = 15
14505 
14506   };
14507 
14508   // Factory methods
14509   static UnusedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14510   static UnusedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14511   static UnusedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = CXX11_maybe_unused);
14512   static UnusedAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = CXX11_maybe_unused);
14513 
14514   // Constructors
14515   UnusedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14516              );
14517 
14518   UnusedAttr *clone(ASTContext &C) const;
14519   void printPretty(raw_ostream &OS,
14520                    const PrintingPolicy &Policy) const;
14521   const char *getSpelling() const;
14522   Spelling getSemanticSpelling() const;
14523 
14524 
14525   static bool classof(const Attr *A) { return A->getKind() == attr::Unused; }
14526 };
14527 
14528 class CLANG_ABI UseHandleAttr : public InheritableParamAttr {
14529 unsigned handleTypeLength;
14530 char *handleType;
14531 
14532 public:
14533   enum Spelling {
14534     GNU_use_handle = 0,
14535     CXX11_clang_use_handle = 1,
14536     C23_clang_use_handle = 2,
14537   SpellingNotCalculated = 15
14538 
14539   };
14540 
14541   // Factory methods
14542   static UseHandleAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef HandleType, const AttributeCommonInfo &CommonInfo);
14543   static UseHandleAttr *Create(ASTContext &Ctx, llvm::StringRef HandleType, const AttributeCommonInfo &CommonInfo);
14544   static UseHandleAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef HandleType, SourceRange Range = {}, Spelling S = GNU_use_handle);
14545   static UseHandleAttr *Create(ASTContext &Ctx, llvm::StringRef HandleType, SourceRange Range = {}, Spelling S = GNU_use_handle);
14546 
14547   // Constructors
14548   UseHandleAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14549               , llvm::StringRef HandleType
14550              );
14551 
14552   UseHandleAttr *clone(ASTContext &C) const;
14553   void printPretty(raw_ostream &OS,
14554                    const PrintingPolicy &Policy) const;
14555   const char *getSpelling() const;
14556   llvm::StringRef getHandleType() const {
14557     return llvm::StringRef(handleType, handleTypeLength);
14558   }
14559   unsigned getHandleTypeLength() const {
14560     return handleTypeLength;
14561   }
14562   void setHandleType(ASTContext &C, llvm::StringRef S) {
14563     handleTypeLength = S.size();
14564     this->handleType = new (C, 1) char [handleTypeLength];
14565     if (!S.empty())
14566       std::memcpy(this->handleType, S.data(), handleTypeLength);
14567   }
14568 
14569 
14570 
14571   static bool classof(const Attr *A) { return A->getKind() == attr::UseHandle; }
14572 };
14573 
14574 class CLANG_ABI UsedAttr : public InheritableAttr {
14575 public:
14576   enum Spelling {
14577     GNU_used = 0,
14578     CXX11_gnu_used = 1,
14579     C23_gnu_used = 2,
14580   SpellingNotCalculated = 15
14581 
14582   };
14583 
14584   // Factory methods
14585   static UsedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14586   static UsedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14587   static UsedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_used);
14588   static UsedAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_used);
14589 
14590   // Constructors
14591   UsedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14592              );
14593 
14594   UsedAttr *clone(ASTContext &C) const;
14595   void printPretty(raw_ostream &OS,
14596                    const PrintingPolicy &Policy) const;
14597   const char *getSpelling() const;
14598 
14599 
14600   static bool classof(const Attr *A) { return A->getKind() == attr::Used; }
14601 };
14602 
14603 class CLANG_ABI UsingIfExistsAttr : public InheritableAttr {
14604 public:
14605   enum Spelling {
14606     GNU_using_if_exists = 0,
14607     CXX11_clang_using_if_exists = 1,
14608   SpellingNotCalculated = 15
14609 
14610   };
14611 
14612   // Factory methods
14613   static UsingIfExistsAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14614   static UsingIfExistsAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14615   static UsingIfExistsAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_using_if_exists);
14616   static UsingIfExistsAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_using_if_exists);
14617 
14618   // Constructors
14619   UsingIfExistsAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14620              );
14621 
14622   UsingIfExistsAttr *clone(ASTContext &C) const;
14623   void printPretty(raw_ostream &OS,
14624                    const PrintingPolicy &Policy) const;
14625   const char *getSpelling() const;
14626 
14627 
14628   static bool classof(const Attr *A) { return A->getKind() == attr::UsingIfExists; }
14629 };
14630 
14631 class CLANG_ABI UuidAttr : public InheritableAttr {
14632 unsigned guidLength;
14633 char *guid;
14634 
14635 MSGuidDecl * guidDecl;
14636 
14637 public:
14638   enum Spelling {
14639     Declspec_uuid = 0,
14640     Microsoft_uuid = 1,
14641   SpellingNotCalculated = 15
14642 
14643   };
14644 
14645   // Factory methods
14646   static UuidAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Guid, MSGuidDecl * GuidDecl, const AttributeCommonInfo &CommonInfo);
14647   static UuidAttr *Create(ASTContext &Ctx, llvm::StringRef Guid, MSGuidDecl * GuidDecl, const AttributeCommonInfo &CommonInfo);
14648   static UuidAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Guid, MSGuidDecl * GuidDecl, SourceRange Range = {}, Spelling S = Declspec_uuid);
14649   static UuidAttr *Create(ASTContext &Ctx, llvm::StringRef Guid, MSGuidDecl * GuidDecl, SourceRange Range = {}, Spelling S = Declspec_uuid);
14650   static UuidAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Guid, const AttributeCommonInfo &CommonInfo);
14651   static UuidAttr *Create(ASTContext &Ctx, llvm::StringRef Guid, const AttributeCommonInfo &CommonInfo);
14652   static UuidAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Guid, SourceRange Range = {}, Spelling S = Declspec_uuid);
14653   static UuidAttr *Create(ASTContext &Ctx, llvm::StringRef Guid, SourceRange Range = {}, Spelling S = Declspec_uuid);
14654 
14655   // Constructors
14656   UuidAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14657               , llvm::StringRef Guid
14658               , MSGuidDecl * GuidDecl
14659              );
14660   UuidAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14661               , llvm::StringRef Guid
14662              );
14663 
14664   UuidAttr *clone(ASTContext &C) const;
14665   void printPretty(raw_ostream &OS,
14666                    const PrintingPolicy &Policy) const;
14667   const char *getSpelling() const;
14668   llvm::StringRef getGuid() const {
14669     return llvm::StringRef(guid, guidLength);
14670   }
14671   unsigned getGuidLength() const {
14672     return guidLength;
14673   }
14674   void setGuid(ASTContext &C, llvm::StringRef S) {
14675     guidLength = S.size();
14676     this->guid = new (C, 1) char [guidLength];
14677     if (!S.empty())
14678       std::memcpy(this->guid, S.data(), guidLength);
14679   }
14680 
14681   MSGuidDecl * getGuidDecl() const {
14682     return guidDecl;
14683   }
14684 
14685 
14686 
14687   static bool classof(const Attr *A) { return A->getKind() == attr::Uuid; }
14688 };
14689 
14690 class CLANG_ABI VTablePointerAuthenticationAttr : public InheritableAttr {
14691 public:
14692   enum VPtrAuthKeyType {
14693     DefaultKey,
14694     NoKey,
14695     ProcessDependent,
14696     ProcessIndependent
14697   };
14698 private:
14699   VTablePointerAuthenticationAttr::VPtrAuthKeyType key;
14700 
14701 public:
14702   enum AddressDiscriminationMode {
14703     DefaultAddressDiscrimination,
14704     NoAddressDiscrimination,
14705     AddressDiscrimination
14706   };
14707 private:
14708   VTablePointerAuthenticationAttr::AddressDiscriminationMode addressDiscrimination;
14709 
14710 public:
14711   enum ExtraDiscrimination {
14712     DefaultExtraDiscrimination,
14713     NoExtraDiscrimination,
14714     TypeDiscrimination,
14715     CustomDiscrimination
14716   };
14717 private:
14718   VTablePointerAuthenticationAttr::ExtraDiscrimination extraDiscrimination;
14719 
14720 int customDiscriminationValue;
14721 
14722 public:
14723   enum Spelling {
14724     GNU_ptrauth_vtable_pointer = 0,
14725     CXX11_clang_ptrauth_vtable_pointer = 1,
14726     C23_clang_ptrauth_vtable_pointer = 2,
14727   SpellingNotCalculated = 15
14728 
14729   };
14730 
14731   // Factory methods
14732   static VTablePointerAuthenticationAttr *CreateImplicit(ASTContext &Ctx, VTablePointerAuthenticationAttr::VPtrAuthKeyType Key, VTablePointerAuthenticationAttr::AddressDiscriminationMode AddressDiscrimination, VTablePointerAuthenticationAttr::ExtraDiscrimination ExtraDiscrimination, int CustomDiscriminationValue, const AttributeCommonInfo &CommonInfo);
14733   static VTablePointerAuthenticationAttr *Create(ASTContext &Ctx, VTablePointerAuthenticationAttr::VPtrAuthKeyType Key, VTablePointerAuthenticationAttr::AddressDiscriminationMode AddressDiscrimination, VTablePointerAuthenticationAttr::ExtraDiscrimination ExtraDiscrimination, int CustomDiscriminationValue, const AttributeCommonInfo &CommonInfo);
14734   static VTablePointerAuthenticationAttr *CreateImplicit(ASTContext &Ctx, VTablePointerAuthenticationAttr::VPtrAuthKeyType Key, VTablePointerAuthenticationAttr::AddressDiscriminationMode AddressDiscrimination, VTablePointerAuthenticationAttr::ExtraDiscrimination ExtraDiscrimination, int CustomDiscriminationValue, SourceRange Range = {}, Spelling S = GNU_ptrauth_vtable_pointer);
14735   static VTablePointerAuthenticationAttr *Create(ASTContext &Ctx, VTablePointerAuthenticationAttr::VPtrAuthKeyType Key, VTablePointerAuthenticationAttr::AddressDiscriminationMode AddressDiscrimination, VTablePointerAuthenticationAttr::ExtraDiscrimination ExtraDiscrimination, int CustomDiscriminationValue, SourceRange Range = {}, Spelling S = GNU_ptrauth_vtable_pointer);
14736 
14737   // Constructors
14738   VTablePointerAuthenticationAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14739               , VTablePointerAuthenticationAttr::VPtrAuthKeyType Key
14740               , VTablePointerAuthenticationAttr::AddressDiscriminationMode AddressDiscrimination
14741               , VTablePointerAuthenticationAttr::ExtraDiscrimination ExtraDiscrimination
14742               , int CustomDiscriminationValue
14743              );
14744   VTablePointerAuthenticationAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14745               , VTablePointerAuthenticationAttr::VPtrAuthKeyType Key
14746               , VTablePointerAuthenticationAttr::AddressDiscriminationMode AddressDiscrimination
14747               , VTablePointerAuthenticationAttr::ExtraDiscrimination ExtraDiscrimination
14748              );
14749 
14750   VTablePointerAuthenticationAttr *clone(ASTContext &C) const;
14751   void printPretty(raw_ostream &OS,
14752                    const PrintingPolicy &Policy) const;
14753   const char *getSpelling() const;
14754   VTablePointerAuthenticationAttr::VPtrAuthKeyType getKey() const {
14755     return key;
14756   }
14757 
14758   static bool ConvertStrToVPtrAuthKeyType(StringRef Val, VTablePointerAuthenticationAttr::VPtrAuthKeyType &Out);
14759   static const char *ConvertVPtrAuthKeyTypeToStr(VTablePointerAuthenticationAttr::VPtrAuthKeyType Val);
14760   VTablePointerAuthenticationAttr::AddressDiscriminationMode getAddressDiscrimination() const {
14761     return addressDiscrimination;
14762   }
14763 
14764   static bool ConvertStrToAddressDiscriminationMode(StringRef Val, VTablePointerAuthenticationAttr::AddressDiscriminationMode &Out);
14765   static const char *ConvertAddressDiscriminationModeToStr(VTablePointerAuthenticationAttr::AddressDiscriminationMode Val);
14766   VTablePointerAuthenticationAttr::ExtraDiscrimination getExtraDiscrimination() const {
14767     return extraDiscrimination;
14768   }
14769 
14770   static bool ConvertStrToExtraDiscrimination(StringRef Val, VTablePointerAuthenticationAttr::ExtraDiscrimination &Out);
14771   static const char *ConvertExtraDiscriminationToStr(VTablePointerAuthenticationAttr::ExtraDiscrimination Val);
14772   int getCustomDiscriminationValue() const {
14773     return customDiscriminationValue;
14774   }
14775 
14776 
14777 
14778   static bool classof(const Attr *A) { return A->getKind() == attr::VTablePointerAuthentication; }
14779 };
14780 
14781 class CLANG_ABI VecReturnAttr : public InheritableAttr {
14782 public:
14783   enum Spelling {
14784     GNU_vecreturn = 0,
14785     CXX11_clang_vecreturn = 1,
14786   SpellingNotCalculated = 15
14787 
14788   };
14789 
14790   // Factory methods
14791   static VecReturnAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14792   static VecReturnAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14793   static VecReturnAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_vecreturn);
14794   static VecReturnAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_vecreturn);
14795 
14796   // Constructors
14797   VecReturnAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14798              );
14799 
14800   VecReturnAttr *clone(ASTContext &C) const;
14801   void printPretty(raw_ostream &OS,
14802                    const PrintingPolicy &Policy) const;
14803   const char *getSpelling() const;
14804 
14805 
14806   static bool classof(const Attr *A) { return A->getKind() == attr::VecReturn; }
14807 };
14808 
14809 class CLANG_ABI VecTypeHintAttr : public InheritableAttr {
14810 TypeSourceInfo * typeHint;
14811 
14812 public:
14813   // Factory methods
14814   static VecTypeHintAttr *CreateImplicit(ASTContext &Ctx, TypeSourceInfo * TypeHint, const AttributeCommonInfo &CommonInfo);
14815   static VecTypeHintAttr *Create(ASTContext &Ctx, TypeSourceInfo * TypeHint, const AttributeCommonInfo &CommonInfo);
14816   static VecTypeHintAttr *CreateImplicit(ASTContext &Ctx, TypeSourceInfo * TypeHint, SourceRange Range = {});
14817   static VecTypeHintAttr *Create(ASTContext &Ctx, TypeSourceInfo * TypeHint, SourceRange Range = {});
14818 
14819   // Constructors
14820   VecTypeHintAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14821               , TypeSourceInfo * TypeHint
14822              );
14823 
14824   VecTypeHintAttr *clone(ASTContext &C) const;
14825   void printPretty(raw_ostream &OS,
14826                    const PrintingPolicy &Policy) const;
14827   const char *getSpelling() const;
14828   QualType getTypeHint() const {
14829     return typeHint->getType();
14830   }  TypeSourceInfo * getTypeHintLoc() const {
14831     return typeHint;
14832   }
14833 
14834 
14835 
14836   static bool classof(const Attr *A) { return A->getKind() == attr::VecTypeHint; }
14837 };
14838 
14839 class CLANG_ABI VectorCallAttr : public InheritableAttr {
14840 public:
14841   enum Spelling {
14842     GNU_vectorcall = 0,
14843     CXX11_clang_vectorcall = 1,
14844     C23_clang_vectorcall = 2,
14845     Keyword_vectorcall = 3,
14846   SpellingNotCalculated = 15
14847 
14848   };
14849 
14850   // Factory methods
14851   static VectorCallAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14852   static VectorCallAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14853   static VectorCallAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_vectorcall);
14854   static VectorCallAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_vectorcall);
14855 
14856   // Constructors
14857   VectorCallAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14858              );
14859 
14860   VectorCallAttr *clone(ASTContext &C) const;
14861   void printPretty(raw_ostream &OS,
14862                    const PrintingPolicy &Policy) const;
14863   const char *getSpelling() const;
14864 
14865 
14866   static bool classof(const Attr *A) { return A->getKind() == attr::VectorCall; }
14867 };
14868 
14869 class CLANG_ABI VisibilityAttr : public InheritableAttr {
14870 public:
14871   enum VisibilityType {
14872     Default,
14873     Hidden,
14874     Protected
14875   };
14876 private:
14877   VisibilityAttr::VisibilityType visibility;
14878 
14879 public:
14880   enum Spelling {
14881     GNU_visibility = 0,
14882     CXX11_gnu_visibility = 1,
14883     C23_gnu_visibility = 2,
14884   SpellingNotCalculated = 15
14885 
14886   };
14887 
14888   // Factory methods
14889   static VisibilityAttr *CreateImplicit(ASTContext &Ctx, VisibilityAttr::VisibilityType Visibility, const AttributeCommonInfo &CommonInfo);
14890   static VisibilityAttr *Create(ASTContext &Ctx, VisibilityAttr::VisibilityType Visibility, const AttributeCommonInfo &CommonInfo);
14891   static VisibilityAttr *CreateImplicit(ASTContext &Ctx, VisibilityAttr::VisibilityType Visibility, SourceRange Range = {}, Spelling S = GNU_visibility);
14892   static VisibilityAttr *Create(ASTContext &Ctx, VisibilityAttr::VisibilityType Visibility, SourceRange Range = {}, Spelling S = GNU_visibility);
14893 
14894   // Constructors
14895   VisibilityAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14896               , VisibilityAttr::VisibilityType Visibility
14897              );
14898 
14899   VisibilityAttr *clone(ASTContext &C) const;
14900   void printPretty(raw_ostream &OS,
14901                    const PrintingPolicy &Policy) const;
14902   const char *getSpelling() const;
14903   VisibilityAttr::VisibilityType getVisibility() const {
14904     return visibility;
14905   }
14906 
14907   static bool ConvertStrToVisibilityType(StringRef Val, VisibilityAttr::VisibilityType &Out);
14908   static const char *ConvertVisibilityTypeToStr(VisibilityAttr::VisibilityType Val);
14909 
14910 
14911   static bool classof(const Attr *A) { return A->getKind() == attr::Visibility; }
14912 };
14913 
14914 class CLANG_ABI WarnUnusedAttr : public InheritableAttr {
14915 public:
14916   enum Spelling {
14917     GNU_warn_unused = 0,
14918     CXX11_gnu_warn_unused = 1,
14919     C23_gnu_warn_unused = 2,
14920   SpellingNotCalculated = 15
14921 
14922   };
14923 
14924   // Factory methods
14925   static WarnUnusedAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14926   static WarnUnusedAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
14927   static WarnUnusedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_warn_unused);
14928   static WarnUnusedAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_warn_unused);
14929 
14930   // Constructors
14931   WarnUnusedAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14932              );
14933 
14934   WarnUnusedAttr *clone(ASTContext &C) const;
14935   void printPretty(raw_ostream &OS,
14936                    const PrintingPolicy &Policy) const;
14937   const char *getSpelling() const;
14938 
14939 
14940   static bool classof(const Attr *A) { return A->getKind() == attr::WarnUnused; }
14941 };
14942 
14943 class CLANG_ABI WarnUnusedResultAttr : public InheritableAttr {
14944 unsigned messageLength;
14945 char *message;
14946 
14947 public:
14948   enum Spelling {
14949     CXX11_nodiscard = 0,
14950     C23_nodiscard = 1,
14951     CXX11_clang_warn_unused_result = 2,
14952     GNU_warn_unused_result = 3,
14953     CXX11_gnu_warn_unused_result = 4,
14954     C23_gnu_warn_unused_result = 5,
14955   SpellingNotCalculated = 15
14956 
14957   };
14958 
14959   // Factory methods
14960   static WarnUnusedResultAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Message, const AttributeCommonInfo &CommonInfo);
14961   static WarnUnusedResultAttr *Create(ASTContext &Ctx, llvm::StringRef Message, const AttributeCommonInfo &CommonInfo);
14962   static WarnUnusedResultAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Message, SourceRange Range = {}, Spelling S = CXX11_nodiscard);
14963   static WarnUnusedResultAttr *Create(ASTContext &Ctx, llvm::StringRef Message, SourceRange Range = {}, Spelling S = CXX11_nodiscard);
14964 
14965   // Constructors
14966   WarnUnusedResultAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14967               , llvm::StringRef Message
14968              );
14969   WarnUnusedResultAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
14970              );
14971 
14972   WarnUnusedResultAttr *clone(ASTContext &C) const;
14973   void printPretty(raw_ostream &OS,
14974                    const PrintingPolicy &Policy) const;
14975   const char *getSpelling() const;
14976   Spelling getSemanticSpelling() const;
14977   llvm::StringRef getMessage() const {
14978     return llvm::StringRef(message, messageLength);
14979   }
14980   unsigned getMessageLength() const {
14981     return messageLength;
14982   }
14983   void setMessage(ASTContext &C, llvm::StringRef S) {
14984     messageLength = S.size();
14985     this->message = new (C, 1) char [messageLength];
14986     if (!S.empty())
14987       std::memcpy(this->message, S.data(), messageLength);
14988   }
14989 
14990 
14991     // Check whether this the C++11 nodiscard version, even in non C++11
14992     // spellings.
14993     bool IsCXX11NoDiscard() const {
14994       return this->getSemanticSpelling() == CXX11_nodiscard;
14995     }
14996   
14997 
14998   static bool classof(const Attr *A) { return A->getKind() == attr::WarnUnusedResult; }
14999 };
15000 
15001 class CLANG_ABI WeakAttr : public InheritableAttr {
15002 public:
15003   enum Spelling {
15004     GNU_weak = 0,
15005     CXX11_gnu_weak = 1,
15006     C23_gnu_weak = 2,
15007   SpellingNotCalculated = 15
15008 
15009   };
15010 
15011   // Factory methods
15012   static WeakAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
15013   static WeakAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
15014   static WeakAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_weak);
15015   static WeakAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_weak);
15016 
15017   // Constructors
15018   WeakAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
15019              );
15020 
15021   WeakAttr *clone(ASTContext &C) const;
15022   void printPretty(raw_ostream &OS,
15023                    const PrintingPolicy &Policy) const;
15024   const char *getSpelling() const;
15025 
15026 
15027   static bool classof(const Attr *A) { return A->getKind() == attr::Weak; }
15028 };
15029 
15030 class CLANG_ABI WeakImportAttr : public InheritableAttr {
15031 public:
15032   enum Spelling {
15033     GNU_weak_import = 0,
15034     CXX11_clang_weak_import = 1,
15035     C23_clang_weak_import = 2,
15036   SpellingNotCalculated = 15
15037 
15038   };
15039 
15040   // Factory methods
15041   static WeakImportAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
15042   static WeakImportAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
15043   static WeakImportAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_weak_import);
15044   static WeakImportAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_weak_import);
15045 
15046   // Constructors
15047   WeakImportAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
15048              );
15049 
15050   WeakImportAttr *clone(ASTContext &C) const;
15051   void printPretty(raw_ostream &OS,
15052                    const PrintingPolicy &Policy) const;
15053   const char *getSpelling() const;
15054 
15055 
15056   static bool classof(const Attr *A) { return A->getKind() == attr::WeakImport; }
15057 };
15058 
15059 class CLANG_ABI WeakRefAttr : public InheritableAttr {
15060 unsigned aliaseeLength;
15061 char *aliasee;
15062 
15063 public:
15064   enum Spelling {
15065     GNU_weakref = 0,
15066     CXX11_gnu_weakref = 1,
15067     C23_gnu_weakref = 2,
15068   SpellingNotCalculated = 15
15069 
15070   };
15071 
15072   // Factory methods
15073   static WeakRefAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Aliasee, const AttributeCommonInfo &CommonInfo);
15074   static WeakRefAttr *Create(ASTContext &Ctx, llvm::StringRef Aliasee, const AttributeCommonInfo &CommonInfo);
15075   static WeakRefAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Aliasee, SourceRange Range = {}, Spelling S = GNU_weakref);
15076   static WeakRefAttr *Create(ASTContext &Ctx, llvm::StringRef Aliasee, SourceRange Range = {}, Spelling S = GNU_weakref);
15077 
15078   // Constructors
15079   WeakRefAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
15080               , llvm::StringRef Aliasee
15081              );
15082   WeakRefAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
15083              );
15084 
15085   WeakRefAttr *clone(ASTContext &C) const;
15086   void printPretty(raw_ostream &OS,
15087                    const PrintingPolicy &Policy) const;
15088   const char *getSpelling() const;
15089   llvm::StringRef getAliasee() const {
15090     return llvm::StringRef(aliasee, aliaseeLength);
15091   }
15092   unsigned getAliaseeLength() const {
15093     return aliaseeLength;
15094   }
15095   void setAliasee(ASTContext &C, llvm::StringRef S) {
15096     aliaseeLength = S.size();
15097     this->aliasee = new (C, 1) char [aliaseeLength];
15098     if (!S.empty())
15099       std::memcpy(this->aliasee, S.data(), aliaseeLength);
15100   }
15101 
15102 
15103 
15104   static bool classof(const Attr *A) { return A->getKind() == attr::WeakRef; }
15105 };
15106 
15107 class CLANG_ABI WebAssemblyExportNameAttr : public InheritableAttr {
15108 unsigned exportNameLength;
15109 char *exportName;
15110 
15111 public:
15112   enum Spelling {
15113     GNU_export_name = 0,
15114     CXX11_clang_export_name = 1,
15115     C23_clang_export_name = 2,
15116   SpellingNotCalculated = 15
15117 
15118   };
15119 
15120   // Factory methods
15121   static WebAssemblyExportNameAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef ExportName, const AttributeCommonInfo &CommonInfo);
15122   static WebAssemblyExportNameAttr *Create(ASTContext &Ctx, llvm::StringRef ExportName, const AttributeCommonInfo &CommonInfo);
15123   static WebAssemblyExportNameAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef ExportName, SourceRange Range = {}, Spelling S = GNU_export_name);
15124   static WebAssemblyExportNameAttr *Create(ASTContext &Ctx, llvm::StringRef ExportName, SourceRange Range = {}, Spelling S = GNU_export_name);
15125 
15126   // Constructors
15127   WebAssemblyExportNameAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
15128               , llvm::StringRef ExportName
15129              );
15130 
15131   WebAssemblyExportNameAttr *clone(ASTContext &C) const;
15132   void printPretty(raw_ostream &OS,
15133                    const PrintingPolicy &Policy) const;
15134   const char *getSpelling() const;
15135   llvm::StringRef getExportName() const {
15136     return llvm::StringRef(exportName, exportNameLength);
15137   }
15138   unsigned getExportNameLength() const {
15139     return exportNameLength;
15140   }
15141   void setExportName(ASTContext &C, llvm::StringRef S) {
15142     exportNameLength = S.size();
15143     this->exportName = new (C, 1) char [exportNameLength];
15144     if (!S.empty())
15145       std::memcpy(this->exportName, S.data(), exportNameLength);
15146   }
15147 
15148 
15149 
15150   static bool classof(const Attr *A) { return A->getKind() == attr::WebAssemblyExportName; }
15151 };
15152 
15153 class CLANG_ABI WebAssemblyFuncrefAttr : public TypeAttr {
15154 public:
15155   // Factory methods
15156   static WebAssemblyFuncrefAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
15157   static WebAssemblyFuncrefAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
15158   static WebAssemblyFuncrefAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {});
15159   static WebAssemblyFuncrefAttr *Create(ASTContext &Ctx, SourceRange Range = {});
15160 
15161   // Constructors
15162   WebAssemblyFuncrefAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
15163              );
15164 
15165   WebAssemblyFuncrefAttr *clone(ASTContext &C) const;
15166   void printPretty(raw_ostream &OS,
15167                    const PrintingPolicy &Policy) const;
15168   const char *getSpelling() const;
15169 
15170 
15171   static bool classof(const Attr *A) { return A->getKind() == attr::WebAssemblyFuncref; }
15172 };
15173 
15174 class CLANG_ABI WebAssemblyImportModuleAttr : public InheritableAttr {
15175 unsigned importModuleLength;
15176 char *importModule;
15177 
15178 public:
15179   enum Spelling {
15180     GNU_import_module = 0,
15181     CXX11_clang_import_module = 1,
15182     C23_clang_import_module = 2,
15183   SpellingNotCalculated = 15
15184 
15185   };
15186 
15187   // Factory methods
15188   static WebAssemblyImportModuleAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef ImportModule, const AttributeCommonInfo &CommonInfo);
15189   static WebAssemblyImportModuleAttr *Create(ASTContext &Ctx, llvm::StringRef ImportModule, const AttributeCommonInfo &CommonInfo);
15190   static WebAssemblyImportModuleAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef ImportModule, SourceRange Range = {}, Spelling S = GNU_import_module);
15191   static WebAssemblyImportModuleAttr *Create(ASTContext &Ctx, llvm::StringRef ImportModule, SourceRange Range = {}, Spelling S = GNU_import_module);
15192 
15193   // Constructors
15194   WebAssemblyImportModuleAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
15195               , llvm::StringRef ImportModule
15196              );
15197 
15198   WebAssemblyImportModuleAttr *clone(ASTContext &C) const;
15199   void printPretty(raw_ostream &OS,
15200                    const PrintingPolicy &Policy) const;
15201   const char *getSpelling() const;
15202   llvm::StringRef getImportModule() const {
15203     return llvm::StringRef(importModule, importModuleLength);
15204   }
15205   unsigned getImportModuleLength() const {
15206     return importModuleLength;
15207   }
15208   void setImportModule(ASTContext &C, llvm::StringRef S) {
15209     importModuleLength = S.size();
15210     this->importModule = new (C, 1) char [importModuleLength];
15211     if (!S.empty())
15212       std::memcpy(this->importModule, S.data(), importModuleLength);
15213   }
15214 
15215 
15216 
15217   static bool classof(const Attr *A) { return A->getKind() == attr::WebAssemblyImportModule; }
15218 };
15219 
15220 class CLANG_ABI WebAssemblyImportNameAttr : public InheritableAttr {
15221 unsigned importNameLength;
15222 char *importName;
15223 
15224 public:
15225   enum Spelling {
15226     GNU_import_name = 0,
15227     CXX11_clang_import_name = 1,
15228     C23_clang_import_name = 2,
15229   SpellingNotCalculated = 15
15230 
15231   };
15232 
15233   // Factory methods
15234   static WebAssemblyImportNameAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef ImportName, const AttributeCommonInfo &CommonInfo);
15235   static WebAssemblyImportNameAttr *Create(ASTContext &Ctx, llvm::StringRef ImportName, const AttributeCommonInfo &CommonInfo);
15236   static WebAssemblyImportNameAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef ImportName, SourceRange Range = {}, Spelling S = GNU_import_name);
15237   static WebAssemblyImportNameAttr *Create(ASTContext &Ctx, llvm::StringRef ImportName, SourceRange Range = {}, Spelling S = GNU_import_name);
15238 
15239   // Constructors
15240   WebAssemblyImportNameAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
15241               , llvm::StringRef ImportName
15242              );
15243 
15244   WebAssemblyImportNameAttr *clone(ASTContext &C) const;
15245   void printPretty(raw_ostream &OS,
15246                    const PrintingPolicy &Policy) const;
15247   const char *getSpelling() const;
15248   llvm::StringRef getImportName() const {
15249     return llvm::StringRef(importName, importNameLength);
15250   }
15251   unsigned getImportNameLength() const {
15252     return importNameLength;
15253   }
15254   void setImportName(ASTContext &C, llvm::StringRef S) {
15255     importNameLength = S.size();
15256     this->importName = new (C, 1) char [importNameLength];
15257     if (!S.empty())
15258       std::memcpy(this->importName, S.data(), importNameLength);
15259   }
15260 
15261 
15262 
15263   static bool classof(const Attr *A) { return A->getKind() == attr::WebAssemblyImportName; }
15264 };
15265 
15266 class CLANG_ABI WorkGroupSizeHintAttr : public InheritableAttr {
15267 unsigned xDim;
15268 
15269 unsigned yDim;
15270 
15271 unsigned zDim;
15272 
15273 public:
15274   // Factory methods
15275   static WorkGroupSizeHintAttr *CreateImplicit(ASTContext &Ctx, unsigned XDim, unsigned YDim, unsigned ZDim, const AttributeCommonInfo &CommonInfo);
15276   static WorkGroupSizeHintAttr *Create(ASTContext &Ctx, unsigned XDim, unsigned YDim, unsigned ZDim, const AttributeCommonInfo &CommonInfo);
15277   static WorkGroupSizeHintAttr *CreateImplicit(ASTContext &Ctx, unsigned XDim, unsigned YDim, unsigned ZDim, SourceRange Range = {});
15278   static WorkGroupSizeHintAttr *Create(ASTContext &Ctx, unsigned XDim, unsigned YDim, unsigned ZDim, SourceRange Range = {});
15279 
15280   // Constructors
15281   WorkGroupSizeHintAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
15282               , unsigned XDim
15283               , unsigned YDim
15284               , unsigned ZDim
15285              );
15286 
15287   WorkGroupSizeHintAttr *clone(ASTContext &C) const;
15288   void printPretty(raw_ostream &OS,
15289                    const PrintingPolicy &Policy) const;
15290   const char *getSpelling() const;
15291   unsigned getXDim() const {
15292     return xDim;
15293   }
15294 
15295   unsigned getYDim() const {
15296     return yDim;
15297   }
15298 
15299   unsigned getZDim() const {
15300     return zDim;
15301   }
15302 
15303 
15304 
15305   static bool classof(const Attr *A) { return A->getKind() == attr::WorkGroupSizeHint; }
15306 };
15307 
15308 class CLANG_ABI X86ForceAlignArgPointerAttr : public InheritableAttr {
15309 public:
15310   enum Spelling {
15311     GNU_force_align_arg_pointer = 0,
15312     CXX11_gnu_force_align_arg_pointer = 1,
15313     C23_gnu_force_align_arg_pointer = 2,
15314   SpellingNotCalculated = 15
15315 
15316   };
15317 
15318   // Factory methods
15319   static X86ForceAlignArgPointerAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
15320   static X86ForceAlignArgPointerAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
15321   static X86ForceAlignArgPointerAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_force_align_arg_pointer);
15322   static X86ForceAlignArgPointerAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_force_align_arg_pointer);
15323 
15324   // Constructors
15325   X86ForceAlignArgPointerAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
15326              );
15327 
15328   X86ForceAlignArgPointerAttr *clone(ASTContext &C) const;
15329   void printPretty(raw_ostream &OS,
15330                    const PrintingPolicy &Policy) const;
15331   const char *getSpelling() const;
15332 
15333 
15334   static bool classof(const Attr *A) { return A->getKind() == attr::X86ForceAlignArgPointer; }
15335 };
15336 
15337 class CLANG_ABI XRayInstrumentAttr : public InheritableAttr {
15338 public:
15339   enum Spelling {
15340     GNU_xray_always_instrument = 0,
15341     CXX11_clang_xray_always_instrument = 1,
15342     C23_clang_xray_always_instrument = 2,
15343     GNU_xray_never_instrument = 3,
15344     CXX11_clang_xray_never_instrument = 4,
15345     C23_clang_xray_never_instrument = 5,
15346   SpellingNotCalculated = 15
15347 
15348   };
15349 
15350   // Factory methods
15351   static XRayInstrumentAttr *CreateImplicit(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
15352   static XRayInstrumentAttr *Create(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo);
15353   static XRayInstrumentAttr *CreateImplicit(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_xray_always_instrument);
15354   static XRayInstrumentAttr *Create(ASTContext &Ctx, SourceRange Range = {}, Spelling S = GNU_xray_always_instrument);
15355 
15356   // Constructors
15357   XRayInstrumentAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
15358              );
15359 
15360   XRayInstrumentAttr *clone(ASTContext &C) const;
15361   void printPretty(raw_ostream &OS,
15362                    const PrintingPolicy &Policy) const;
15363   const char *getSpelling() const;
15364   Spelling getSemanticSpelling() const;
15365   bool alwaysXRayInstrument() const { return getAttributeSpellingListIndex() == 0 ||
15366     getAttributeSpellingListIndex() == 1 ||
15367     getAttributeSpellingListIndex() == 2; }
15368   bool neverXRayInstrument() const { return getAttributeSpellingListIndex() == 3 ||
15369     getAttributeSpellingListIndex() == 4 ||
15370     getAttributeSpellingListIndex() == 5; }
15371 
15372 
15373   static bool classof(const Attr *A) { return A->getKind() == attr::XRayInstrument; }
15374 };
15375 
15376 class CLANG_ABI XRayLogArgsAttr : public InheritableAttr {
15377 unsigned argumentCount;
15378 
15379 public:
15380   enum Spelling {
15381     GNU_xray_log_args = 0,
15382     CXX11_clang_xray_log_args = 1,
15383     C23_clang_xray_log_args = 2,
15384   SpellingNotCalculated = 15
15385 
15386   };
15387 
15388   // Factory methods
15389   static XRayLogArgsAttr *CreateImplicit(ASTContext &Ctx, unsigned ArgumentCount, const AttributeCommonInfo &CommonInfo);
15390   static XRayLogArgsAttr *Create(ASTContext &Ctx, unsigned ArgumentCount, const AttributeCommonInfo &CommonInfo);
15391   static XRayLogArgsAttr *CreateImplicit(ASTContext &Ctx, unsigned ArgumentCount, SourceRange Range = {}, Spelling S = GNU_xray_log_args);
15392   static XRayLogArgsAttr *Create(ASTContext &Ctx, unsigned ArgumentCount, SourceRange Range = {}, Spelling S = GNU_xray_log_args);
15393 
15394   // Constructors
15395   XRayLogArgsAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
15396               , unsigned ArgumentCount
15397              );
15398 
15399   XRayLogArgsAttr *clone(ASTContext &C) const;
15400   void printPretty(raw_ostream &OS,
15401                    const PrintingPolicy &Policy) const;
15402   const char *getSpelling() const;
15403   unsigned getArgumentCount() const {
15404     return argumentCount;
15405   }
15406 
15407 
15408 
15409   static bool classof(const Attr *A) { return A->getKind() == attr::XRayLogArgs; }
15410 };
15411 
15412 class CLANG_ABI ZeroCallUsedRegsAttr : public InheritableAttr {
15413 public:
15414   enum ZeroCallUsedRegsKind {
15415     Skip,
15416     UsedGPRArg,
15417     UsedGPR,
15418     UsedArg,
15419     Used,
15420     AllGPRArg,
15421     AllGPR,
15422     AllArg,
15423     All
15424   };
15425 private:
15426   ZeroCallUsedRegsAttr::ZeroCallUsedRegsKind zeroCallUsedRegs;
15427 
15428 public:
15429   enum Spelling {
15430     GNU_zero_call_used_regs = 0,
15431     CXX11_gnu_zero_call_used_regs = 1,
15432     C23_gnu_zero_call_used_regs = 2,
15433   SpellingNotCalculated = 15
15434 
15435   };
15436 
15437   // Factory methods
15438   static ZeroCallUsedRegsAttr *CreateImplicit(ASTContext &Ctx, ZeroCallUsedRegsAttr::ZeroCallUsedRegsKind ZeroCallUsedRegs, const AttributeCommonInfo &CommonInfo);
15439   static ZeroCallUsedRegsAttr *Create(ASTContext &Ctx, ZeroCallUsedRegsAttr::ZeroCallUsedRegsKind ZeroCallUsedRegs, const AttributeCommonInfo &CommonInfo);
15440   static ZeroCallUsedRegsAttr *CreateImplicit(ASTContext &Ctx, ZeroCallUsedRegsAttr::ZeroCallUsedRegsKind ZeroCallUsedRegs, SourceRange Range = {}, Spelling S = GNU_zero_call_used_regs);
15441   static ZeroCallUsedRegsAttr *Create(ASTContext &Ctx, ZeroCallUsedRegsAttr::ZeroCallUsedRegsKind ZeroCallUsedRegs, SourceRange Range = {}, Spelling S = GNU_zero_call_used_regs);
15442 
15443   // Constructors
15444   ZeroCallUsedRegsAttr(ASTContext &Ctx, const AttributeCommonInfo &CommonInfo
15445               , ZeroCallUsedRegsAttr::ZeroCallUsedRegsKind ZeroCallUsedRegs
15446              );
15447 
15448   ZeroCallUsedRegsAttr *clone(ASTContext &C) const;
15449   void printPretty(raw_ostream &OS,
15450                    const PrintingPolicy &Policy) const;
15451   const char *getSpelling() const;
15452   ZeroCallUsedRegsAttr::ZeroCallUsedRegsKind getZeroCallUsedRegs() const {
15453     return zeroCallUsedRegs;
15454   }
15455 
15456   static bool ConvertStrToZeroCallUsedRegsKind(StringRef Val, ZeroCallUsedRegsAttr::ZeroCallUsedRegsKind &Out);
15457   static const char *ConvertZeroCallUsedRegsKindToStr(ZeroCallUsedRegsAttr::ZeroCallUsedRegsKind Val);
15458 
15459 
15460   static bool classof(const Attr *A) { return A->getKind() == attr::ZeroCallUsedRegs; }
15461 };
15462 
15463 #endif // LLVM_CLANG_ATTR_CLASSES_INC