1f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\ 2f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot|* *| 3f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot|* Attribute classes' definitions *| 4f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot|* *| 5f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot|* Automatically generated file, do not edit! *| 6f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot|* *| 7f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot\*===----------------------------------------------------------------------===*/ 8f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 9f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot#ifndef LLVM_CLANG_ATTR_CLASSES_INC 10f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot#define LLVM_CLANG_ATTR_CLASSES_INC 11f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 12f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass AMDGPUFlatWorkGroupSizeAttr : public InheritableAttr { 13f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned min; 14f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 15f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned max; 16f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 17f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 18f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static AMDGPUFlatWorkGroupSizeAttr *CreateImplicit(ASTContext &Ctx, unsigned Min, unsigned Max, SourceRange Loc = SourceRange()) { 19f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) AMDGPUFlatWorkGroupSizeAttr(Loc, Ctx, Min, Max, 0); 20f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 21f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 22f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 23f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 24f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AMDGPUFlatWorkGroupSizeAttr(SourceRange R, ASTContext &Ctx 25f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned Min 26f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned Max 27f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 28f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 29f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::AMDGPUFlatWorkGroupSize, R, SI, false, false) 30f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , min(Min) 31f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , max(Max) 32f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 33f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 34f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 35f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AMDGPUFlatWorkGroupSizeAttr *clone(ASTContext &C) const; 36f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 37f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 38f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 39f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getMin() const { 40f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return min; 41f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 42f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 43f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getMax() const { 44f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return max; 45f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 46f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 47f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 48f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 49f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::AMDGPUFlatWorkGroupSize; } 50f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 51f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 52f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass AMDGPUNumSGPRAttr : public InheritableAttr { 53f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned numSGPR; 54f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 55f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 56f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static AMDGPUNumSGPRAttr *CreateImplicit(ASTContext &Ctx, unsigned NumSGPR, SourceRange Loc = SourceRange()) { 57f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) AMDGPUNumSGPRAttr(Loc, Ctx, NumSGPR, 0); 58f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 59f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 60f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 61f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 62f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AMDGPUNumSGPRAttr(SourceRange R, ASTContext &Ctx 63f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned NumSGPR 64f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 65f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 66f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::AMDGPUNumSGPR, R, SI, false, false) 67f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , numSGPR(NumSGPR) 68f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 69f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 70f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 71f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AMDGPUNumSGPRAttr *clone(ASTContext &C) const; 72f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 73f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 74f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 75f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getNumSGPR() const { 76f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return numSGPR; 77f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 78f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 79f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 80f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 81f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::AMDGPUNumSGPR; } 82f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 83f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 84f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass AMDGPUNumVGPRAttr : public InheritableAttr { 85f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned numVGPR; 86f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 87f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 88f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static AMDGPUNumVGPRAttr *CreateImplicit(ASTContext &Ctx, unsigned NumVGPR, SourceRange Loc = SourceRange()) { 89f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) AMDGPUNumVGPRAttr(Loc, Ctx, NumVGPR, 0); 90f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 91f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 92f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 93f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 94f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AMDGPUNumVGPRAttr(SourceRange R, ASTContext &Ctx 95f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned NumVGPR 96f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 97f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 98f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::AMDGPUNumVGPR, R, SI, false, false) 99f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , numVGPR(NumVGPR) 100f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 101f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 102f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 103f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AMDGPUNumVGPRAttr *clone(ASTContext &C) const; 104f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 105f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 106f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 107f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getNumVGPR() const { 108f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return numVGPR; 109f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 110f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 111f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 112f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 113f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::AMDGPUNumVGPR; } 114f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 115f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 116f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass AMDGPUWavesPerEUAttr : public InheritableAttr { 117f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned min; 118f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 119f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned max; 120f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 121f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 122f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static AMDGPUWavesPerEUAttr *CreateImplicit(ASTContext &Ctx, unsigned Min, unsigned Max, SourceRange Loc = SourceRange()) { 123f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) AMDGPUWavesPerEUAttr(Loc, Ctx, Min, Max, 0); 124f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 125f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 126f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 127f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 128f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AMDGPUWavesPerEUAttr(SourceRange R, ASTContext &Ctx 129f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned Min 130f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned Max 131f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 132f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 133f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::AMDGPUWavesPerEU, R, SI, false, false) 134f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , min(Min) 135f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , max(Max) 136f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 137f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 138f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 139f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AMDGPUWavesPerEUAttr(SourceRange R, ASTContext &Ctx 140f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned Min 141f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 142f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 143f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::AMDGPUWavesPerEU, R, SI, false, false) 144f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , min(Min) 145f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , max() 146f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 147f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 148f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 149f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AMDGPUWavesPerEUAttr *clone(ASTContext &C) const; 150f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 151f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 152f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 153f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getMin() const { 154f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return min; 155f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 156f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 157f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getMax() const { 158f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return max; 159f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 160f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 161f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 162f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 163f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::AMDGPUWavesPerEU; } 164f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 165f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 166f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ARMInterruptAttr : public InheritableAttr { 167f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 168f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum InterruptType { 169f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot IRQ, 170f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot FIQ, 171f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SWI, 172f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ABORT, 173f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot UNDEF, 174f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Generic 175f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 176f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotprivate: 177f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot InterruptType interrupt; 178f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 179f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 180f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ARMInterruptAttr *CreateImplicit(ASTContext &Ctx, InterruptType Interrupt, SourceRange Loc = SourceRange()) { 181f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ARMInterruptAttr(Loc, Ctx, Interrupt, 0); 182f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 183f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 184f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 185f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 186f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ARMInterruptAttr(SourceRange R, ASTContext &Ctx 187f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , InterruptType Interrupt 188f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 189f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 190f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ARMInterrupt, R, SI, false, false) 191f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , interrupt(Interrupt) 192f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 193f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 194f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 195f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ARMInterruptAttr(SourceRange R, ASTContext &Ctx 196f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 197f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 198f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ARMInterrupt, R, SI, false, false) 199f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , interrupt(InterruptType(0)) 200f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 201f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 202f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 203f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ARMInterruptAttr *clone(ASTContext &C) const; 204f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 205f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 206f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 207f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot InterruptType getInterrupt() const { 208f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return interrupt; 209f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 210f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 211f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool ConvertStrToInterruptType(StringRef Val, InterruptType &Out) { 212f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Optional<InterruptType> R = llvm::StringSwitch<Optional<InterruptType>>(Val) 213f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("IRQ", ARMInterruptAttr::IRQ) 214f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("FIQ", ARMInterruptAttr::FIQ) 215f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("SWI", ARMInterruptAttr::SWI) 216f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("ABORT", ARMInterruptAttr::ABORT) 217f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("UNDEF", ARMInterruptAttr::UNDEF) 218f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("", ARMInterruptAttr::Generic) 219f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Default(Optional<InterruptType>()); 220f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (R) { 221f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Out = *R; 222f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return true; 223f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 224f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return false; 225f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 226f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 227f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static const char *ConvertInterruptTypeToStr(InterruptType Val) { 228f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch(Val) { 229f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case ARMInterruptAttr::IRQ: return "IRQ"; 230f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case ARMInterruptAttr::FIQ: return "FIQ"; 231f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case ARMInterruptAttr::SWI: return "SWI"; 232f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case ARMInterruptAttr::ABORT: return "ABORT"; 233f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case ARMInterruptAttr::UNDEF: return "UNDEF"; 234f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case ARMInterruptAttr::Generic: return ""; 235f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 236f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm_unreachable("No enumerator with that value"); 237f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 238f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 239f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 240f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ARMInterrupt; } 241f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 242f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 243f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass AVRInterruptAttr : public InheritableAttr { 244f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 245f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static AVRInterruptAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 246f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) AVRInterruptAttr(Loc, Ctx, 0); 247f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 248f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 249f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 250f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 251f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AVRInterruptAttr(SourceRange R, ASTContext &Ctx 252f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 253f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 254f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::AVRInterrupt, R, SI, false, false) 255f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 256f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 257f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 258f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AVRInterruptAttr *clone(ASTContext &C) const; 259f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 260f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 261f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 262f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 263f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 264f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::AVRInterrupt; } 265f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 266f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 267f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass AVRSignalAttr : public InheritableAttr { 268f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 269f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static AVRSignalAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 270f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) AVRSignalAttr(Loc, Ctx, 0); 271f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 272f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 273f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 274f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 275f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AVRSignalAttr(SourceRange R, ASTContext &Ctx 276f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 277f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 278f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::AVRSignal, R, SI, false, false) 279f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 280f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 281f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 282f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AVRSignalAttr *clone(ASTContext &C) const; 283f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 284f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 285f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 286f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 287f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 288f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::AVRSignal; } 289f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 290f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 291f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass AbiTagAttr : public Attr { 292f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned tags_Size; 293f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot StringRef *tags_; 294f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 295f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 296f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static AbiTagAttr *CreateImplicit(ASTContext &Ctx, StringRef *Tags, unsigned TagsSize, SourceRange Loc = SourceRange()) { 297f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) AbiTagAttr(Loc, Ctx, Tags, TagsSize, 0); 298f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 299f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 300f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 301f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 302f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AbiTagAttr(SourceRange R, ASTContext &Ctx 303f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , StringRef *Tags, unsigned TagsSize 304f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 305f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 306f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : Attr(attr::AbiTag, R, SI, false, false) 307f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , tags_Size(TagsSize), tags_(new (Ctx, 16) StringRef[tags_Size]) 308f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 309f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot for (size_t I = 0, E = tags_Size; I != E; 310f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ++I) { 311f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot StringRef Ref = Tags[I]; 312f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!Ref.empty()) { 313f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot char *Mem = new (Ctx, 1) char[Ref.size()]; 314f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(Mem, Ref.data(), Ref.size()); 315f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot tags_[I] = StringRef(Mem, Ref.size()); 316f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 317f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 318f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 319f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 320f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AbiTagAttr(SourceRange R, ASTContext &Ctx 321f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 322f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 323f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : Attr(attr::AbiTag, R, SI, false, false) 324f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , tags_Size(0), tags_(nullptr) 325f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 326f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 327f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 328f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AbiTagAttr *clone(ASTContext &C) const; 329f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 330f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 331f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 332f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot typedef StringRef* tags_iterator; 333f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot tags_iterator tags_begin() const { return tags_; } 334f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot tags_iterator tags_end() const { return tags_ + tags_Size; } 335f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned tags_size() const { return tags_Size; } 336f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::iterator_range<tags_iterator> tags() const { return llvm::make_range(tags_begin(), tags_end()); } 337f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 338f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 339f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 340f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 341f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::AbiTag; } 342f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 343f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 344f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass AcquireCapabilityAttr : public InheritableAttr { 345f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned args_Size; 346f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr * *args_; 347f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 348f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 349f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum Spelling { 350f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_acquire_capability = 0, 351f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CXX11_clang_acquire_capability = 1, 352f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_acquire_shared_capability = 2, 353f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CXX11_clang_acquire_shared_capability = 3, 354f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_exclusive_lock_function = 4, 355f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_shared_lock_function = 5 356f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 357f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 358f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static AcquireCapabilityAttr *CreateImplicit(ASTContext &Ctx, Spelling S, Expr * *Args, unsigned ArgsSize, SourceRange Loc = SourceRange()) { 359f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) AcquireCapabilityAttr(Loc, Ctx, Args, ArgsSize, S); 360f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 361f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 362f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 363f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 364f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AcquireCapabilityAttr(SourceRange R, ASTContext &Ctx 365f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * *Args, unsigned ArgsSize 366f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 367f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 368f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::AcquireCapability, R, SI, true, true) 369f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , args_Size(ArgsSize), args_(new (Ctx, 16) Expr *[args_Size]) 370f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 371f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::copy(Args, Args + args_Size, args_); 372f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 373f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 374f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AcquireCapabilityAttr(SourceRange R, ASTContext &Ctx 375f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 376f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 377f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::AcquireCapability, R, SI, true, true) 378f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , args_Size(0), args_(nullptr) 379f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 380f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 381f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 382f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AcquireCapabilityAttr *clone(ASTContext &C) const; 383f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 384f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 385f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 386f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Spelling getSemanticSpelling() const { 387f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch (SpellingListIndex) { 388f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot default: llvm_unreachable("Unknown spelling list index"); 389f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 0: return GNU_acquire_capability; 390f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 1: return CXX11_clang_acquire_capability; 391f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 2: return GNU_acquire_shared_capability; 392f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 3: return CXX11_clang_acquire_shared_capability; 393f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 4: return GNU_exclusive_lock_function; 394f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 5: return GNU_shared_lock_function; 395f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 396f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 397f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool isShared() const { return SpellingListIndex == 2 || 398f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SpellingListIndex == 3 || 399f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SpellingListIndex == 5; } 400f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot typedef Expr ** args_iterator; 401f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot args_iterator args_begin() const { return args_; } 402f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot args_iterator args_end() const { return args_ + args_Size; } 403f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned args_size() const { return args_Size; } 404f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); } 405f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 406f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 407f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 408f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 409f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::AcquireCapability; } 410f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 411f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 412f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass AcquiredAfterAttr : public InheritableAttr { 413f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned args_Size; 414f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr * *args_; 415f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 416f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 417f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static AcquiredAfterAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Loc = SourceRange()) { 418f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) AcquiredAfterAttr(Loc, Ctx, Args, ArgsSize, 0); 419f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 420f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 421f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 422f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 423f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AcquiredAfterAttr(SourceRange R, ASTContext &Ctx 424f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * *Args, unsigned ArgsSize 425f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 426f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 427f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::AcquiredAfter, R, SI, true, true) 428f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , args_Size(ArgsSize), args_(new (Ctx, 16) Expr *[args_Size]) 429f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 430f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::copy(Args, Args + args_Size, args_); 431f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 432f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 433f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AcquiredAfterAttr(SourceRange R, ASTContext &Ctx 434f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 435f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 436f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::AcquiredAfter, R, SI, true, true) 437f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , args_Size(0), args_(nullptr) 438f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 439f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 440f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 441f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AcquiredAfterAttr *clone(ASTContext &C) const; 442f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 443f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 444f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 445f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot typedef Expr ** args_iterator; 446f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot args_iterator args_begin() const { return args_; } 447f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot args_iterator args_end() const { return args_ + args_Size; } 448f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned args_size() const { return args_Size; } 449f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); } 450f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 451f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 452f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 453f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 454f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::AcquiredAfter; } 455f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 456f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 457f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass AcquiredBeforeAttr : public InheritableAttr { 458f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned args_Size; 459f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr * *args_; 460f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 461f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 462f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static AcquiredBeforeAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Loc = SourceRange()) { 463f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) AcquiredBeforeAttr(Loc, Ctx, Args, ArgsSize, 0); 464f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 465f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 466f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 467f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 468f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AcquiredBeforeAttr(SourceRange R, ASTContext &Ctx 469f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * *Args, unsigned ArgsSize 470f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 471f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 472f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::AcquiredBefore, R, SI, true, true) 473f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , args_Size(ArgsSize), args_(new (Ctx, 16) Expr *[args_Size]) 474f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 475f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::copy(Args, Args + args_Size, args_); 476f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 477f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 478f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AcquiredBeforeAttr(SourceRange R, ASTContext &Ctx 479f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 480f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 481f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::AcquiredBefore, R, SI, true, true) 482f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , args_Size(0), args_(nullptr) 483f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 484f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 485f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 486f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AcquiredBeforeAttr *clone(ASTContext &C) const; 487f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 488f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 489f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 490f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot typedef Expr ** args_iterator; 491f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot args_iterator args_begin() const { return args_; } 492f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot args_iterator args_end() const { return args_ + args_Size; } 493f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned args_size() const { return args_Size; } 494f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); } 495f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 496f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 497f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 498f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 499f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::AcquiredBefore; } 500f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 501f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 502f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass AliasAttr : public Attr { 503f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned aliaseeLength; 504f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotchar *aliasee; 505f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 506f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 507f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static AliasAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Aliasee, SourceRange Loc = SourceRange()) { 508f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) AliasAttr(Loc, Ctx, Aliasee, 0); 509f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 510f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 511f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 512f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 513f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AliasAttr(SourceRange R, ASTContext &Ctx 514f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , llvm::StringRef Aliasee 515f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 516f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 517f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : Attr(attr::Alias, R, SI, false, false) 518f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , aliaseeLength(Aliasee.size()),aliasee(new (Ctx, 1) char[aliaseeLength]) 519f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 520f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!Aliasee.empty()) 521f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(aliasee, Aliasee.data(), aliaseeLength); 522f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 523f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 524f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AliasAttr *clone(ASTContext &C) const; 525f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 526f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 527f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 528f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::StringRef getAliasee() const { 529f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return llvm::StringRef(aliasee, aliaseeLength); 530f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 531f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getAliaseeLength() const { 532f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return aliaseeLength; 533f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 534f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void setAliasee(ASTContext &C, llvm::StringRef S) { 535f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot aliaseeLength = S.size(); 536f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot this->aliasee = new (C, 1) char [aliaseeLength]; 537f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!S.empty()) 538f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(this->aliasee, S.data(), aliaseeLength); 539f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 540f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 541f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 542f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 543f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Alias; } 544f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 545f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 546f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass AlignMac68kAttr : public InheritableAttr { 547f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 548f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static AlignMac68kAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 549f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) AlignMac68kAttr(Loc, Ctx, 0); 550f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 551f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 552f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 553f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 554f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AlignMac68kAttr(SourceRange R, ASTContext &Ctx 555f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 556f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 557f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::AlignMac68k, R, SI, false, false) 558f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 559f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 560f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 561f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AlignMac68kAttr *clone(ASTContext &C) const; 562f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 563f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 564f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 565f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 566f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 567f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::AlignMac68k; } 568f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 569f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 570f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass AlignValueAttr : public Attr { 571f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotExpr * alignment; 572f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 573f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 574f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static AlignValueAttr *CreateImplicit(ASTContext &Ctx, Expr * Alignment, SourceRange Loc = SourceRange()) { 575f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) AlignValueAttr(Loc, Ctx, Alignment, 0); 576f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 577f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 578f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 579f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 580f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AlignValueAttr(SourceRange R, ASTContext &Ctx 581f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * Alignment 582f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 583f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 584f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : Attr(attr::AlignValue, R, SI, false, false) 585f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , alignment(Alignment) 586f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 587f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 588f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 589f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AlignValueAttr *clone(ASTContext &C) const; 590f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 591f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 592f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 593f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr * getAlignment() const { 594f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return alignment; 595f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 596f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 597f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 598f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 599f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::AlignValue; } 600f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 601f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 602f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass AlignedAttr : public InheritableAttr { 603f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotbool isalignmentExpr; 604f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunion { 605f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotExpr *alignmentExpr; 606f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotTypeSourceInfo *alignmentType; 607f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 608f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 609f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 610f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum Spelling { 611f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_aligned = 0, 612f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CXX11_gnu_aligned = 1, 613f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Declspec_align = 2, 614f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Keyword_alignas = 3, 615f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Keyword_Alignas = 4 616f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 617f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 618f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static AlignedAttr *CreateImplicit(ASTContext &Ctx, Spelling S, bool IsAlignmentExpr, void *Alignment, SourceRange Loc = SourceRange()) { 619f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) AlignedAttr(Loc, Ctx, IsAlignmentExpr, Alignment, S); 620f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 621f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 622f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 623f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 624f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AlignedAttr(SourceRange R, ASTContext &Ctx 625f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , bool IsAlignmentExpr, void *Alignment 626f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 627f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 628f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Aligned, R, SI, false, false) 629f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , isalignmentExpr(IsAlignmentExpr) 630f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 631f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (isalignmentExpr) 632f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot alignmentExpr = reinterpret_cast<Expr *>(Alignment); 633f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot else 634f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot alignmentType = reinterpret_cast<TypeSourceInfo *>(Alignment); 635f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 636f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 637f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AlignedAttr(SourceRange R, ASTContext &Ctx 638f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 639f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 640f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Aligned, R, SI, false, false) 641f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , isalignmentExpr(false) 642f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 643f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 644f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 645f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AlignedAttr *clone(ASTContext &C) const; 646f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 647f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 648f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 649f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Spelling getSemanticSpelling() const { 650f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch (SpellingListIndex) { 651f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot default: llvm_unreachable("Unknown spelling list index"); 652f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 0: return GNU_aligned; 653f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 1: return CXX11_gnu_aligned; 654f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 2: return Declspec_align; 655f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 3: return Keyword_alignas; 656f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 4: return Keyword_Alignas; 657f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 658f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 659f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool isGNU() const { return SpellingListIndex == 0 || 660f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SpellingListIndex == 1; } 661f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool isC11() const { return SpellingListIndex == 4; } 662f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool isAlignas() const { return SpellingListIndex == 3 || 663f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SpellingListIndex == 4; } 664f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool isDeclspec() const { return SpellingListIndex == 2; } 665f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool isAlignmentDependent() const; 666f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getAlignment(ASTContext &Ctx) const; 667f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool isAlignmentExpr() const { 668f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return isalignmentExpr; 669f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 670f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr *getAlignmentExpr() const { 671f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot assert(isalignmentExpr); 672f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return alignmentExpr; 673f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 674f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot TypeSourceInfo *getAlignmentType() const { 675f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot assert(!isalignmentExpr); 676f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return alignmentType; 677f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 678f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 679f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 680f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 681f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Aligned; } 682f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 683f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 684f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass AllocAlignAttr : public InheritableAttr { 685f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotint paramIndex; 686f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 687f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 688f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static AllocAlignAttr *CreateImplicit(ASTContext &Ctx, int ParamIndex, SourceRange Loc = SourceRange()) { 689f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) AllocAlignAttr(Loc, Ctx, ParamIndex, 0); 690f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 691f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 692f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 693f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 694f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AllocAlignAttr(SourceRange R, ASTContext &Ctx 695f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , int ParamIndex 696f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 697f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 698f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::AllocAlign, R, SI, false, false) 699f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , paramIndex(ParamIndex) 700f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 701f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 702f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 703f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AllocAlignAttr *clone(ASTContext &C) const; 704f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 705f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 706f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 707f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot int getParamIndex() const { 708f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return paramIndex; 709f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 710f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 711f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 712f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 713f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::AllocAlign; } 714f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 715f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 716f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass AllocSizeAttr : public InheritableAttr { 717f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotint elemSizeParam; 718f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 719f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotint numElemsParam; 720f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 721f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 722f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static AllocSizeAttr *CreateImplicit(ASTContext &Ctx, int ElemSizeParam, int NumElemsParam, SourceRange Loc = SourceRange()) { 723f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) AllocSizeAttr(Loc, Ctx, ElemSizeParam, NumElemsParam, 0); 724f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 725f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 726f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 727f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 728f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AllocSizeAttr(SourceRange R, ASTContext &Ctx 729f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , int ElemSizeParam 730f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , int NumElemsParam 731f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 732f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 733f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::AllocSize, R, SI, false, false) 734f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , elemSizeParam(ElemSizeParam) 735f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , numElemsParam(NumElemsParam) 736f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 737f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 738f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 739f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AllocSizeAttr(SourceRange R, ASTContext &Ctx 740f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , int ElemSizeParam 741f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 742f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 743f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::AllocSize, R, SI, false, false) 744f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , elemSizeParam(ElemSizeParam) 745f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , numElemsParam() 746f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 747f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 748f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 749f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AllocSizeAttr *clone(ASTContext &C) const; 750f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 751f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 752f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 753f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot int getElemSizeParam() const { 754f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return elemSizeParam; 755f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 756f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 757f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot int getNumElemsParam() const { 758f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return numElemsParam; 759f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 760f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 761f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 762f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 763f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::AllocSize; } 764f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 765f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 766f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass AlwaysInlineAttr : public InheritableAttr { 767f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 768f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum Spelling { 769f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_always_inline = 0, 770f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CXX11_gnu_always_inline = 1, 771f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Keyword_forceinline = 2 772f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 773f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 774f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static AlwaysInlineAttr *CreateImplicit(ASTContext &Ctx, Spelling S, SourceRange Loc = SourceRange()) { 775f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) AlwaysInlineAttr(Loc, Ctx, S); 776f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 777f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 778f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 779f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 780f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AlwaysInlineAttr(SourceRange R, ASTContext &Ctx 781f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 782f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 783f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::AlwaysInline, R, SI, false, false) 784f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 785f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 786f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 787f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AlwaysInlineAttr *clone(ASTContext &C) const; 788f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 789f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 790f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 791f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Spelling getSemanticSpelling() const { 792f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch (SpellingListIndex) { 793f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot default: llvm_unreachable("Unknown spelling list index"); 794f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 0: return GNU_always_inline; 795f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 1: return CXX11_gnu_always_inline; 796f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 2: return Keyword_forceinline; 797f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 798f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 799f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 800f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 801f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::AlwaysInline; } 802f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 803f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 804f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass AnalyzerNoReturnAttr : public InheritableAttr { 805f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 806f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static AnalyzerNoReturnAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 807f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) AnalyzerNoReturnAttr(Loc, Ctx, 0); 808f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 809f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 810f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 811f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 812f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AnalyzerNoReturnAttr(SourceRange R, ASTContext &Ctx 813f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 814f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 815f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::AnalyzerNoReturn, R, SI, false, false) 816f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 817f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 818f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 819f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AnalyzerNoReturnAttr *clone(ASTContext &C) const; 820f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 821f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 822f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 823f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 824f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 825f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::AnalyzerNoReturn; } 826f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 827f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 828f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass AnnotateAttr : public InheritableParamAttr { 829f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned annotationLength; 830f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotchar *annotation; 831f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 832f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 833f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static AnnotateAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Annotation, SourceRange Loc = SourceRange()) { 834f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) AnnotateAttr(Loc, Ctx, Annotation, 0); 835f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 836f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 837f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 838f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 839f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AnnotateAttr(SourceRange R, ASTContext &Ctx 840f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , llvm::StringRef Annotation 841f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 842f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 843f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableParamAttr(attr::Annotate, R, SI, false, false) 844f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , annotationLength(Annotation.size()),annotation(new (Ctx, 1) char[annotationLength]) 845f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 846f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!Annotation.empty()) 847f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(annotation, Annotation.data(), annotationLength); 848f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 849f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 850f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AnnotateAttr *clone(ASTContext &C) const; 851f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 852f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 853f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 854f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::StringRef getAnnotation() const { 855f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return llvm::StringRef(annotation, annotationLength); 856f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 857f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getAnnotationLength() const { 858f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return annotationLength; 859f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 860f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void setAnnotation(ASTContext &C, llvm::StringRef S) { 861f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot annotationLength = S.size(); 862f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot this->annotation = new (C, 1) char [annotationLength]; 863f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!S.empty()) 864f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(this->annotation, S.data(), annotationLength); 865f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 866f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 867f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 868f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 869f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Annotate; } 870f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 871f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 872f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass AnyX86InterruptAttr : public InheritableAttr { 873f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 874f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static AnyX86InterruptAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 875f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) AnyX86InterruptAttr(Loc, Ctx, 0); 876f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 877f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 878f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 879f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 880f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AnyX86InterruptAttr(SourceRange R, ASTContext &Ctx 881f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 882f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 883f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::AnyX86Interrupt, R, SI, false, false) 884f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 885f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 886f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 887f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AnyX86InterruptAttr *clone(ASTContext &C) const; 888f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 889f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 890f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 891f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 892f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 893f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::AnyX86Interrupt; } 894f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 895f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 896f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass AnyX86NoCallerSavedRegistersAttr : public InheritableAttr { 897f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 898f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static AnyX86NoCallerSavedRegistersAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 899f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) AnyX86NoCallerSavedRegistersAttr(Loc, Ctx, 0); 900f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 901f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 902f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 903f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 904f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AnyX86NoCallerSavedRegistersAttr(SourceRange R, ASTContext &Ctx 905f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 906f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 907f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::AnyX86NoCallerSavedRegisters, R, SI, false, false) 908f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 909f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 910f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 911f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AnyX86NoCallerSavedRegistersAttr *clone(ASTContext &C) const; 912f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 913f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 914f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 915f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 916f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 917f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::AnyX86NoCallerSavedRegisters; } 918f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 919f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 920f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ArcWeakrefUnavailableAttr : public InheritableAttr { 921f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 922f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ArcWeakrefUnavailableAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 923f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ArcWeakrefUnavailableAttr(Loc, Ctx, 0); 924f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 925f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 926f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 927f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 928f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ArcWeakrefUnavailableAttr(SourceRange R, ASTContext &Ctx 929f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 930f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 931f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ArcWeakrefUnavailable, R, SI, false, false) 932f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 933f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 934f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 935f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ArcWeakrefUnavailableAttr *clone(ASTContext &C) const; 936f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 937f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 938f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 939f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 940f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 941f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ArcWeakrefUnavailable; } 942f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 943f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 944f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ArgumentWithTypeTagAttr : public InheritableAttr { 945f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotIdentifierInfo * argumentKind; 946f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 947f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned argumentIdx; 948f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 949f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned typeTagIdx; 950f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 951f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotbool isPointer; 952f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 953f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 954f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum Spelling { 955f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_argument_with_type_tag = 0, 956f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_pointer_with_type_tag = 1 957f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 958f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 959f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ArgumentWithTypeTagAttr *CreateImplicit(ASTContext &Ctx, Spelling S, IdentifierInfo * ArgumentKind, unsigned ArgumentIdx, unsigned TypeTagIdx, bool IsPointer, SourceRange Loc = SourceRange()) { 960f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ArgumentWithTypeTagAttr(Loc, Ctx, ArgumentKind, ArgumentIdx, TypeTagIdx, IsPointer, S); 961f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 962f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 963f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 964f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 965f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ArgumentWithTypeTagAttr(SourceRange R, ASTContext &Ctx 966f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , IdentifierInfo * ArgumentKind 967f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned ArgumentIdx 968f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned TypeTagIdx 969f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , bool IsPointer 970f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 971f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 972f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ArgumentWithTypeTag, R, SI, false, false) 973f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , argumentKind(ArgumentKind) 974f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , argumentIdx(ArgumentIdx) 975f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , typeTagIdx(TypeTagIdx) 976f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , isPointer(IsPointer) 977f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 978f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 979f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 980f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ArgumentWithTypeTagAttr *clone(ASTContext &C) const; 981f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 982f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 983f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 984f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Spelling getSemanticSpelling() const { 985f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch (SpellingListIndex) { 986f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot default: llvm_unreachable("Unknown spelling list index"); 987f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 0: return GNU_argument_with_type_tag; 988f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 1: return GNU_pointer_with_type_tag; 989f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 990f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 991f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot IdentifierInfo * getArgumentKind() const { 992f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return argumentKind; 993f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 994f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 995f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getArgumentIdx() const { 996f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return argumentIdx; 997f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 998f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 999f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getTypeTagIdx() const { 1000f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return typeTagIdx; 1001f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1002f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1003f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool getIsPointer() const { 1004f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return isPointer; 1005f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1006f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1007f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1008f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1009f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ArgumentWithTypeTag; } 1010f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 1011f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1012f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass AsmLabelAttr : public InheritableAttr { 1013f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned labelLength; 1014f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotchar *label; 1015f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1016f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 1017f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static AsmLabelAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Label, SourceRange Loc = SourceRange()) { 1018f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) AsmLabelAttr(Loc, Ctx, Label, 0); 1019f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 1020f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 1021f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1022f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1023f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AsmLabelAttr(SourceRange R, ASTContext &Ctx 1024f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , llvm::StringRef Label 1025f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 1026f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 1027f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::AsmLabel, R, SI, false, false) 1028f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , labelLength(Label.size()),label(new (Ctx, 1) char[labelLength]) 1029f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 1030f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!Label.empty()) 1031f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(label, Label.data(), labelLength); 1032f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1033f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1034f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AsmLabelAttr *clone(ASTContext &C) const; 1035f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 1036f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 1037f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 1038f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::StringRef getLabel() const { 1039f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return llvm::StringRef(label, labelLength); 1040f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1041f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getLabelLength() const { 1042f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return labelLength; 1043f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1044f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void setLabel(ASTContext &C, llvm::StringRef S) { 1045f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot labelLength = S.size(); 1046f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot this->label = new (C, 1) char [labelLength]; 1047f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!S.empty()) 1048f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(this->label, S.data(), labelLength); 1049f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1050f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1051f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1052f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1053f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::AsmLabel; } 1054f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 1055f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1056f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass AssertCapabilityAttr : public InheritableAttr { 1057f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned args_Size; 1058f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr * *args_; 1059f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1060f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 1061f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum Spelling { 1062f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_assert_capability = 0, 1063f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CXX11_clang_assert_capability = 1, 1064f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_assert_shared_capability = 2, 1065f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CXX11_clang_assert_shared_capability = 3 1066f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 1067f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1068f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static AssertCapabilityAttr *CreateImplicit(ASTContext &Ctx, Spelling S, Expr * *Args, unsigned ArgsSize, SourceRange Loc = SourceRange()) { 1069f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) AssertCapabilityAttr(Loc, Ctx, Args, ArgsSize, S); 1070f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 1071f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 1072f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1073f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1074f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AssertCapabilityAttr(SourceRange R, ASTContext &Ctx 1075f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * *Args, unsigned ArgsSize 1076f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 1077f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 1078f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::AssertCapability, R, SI, true, true) 1079f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , args_Size(ArgsSize), args_(new (Ctx, 16) Expr *[args_Size]) 1080f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 1081f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::copy(Args, Args + args_Size, args_); 1082f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1083f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1084f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AssertCapabilityAttr(SourceRange R, ASTContext &Ctx 1085f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 1086f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 1087f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::AssertCapability, R, SI, true, true) 1088f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , args_Size(0), args_(nullptr) 1089f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 1090f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1091f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1092f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AssertCapabilityAttr *clone(ASTContext &C) const; 1093f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 1094f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 1095f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 1096f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Spelling getSemanticSpelling() const { 1097f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch (SpellingListIndex) { 1098f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot default: llvm_unreachable("Unknown spelling list index"); 1099f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 0: return GNU_assert_capability; 1100f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 1: return CXX11_clang_assert_capability; 1101f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 2: return GNU_assert_shared_capability; 1102f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 3: return CXX11_clang_assert_shared_capability; 1103f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1104f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1105f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool isShared() const { return SpellingListIndex == 2 || 1106f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SpellingListIndex == 3; } 1107f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot typedef Expr ** args_iterator; 1108f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot args_iterator args_begin() const { return args_; } 1109f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot args_iterator args_end() const { return args_ + args_Size; } 1110f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned args_size() const { return args_Size; } 1111f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); } 1112f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1113f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1114f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1115f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1116f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::AssertCapability; } 1117f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 1118f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1119f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass AssertExclusiveLockAttr : public InheritableAttr { 1120f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned args_Size; 1121f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr * *args_; 1122f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1123f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 1124f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static AssertExclusiveLockAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Loc = SourceRange()) { 1125f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) AssertExclusiveLockAttr(Loc, Ctx, Args, ArgsSize, 0); 1126f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 1127f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 1128f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1129f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1130f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AssertExclusiveLockAttr(SourceRange R, ASTContext &Ctx 1131f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * *Args, unsigned ArgsSize 1132f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 1133f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 1134f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::AssertExclusiveLock, R, SI, true, true) 1135f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , args_Size(ArgsSize), args_(new (Ctx, 16) Expr *[args_Size]) 1136f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 1137f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::copy(Args, Args + args_Size, args_); 1138f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1139f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1140f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AssertExclusiveLockAttr(SourceRange R, ASTContext &Ctx 1141f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 1142f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 1143f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::AssertExclusiveLock, R, SI, true, true) 1144f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , args_Size(0), args_(nullptr) 1145f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 1146f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1147f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1148f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AssertExclusiveLockAttr *clone(ASTContext &C) const; 1149f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 1150f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 1151f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 1152f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot typedef Expr ** args_iterator; 1153f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot args_iterator args_begin() const { return args_; } 1154f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot args_iterator args_end() const { return args_ + args_Size; } 1155f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned args_size() const { return args_Size; } 1156f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); } 1157f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1158f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1159f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1160f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1161f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::AssertExclusiveLock; } 1162f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 1163f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1164f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass AssertSharedLockAttr : public InheritableAttr { 1165f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned args_Size; 1166f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr * *args_; 1167f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1168f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 1169f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static AssertSharedLockAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Loc = SourceRange()) { 1170f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) AssertSharedLockAttr(Loc, Ctx, Args, ArgsSize, 0); 1171f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 1172f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 1173f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1174f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1175f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AssertSharedLockAttr(SourceRange R, ASTContext &Ctx 1176f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * *Args, unsigned ArgsSize 1177f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 1178f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 1179f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::AssertSharedLock, R, SI, true, true) 1180f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , args_Size(ArgsSize), args_(new (Ctx, 16) Expr *[args_Size]) 1181f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 1182f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::copy(Args, Args + args_Size, args_); 1183f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1184f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1185f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AssertSharedLockAttr(SourceRange R, ASTContext &Ctx 1186f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 1187f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 1188f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::AssertSharedLock, R, SI, true, true) 1189f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , args_Size(0), args_(nullptr) 1190f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 1191f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1192f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1193f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AssertSharedLockAttr *clone(ASTContext &C) const; 1194f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 1195f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 1196f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 1197f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot typedef Expr ** args_iterator; 1198f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot args_iterator args_begin() const { return args_; } 1199f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot args_iterator args_end() const { return args_ + args_Size; } 1200f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned args_size() const { return args_Size; } 1201f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); } 1202f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1203f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1204f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1205f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1206f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::AssertSharedLock; } 1207f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 1208f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1209f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass AssumeAlignedAttr : public InheritableAttr { 1210f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotExpr * alignment; 1211f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1212f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotExpr * offset; 1213f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1214f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 1215f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static AssumeAlignedAttr *CreateImplicit(ASTContext &Ctx, Expr * Alignment, Expr * Offset, SourceRange Loc = SourceRange()) { 1216f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) AssumeAlignedAttr(Loc, Ctx, Alignment, Offset, 0); 1217f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 1218f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 1219f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1220f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1221f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AssumeAlignedAttr(SourceRange R, ASTContext &Ctx 1222f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * Alignment 1223f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * Offset 1224f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 1225f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 1226f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::AssumeAligned, R, SI, false, false) 1227f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , alignment(Alignment) 1228f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , offset(Offset) 1229f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 1230f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1231f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1232f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AssumeAlignedAttr(SourceRange R, ASTContext &Ctx 1233f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * Alignment 1234f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 1235f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 1236f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::AssumeAligned, R, SI, false, false) 1237f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , alignment(Alignment) 1238f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , offset() 1239f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 1240f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1241f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1242f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AssumeAlignedAttr *clone(ASTContext &C) const; 1243f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 1244f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 1245f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 1246f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr * getAlignment() const { 1247f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return alignment; 1248f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1249f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1250f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr * getOffset() const { 1251f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return offset; 1252f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1253f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1254f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1255f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1256f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::AssumeAligned; } 1257f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 1258f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1259f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass AvailabilityAttr : public InheritableAttr { 1260f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotIdentifierInfo * platform; 1261f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1262f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotVersionTuple introduced; 1263f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1264f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1265f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotVersionTuple deprecated; 1266f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1267f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1268f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotVersionTuple obsoleted; 1269f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1270f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1271f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotbool unavailable; 1272f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1273f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned messageLength; 1274f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotchar *message; 1275f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1276f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotbool strict; 1277f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1278f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned replacementLength; 1279f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotchar *replacement; 1280f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1281f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 1282f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static AvailabilityAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * Platform, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted, bool Unavailable, llvm::StringRef Message, bool Strict, llvm::StringRef Replacement, SourceRange Loc = SourceRange()) { 1283f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) AvailabilityAttr(Loc, Ctx, Platform, Introduced, Deprecated, Obsoleted, Unavailable, Message, Strict, Replacement, 0); 1284f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 1285f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 1286f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1287f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1288f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AvailabilityAttr(SourceRange R, ASTContext &Ctx 1289f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , IdentifierInfo * Platform 1290f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , VersionTuple Introduced 1291f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , VersionTuple Deprecated 1292f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , VersionTuple Obsoleted 1293f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , bool Unavailable 1294f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , llvm::StringRef Message 1295f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , bool Strict 1296f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , llvm::StringRef Replacement 1297f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 1298f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 1299f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Availability, R, SI, false, true) 1300f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , platform(Platform) 1301f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , introduced(Introduced) 1302f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , deprecated(Deprecated) 1303f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , obsoleted(Obsoleted) 1304f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unavailable(Unavailable) 1305f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , messageLength(Message.size()),message(new (Ctx, 1) char[messageLength]) 1306f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , strict(Strict) 1307f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , replacementLength(Replacement.size()),replacement(new (Ctx, 1) char[replacementLength]) 1308f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 1309f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!Message.empty()) 1310f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(message, Message.data(), messageLength); 1311f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!Replacement.empty()) 1312f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(replacement, Replacement.data(), replacementLength); 1313f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1314f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1315f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AvailabilityAttr *clone(ASTContext &C) const; 1316f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 1317f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 1318f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 1319f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot IdentifierInfo * getPlatform() const { 1320f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return platform; 1321f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1322f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1323f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot VersionTuple getIntroduced() const { 1324f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return introduced; 1325f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1326f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void setIntroduced(ASTContext &C, VersionTuple V) { 1327f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot introduced = V; 1328f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1329f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1330f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot VersionTuple getDeprecated() const { 1331f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return deprecated; 1332f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1333f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void setDeprecated(ASTContext &C, VersionTuple V) { 1334f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot deprecated = V; 1335f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1336f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1337f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot VersionTuple getObsoleted() const { 1338f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return obsoleted; 1339f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1340f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void setObsoleted(ASTContext &C, VersionTuple V) { 1341f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot obsoleted = V; 1342f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1343f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1344f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool getUnavailable() const { 1345f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return unavailable; 1346f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1347f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1348f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::StringRef getMessage() const { 1349f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return llvm::StringRef(message, messageLength); 1350f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1351f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getMessageLength() const { 1352f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return messageLength; 1353f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1354f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void setMessage(ASTContext &C, llvm::StringRef S) { 1355f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot messageLength = S.size(); 1356f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot this->message = new (C, 1) char [messageLength]; 1357f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!S.empty()) 1358f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(this->message, S.data(), messageLength); 1359f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1360f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1361f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool getStrict() const { 1362f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return strict; 1363f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1364f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1365f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::StringRef getReplacement() const { 1366f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return llvm::StringRef(replacement, replacementLength); 1367f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1368f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getReplacementLength() const { 1369f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return replacementLength; 1370f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1371f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void setReplacement(ASTContext &C, llvm::StringRef S) { 1372f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot replacementLength = S.size(); 1373f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot this->replacement = new (C, 1) char [replacementLength]; 1374f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!S.empty()) 1375f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(this->replacement, S.data(), replacementLength); 1376f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1377f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1378f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotstatic llvm::StringRef getPrettyPlatformName(llvm::StringRef Platform) { 1379f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return llvm::StringSwitch<llvm::StringRef>(Platform) 1380f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("android", "Android") 1381f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("ios", "iOS") 1382f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("macos", "macOS") 1383f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("tvos", "tvOS") 1384f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("watchos", "watchOS") 1385f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("ios_app_extension", "iOS (App Extension)") 1386f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("macos_app_extension", "macOS (App Extension)") 1387f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("tvos_app_extension", "tvOS (App Extension)") 1388f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("watchos_app_extension", "watchOS (App Extension)") 1389f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Default(llvm::StringRef()); 1390f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot} 1391f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotstatic llvm::StringRef getPlatformNameSourceSpelling(llvm::StringRef Platform) { 1392f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return llvm::StringSwitch<llvm::StringRef>(Platform) 1393f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("ios", "iOS") 1394f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("macos", "macOS") 1395f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("tvos", "tvOS") 1396f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("watchos", "watchOS") 1397f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("ios_app_extension", "iOSApplicationExtension") 1398f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("macos_app_extension", "macOSApplicationExtension") 1399f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("tvos_app_extension", "tvOSApplicationExtension") 1400f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("watchos_app_extension", "watchOSApplicationExtension") 1401f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Default(Platform); 1402f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot} 1403f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotstatic llvm::StringRef canonicalizePlatformName(llvm::StringRef Platform) { 1404f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return llvm::StringSwitch<llvm::StringRef>(Platform) 1405f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("iOS", "ios") 1406f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("macOS", "macos") 1407f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("tvOS", "tvos") 1408f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("watchOS", "watchos") 1409f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("iOSApplicationExtension", "ios_app_extension") 1410f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("macOSApplicationExtension", "macos_app_extension") 1411f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("tvOSApplicationExtension", "tvos_app_extension") 1412f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("watchOSApplicationExtension", "watchos_app_extension") 1413f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Default(Platform); 1414f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot} 1415f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1416f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Availability; } 1417f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 1418f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1419f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass BlocksAttr : public InheritableAttr { 1420f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 1421f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum BlockType { 1422f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ByRef 1423f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 1424f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotprivate: 1425f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot BlockType type; 1426f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1427f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 1428f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static BlocksAttr *CreateImplicit(ASTContext &Ctx, BlockType Type, SourceRange Loc = SourceRange()) { 1429f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) BlocksAttr(Loc, Ctx, Type, 0); 1430f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 1431f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 1432f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1433f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1434f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot BlocksAttr(SourceRange R, ASTContext &Ctx 1435f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , BlockType Type 1436f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 1437f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 1438f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Blocks, R, SI, false, false) 1439f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , type(Type) 1440f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 1441f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1442f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1443f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot BlocksAttr *clone(ASTContext &C) const; 1444f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 1445f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 1446f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 1447f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot BlockType getType() const { 1448f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return type; 1449f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1450f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1451f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool ConvertStrToBlockType(StringRef Val, BlockType &Out) { 1452f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Optional<BlockType> R = llvm::StringSwitch<Optional<BlockType>>(Val) 1453f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("byref", BlocksAttr::ByRef) 1454f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Default(Optional<BlockType>()); 1455f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (R) { 1456f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Out = *R; 1457f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return true; 1458f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1459f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return false; 1460f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1461f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1462f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static const char *ConvertBlockTypeToStr(BlockType Val) { 1463f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch(Val) { 1464f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case BlocksAttr::ByRef: return "byref"; 1465f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1466f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm_unreachable("No enumerator with that value"); 1467f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1468f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1469f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1470f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Blocks; } 1471f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 1472f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1473f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass C11NoReturnAttr : public InheritableAttr { 1474f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 1475f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static C11NoReturnAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 1476f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) C11NoReturnAttr(Loc, Ctx, 0); 1477f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 1478f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 1479f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1480f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1481f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot C11NoReturnAttr(SourceRange R, ASTContext &Ctx 1482f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 1483f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 1484f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::C11NoReturn, R, SI, false, false) 1485f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 1486f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1487f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1488f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot C11NoReturnAttr *clone(ASTContext &C) const; 1489f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 1490f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 1491f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 1492f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1493f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1494f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::C11NoReturn; } 1495f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 1496f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1497f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass CDeclAttr : public InheritableAttr { 1498f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 1499f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static CDeclAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 1500f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) CDeclAttr(Loc, Ctx, 0); 1501f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 1502f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 1503f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1504f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1505f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CDeclAttr(SourceRange R, ASTContext &Ctx 1506f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 1507f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 1508f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::CDecl, R, SI, false, false) 1509f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 1510f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1511f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1512f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CDeclAttr *clone(ASTContext &C) const; 1513f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 1514f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 1515f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 1516f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1517f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1518f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::CDecl; } 1519f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 1520f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1521f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass CFAuditedTransferAttr : public InheritableAttr { 1522f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 1523f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static CFAuditedTransferAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 1524f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) CFAuditedTransferAttr(Loc, Ctx, 0); 1525f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 1526f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 1527f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1528f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1529f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CFAuditedTransferAttr(SourceRange R, ASTContext &Ctx 1530f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 1531f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 1532f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::CFAuditedTransfer, R, SI, false, false) 1533f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 1534f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1535f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1536f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CFAuditedTransferAttr *clone(ASTContext &C) const; 1537f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 1538f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 1539f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 1540f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1541f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1542f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::CFAuditedTransfer; } 1543f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 1544f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1545f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass CFConsumedAttr : public InheritableParamAttr { 1546f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 1547f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static CFConsumedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 1548f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) CFConsumedAttr(Loc, Ctx, 0); 1549f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 1550f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 1551f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1552f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1553f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CFConsumedAttr(SourceRange R, ASTContext &Ctx 1554f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 1555f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 1556f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableParamAttr(attr::CFConsumed, R, SI, false, false) 1557f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 1558f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1559f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1560f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CFConsumedAttr *clone(ASTContext &C) const; 1561f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 1562f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 1563f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 1564f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1565f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1566f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::CFConsumed; } 1567f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 1568f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1569f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass CFReturnsNotRetainedAttr : public InheritableAttr { 1570f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 1571f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static CFReturnsNotRetainedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 1572f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) CFReturnsNotRetainedAttr(Loc, Ctx, 0); 1573f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 1574f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 1575f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1576f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1577f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CFReturnsNotRetainedAttr(SourceRange R, ASTContext &Ctx 1578f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 1579f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 1580f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::CFReturnsNotRetained, R, SI, false, false) 1581f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 1582f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1583f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1584f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CFReturnsNotRetainedAttr *clone(ASTContext &C) const; 1585f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 1586f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 1587f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 1588f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1589f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1590f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::CFReturnsNotRetained; } 1591f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 1592f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1593f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass CFReturnsRetainedAttr : public InheritableAttr { 1594f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 1595f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static CFReturnsRetainedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 1596f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) CFReturnsRetainedAttr(Loc, Ctx, 0); 1597f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 1598f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 1599f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1600f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1601f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CFReturnsRetainedAttr(SourceRange R, ASTContext &Ctx 1602f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 1603f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 1604f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::CFReturnsRetained, R, SI, false, false) 1605f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 1606f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1607f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1608f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CFReturnsRetainedAttr *clone(ASTContext &C) const; 1609f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 1610f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 1611f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 1612f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1613f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1614f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::CFReturnsRetained; } 1615f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 1616f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1617f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass CFUnknownTransferAttr : public InheritableAttr { 1618f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 1619f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static CFUnknownTransferAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 1620f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) CFUnknownTransferAttr(Loc, Ctx, 0); 1621f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 1622f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 1623f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1624f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1625f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CFUnknownTransferAttr(SourceRange R, ASTContext &Ctx 1626f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 1627f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 1628f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::CFUnknownTransfer, R, SI, false, false) 1629f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 1630f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1631f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1632f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CFUnknownTransferAttr *clone(ASTContext &C) const; 1633f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 1634f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 1635f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 1636f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1637f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1638f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::CFUnknownTransfer; } 1639f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 1640f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1641f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass CUDAConstantAttr : public InheritableAttr { 1642f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 1643f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static CUDAConstantAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 1644f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) CUDAConstantAttr(Loc, Ctx, 0); 1645f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 1646f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 1647f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1648f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1649f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CUDAConstantAttr(SourceRange R, ASTContext &Ctx 1650f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 1651f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 1652f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::CUDAConstant, R, SI, false, false) 1653f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 1654f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1655f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1656f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CUDAConstantAttr *clone(ASTContext &C) const; 1657f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 1658f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 1659f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 1660f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1661f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1662f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::CUDAConstant; } 1663f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 1664f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1665f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass CUDADeviceAttr : public InheritableAttr { 1666f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 1667f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static CUDADeviceAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 1668f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) CUDADeviceAttr(Loc, Ctx, 0); 1669f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 1670f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 1671f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1672f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1673f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CUDADeviceAttr(SourceRange R, ASTContext &Ctx 1674f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 1675f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 1676f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::CUDADevice, R, SI, false, false) 1677f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 1678f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1679f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1680f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CUDADeviceAttr *clone(ASTContext &C) const; 1681f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 1682f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 1683f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 1684f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1685f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1686f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::CUDADevice; } 1687f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 1688f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1689f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass CUDAGlobalAttr : public InheritableAttr { 1690f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 1691f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static CUDAGlobalAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 1692f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) CUDAGlobalAttr(Loc, Ctx, 0); 1693f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 1694f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 1695f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1696f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1697f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CUDAGlobalAttr(SourceRange R, ASTContext &Ctx 1698f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 1699f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 1700f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::CUDAGlobal, R, SI, false, false) 1701f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 1702f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1703f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1704f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CUDAGlobalAttr *clone(ASTContext &C) const; 1705f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 1706f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 1707f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 1708f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1709f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1710f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::CUDAGlobal; } 1711f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 1712f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1713f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass CUDAHostAttr : public InheritableAttr { 1714f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 1715f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static CUDAHostAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 1716f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) CUDAHostAttr(Loc, Ctx, 0); 1717f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 1718f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 1719f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1720f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1721f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CUDAHostAttr(SourceRange R, ASTContext &Ctx 1722f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 1723f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 1724f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::CUDAHost, R, SI, false, false) 1725f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 1726f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1727f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1728f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CUDAHostAttr *clone(ASTContext &C) const; 1729f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 1730f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 1731f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 1732f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1733f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1734f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::CUDAHost; } 1735f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 1736f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1737f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass CUDAInvalidTargetAttr : public InheritableAttr { 1738f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 1739f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static CUDAInvalidTargetAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 1740f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) CUDAInvalidTargetAttr(Loc, Ctx, 0); 1741f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 1742f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 1743f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1744f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1745f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CUDAInvalidTargetAttr(SourceRange R, ASTContext &Ctx 1746f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 1747f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 1748f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::CUDAInvalidTarget, R, SI, false, false) 1749f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 1750f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1751f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1752f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CUDAInvalidTargetAttr *clone(ASTContext &C) const; 1753f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 1754f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 1755f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 1756f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1757f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1758f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::CUDAInvalidTarget; } 1759f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 1760f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1761f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass CUDALaunchBoundsAttr : public InheritableAttr { 1762f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotExpr * maxThreads; 1763f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1764f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotExpr * minBlocks; 1765f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1766f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 1767f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static CUDALaunchBoundsAttr *CreateImplicit(ASTContext &Ctx, Expr * MaxThreads, Expr * MinBlocks, SourceRange Loc = SourceRange()) { 1768f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) CUDALaunchBoundsAttr(Loc, Ctx, MaxThreads, MinBlocks, 0); 1769f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 1770f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 1771f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1772f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1773f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CUDALaunchBoundsAttr(SourceRange R, ASTContext &Ctx 1774f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * MaxThreads 1775f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * MinBlocks 1776f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 1777f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 1778f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::CUDALaunchBounds, R, SI, false, false) 1779f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , maxThreads(MaxThreads) 1780f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , minBlocks(MinBlocks) 1781f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 1782f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1783f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1784f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CUDALaunchBoundsAttr(SourceRange R, ASTContext &Ctx 1785f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * MaxThreads 1786f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 1787f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 1788f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::CUDALaunchBounds, R, SI, false, false) 1789f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , maxThreads(MaxThreads) 1790f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , minBlocks() 1791f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 1792f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1793f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1794f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CUDALaunchBoundsAttr *clone(ASTContext &C) const; 1795f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 1796f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 1797f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 1798f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr * getMaxThreads() const { 1799f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return maxThreads; 1800f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1801f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1802f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr * getMinBlocks() const { 1803f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return minBlocks; 1804f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1805f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1806f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1807f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1808f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::CUDALaunchBounds; } 1809f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 1810f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1811f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass CUDASharedAttr : public InheritableAttr { 1812f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 1813f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static CUDASharedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 1814f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) CUDASharedAttr(Loc, Ctx, 0); 1815f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 1816f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 1817f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1818f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1819f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CUDASharedAttr(SourceRange R, ASTContext &Ctx 1820f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 1821f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 1822f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::CUDAShared, R, SI, false, false) 1823f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 1824f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1825f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1826f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CUDASharedAttr *clone(ASTContext &C) const; 1827f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 1828f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 1829f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 1830f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1831f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1832f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::CUDAShared; } 1833f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 1834f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1835f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass CXX11NoReturnAttr : public InheritableAttr { 1836f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 1837f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static CXX11NoReturnAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 1838f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) CXX11NoReturnAttr(Loc, Ctx, 0); 1839f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 1840f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 1841f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1842f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1843f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CXX11NoReturnAttr(SourceRange R, ASTContext &Ctx 1844f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 1845f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 1846f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::CXX11NoReturn, R, SI, false, false) 1847f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 1848f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1849f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1850f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CXX11NoReturnAttr *clone(ASTContext &C) const; 1851f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 1852f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 1853f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 1854f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1855f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1856f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::CXX11NoReturn; } 1857f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 1858f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1859f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass CallableWhenAttr : public InheritableAttr { 1860f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 1861f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum ConsumedState { 1862f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Unknown, 1863f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Consumed, 1864f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Unconsumed 1865f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 1866f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotprivate: 1867f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned callableStates_Size; 1868f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ConsumedState *callableStates_; 1869f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1870f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 1871f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static CallableWhenAttr *CreateImplicit(ASTContext &Ctx, ConsumedState *CallableStates, unsigned CallableStatesSize, SourceRange Loc = SourceRange()) { 1872f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) CallableWhenAttr(Loc, Ctx, CallableStates, CallableStatesSize, 0); 1873f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 1874f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 1875f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1876f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1877f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CallableWhenAttr(SourceRange R, ASTContext &Ctx 1878f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , ConsumedState *CallableStates, unsigned CallableStatesSize 1879f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 1880f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 1881f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::CallableWhen, R, SI, false, false) 1882f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , callableStates_Size(CallableStatesSize), callableStates_(new (Ctx, 16) ConsumedState[callableStates_Size]) 1883f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 1884f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::copy(CallableStates, CallableStates + callableStates_Size, callableStates_); 1885f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1886f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1887f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CallableWhenAttr(SourceRange R, ASTContext &Ctx 1888f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 1889f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 1890f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::CallableWhen, R, SI, false, false) 1891f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , callableStates_Size(0), callableStates_(nullptr) 1892f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 1893f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1894f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1895f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CallableWhenAttr *clone(ASTContext &C) const; 1896f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 1897f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 1898f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 1899f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot typedef ConsumedState* callableStates_iterator; 1900f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot callableStates_iterator callableStates_begin() const { return callableStates_; } 1901f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot callableStates_iterator callableStates_end() const { return callableStates_ + callableStates_Size; } 1902f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned callableStates_size() const { return callableStates_Size; } 1903f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::iterator_range<callableStates_iterator> callableStates() const { return llvm::make_range(callableStates_begin(), callableStates_end()); } 1904f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1905f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1906f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool ConvertStrToConsumedState(StringRef Val, ConsumedState &Out) { 1907f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Optional<ConsumedState> R = llvm::StringSwitch<Optional<ConsumedState>>(Val) 1908f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("unknown", CallableWhenAttr::Unknown) 1909f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("consumed", CallableWhenAttr::Consumed) 1910f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("unconsumed", CallableWhenAttr::Unconsumed) 1911f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Default(Optional<ConsumedState>()); 1912f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (R) { 1913f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Out = *R; 1914f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return true; 1915f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1916f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return false; 1917f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1918f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1919f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static const char *ConvertConsumedStateToStr(ConsumedState Val) { 1920f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch(Val) { 1921f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case CallableWhenAttr::Unknown: return "unknown"; 1922f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case CallableWhenAttr::Consumed: return "consumed"; 1923f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case CallableWhenAttr::Unconsumed: return "unconsumed"; 1924f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1925f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm_unreachable("No enumerator with that value"); 1926f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1927f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1928f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1929f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::CallableWhen; } 1930f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 1931f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1932f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass CapabilityAttr : public InheritableAttr { 1933f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned nameLength; 1934f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotchar *name; 1935f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1936f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 1937f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum Spelling { 1938f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_capability = 0, 1939f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CXX11_clang_capability = 1, 1940f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_shared_capability = 2, 1941f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CXX11_clang_shared_capability = 3 1942f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 1943f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1944f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static CapabilityAttr *CreateImplicit(ASTContext &Ctx, Spelling S, llvm::StringRef Name, SourceRange Loc = SourceRange()) { 1945f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) CapabilityAttr(Loc, Ctx, Name, S); 1946f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 1947f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 1948f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1949f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1950f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CapabilityAttr(SourceRange R, ASTContext &Ctx 1951f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , llvm::StringRef Name 1952f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 1953f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 1954f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Capability, R, SI, false, false) 1955f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , nameLength(Name.size()),name(new (Ctx, 1) char[nameLength]) 1956f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 1957f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!Name.empty()) 1958f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(name, Name.data(), nameLength); 1959f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1960f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1961f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CapabilityAttr *clone(ASTContext &C) const; 1962f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 1963f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 1964f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 1965f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Spelling getSemanticSpelling() const { 1966f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch (SpellingListIndex) { 1967f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot default: llvm_unreachable("Unknown spelling list index"); 1968f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 0: return GNU_capability; 1969f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 1: return CXX11_clang_capability; 1970f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 2: return GNU_shared_capability; 1971f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 3: return CXX11_clang_shared_capability; 1972f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1973f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1974f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool isShared() const { return SpellingListIndex == 2 || 1975f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SpellingListIndex == 3; } 1976f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::StringRef getName() const { 1977f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return llvm::StringRef(name, nameLength); 1978f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1979f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getNameLength() const { 1980f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return nameLength; 1981f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1982f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void setName(ASTContext &C, llvm::StringRef S) { 1983f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot nameLength = S.size(); 1984f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot this->name = new (C, 1) char [nameLength]; 1985f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!S.empty()) 1986f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(this->name, S.data(), nameLength); 1987f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 1988f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1989f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1990f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool isMutex() const { return getName().equals_lower("mutex"); } 1991f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool isRole() const { return getName().equals_lower("role"); } 1992f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1993f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1994f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Capability; } 1995f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 1996f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 1997f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass CapturedRecordAttr : public InheritableAttr { 1998f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 1999f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static CapturedRecordAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 2000f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) CapturedRecordAttr(Loc, Ctx, 0); 2001f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 2002f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 2003f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2004f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2005f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CapturedRecordAttr(SourceRange R, ASTContext &Ctx 2006f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 2007f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 2008f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::CapturedRecord, R, SI, false, false) 2009f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 2010f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2011f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2012f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CapturedRecordAttr *clone(ASTContext &C) const; 2013f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 2014f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 2015f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 2016f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2017f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2018f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::CapturedRecord; } 2019f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 2020f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2021f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass CarriesDependencyAttr : public InheritableParamAttr { 2022f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 2023f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static CarriesDependencyAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 2024f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) CarriesDependencyAttr(Loc, Ctx, 0); 2025f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 2026f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 2027f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2028f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2029f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CarriesDependencyAttr(SourceRange R, ASTContext &Ctx 2030f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 2031f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 2032f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableParamAttr(attr::CarriesDependency, R, SI, false, false) 2033f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 2034f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2035f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2036f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CarriesDependencyAttr *clone(ASTContext &C) const; 2037f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 2038f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 2039f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 2040f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2041f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2042f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::CarriesDependency; } 2043f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 2044f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2045f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass CleanupAttr : public InheritableAttr { 2046f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotFunctionDecl * functionDecl; 2047f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2048f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 2049f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static CleanupAttr *CreateImplicit(ASTContext &Ctx, FunctionDecl * FunctionDecl, SourceRange Loc = SourceRange()) { 2050f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) CleanupAttr(Loc, Ctx, FunctionDecl, 0); 2051f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 2052f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 2053f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2054f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2055f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CleanupAttr(SourceRange R, ASTContext &Ctx 2056f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , FunctionDecl * FunctionDecl 2057f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 2058f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 2059f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Cleanup, R, SI, false, false) 2060f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , functionDecl(FunctionDecl) 2061f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 2062f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2063f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2064f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CleanupAttr *clone(ASTContext &C) const; 2065f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 2066f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 2067f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 2068f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot FunctionDecl * getFunctionDecl() const { 2069f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return functionDecl; 2070f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2071f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2072f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2073f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2074f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Cleanup; } 2075f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 2076f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2077f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ColdAttr : public InheritableAttr { 2078f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 2079f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ColdAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 2080f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ColdAttr(Loc, Ctx, 0); 2081f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 2082f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 2083f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2084f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2085f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ColdAttr(SourceRange R, ASTContext &Ctx 2086f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 2087f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 2088f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Cold, R, SI, false, false) 2089f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 2090f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2091f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2092f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ColdAttr *clone(ASTContext &C) const; 2093f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 2094f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 2095f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 2096f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2097f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2098f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Cold; } 2099f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 2100f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2101f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass CommonAttr : public InheritableAttr { 2102f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 2103f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static CommonAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 2104f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) CommonAttr(Loc, Ctx, 0); 2105f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 2106f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 2107f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2108f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2109f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CommonAttr(SourceRange R, ASTContext &Ctx 2110f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 2111f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 2112f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Common, R, SI, false, false) 2113f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 2114f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2115f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2116f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CommonAttr *clone(ASTContext &C) const; 2117f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 2118f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 2119f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 2120f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2121f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2122f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Common; } 2123f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 2124f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2125f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ConstAttr : public InheritableAttr { 2126f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 2127f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ConstAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 2128f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ConstAttr(Loc, Ctx, 0); 2129f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 2130f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 2131f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2132f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2133f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ConstAttr(SourceRange R, ASTContext &Ctx 2134f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 2135f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 2136f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Const, R, SI, false, false) 2137f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 2138f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2139f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2140f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ConstAttr *clone(ASTContext &C) const; 2141f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 2142f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 2143f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 2144f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2145f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2146f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Const; } 2147f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 2148f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2149f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ConstructorAttr : public InheritableAttr { 2150f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotint priority; 2151f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2152f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 2153f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ConstructorAttr *CreateImplicit(ASTContext &Ctx, int Priority, SourceRange Loc = SourceRange()) { 2154f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ConstructorAttr(Loc, Ctx, Priority, 0); 2155f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 2156f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 2157f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2158f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2159f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ConstructorAttr(SourceRange R, ASTContext &Ctx 2160f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , int Priority 2161f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 2162f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 2163f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Constructor, R, SI, false, false) 2164f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , priority(Priority) 2165f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 2166f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2167f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2168f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ConstructorAttr(SourceRange R, ASTContext &Ctx 2169f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 2170f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 2171f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Constructor, R, SI, false, false) 2172f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , priority() 2173f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 2174f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2175f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2176f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ConstructorAttr *clone(ASTContext &C) const; 2177f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 2178f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 2179f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 2180f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot int getPriority() const { 2181f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return priority; 2182f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2183f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2184f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static const int DefaultPriority = 65535; 2185f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2186f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2187f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2188f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Constructor; } 2189f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 2190f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2191f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ConsumableAttr : public InheritableAttr { 2192f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 2193f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum ConsumedState { 2194f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Unknown, 2195f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Consumed, 2196f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Unconsumed 2197f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 2198f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotprivate: 2199f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ConsumedState defaultState; 2200f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2201f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 2202f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ConsumableAttr *CreateImplicit(ASTContext &Ctx, ConsumedState DefaultState, SourceRange Loc = SourceRange()) { 2203f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ConsumableAttr(Loc, Ctx, DefaultState, 0); 2204f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 2205f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 2206f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2207f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2208f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ConsumableAttr(SourceRange R, ASTContext &Ctx 2209f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , ConsumedState DefaultState 2210f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 2211f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 2212f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Consumable, R, SI, false, false) 2213f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , defaultState(DefaultState) 2214f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 2215f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2216f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2217f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ConsumableAttr *clone(ASTContext &C) const; 2218f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 2219f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 2220f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 2221f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ConsumedState getDefaultState() const { 2222f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return defaultState; 2223f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2224f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2225f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool ConvertStrToConsumedState(StringRef Val, ConsumedState &Out) { 2226f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Optional<ConsumedState> R = llvm::StringSwitch<Optional<ConsumedState>>(Val) 2227f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("unknown", ConsumableAttr::Unknown) 2228f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("consumed", ConsumableAttr::Consumed) 2229f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("unconsumed", ConsumableAttr::Unconsumed) 2230f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Default(Optional<ConsumedState>()); 2231f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (R) { 2232f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Out = *R; 2233f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return true; 2234f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2235f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return false; 2236f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2237f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2238f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static const char *ConvertConsumedStateToStr(ConsumedState Val) { 2239f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch(Val) { 2240f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case ConsumableAttr::Unknown: return "unknown"; 2241f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case ConsumableAttr::Consumed: return "consumed"; 2242f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case ConsumableAttr::Unconsumed: return "unconsumed"; 2243f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2244f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm_unreachable("No enumerator with that value"); 2245f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2246f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2247f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2248f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Consumable; } 2249f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 2250f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2251f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ConsumableAutoCastAttr : public InheritableAttr { 2252f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 2253f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ConsumableAutoCastAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 2254f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ConsumableAutoCastAttr(Loc, Ctx, 0); 2255f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 2256f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 2257f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2258f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2259f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ConsumableAutoCastAttr(SourceRange R, ASTContext &Ctx 2260f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 2261f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 2262f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ConsumableAutoCast, R, SI, false, false) 2263f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 2264f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2265f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2266f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ConsumableAutoCastAttr *clone(ASTContext &C) const; 2267f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 2268f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 2269f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 2270f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2271f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2272f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ConsumableAutoCast; } 2273f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 2274f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2275f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ConsumableSetOnReadAttr : public InheritableAttr { 2276f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 2277f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ConsumableSetOnReadAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 2278f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ConsumableSetOnReadAttr(Loc, Ctx, 0); 2279f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 2280f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 2281f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2282f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2283f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ConsumableSetOnReadAttr(SourceRange R, ASTContext &Ctx 2284f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 2285f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 2286f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ConsumableSetOnRead, R, SI, false, false) 2287f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 2288f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2289f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2290f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ConsumableSetOnReadAttr *clone(ASTContext &C) const; 2291f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 2292f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 2293f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 2294f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2295f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2296f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ConsumableSetOnRead; } 2297f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 2298f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2299f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ConvergentAttr : public InheritableAttr { 2300f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 2301f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ConvergentAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 2302f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ConvergentAttr(Loc, Ctx, 0); 2303f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 2304f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 2305f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2306f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2307f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ConvergentAttr(SourceRange R, ASTContext &Ctx 2308f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 2309f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 2310f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Convergent, R, SI, false, false) 2311f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 2312f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2313f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2314f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ConvergentAttr *clone(ASTContext &C) const; 2315f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 2316f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 2317f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 2318f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2319f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2320f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Convergent; } 2321f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 2322f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2323f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass DLLExportAttr : public InheritableAttr { 2324f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 2325f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static DLLExportAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 2326f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) DLLExportAttr(Loc, Ctx, 0); 2327f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 2328f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 2329f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2330f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2331f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot DLLExportAttr(SourceRange R, ASTContext &Ctx 2332f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 2333f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 2334f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::DLLExport, R, SI, false, false) 2335f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 2336f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2337f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2338f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot DLLExportAttr *clone(ASTContext &C) const; 2339f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 2340f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 2341f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 2342f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2343f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2344f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::DLLExport; } 2345f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 2346f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2347f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass DLLImportAttr : public InheritableAttr { 2348f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 2349f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static DLLImportAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 2350f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) DLLImportAttr(Loc, Ctx, 0); 2351f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 2352f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 2353f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2354f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2355f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot DLLImportAttr(SourceRange R, ASTContext &Ctx 2356f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 2357f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 2358f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::DLLImport, R, SI, false, false) 2359f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 2360f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2361f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2362f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot DLLImportAttr *clone(ASTContext &C) const; 2363f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 2364f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 2365f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 2366f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2367f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2368f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::DLLImport; } 2369f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 2370f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2371f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass DeprecatedAttr : public InheritableAttr { 2372f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned messageLength; 2373f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotchar *message; 2374f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2375f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned replacementLength; 2376f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotchar *replacement; 2377f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2378f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 2379f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static DeprecatedAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Message, llvm::StringRef Replacement, SourceRange Loc = SourceRange()) { 2380f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) DeprecatedAttr(Loc, Ctx, Message, Replacement, 0); 2381f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 2382f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 2383f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2384f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2385f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot DeprecatedAttr(SourceRange R, ASTContext &Ctx 2386f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , llvm::StringRef Message 2387f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , llvm::StringRef Replacement 2388f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 2389f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 2390f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Deprecated, R, SI, false, false) 2391f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , messageLength(Message.size()),message(new (Ctx, 1) char[messageLength]) 2392f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , replacementLength(Replacement.size()),replacement(new (Ctx, 1) char[replacementLength]) 2393f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 2394f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!Message.empty()) 2395f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(message, Message.data(), messageLength); 2396f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!Replacement.empty()) 2397f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(replacement, Replacement.data(), replacementLength); 2398f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2399f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2400f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot DeprecatedAttr(SourceRange R, ASTContext &Ctx 2401f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 2402f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 2403f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Deprecated, R, SI, false, false) 2404f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , messageLength(0),message(nullptr) 2405f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , replacementLength(0),replacement(nullptr) 2406f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 2407f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2408f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2409f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot DeprecatedAttr *clone(ASTContext &C) const; 2410f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 2411f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 2412f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 2413f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::StringRef getMessage() const { 2414f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return llvm::StringRef(message, messageLength); 2415f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2416f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getMessageLength() const { 2417f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return messageLength; 2418f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2419f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void setMessage(ASTContext &C, llvm::StringRef S) { 2420f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot messageLength = S.size(); 2421f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot this->message = new (C, 1) char [messageLength]; 2422f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!S.empty()) 2423f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(this->message, S.data(), messageLength); 2424f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2425f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2426f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::StringRef getReplacement() const { 2427f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return llvm::StringRef(replacement, replacementLength); 2428f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2429f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getReplacementLength() const { 2430f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return replacementLength; 2431f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2432f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void setReplacement(ASTContext &C, llvm::StringRef S) { 2433f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot replacementLength = S.size(); 2434f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot this->replacement = new (C, 1) char [replacementLength]; 2435f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!S.empty()) 2436f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(this->replacement, S.data(), replacementLength); 2437f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2438f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2439f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2440f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2441f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Deprecated; } 2442f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 2443f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2444f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass DestructorAttr : public InheritableAttr { 2445f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotint priority; 2446f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2447f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 2448f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static DestructorAttr *CreateImplicit(ASTContext &Ctx, int Priority, SourceRange Loc = SourceRange()) { 2449f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) DestructorAttr(Loc, Ctx, Priority, 0); 2450f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 2451f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 2452f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2453f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2454f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot DestructorAttr(SourceRange R, ASTContext &Ctx 2455f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , int Priority 2456f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 2457f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 2458f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Destructor, R, SI, false, false) 2459f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , priority(Priority) 2460f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 2461f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2462f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2463f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot DestructorAttr(SourceRange R, ASTContext &Ctx 2464f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 2465f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 2466f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Destructor, R, SI, false, false) 2467f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , priority() 2468f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 2469f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2470f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2471f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot DestructorAttr *clone(ASTContext &C) const; 2472f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 2473f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 2474f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 2475f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot int getPriority() const { 2476f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return priority; 2477f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2478f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2479f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static const int DefaultPriority = 65535; 2480f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2481f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2482f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2483f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Destructor; } 2484f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 2485f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2486f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass DiagnoseIfAttr : public InheritableAttr { 2487f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotExpr * cond; 2488f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2489f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned messageLength; 2490f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotchar *message; 2491f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2492f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 2493f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum DiagnosticType { 2494f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot DT_Error, 2495f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot DT_Warning 2496f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 2497f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotprivate: 2498f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot DiagnosticType diagnosticType; 2499f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2500f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotbool argDependent; 2501f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2502f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotNamedDecl * parent; 2503f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2504f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 2505f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static DiagnoseIfAttr *CreateImplicit(ASTContext &Ctx, Expr * Cond, llvm::StringRef Message, DiagnosticType DiagnosticType, bool ArgDependent, NamedDecl * Parent, SourceRange Loc = SourceRange()) { 2506f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) DiagnoseIfAttr(Loc, Ctx, Cond, Message, DiagnosticType, ArgDependent, Parent, 0); 2507f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 2508f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 2509f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2510f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2511f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static DiagnoseIfAttr *CreateImplicit(ASTContext &Ctx, Expr * Cond, llvm::StringRef Message, DiagnosticType DiagnosticType, SourceRange Loc = SourceRange()) { 2512f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) DiagnoseIfAttr(Loc, Ctx, Cond, Message, DiagnosticType, 0); 2513f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 2514f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 2515f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2516f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2517f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot DiagnoseIfAttr(SourceRange R, ASTContext &Ctx 2518f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * Cond 2519f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , llvm::StringRef Message 2520f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , DiagnosticType DiagnosticType 2521f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , bool ArgDependent 2522f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , NamedDecl * Parent 2523f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 2524f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 2525f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::DiagnoseIf, R, SI, true, true) 2526f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , cond(Cond) 2527f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , messageLength(Message.size()),message(new (Ctx, 1) char[messageLength]) 2528f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , diagnosticType(DiagnosticType) 2529f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , argDependent(ArgDependent) 2530f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , parent(Parent) 2531f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 2532f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!Message.empty()) 2533f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(message, Message.data(), messageLength); 2534f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2535f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2536f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot DiagnoseIfAttr(SourceRange R, ASTContext &Ctx 2537f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * Cond 2538f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , llvm::StringRef Message 2539f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , DiagnosticType DiagnosticType 2540f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 2541f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 2542f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::DiagnoseIf, R, SI, true, true) 2543f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , cond(Cond) 2544f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , messageLength(Message.size()),message(new (Ctx, 1) char[messageLength]) 2545f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , diagnosticType(DiagnosticType) 2546f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , argDependent() 2547f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , parent() 2548f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 2549f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!Message.empty()) 2550f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(message, Message.data(), messageLength); 2551f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2552f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2553f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot DiagnoseIfAttr *clone(ASTContext &C) const; 2554f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 2555f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 2556f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 2557f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr * getCond() const { 2558f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return cond; 2559f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2560f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2561f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::StringRef getMessage() const { 2562f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return llvm::StringRef(message, messageLength); 2563f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2564f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getMessageLength() const { 2565f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return messageLength; 2566f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2567f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void setMessage(ASTContext &C, llvm::StringRef S) { 2568f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot messageLength = S.size(); 2569f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot this->message = new (C, 1) char [messageLength]; 2570f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!S.empty()) 2571f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(this->message, S.data(), messageLength); 2572f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2573f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2574f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot DiagnosticType getDiagnosticType() const { 2575f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return diagnosticType; 2576f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2577f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2578f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool ConvertStrToDiagnosticType(StringRef Val, DiagnosticType &Out) { 2579f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Optional<DiagnosticType> R = llvm::StringSwitch<Optional<DiagnosticType>>(Val) 2580f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("error", DiagnoseIfAttr::DT_Error) 2581f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("warning", DiagnoseIfAttr::DT_Warning) 2582f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Default(Optional<DiagnosticType>()); 2583f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (R) { 2584f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Out = *R; 2585f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return true; 2586f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2587f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return false; 2588f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2589f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2590f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static const char *ConvertDiagnosticTypeToStr(DiagnosticType Val) { 2591f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch(Val) { 2592f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case DiagnoseIfAttr::DT_Error: return "error"; 2593f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case DiagnoseIfAttr::DT_Warning: return "warning"; 2594f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2595f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm_unreachable("No enumerator with that value"); 2596f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2597f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool getArgDependent() const { 2598f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return argDependent; 2599f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2600f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2601f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NamedDecl * getParent() const { 2602f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return parent; 2603f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2604f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2605f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2606f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool isError() const { return diagnosticType == DT_Error; } 2607f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool isWarning() const { return diagnosticType == DT_Warning; } 2608f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2609f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2610f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::DiagnoseIf; } 2611f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 2612f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2613f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass DisableTailCallsAttr : public InheritableAttr { 2614f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 2615f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static DisableTailCallsAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 2616f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) DisableTailCallsAttr(Loc, Ctx, 0); 2617f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 2618f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 2619f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2620f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2621f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot DisableTailCallsAttr(SourceRange R, ASTContext &Ctx 2622f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 2623f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 2624f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::DisableTailCalls, R, SI, false, false) 2625f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 2626f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2627f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2628f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot DisableTailCallsAttr *clone(ASTContext &C) const; 2629f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 2630f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 2631f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 2632f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2633f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2634f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::DisableTailCalls; } 2635f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 2636f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2637f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass EmptyBasesAttr : public InheritableAttr { 2638f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 2639f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static EmptyBasesAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 2640f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) EmptyBasesAttr(Loc, Ctx, 0); 2641f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 2642f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 2643f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2644f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2645f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot EmptyBasesAttr(SourceRange R, ASTContext &Ctx 2646f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 2647f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 2648f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::EmptyBases, R, SI, false, false) 2649f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 2650f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2651f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2652f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot EmptyBasesAttr *clone(ASTContext &C) const; 2653f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 2654f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 2655f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 2656f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2657f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2658f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::EmptyBases; } 2659f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 2660f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2661f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass EnableIfAttr : public InheritableAttr { 2662f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotExpr * cond; 2663f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2664f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned messageLength; 2665f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotchar *message; 2666f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2667f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 2668f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static EnableIfAttr *CreateImplicit(ASTContext &Ctx, Expr * Cond, llvm::StringRef Message, SourceRange Loc = SourceRange()) { 2669f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) EnableIfAttr(Loc, Ctx, Cond, Message, 0); 2670f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 2671f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 2672f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2673f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2674f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot EnableIfAttr(SourceRange R, ASTContext &Ctx 2675f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * Cond 2676f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , llvm::StringRef Message 2677f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 2678f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 2679f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::EnableIf, R, SI, false, false) 2680f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , cond(Cond) 2681f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , messageLength(Message.size()),message(new (Ctx, 1) char[messageLength]) 2682f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 2683f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!Message.empty()) 2684f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(message, Message.data(), messageLength); 2685f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2686f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2687f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot EnableIfAttr *clone(ASTContext &C) const; 2688f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 2689f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 2690f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 2691f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr * getCond() const { 2692f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return cond; 2693f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2694f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2695f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::StringRef getMessage() const { 2696f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return llvm::StringRef(message, messageLength); 2697f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2698f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getMessageLength() const { 2699f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return messageLength; 2700f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2701f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void setMessage(ASTContext &C, llvm::StringRef S) { 2702f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot messageLength = S.size(); 2703f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot this->message = new (C, 1) char [messageLength]; 2704f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!S.empty()) 2705f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(this->message, S.data(), messageLength); 2706f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2707f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2708f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2709f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2710f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::EnableIf; } 2711f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 2712f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2713f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass EnumExtensibilityAttr : public InheritableAttr { 2714f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 2715f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum Kind { 2716f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Closed, 2717f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Open 2718f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 2719f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotprivate: 2720f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Kind extensibility; 2721f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2722f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 2723f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static EnumExtensibilityAttr *CreateImplicit(ASTContext &Ctx, Kind Extensibility, SourceRange Loc = SourceRange()) { 2724f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) EnumExtensibilityAttr(Loc, Ctx, Extensibility, 0); 2725f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 2726f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 2727f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2728f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2729f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot EnumExtensibilityAttr(SourceRange R, ASTContext &Ctx 2730f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Kind Extensibility 2731f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 2732f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 2733f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::EnumExtensibility, R, SI, false, false) 2734f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , extensibility(Extensibility) 2735f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 2736f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2737f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2738f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot EnumExtensibilityAttr *clone(ASTContext &C) const; 2739f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 2740f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 2741f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 2742f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Kind getExtensibility() const { 2743f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return extensibility; 2744f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2745f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2746f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool ConvertStrToKind(StringRef Val, Kind &Out) { 2747f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Optional<Kind> R = llvm::StringSwitch<Optional<Kind>>(Val) 2748f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("closed", EnumExtensibilityAttr::Closed) 2749f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("open", EnumExtensibilityAttr::Open) 2750f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Default(Optional<Kind>()); 2751f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (R) { 2752f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Out = *R; 2753f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return true; 2754f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2755f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return false; 2756f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2757f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2758f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static const char *ConvertKindToStr(Kind Val) { 2759f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch(Val) { 2760f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case EnumExtensibilityAttr::Closed: return "closed"; 2761f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case EnumExtensibilityAttr::Open: return "open"; 2762f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2763f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm_unreachable("No enumerator with that value"); 2764f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2765f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2766f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2767f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::EnumExtensibility; } 2768f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 2769f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2770f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ExclusiveTrylockFunctionAttr : public InheritableAttr { 2771f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotExpr * successValue; 2772f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2773f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned args_Size; 2774f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr * *args_; 2775f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2776f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 2777f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ExclusiveTrylockFunctionAttr *CreateImplicit(ASTContext &Ctx, Expr * SuccessValue, Expr * *Args, unsigned ArgsSize, SourceRange Loc = SourceRange()) { 2778f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ExclusiveTrylockFunctionAttr(Loc, Ctx, SuccessValue, Args, ArgsSize, 0); 2779f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 2780f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 2781f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2782f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2783f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ExclusiveTrylockFunctionAttr(SourceRange R, ASTContext &Ctx 2784f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * SuccessValue 2785f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * *Args, unsigned ArgsSize 2786f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 2787f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 2788f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ExclusiveTrylockFunction, R, SI, true, true) 2789f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , successValue(SuccessValue) 2790f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , args_Size(ArgsSize), args_(new (Ctx, 16) Expr *[args_Size]) 2791f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 2792f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::copy(Args, Args + args_Size, args_); 2793f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2794f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2795f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ExclusiveTrylockFunctionAttr(SourceRange R, ASTContext &Ctx 2796f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * SuccessValue 2797f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 2798f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 2799f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ExclusiveTrylockFunction, R, SI, true, true) 2800f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , successValue(SuccessValue) 2801f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , args_Size(0), args_(nullptr) 2802f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 2803f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2804f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2805f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ExclusiveTrylockFunctionAttr *clone(ASTContext &C) const; 2806f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 2807f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 2808f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 2809f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr * getSuccessValue() const { 2810f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return successValue; 2811f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2812f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2813f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot typedef Expr ** args_iterator; 2814f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot args_iterator args_begin() const { return args_; } 2815f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot args_iterator args_end() const { return args_ + args_Size; } 2816f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned args_size() const { return args_Size; } 2817f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); } 2818f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2819f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2820f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2821f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2822f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ExclusiveTrylockFunction; } 2823f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 2824f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2825f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ExternalSourceSymbolAttr : public InheritableAttr { 2826f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned languageLength; 2827f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotchar *language; 2828f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2829f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned definedInLength; 2830f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotchar *definedIn; 2831f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2832f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotbool generatedDeclaration; 2833f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2834f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 2835f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ExternalSourceSymbolAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Language, llvm::StringRef DefinedIn, bool GeneratedDeclaration, SourceRange Loc = SourceRange()) { 2836f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ExternalSourceSymbolAttr(Loc, Ctx, Language, DefinedIn, GeneratedDeclaration, 0); 2837f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 2838f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 2839f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2840f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2841f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ExternalSourceSymbolAttr(SourceRange R, ASTContext &Ctx 2842f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , llvm::StringRef Language 2843f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , llvm::StringRef DefinedIn 2844f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , bool GeneratedDeclaration 2845f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 2846f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 2847f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ExternalSourceSymbol, R, SI, false, false) 2848f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , languageLength(Language.size()),language(new (Ctx, 1) char[languageLength]) 2849f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , definedInLength(DefinedIn.size()),definedIn(new (Ctx, 1) char[definedInLength]) 2850f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , generatedDeclaration(GeneratedDeclaration) 2851f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 2852f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!Language.empty()) 2853f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(language, Language.data(), languageLength); 2854f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!DefinedIn.empty()) 2855f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(definedIn, DefinedIn.data(), definedInLength); 2856f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2857f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2858f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ExternalSourceSymbolAttr(SourceRange R, ASTContext &Ctx 2859f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 2860f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 2861f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ExternalSourceSymbol, R, SI, false, false) 2862f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , languageLength(0),language(nullptr) 2863f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , definedInLength(0),definedIn(nullptr) 2864f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , generatedDeclaration() 2865f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 2866f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2867f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2868f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ExternalSourceSymbolAttr *clone(ASTContext &C) const; 2869f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 2870f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 2871f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 2872f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::StringRef getLanguage() const { 2873f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return llvm::StringRef(language, languageLength); 2874f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2875f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getLanguageLength() const { 2876f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return languageLength; 2877f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2878f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void setLanguage(ASTContext &C, llvm::StringRef S) { 2879f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot languageLength = S.size(); 2880f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot this->language = new (C, 1) char [languageLength]; 2881f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!S.empty()) 2882f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(this->language, S.data(), languageLength); 2883f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2884f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2885f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::StringRef getDefinedIn() const { 2886f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return llvm::StringRef(definedIn, definedInLength); 2887f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2888f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getDefinedInLength() const { 2889f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return definedInLength; 2890f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2891f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void setDefinedIn(ASTContext &C, llvm::StringRef S) { 2892f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot definedInLength = S.size(); 2893f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot this->definedIn = new (C, 1) char [definedInLength]; 2894f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!S.empty()) 2895f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(this->definedIn, S.data(), definedInLength); 2896f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2897f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2898f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool getGeneratedDeclaration() const { 2899f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return generatedDeclaration; 2900f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2901f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2902f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2903f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2904f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ExternalSourceSymbol; } 2905f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 2906f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2907f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass FallThroughAttr : public StmtAttr { 2908f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 2909f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static FallThroughAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 2910f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) FallThroughAttr(Loc, Ctx, 0); 2911f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 2912f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 2913f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2914f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2915f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot FallThroughAttr(SourceRange R, ASTContext &Ctx 2916f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 2917f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 2918f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : StmtAttr(attr::FallThrough, R, SI, false, false) 2919f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 2920f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2921f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2922f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot FallThroughAttr *clone(ASTContext &C) const; 2923f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 2924f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 2925f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 2926f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2927f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2928f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::FallThrough; } 2929f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 2930f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2931f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass FastCallAttr : public InheritableAttr { 2932f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 2933f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static FastCallAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 2934f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) FastCallAttr(Loc, Ctx, 0); 2935f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 2936f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 2937f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2938f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2939f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot FastCallAttr(SourceRange R, ASTContext &Ctx 2940f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 2941f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 2942f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::FastCall, R, SI, false, false) 2943f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 2944f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2945f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2946f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot FastCallAttr *clone(ASTContext &C) const; 2947f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 2948f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 2949f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 2950f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2951f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2952f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::FastCall; } 2953f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 2954f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2955f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass FinalAttr : public InheritableAttr { 2956f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 2957f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum Spelling { 2958f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Keyword_final = 0, 2959f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Keyword_sealed = 1 2960f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 2961f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2962f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static FinalAttr *CreateImplicit(ASTContext &Ctx, Spelling S, SourceRange Loc = SourceRange()) { 2963f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) FinalAttr(Loc, Ctx, S); 2964f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 2965f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 2966f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2967f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2968f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot FinalAttr(SourceRange R, ASTContext &Ctx 2969f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 2970f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 2971f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Final, R, SI, false, false) 2972f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 2973f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2974f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2975f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot FinalAttr *clone(ASTContext &C) const; 2976f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 2977f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 2978f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 2979f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Spelling getSemanticSpelling() const { 2980f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch (SpellingListIndex) { 2981f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot default: llvm_unreachable("Unknown spelling list index"); 2982f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 0: return Keyword_final; 2983f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 1: return Keyword_sealed; 2984f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2985f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2986f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool isSpelledAsSealed() const { return SpellingListIndex == 1; } 2987f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2988f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2989f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Final; } 2990f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 2991f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 2992f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass FlagEnumAttr : public InheritableAttr { 2993f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 2994f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static FlagEnumAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 2995f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) FlagEnumAttr(Loc, Ctx, 0); 2996f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 2997f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 2998f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 2999f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3000f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot FlagEnumAttr(SourceRange R, ASTContext &Ctx 3001f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 3002f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 3003f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::FlagEnum, R, SI, false, false) 3004f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 3005f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3006f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3007f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot FlagEnumAttr *clone(ASTContext &C) const; 3008f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 3009f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 3010f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 3011f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3012f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3013f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::FlagEnum; } 3014f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 3015f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3016f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass FlattenAttr : public InheritableAttr { 3017f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 3018f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static FlattenAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 3019f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) FlattenAttr(Loc, Ctx, 0); 3020f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 3021f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 3022f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3023f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3024f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot FlattenAttr(SourceRange R, ASTContext &Ctx 3025f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 3026f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 3027f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Flatten, R, SI, false, false) 3028f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 3029f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3030f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3031f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot FlattenAttr *clone(ASTContext &C) const; 3032f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 3033f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 3034f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 3035f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3036f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3037f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Flatten; } 3038f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 3039f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3040f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass FormatAttr : public InheritableAttr { 3041f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotIdentifierInfo * type; 3042f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3043f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotint formatIdx; 3044f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3045f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotint firstArg; 3046f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3047f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 3048f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static FormatAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * Type, int FormatIdx, int FirstArg, SourceRange Loc = SourceRange()) { 3049f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) FormatAttr(Loc, Ctx, Type, FormatIdx, FirstArg, 0); 3050f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 3051f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 3052f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3053f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3054f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot FormatAttr(SourceRange R, ASTContext &Ctx 3055f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , IdentifierInfo * Type 3056f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , int FormatIdx 3057f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , int FirstArg 3058f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 3059f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 3060f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Format, R, SI, false, false) 3061f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , type(Type) 3062f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , formatIdx(FormatIdx) 3063f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , firstArg(FirstArg) 3064f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 3065f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3066f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3067f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot FormatAttr *clone(ASTContext &C) const; 3068f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 3069f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 3070f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 3071f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot IdentifierInfo * getType() const { 3072f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return type; 3073f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3074f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3075f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot int getFormatIdx() const { 3076f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return formatIdx; 3077f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3078f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3079f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot int getFirstArg() const { 3080f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return firstArg; 3081f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3082f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3083f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3084f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3085f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Format; } 3086f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 3087f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3088f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass FormatArgAttr : public InheritableAttr { 3089f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotint formatIdx; 3090f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3091f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 3092f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static FormatArgAttr *CreateImplicit(ASTContext &Ctx, int FormatIdx, SourceRange Loc = SourceRange()) { 3093f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) FormatArgAttr(Loc, Ctx, FormatIdx, 0); 3094f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 3095f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 3096f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3097f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3098f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot FormatArgAttr(SourceRange R, ASTContext &Ctx 3099f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , int FormatIdx 3100f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 3101f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 3102f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::FormatArg, R, SI, false, false) 3103f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , formatIdx(FormatIdx) 3104f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 3105f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3106f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3107f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot FormatArgAttr *clone(ASTContext &C) const; 3108f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 3109f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 3110f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 3111f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot int getFormatIdx() const { 3112f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return formatIdx; 3113f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3114f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3115f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3116f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3117f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::FormatArg; } 3118f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 3119f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3120f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass GNUInlineAttr : public InheritableAttr { 3121f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 3122f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static GNUInlineAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 3123f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) GNUInlineAttr(Loc, Ctx, 0); 3124f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 3125f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 3126f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3127f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3128f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNUInlineAttr(SourceRange R, ASTContext &Ctx 3129f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 3130f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 3131f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::GNUInline, R, SI, false, false) 3132f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 3133f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3134f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3135f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNUInlineAttr *clone(ASTContext &C) const; 3136f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 3137f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 3138f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 3139f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3140f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3141f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::GNUInline; } 3142f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 3143f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3144f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass GuardedByAttr : public InheritableAttr { 3145f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotExpr * arg; 3146f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3147f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 3148f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static GuardedByAttr *CreateImplicit(ASTContext &Ctx, Expr * Arg, SourceRange Loc = SourceRange()) { 3149f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) GuardedByAttr(Loc, Ctx, Arg, 0); 3150f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 3151f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 3152f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3153f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3154f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GuardedByAttr(SourceRange R, ASTContext &Ctx 3155f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * Arg 3156f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 3157f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 3158f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::GuardedBy, R, SI, true, true) 3159f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , arg(Arg) 3160f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 3161f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3162f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3163f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GuardedByAttr *clone(ASTContext &C) const; 3164f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 3165f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 3166f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 3167f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr * getArg() const { 3168f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return arg; 3169f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3170f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3171f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3172f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3173f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::GuardedBy; } 3174f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 3175f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3176f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass GuardedVarAttr : public InheritableAttr { 3177f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 3178f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static GuardedVarAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 3179f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) GuardedVarAttr(Loc, Ctx, 0); 3180f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 3181f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 3182f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3183f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3184f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GuardedVarAttr(SourceRange R, ASTContext &Ctx 3185f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 3186f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 3187f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::GuardedVar, R, SI, false, false) 3188f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 3189f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3190f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3191f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GuardedVarAttr *clone(ASTContext &C) const; 3192f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 3193f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 3194f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 3195f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3196f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3197f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::GuardedVar; } 3198f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 3199f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3200f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass HotAttr : public InheritableAttr { 3201f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 3202f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static HotAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 3203f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) HotAttr(Loc, Ctx, 0); 3204f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 3205f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 3206f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3207f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3208f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot HotAttr(SourceRange R, ASTContext &Ctx 3209f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 3210f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 3211f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Hot, R, SI, false, false) 3212f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 3213f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3214f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3215f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot HotAttr *clone(ASTContext &C) const; 3216f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 3217f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 3218f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 3219f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3220f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3221f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Hot; } 3222f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 3223f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3224f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass IBActionAttr : public InheritableAttr { 3225f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 3226f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static IBActionAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 3227f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) IBActionAttr(Loc, Ctx, 0); 3228f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 3229f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 3230f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3231f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3232f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot IBActionAttr(SourceRange R, ASTContext &Ctx 3233f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 3234f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 3235f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::IBAction, R, SI, false, false) 3236f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 3237f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3238f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3239f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot IBActionAttr *clone(ASTContext &C) const; 3240f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 3241f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 3242f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 3243f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3244f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3245f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::IBAction; } 3246f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 3247f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3248f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass IBOutletAttr : public InheritableAttr { 3249f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 3250f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static IBOutletAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 3251f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) IBOutletAttr(Loc, Ctx, 0); 3252f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 3253f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 3254f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3255f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3256f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot IBOutletAttr(SourceRange R, ASTContext &Ctx 3257f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 3258f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 3259f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::IBOutlet, R, SI, false, false) 3260f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 3261f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3262f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3263f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot IBOutletAttr *clone(ASTContext &C) const; 3264f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 3265f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 3266f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 3267f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3268f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3269f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::IBOutlet; } 3270f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 3271f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3272f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass IBOutletCollectionAttr : public InheritableAttr { 3273f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotTypeSourceInfo * interface_; 3274f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3275f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 3276f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static IBOutletCollectionAttr *CreateImplicit(ASTContext &Ctx, TypeSourceInfo * Interface, SourceRange Loc = SourceRange()) { 3277f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) IBOutletCollectionAttr(Loc, Ctx, Interface, 0); 3278f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 3279f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 3280f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3281f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3282f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot IBOutletCollectionAttr(SourceRange R, ASTContext &Ctx 3283f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , TypeSourceInfo * Interface 3284f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 3285f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 3286f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::IBOutletCollection, R, SI, false, false) 3287f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , interface_(Interface) 3288f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 3289f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3290f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3291f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot IBOutletCollectionAttr(SourceRange R, ASTContext &Ctx 3292f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 3293f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 3294f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::IBOutletCollection, R, SI, false, false) 3295f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , interface_() 3296f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 3297f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3298f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3299f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot IBOutletCollectionAttr *clone(ASTContext &C) const; 3300f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 3301f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 3302f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 3303f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot QualType getInterface() const { 3304f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return interface_->getType(); 3305f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } TypeSourceInfo * getInterfaceLoc() const { 3306f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return interface_; 3307f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3308f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3309f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3310f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3311f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::IBOutletCollection; } 3312f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 3313f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3314f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass IFuncAttr : public Attr { 3315f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned resolverLength; 3316f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotchar *resolver; 3317f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3318f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 3319f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static IFuncAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Resolver, SourceRange Loc = SourceRange()) { 3320f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) IFuncAttr(Loc, Ctx, Resolver, 0); 3321f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 3322f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 3323f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3324f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3325f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot IFuncAttr(SourceRange R, ASTContext &Ctx 3326f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , llvm::StringRef Resolver 3327f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 3328f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 3329f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : Attr(attr::IFunc, R, SI, false, false) 3330f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , resolverLength(Resolver.size()),resolver(new (Ctx, 1) char[resolverLength]) 3331f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 3332f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!Resolver.empty()) 3333f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(resolver, Resolver.data(), resolverLength); 3334f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3335f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3336f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot IFuncAttr *clone(ASTContext &C) const; 3337f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 3338f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 3339f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 3340f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::StringRef getResolver() const { 3341f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return llvm::StringRef(resolver, resolverLength); 3342f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3343f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getResolverLength() const { 3344f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return resolverLength; 3345f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3346f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void setResolver(ASTContext &C, llvm::StringRef S) { 3347f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot resolverLength = S.size(); 3348f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot this->resolver = new (C, 1) char [resolverLength]; 3349f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!S.empty()) 3350f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(this->resolver, S.data(), resolverLength); 3351f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3352f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3353f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3354f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3355f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::IFunc; } 3356f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 3357f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3358f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass InitPriorityAttr : public InheritableAttr { 3359f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned priority; 3360f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3361f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 3362f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static InitPriorityAttr *CreateImplicit(ASTContext &Ctx, unsigned Priority, SourceRange Loc = SourceRange()) { 3363f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) InitPriorityAttr(Loc, Ctx, Priority, 0); 3364f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 3365f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 3366f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3367f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3368f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot InitPriorityAttr(SourceRange R, ASTContext &Ctx 3369f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned Priority 3370f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 3371f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 3372f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::InitPriority, R, SI, false, false) 3373f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , priority(Priority) 3374f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 3375f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3376f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3377f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot InitPriorityAttr *clone(ASTContext &C) const; 3378f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 3379f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 3380f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 3381f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getPriority() const { 3382f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return priority; 3383f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3384f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3385f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3386f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3387f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::InitPriority; } 3388f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 3389f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3390f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass InitSegAttr : public Attr { 3391f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned sectionLength; 3392f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotchar *section; 3393f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3394f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 3395f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static InitSegAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Section, SourceRange Loc = SourceRange()) { 3396f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) InitSegAttr(Loc, Ctx, Section, 0); 3397f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 3398f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 3399f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3400f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3401f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot InitSegAttr(SourceRange R, ASTContext &Ctx 3402f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , llvm::StringRef Section 3403f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 3404f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 3405f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : Attr(attr::InitSeg, R, SI, false, false) 3406f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , sectionLength(Section.size()),section(new (Ctx, 1) char[sectionLength]) 3407f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 3408f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!Section.empty()) 3409f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(section, Section.data(), sectionLength); 3410f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3411f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3412f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot InitSegAttr *clone(ASTContext &C) const; 3413f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 3414f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 3415f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 3416f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::StringRef getSection() const { 3417f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return llvm::StringRef(section, sectionLength); 3418f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3419f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getSectionLength() const { 3420f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return sectionLength; 3421f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3422f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void setSection(ASTContext &C, llvm::StringRef S) { 3423f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot sectionLength = S.size(); 3424f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot this->section = new (C, 1) char [sectionLength]; 3425f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!S.empty()) 3426f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(this->section, S.data(), sectionLength); 3427f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3428f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3429f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3430f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPrettyPragma(raw_ostream &OS, const PrintingPolicy &Policy) const { 3431f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OS << '(' << getSection() << ')'; 3432f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3433f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3434f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3435f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::InitSeg; } 3436f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 3437f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3438f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass IntelOclBiccAttr : public InheritableAttr { 3439f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 3440f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static IntelOclBiccAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 3441f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) IntelOclBiccAttr(Loc, Ctx, 0); 3442f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 3443f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 3444f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3445f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3446f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot IntelOclBiccAttr(SourceRange R, ASTContext &Ctx 3447f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 3448f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 3449f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::IntelOclBicc, R, SI, false, false) 3450f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 3451f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3452f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3453f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot IntelOclBiccAttr *clone(ASTContext &C) const; 3454f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 3455f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 3456f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 3457f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3458f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3459f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::IntelOclBicc; } 3460f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 3461f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3462f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass InternalLinkageAttr : public InheritableAttr { 3463f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 3464f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static InternalLinkageAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 3465f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) InternalLinkageAttr(Loc, Ctx, 0); 3466f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 3467f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 3468f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3469f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3470f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot InternalLinkageAttr(SourceRange R, ASTContext &Ctx 3471f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 3472f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 3473f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::InternalLinkage, R, SI, false, false) 3474f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 3475f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3476f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3477f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot InternalLinkageAttr *clone(ASTContext &C) const; 3478f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 3479f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 3480f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 3481f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3482f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3483f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::InternalLinkage; } 3484f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 3485f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3486f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass LTOVisibilityPublicAttr : public InheritableAttr { 3487f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 3488f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static LTOVisibilityPublicAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 3489f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) LTOVisibilityPublicAttr(Loc, Ctx, 0); 3490f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 3491f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 3492f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3493f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3494f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot LTOVisibilityPublicAttr(SourceRange R, ASTContext &Ctx 3495f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 3496f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 3497f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::LTOVisibilityPublic, R, SI, false, false) 3498f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 3499f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3500f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3501f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot LTOVisibilityPublicAttr *clone(ASTContext &C) const; 3502f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 3503f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 3504f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 3505f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3506f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3507f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::LTOVisibilityPublic; } 3508f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 3509f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3510f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass LayoutVersionAttr : public InheritableAttr { 3511f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned version; 3512f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3513f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 3514f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static LayoutVersionAttr *CreateImplicit(ASTContext &Ctx, unsigned Version, SourceRange Loc = SourceRange()) { 3515f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) LayoutVersionAttr(Loc, Ctx, Version, 0); 3516f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 3517f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 3518f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3519f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3520f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot LayoutVersionAttr(SourceRange R, ASTContext &Ctx 3521f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned Version 3522f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 3523f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 3524f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::LayoutVersion, R, SI, false, false) 3525f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , version(Version) 3526f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 3527f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3528f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3529f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot LayoutVersionAttr *clone(ASTContext &C) const; 3530f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 3531f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 3532f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 3533f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getVersion() const { 3534f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return version; 3535f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3536f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3537f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3538f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3539f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::LayoutVersion; } 3540f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 3541f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3542f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass LockReturnedAttr : public InheritableAttr { 3543f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotExpr * arg; 3544f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3545f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 3546f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static LockReturnedAttr *CreateImplicit(ASTContext &Ctx, Expr * Arg, SourceRange Loc = SourceRange()) { 3547f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) LockReturnedAttr(Loc, Ctx, Arg, 0); 3548f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 3549f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 3550f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3551f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3552f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot LockReturnedAttr(SourceRange R, ASTContext &Ctx 3553f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * Arg 3554f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 3555f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 3556f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::LockReturned, R, SI, true, false) 3557f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , arg(Arg) 3558f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 3559f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3560f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3561f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot LockReturnedAttr *clone(ASTContext &C) const; 3562f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 3563f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 3564f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 3565f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr * getArg() const { 3566f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return arg; 3567f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3568f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3569f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3570f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3571f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::LockReturned; } 3572f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 3573f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3574f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass LocksExcludedAttr : public InheritableAttr { 3575f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned args_Size; 3576f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr * *args_; 3577f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3578f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 3579f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static LocksExcludedAttr *CreateImplicit(ASTContext &Ctx, Expr * *Args, unsigned ArgsSize, SourceRange Loc = SourceRange()) { 3580f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) LocksExcludedAttr(Loc, Ctx, Args, ArgsSize, 0); 3581f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 3582f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 3583f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3584f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3585f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot LocksExcludedAttr(SourceRange R, ASTContext &Ctx 3586f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * *Args, unsigned ArgsSize 3587f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 3588f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 3589f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::LocksExcluded, R, SI, true, true) 3590f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , args_Size(ArgsSize), args_(new (Ctx, 16) Expr *[args_Size]) 3591f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 3592f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::copy(Args, Args + args_Size, args_); 3593f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3594f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3595f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot LocksExcludedAttr(SourceRange R, ASTContext &Ctx 3596f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 3597f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 3598f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::LocksExcluded, R, SI, true, true) 3599f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , args_Size(0), args_(nullptr) 3600f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 3601f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3602f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3603f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot LocksExcludedAttr *clone(ASTContext &C) const; 3604f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 3605f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 3606f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 3607f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot typedef Expr ** args_iterator; 3608f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot args_iterator args_begin() const { return args_; } 3609f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot args_iterator args_end() const { return args_ + args_Size; } 3610f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned args_size() const { return args_Size; } 3611f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); } 3612f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3613f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3614f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3615f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3616f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::LocksExcluded; } 3617f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 3618f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3619f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass LoopHintAttr : public Attr { 3620f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 3621f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum OptionType { 3622f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Vectorize, 3623f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot VectorizeWidth, 3624f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Interleave, 3625f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot InterleaveCount, 3626f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Unroll, 3627f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot UnrollCount, 3628f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Distribute 3629f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 3630f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotprivate: 3631f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OptionType option; 3632f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3633f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 3634f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum LoopHintState { 3635f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Enable, 3636f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Disable, 3637f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Numeric, 3638f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AssumeSafety, 3639f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Full 3640f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 3641f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotprivate: 3642f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot LoopHintState state; 3643f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3644f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotExpr * value; 3645f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3646f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 3647f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum Spelling { 3648f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Pragma_clang_loop = 0, 3649f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Pragma_unroll = 1, 3650f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Pragma_nounroll = 2 3651f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 3652f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3653f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static LoopHintAttr *CreateImplicit(ASTContext &Ctx, Spelling S, OptionType Option, LoopHintState State, Expr * Value, SourceRange Loc = SourceRange()) { 3654f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) LoopHintAttr(Loc, Ctx, Option, State, Value, S); 3655f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 3656f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 3657f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3658f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3659f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot LoopHintAttr(SourceRange R, ASTContext &Ctx 3660f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , OptionType Option 3661f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , LoopHintState State 3662f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * Value 3663f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 3664f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 3665f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : Attr(attr::LoopHint, R, SI, false, false) 3666f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , option(Option) 3667f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , state(State) 3668f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , value(Value) 3669f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 3670f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3671f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3672f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot LoopHintAttr *clone(ASTContext &C) const; 3673f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 3674f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 3675f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 3676f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Spelling getSemanticSpelling() const { 3677f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch (SpellingListIndex) { 3678f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot default: llvm_unreachable("Unknown spelling list index"); 3679f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 0: return Pragma_clang_loop; 3680f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 1: return Pragma_unroll; 3681f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 2: return Pragma_nounroll; 3682f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3683f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3684f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OptionType getOption() const { 3685f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return option; 3686f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3687f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3688f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool ConvertStrToOptionType(StringRef Val, OptionType &Out) { 3689f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Optional<OptionType> R = llvm::StringSwitch<Optional<OptionType>>(Val) 3690f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("vectorize", LoopHintAttr::Vectorize) 3691f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("vectorize_width", LoopHintAttr::VectorizeWidth) 3692f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("interleave", LoopHintAttr::Interleave) 3693f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("interleave_count", LoopHintAttr::InterleaveCount) 3694f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("unroll", LoopHintAttr::Unroll) 3695f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("unroll_count", LoopHintAttr::UnrollCount) 3696f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("distribute", LoopHintAttr::Distribute) 3697f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Default(Optional<OptionType>()); 3698f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (R) { 3699f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Out = *R; 3700f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return true; 3701f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3702f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return false; 3703f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3704f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3705f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static const char *ConvertOptionTypeToStr(OptionType Val) { 3706f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch(Val) { 3707f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case LoopHintAttr::Vectorize: return "vectorize"; 3708f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case LoopHintAttr::VectorizeWidth: return "vectorize_width"; 3709f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case LoopHintAttr::Interleave: return "interleave"; 3710f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case LoopHintAttr::InterleaveCount: return "interleave_count"; 3711f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case LoopHintAttr::Unroll: return "unroll"; 3712f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case LoopHintAttr::UnrollCount: return "unroll_count"; 3713f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case LoopHintAttr::Distribute: return "distribute"; 3714f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3715f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm_unreachable("No enumerator with that value"); 3716f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3717f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot LoopHintState getState() const { 3718f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return state; 3719f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3720f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3721f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool ConvertStrToLoopHintState(StringRef Val, LoopHintState &Out) { 3722f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Optional<LoopHintState> R = llvm::StringSwitch<Optional<LoopHintState>>(Val) 3723f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("enable", LoopHintAttr::Enable) 3724f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("disable", LoopHintAttr::Disable) 3725f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("numeric", LoopHintAttr::Numeric) 3726f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("assume_safety", LoopHintAttr::AssumeSafety) 3727f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("full", LoopHintAttr::Full) 3728f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Default(Optional<LoopHintState>()); 3729f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (R) { 3730f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Out = *R; 3731f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return true; 3732f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3733f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return false; 3734f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3735f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3736f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static const char *ConvertLoopHintStateToStr(LoopHintState Val) { 3737f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch(Val) { 3738f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case LoopHintAttr::Enable: return "enable"; 3739f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case LoopHintAttr::Disable: return "disable"; 3740f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case LoopHintAttr::Numeric: return "numeric"; 3741f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case LoopHintAttr::AssumeSafety: return "assume_safety"; 3742f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case LoopHintAttr::Full: return "full"; 3743f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3744f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm_unreachable("No enumerator with that value"); 3745f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3746f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr * getValue() const { 3747f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return value; 3748f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3749f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3750f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3751f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static const char *getOptionName(int Option) { 3752f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch(Option) { 3753f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case Vectorize: return "vectorize"; 3754f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case VectorizeWidth: return "vectorize_width"; 3755f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case Interleave: return "interleave"; 3756f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case InterleaveCount: return "interleave_count"; 3757f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case Unroll: return "unroll"; 3758f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case UnrollCount: return "unroll_count"; 3759f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case Distribute: return "distribute"; 3760f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3761f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm_unreachable("Unhandled LoopHint option."); 3762f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3763f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3764f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPrettyPragma(raw_ostream &OS, const PrintingPolicy &Policy) const { 3765f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned SpellingIndex = getSpellingListIndex(); 3766f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot // For "#pragma unroll" and "#pragma nounroll" the string "unroll" or 3767f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot // "nounroll" is already emitted as the pragma name. 3768f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (SpellingIndex == Pragma_nounroll) 3769f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return; 3770f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot else if (SpellingIndex == Pragma_unroll) { 3771f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OS << getValueString(Policy); 3772f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return; 3773f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3774f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3775f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot assert(SpellingIndex == Pragma_clang_loop && "Unexpected spelling"); 3776f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OS << getOptionName(option) << getValueString(Policy); 3777f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3778f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3779f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot // Return a string containing the loop hint argument including the 3780f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot // enclosing parentheses. 3781f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::string getValueString(const PrintingPolicy &Policy) const { 3782f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::string ValueName; 3783f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::raw_string_ostream OS(ValueName); 3784f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OS << "("; 3785f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (state == Numeric) 3786f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot value->printPretty(OS, nullptr, Policy); 3787f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot else if (state == Enable) 3788f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OS << "enable"; 3789f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot else if (state == Full) 3790f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OS << "full"; 3791f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot else if (state == AssumeSafety) 3792f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OS << "assume_safety"; 3793f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot else 3794f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OS << "disable"; 3795f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OS << ")"; 3796f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return OS.str(); 3797f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3798f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3799f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot // Return a string suitable for identifying this attribute in diagnostics. 3800f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::string getDiagnosticName(const PrintingPolicy &Policy) const { 3801f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned SpellingIndex = getSpellingListIndex(); 3802f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (SpellingIndex == Pragma_nounroll) 3803f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return "#pragma nounroll"; 3804f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot else if (SpellingIndex == Pragma_unroll) 3805f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return "#pragma unroll" + (option == UnrollCount ? getValueString(Policy) : ""); 3806f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3807f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot assert(SpellingIndex == Pragma_clang_loop && "Unexpected spelling"); 3808f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return getOptionName(option) + getValueString(Policy); 3809f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3810f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3811f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3812f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::LoopHint; } 3813f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 3814f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3815f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass MSABIAttr : public InheritableAttr { 3816f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 3817f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static MSABIAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 3818f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) MSABIAttr(Loc, Ctx, 0); 3819f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 3820f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 3821f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3822f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3823f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MSABIAttr(SourceRange R, ASTContext &Ctx 3824f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 3825f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 3826f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::MSABI, R, SI, false, false) 3827f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 3828f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3829f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3830f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MSABIAttr *clone(ASTContext &C) const; 3831f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 3832f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 3833f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 3834f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3835f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3836f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::MSABI; } 3837f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 3838f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3839f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass MSInheritanceAttr : public InheritableAttr { 3840f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotbool bestCase; 3841f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3842f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 3843f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum Spelling { 3844f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Keyword_single_inheritance = 0, 3845f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Keyword_multiple_inheritance = 1, 3846f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Keyword_virtual_inheritance = 2, 3847f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Keyword_unspecified_inheritance = 3 3848f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 3849f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3850f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static MSInheritanceAttr *CreateImplicit(ASTContext &Ctx, Spelling S, bool BestCase, SourceRange Loc = SourceRange()) { 3851f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) MSInheritanceAttr(Loc, Ctx, BestCase, S); 3852f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 3853f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 3854f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3855f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3856f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MSInheritanceAttr(SourceRange R, ASTContext &Ctx 3857f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , bool BestCase 3858f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 3859f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 3860f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::MSInheritance, R, SI, false, false) 3861f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , bestCase(BestCase) 3862f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 3863f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3864f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3865f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MSInheritanceAttr(SourceRange R, ASTContext &Ctx 3866f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 3867f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 3868f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::MSInheritance, R, SI, false, false) 3869f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , bestCase() 3870f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 3871f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3872f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3873f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MSInheritanceAttr *clone(ASTContext &C) const; 3874f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 3875f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 3876f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 3877f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Spelling getSemanticSpelling() const { 3878f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch (SpellingListIndex) { 3879f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot default: llvm_unreachable("Unknown spelling list index"); 3880f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 0: return Keyword_single_inheritance; 3881f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 1: return Keyword_multiple_inheritance; 3882f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 2: return Keyword_virtual_inheritance; 3883f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 3: return Keyword_unspecified_inheritance; 3884f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3885f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3886f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool getBestCase() const { 3887f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return bestCase; 3888f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3889f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3890f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static const bool DefaultBestCase = true; 3891f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3892f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3893f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool hasVBPtrOffsetField(Spelling Inheritance) { 3894f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return Inheritance == Keyword_unspecified_inheritance; 3895f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3896f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3897f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot // Only member pointers to functions need a this adjustment, since it can be 3898f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot // combined with the field offset for data pointers. 3899f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool hasNVOffsetField(bool IsMemberFunction, Spelling Inheritance) { 3900f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return IsMemberFunction && Inheritance >= Keyword_multiple_inheritance; 3901f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3902f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3903f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool hasVBTableOffsetField(Spelling Inheritance) { 3904f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return Inheritance >= Keyword_virtual_inheritance; 3905f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3906f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3907f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool hasOnlyOneField(bool IsMemberFunction, 3908f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Spelling Inheritance) { 3909f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (IsMemberFunction) 3910f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return Inheritance <= Keyword_single_inheritance; 3911f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return Inheritance <= Keyword_multiple_inheritance; 3912f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3913f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3914f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3915f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::MSInheritance; } 3916f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 3917f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3918f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass MSNoVTableAttr : public InheritableAttr { 3919f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 3920f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static MSNoVTableAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 3921f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) MSNoVTableAttr(Loc, Ctx, 0); 3922f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 3923f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 3924f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3925f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3926f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MSNoVTableAttr(SourceRange R, ASTContext &Ctx 3927f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 3928f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 3929f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::MSNoVTable, R, SI, false, false) 3930f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 3931f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3932f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3933f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MSNoVTableAttr *clone(ASTContext &C) const; 3934f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 3935f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 3936f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 3937f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3938f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3939f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::MSNoVTable; } 3940f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 3941f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3942f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass MSP430InterruptAttr : public InheritableAttr { 3943f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned number; 3944f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3945f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 3946f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static MSP430InterruptAttr *CreateImplicit(ASTContext &Ctx, unsigned Number, SourceRange Loc = SourceRange()) { 3947f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) MSP430InterruptAttr(Loc, Ctx, Number, 0); 3948f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 3949f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 3950f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3951f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3952f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MSP430InterruptAttr(SourceRange R, ASTContext &Ctx 3953f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned Number 3954f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 3955f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 3956f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::MSP430Interrupt, R, SI, false, false) 3957f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , number(Number) 3958f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 3959f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3960f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3961f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MSP430InterruptAttr *clone(ASTContext &C) const; 3962f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 3963f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 3964f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 3965f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getNumber() const { 3966f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return number; 3967f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3968f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3969f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3970f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3971f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::MSP430Interrupt; } 3972f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 3973f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3974f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass MSStructAttr : public InheritableAttr { 3975f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 3976f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static MSStructAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 3977f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) MSStructAttr(Loc, Ctx, 0); 3978f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 3979f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 3980f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3981f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3982f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MSStructAttr(SourceRange R, ASTContext &Ctx 3983f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 3984f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 3985f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::MSStruct, R, SI, false, false) 3986f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 3987f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 3988f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3989f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MSStructAttr *clone(ASTContext &C) const; 3990f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 3991f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 3992f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 3993f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3994f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3995f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::MSStruct; } 3996f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 3997f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 3998f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass MSVtorDispAttr : public InheritableAttr { 3999f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned vdm; 4000f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4001f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4002f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static MSVtorDispAttr *CreateImplicit(ASTContext &Ctx, unsigned Vdm, SourceRange Loc = SourceRange()) { 4003f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) MSVtorDispAttr(Loc, Ctx, Vdm, 0); 4004f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4005f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4006f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4007f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4008f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MSVtorDispAttr(SourceRange R, ASTContext &Ctx 4009f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned Vdm 4010f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4011f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4012f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::MSVtorDisp, R, SI, false, false) 4013f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , vdm(Vdm) 4014f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4015f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4016f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4017f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MSVtorDispAttr *clone(ASTContext &C) const; 4018f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4019f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4020f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4021f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getVdm() const { 4022f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return vdm; 4023f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4024f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4025f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4026f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum Mode { 4027f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Never, 4028f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ForVBaseOverride, 4029f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ForVFTable 4030f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 4031f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4032f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Mode getVtorDispMode() const { return Mode(vdm); } 4033f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4034f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4035f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::MSVtorDisp; } 4036f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4037f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4038f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass MaxFieldAlignmentAttr : public InheritableAttr { 4039f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned alignment; 4040f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4041f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4042f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static MaxFieldAlignmentAttr *CreateImplicit(ASTContext &Ctx, unsigned Alignment, SourceRange Loc = SourceRange()) { 4043f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) MaxFieldAlignmentAttr(Loc, Ctx, Alignment, 0); 4044f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4045f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4046f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4047f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4048f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MaxFieldAlignmentAttr(SourceRange R, ASTContext &Ctx 4049f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned Alignment 4050f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4051f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4052f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::MaxFieldAlignment, R, SI, false, false) 4053f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , alignment(Alignment) 4054f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4055f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4056f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4057f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MaxFieldAlignmentAttr *clone(ASTContext &C) const; 4058f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4059f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4060f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4061f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getAlignment() const { 4062f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return alignment; 4063f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4064f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4065f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4066f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4067f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::MaxFieldAlignment; } 4068f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4069f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4070f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass MayAliasAttr : public InheritableAttr { 4071f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4072f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static MayAliasAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 4073f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) MayAliasAttr(Loc, Ctx, 0); 4074f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4075f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4076f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4077f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4078f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MayAliasAttr(SourceRange R, ASTContext &Ctx 4079f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4080f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4081f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::MayAlias, R, SI, false, false) 4082f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4083f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4084f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4085f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MayAliasAttr *clone(ASTContext &C) const; 4086f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4087f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4088f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4089f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4090f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4091f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::MayAlias; } 4092f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4093f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4094f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass MicroMipsAttr : public InheritableAttr { 4095f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4096f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static MicroMipsAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 4097f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) MicroMipsAttr(Loc, Ctx, 0); 4098f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4099f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4100f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4101f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4102f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MicroMipsAttr(SourceRange R, ASTContext &Ctx 4103f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4104f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4105f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::MicroMips, R, SI, false, false) 4106f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4107f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4108f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4109f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MicroMipsAttr *clone(ASTContext &C) const; 4110f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4111f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4112f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4113f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4114f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4115f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::MicroMips; } 4116f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4117f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4118f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass MinSizeAttr : public InheritableAttr { 4119f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4120f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static MinSizeAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 4121f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) MinSizeAttr(Loc, Ctx, 0); 4122f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4123f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4124f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4125f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4126f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MinSizeAttr(SourceRange R, ASTContext &Ctx 4127f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4128f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4129f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::MinSize, R, SI, false, false) 4130f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4131f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4132f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4133f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MinSizeAttr *clone(ASTContext &C) const; 4134f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4135f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4136f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4137f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4138f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4139f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::MinSize; } 4140f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4141f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4142f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass Mips16Attr : public InheritableAttr { 4143f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4144f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static Mips16Attr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 4145f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) Mips16Attr(Loc, Ctx, 0); 4146f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4147f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4148f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4149f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4150f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Mips16Attr(SourceRange R, ASTContext &Ctx 4151f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4152f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4153f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Mips16, R, SI, false, false) 4154f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4155f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4156f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4157f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Mips16Attr *clone(ASTContext &C) const; 4158f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4159f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4160f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4161f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4162f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4163f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Mips16; } 4164f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4165f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4166f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass MipsInterruptAttr : public InheritableAttr { 4167f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4168f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum InterruptType { 4169f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot sw0, 4170f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot sw1, 4171f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot hw0, 4172f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot hw1, 4173f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot hw2, 4174f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot hw3, 4175f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot hw4, 4176f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot hw5, 4177f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot eic 4178f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 4179f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotprivate: 4180f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot InterruptType interrupt; 4181f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4182f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4183f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static MipsInterruptAttr *CreateImplicit(ASTContext &Ctx, InterruptType Interrupt, SourceRange Loc = SourceRange()) { 4184f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) MipsInterruptAttr(Loc, Ctx, Interrupt, 0); 4185f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4186f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4187f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4188f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4189f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MipsInterruptAttr(SourceRange R, ASTContext &Ctx 4190f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , InterruptType Interrupt 4191f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4192f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4193f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::MipsInterrupt, R, SI, false, false) 4194f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , interrupt(Interrupt) 4195f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4196f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4197f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4198f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MipsInterruptAttr *clone(ASTContext &C) const; 4199f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4200f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4201f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4202f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot InterruptType getInterrupt() const { 4203f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return interrupt; 4204f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4205f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4206f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool ConvertStrToInterruptType(StringRef Val, InterruptType &Out) { 4207f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Optional<InterruptType> R = llvm::StringSwitch<Optional<InterruptType>>(Val) 4208f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("vector=sw0", MipsInterruptAttr::sw0) 4209f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("vector=sw1", MipsInterruptAttr::sw1) 4210f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("vector=hw0", MipsInterruptAttr::hw0) 4211f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("vector=hw1", MipsInterruptAttr::hw1) 4212f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("vector=hw2", MipsInterruptAttr::hw2) 4213f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("vector=hw3", MipsInterruptAttr::hw3) 4214f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("vector=hw4", MipsInterruptAttr::hw4) 4215f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("vector=hw5", MipsInterruptAttr::hw5) 4216f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("eic", MipsInterruptAttr::eic) 4217f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("", MipsInterruptAttr::eic) 4218f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Default(Optional<InterruptType>()); 4219f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (R) { 4220f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Out = *R; 4221f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return true; 4222f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4223f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return false; 4224f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4225f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4226f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static const char *ConvertInterruptTypeToStr(InterruptType Val) { 4227f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch(Val) { 4228f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case MipsInterruptAttr::sw0: return "vector=sw0"; 4229f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case MipsInterruptAttr::sw1: return "vector=sw1"; 4230f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case MipsInterruptAttr::hw0: return "vector=hw0"; 4231f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case MipsInterruptAttr::hw1: return "vector=hw1"; 4232f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case MipsInterruptAttr::hw2: return "vector=hw2"; 4233f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case MipsInterruptAttr::hw3: return "vector=hw3"; 4234f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case MipsInterruptAttr::hw4: return "vector=hw4"; 4235f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case MipsInterruptAttr::hw5: return "vector=hw5"; 4236f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case MipsInterruptAttr::eic: return "eic"; 4237f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4238f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm_unreachable("No enumerator with that value"); 4239f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4240f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4241f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4242f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::MipsInterrupt; } 4243f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4244f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4245f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass MipsLongCallAttr : public InheritableAttr { 4246f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4247f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum Spelling { 4248f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_long_call = 0, 4249f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CXX11_gnu_long_call = 1, 4250f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_far = 2, 4251f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CXX11_gnu_far = 3 4252f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 4253f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4254f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static MipsLongCallAttr *CreateImplicit(ASTContext &Ctx, Spelling S, SourceRange Loc = SourceRange()) { 4255f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) MipsLongCallAttr(Loc, Ctx, S); 4256f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4257f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4258f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4259f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4260f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MipsLongCallAttr(SourceRange R, ASTContext &Ctx 4261f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4262f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4263f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::MipsLongCall, R, SI, false, false) 4264f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4265f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4266f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4267f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MipsLongCallAttr *clone(ASTContext &C) const; 4268f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4269f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4270f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4271f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Spelling getSemanticSpelling() const { 4272f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch (SpellingListIndex) { 4273f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot default: llvm_unreachable("Unknown spelling list index"); 4274f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 0: return GNU_long_call; 4275f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 1: return CXX11_gnu_long_call; 4276f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 2: return GNU_far; 4277f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 3: return CXX11_gnu_far; 4278f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4279f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4280f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4281f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4282f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::MipsLongCall; } 4283f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4284f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4285f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass MipsShortCallAttr : public InheritableAttr { 4286f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4287f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum Spelling { 4288f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_short_call = 0, 4289f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CXX11_gnu_short_call = 1, 4290f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_near = 2, 4291f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CXX11_gnu_near = 3 4292f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 4293f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4294f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static MipsShortCallAttr *CreateImplicit(ASTContext &Ctx, Spelling S, SourceRange Loc = SourceRange()) { 4295f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) MipsShortCallAttr(Loc, Ctx, S); 4296f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4297f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4298f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4299f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4300f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MipsShortCallAttr(SourceRange R, ASTContext &Ctx 4301f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4302f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4303f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::MipsShortCall, R, SI, false, false) 4304f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4305f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4306f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4307f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MipsShortCallAttr *clone(ASTContext &C) const; 4308f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4309f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4310f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4311f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Spelling getSemanticSpelling() const { 4312f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch (SpellingListIndex) { 4313f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot default: llvm_unreachable("Unknown spelling list index"); 4314f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 0: return GNU_short_call; 4315f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 1: return CXX11_gnu_short_call; 4316f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 2: return GNU_near; 4317f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 3: return CXX11_gnu_near; 4318f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4319f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4320f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4321f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4322f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::MipsShortCall; } 4323f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4324f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4325f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ModeAttr : public Attr { 4326f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotIdentifierInfo * mode; 4327f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4328f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4329f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ModeAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * Mode, SourceRange Loc = SourceRange()) { 4330f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ModeAttr(Loc, Ctx, Mode, 0); 4331f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4332f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4333f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4334f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4335f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ModeAttr(SourceRange R, ASTContext &Ctx 4336f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , IdentifierInfo * Mode 4337f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4338f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4339f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : Attr(attr::Mode, R, SI, false, false) 4340f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , mode(Mode) 4341f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4342f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4343f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4344f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ModeAttr *clone(ASTContext &C) const; 4345f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4346f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4347f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4348f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot IdentifierInfo * getMode() const { 4349f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return mode; 4350f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4351f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4352f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4353f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4354f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Mode; } 4355f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4356f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4357f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass NSConsumedAttr : public InheritableParamAttr { 4358f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4359f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static NSConsumedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 4360f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) NSConsumedAttr(Loc, Ctx, 0); 4361f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4362f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4363f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4364f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4365f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NSConsumedAttr(SourceRange R, ASTContext &Ctx 4366f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4367f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4368f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableParamAttr(attr::NSConsumed, R, SI, false, false) 4369f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4370f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4371f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4372f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NSConsumedAttr *clone(ASTContext &C) const; 4373f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4374f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4375f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4376f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4377f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4378f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::NSConsumed; } 4379f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4380f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4381f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass NSConsumesSelfAttr : public InheritableAttr { 4382f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4383f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static NSConsumesSelfAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 4384f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) NSConsumesSelfAttr(Loc, Ctx, 0); 4385f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4386f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4387f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4388f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4389f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NSConsumesSelfAttr(SourceRange R, ASTContext &Ctx 4390f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4391f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4392f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::NSConsumesSelf, R, SI, false, false) 4393f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4394f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4395f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4396f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NSConsumesSelfAttr *clone(ASTContext &C) const; 4397f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4398f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4399f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4400f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4401f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4402f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::NSConsumesSelf; } 4403f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4404f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4405f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass NSReturnsAutoreleasedAttr : public InheritableAttr { 4406f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4407f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static NSReturnsAutoreleasedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 4408f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) NSReturnsAutoreleasedAttr(Loc, Ctx, 0); 4409f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4410f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4411f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4412f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4413f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NSReturnsAutoreleasedAttr(SourceRange R, ASTContext &Ctx 4414f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4415f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4416f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::NSReturnsAutoreleased, R, SI, false, false) 4417f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4418f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4419f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4420f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NSReturnsAutoreleasedAttr *clone(ASTContext &C) const; 4421f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4422f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4423f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4424f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4425f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4426f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::NSReturnsAutoreleased; } 4427f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4428f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4429f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass NSReturnsNotRetainedAttr : public InheritableAttr { 4430f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4431f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static NSReturnsNotRetainedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 4432f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) NSReturnsNotRetainedAttr(Loc, Ctx, 0); 4433f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4434f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4435f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4436f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4437f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NSReturnsNotRetainedAttr(SourceRange R, ASTContext &Ctx 4438f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4439f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4440f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::NSReturnsNotRetained, R, SI, false, false) 4441f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4442f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4443f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4444f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NSReturnsNotRetainedAttr *clone(ASTContext &C) const; 4445f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4446f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4447f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4448f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4449f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4450f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::NSReturnsNotRetained; } 4451f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4452f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4453f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass NSReturnsRetainedAttr : public InheritableAttr { 4454f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4455f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static NSReturnsRetainedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 4456f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) NSReturnsRetainedAttr(Loc, Ctx, 0); 4457f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4458f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4459f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4460f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4461f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NSReturnsRetainedAttr(SourceRange R, ASTContext &Ctx 4462f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4463f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4464f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::NSReturnsRetained, R, SI, false, false) 4465f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4466f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4467f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4468f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NSReturnsRetainedAttr *clone(ASTContext &C) const; 4469f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4470f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4471f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4472f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4473f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4474f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::NSReturnsRetained; } 4475f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4476f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4477f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass NakedAttr : public InheritableAttr { 4478f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4479f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static NakedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 4480f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) NakedAttr(Loc, Ctx, 0); 4481f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4482f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4483f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4484f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4485f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NakedAttr(SourceRange R, ASTContext &Ctx 4486f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4487f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4488f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Naked, R, SI, false, false) 4489f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4490f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4491f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4492f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NakedAttr *clone(ASTContext &C) const; 4493f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4494f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4495f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4496f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4497f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4498f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Naked; } 4499f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4500f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4501f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass NoAliasAttr : public InheritableAttr { 4502f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4503f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static NoAliasAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 4504f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) NoAliasAttr(Loc, Ctx, 0); 4505f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4506f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4507f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4508f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4509f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NoAliasAttr(SourceRange R, ASTContext &Ctx 4510f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4511f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4512f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::NoAlias, R, SI, false, false) 4513f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4514f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4515f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4516f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NoAliasAttr *clone(ASTContext &C) const; 4517f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4518f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4519f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4520f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4521f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4522f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::NoAlias; } 4523f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4524f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4525f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass NoCommonAttr : public InheritableAttr { 4526f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4527f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static NoCommonAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 4528f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) NoCommonAttr(Loc, Ctx, 0); 4529f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4530f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4531f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4532f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4533f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NoCommonAttr(SourceRange R, ASTContext &Ctx 4534f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4535f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4536f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::NoCommon, R, SI, false, false) 4537f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4538f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4539f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4540f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NoCommonAttr *clone(ASTContext &C) const; 4541f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4542f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4543f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4544f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4545f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4546f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::NoCommon; } 4547f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4548f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4549f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass NoDebugAttr : public InheritableAttr { 4550f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4551f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static NoDebugAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 4552f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) NoDebugAttr(Loc, Ctx, 0); 4553f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4554f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4555f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4556f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4557f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NoDebugAttr(SourceRange R, ASTContext &Ctx 4558f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4559f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4560f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::NoDebug, R, SI, false, false) 4561f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4562f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4563f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4564f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NoDebugAttr *clone(ASTContext &C) const; 4565f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4566f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4567f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4568f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4569f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4570f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::NoDebug; } 4571f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4572f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4573f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass NoDuplicateAttr : public InheritableAttr { 4574f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4575f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static NoDuplicateAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 4576f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) NoDuplicateAttr(Loc, Ctx, 0); 4577f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4578f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4579f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4580f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4581f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NoDuplicateAttr(SourceRange R, ASTContext &Ctx 4582f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4583f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4584f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::NoDuplicate, R, SI, false, false) 4585f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4586f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4587f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4588f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NoDuplicateAttr *clone(ASTContext &C) const; 4589f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4590f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4591f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4592f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4593f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4594f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::NoDuplicate; } 4595f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4596f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4597f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass NoEscapeAttr : public Attr { 4598f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4599f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static NoEscapeAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 4600f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) NoEscapeAttr(Loc, Ctx, 0); 4601f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4602f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4603f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4604f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4605f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NoEscapeAttr(SourceRange R, ASTContext &Ctx 4606f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4607f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4608f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : Attr(attr::NoEscape, R, SI, false, false) 4609f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4610f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4611f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4612f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NoEscapeAttr *clone(ASTContext &C) const; 4613f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4614f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4615f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4616f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4617f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4618f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::NoEscape; } 4619f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4620f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4621f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass NoInlineAttr : public InheritableAttr { 4622f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4623f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static NoInlineAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 4624f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) NoInlineAttr(Loc, Ctx, 0); 4625f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4626f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4627f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4628f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4629f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NoInlineAttr(SourceRange R, ASTContext &Ctx 4630f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4631f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4632f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::NoInline, R, SI, false, false) 4633f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4634f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4635f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4636f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NoInlineAttr *clone(ASTContext &C) const; 4637f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4638f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4639f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4640f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4641f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4642f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::NoInline; } 4643f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4644f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4645f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass NoInstrumentFunctionAttr : public InheritableAttr { 4646f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4647f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static NoInstrumentFunctionAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 4648f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) NoInstrumentFunctionAttr(Loc, Ctx, 0); 4649f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4650f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4651f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4652f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4653f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NoInstrumentFunctionAttr(SourceRange R, ASTContext &Ctx 4654f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4655f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4656f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::NoInstrumentFunction, R, SI, false, false) 4657f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4658f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4659f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4660f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NoInstrumentFunctionAttr *clone(ASTContext &C) const; 4661f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4662f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4663f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4664f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4665f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4666f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::NoInstrumentFunction; } 4667f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4668f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4669f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass NoMicroMipsAttr : public InheritableAttr { 4670f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4671f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static NoMicroMipsAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 4672f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) NoMicroMipsAttr(Loc, Ctx, 0); 4673f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4674f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4675f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4676f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4677f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NoMicroMipsAttr(SourceRange R, ASTContext &Ctx 4678f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4679f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4680f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::NoMicroMips, R, SI, false, false) 4681f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4682f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4683f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4684f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NoMicroMipsAttr *clone(ASTContext &C) const; 4685f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4686f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4687f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4688f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4689f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4690f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::NoMicroMips; } 4691f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4692f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4693f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass NoMips16Attr : public InheritableAttr { 4694f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4695f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static NoMips16Attr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 4696f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) NoMips16Attr(Loc, Ctx, 0); 4697f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4698f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4699f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4700f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4701f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NoMips16Attr(SourceRange R, ASTContext &Ctx 4702f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4703f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4704f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::NoMips16, R, SI, false, false) 4705f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4706f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4707f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4708f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NoMips16Attr *clone(ASTContext &C) const; 4709f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4710f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4711f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4712f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4713f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4714f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::NoMips16; } 4715f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4716f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4717f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass NoReturnAttr : public InheritableAttr { 4718f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4719f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static NoReturnAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 4720f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) NoReturnAttr(Loc, Ctx, 0); 4721f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4722f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4723f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4724f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4725f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NoReturnAttr(SourceRange R, ASTContext &Ctx 4726f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4727f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4728f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::NoReturn, R, SI, false, false) 4729f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4730f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4731f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4732f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NoReturnAttr *clone(ASTContext &C) const; 4733f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4734f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4735f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4736f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4737f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4738f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::NoReturn; } 4739f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4740f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4741f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass NoSanitizeAttr : public InheritableAttr { 4742f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned sanitizers_Size; 4743f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot StringRef *sanitizers_; 4744f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4745f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4746f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static NoSanitizeAttr *CreateImplicit(ASTContext &Ctx, StringRef *Sanitizers, unsigned SanitizersSize, SourceRange Loc = SourceRange()) { 4747f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) NoSanitizeAttr(Loc, Ctx, Sanitizers, SanitizersSize, 0); 4748f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4749f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4750f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4751f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4752f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NoSanitizeAttr(SourceRange R, ASTContext &Ctx 4753f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , StringRef *Sanitizers, unsigned SanitizersSize 4754f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4755f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4756f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::NoSanitize, R, SI, false, false) 4757f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , sanitizers_Size(SanitizersSize), sanitizers_(new (Ctx, 16) StringRef[sanitizers_Size]) 4758f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4759f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot for (size_t I = 0, E = sanitizers_Size; I != E; 4760f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ++I) { 4761f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot StringRef Ref = Sanitizers[I]; 4762f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!Ref.empty()) { 4763f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot char *Mem = new (Ctx, 1) char[Ref.size()]; 4764f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(Mem, Ref.data(), Ref.size()); 4765f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot sanitizers_[I] = StringRef(Mem, Ref.size()); 4766f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4767f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4768f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4769f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4770f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NoSanitizeAttr(SourceRange R, ASTContext &Ctx 4771f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4772f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4773f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::NoSanitize, R, SI, false, false) 4774f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , sanitizers_Size(0), sanitizers_(nullptr) 4775f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4776f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4777f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4778f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NoSanitizeAttr *clone(ASTContext &C) const; 4779f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4780f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4781f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4782f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot typedef StringRef* sanitizers_iterator; 4783f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot sanitizers_iterator sanitizers_begin() const { return sanitizers_; } 4784f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot sanitizers_iterator sanitizers_end() const { return sanitizers_ + sanitizers_Size; } 4785f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned sanitizers_size() const { return sanitizers_Size; } 4786f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::iterator_range<sanitizers_iterator> sanitizers() const { return llvm::make_range(sanitizers_begin(), sanitizers_end()); } 4787f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4788f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4789f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4790f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SanitizerMask getMask() const { 4791f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SanitizerMask Mask = 0; 4792f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot for (auto SanitizerName : sanitizers()) { 4793f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SanitizerMask ParsedMask = 4794f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot parseSanitizerValue(SanitizerName, /*AllowGroups=*/true); 4795f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Mask |= expandSanitizerGroups(ParsedMask); 4796f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4797f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return Mask; 4798f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4799f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4800f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4801f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::NoSanitize; } 4802f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4803f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4804f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass NoSplitStackAttr : public InheritableAttr { 4805f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4806f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static NoSplitStackAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 4807f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) NoSplitStackAttr(Loc, Ctx, 0); 4808f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4809f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4810f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4811f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4812f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NoSplitStackAttr(SourceRange R, ASTContext &Ctx 4813f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4814f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4815f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::NoSplitStack, R, SI, false, false) 4816f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4817f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4818f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4819f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NoSplitStackAttr *clone(ASTContext &C) const; 4820f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4821f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4822f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4823f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4824f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4825f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::NoSplitStack; } 4826f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4827f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4828f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass NoThreadSafetyAnalysisAttr : public InheritableAttr { 4829f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4830f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static NoThreadSafetyAnalysisAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 4831f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) NoThreadSafetyAnalysisAttr(Loc, Ctx, 0); 4832f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4833f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4834f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4835f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4836f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NoThreadSafetyAnalysisAttr(SourceRange R, ASTContext &Ctx 4837f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4838f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4839f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::NoThreadSafetyAnalysis, R, SI, false, false) 4840f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4841f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4842f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4843f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NoThreadSafetyAnalysisAttr *clone(ASTContext &C) const; 4844f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4845f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4846f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4847f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4848f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4849f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::NoThreadSafetyAnalysis; } 4850f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4851f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4852f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass NoThrowAttr : public InheritableAttr { 4853f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4854f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static NoThrowAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 4855f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) NoThrowAttr(Loc, Ctx, 0); 4856f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4857f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4858f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4859f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4860f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NoThrowAttr(SourceRange R, ASTContext &Ctx 4861f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4862f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4863f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::NoThrow, R, SI, false, false) 4864f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4865f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4866f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4867f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NoThrowAttr *clone(ASTContext &C) const; 4868f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4869f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4870f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4871f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4872f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4873f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::NoThrow; } 4874f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4875f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4876f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass NonNullAttr : public InheritableParamAttr { 4877f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned args_Size; 4878f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned *args_; 4879f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4880f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4881f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static NonNullAttr *CreateImplicit(ASTContext &Ctx, unsigned *Args, unsigned ArgsSize, SourceRange Loc = SourceRange()) { 4882f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) NonNullAttr(Loc, Ctx, Args, ArgsSize, 0); 4883f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4884f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4885f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4886f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4887f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NonNullAttr(SourceRange R, ASTContext &Ctx 4888f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned *Args, unsigned ArgsSize 4889f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4890f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4891f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableParamAttr(attr::NonNull, R, SI, false, true) 4892f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , args_Size(ArgsSize), args_(new (Ctx, 16) unsigned[args_Size]) 4893f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4894f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::copy(Args, Args + args_Size, args_); 4895f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4896f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4897f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NonNullAttr(SourceRange R, ASTContext &Ctx 4898f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4899f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4900f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableParamAttr(attr::NonNull, R, SI, false, true) 4901f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , args_Size(0), args_(nullptr) 4902f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4903f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4904f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4905f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NonNullAttr *clone(ASTContext &C) const; 4906f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4907f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4908f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4909f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot typedef unsigned* args_iterator; 4910f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot args_iterator args_begin() const { return args_; } 4911f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot args_iterator args_end() const { return args_ + args_Size; } 4912f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned args_size() const { return args_Size; } 4913f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); } 4914f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4915f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4916f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotbool isNonNull(unsigned idx) const { 4917f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!args_size()) 4918f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return true; 4919f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot for (const auto &V : args()) 4920f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (V == idx) 4921f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return true; 4922f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return false; 4923f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4924f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4925f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::NonNull; } 4926f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4927f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4928f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass NotTailCalledAttr : public InheritableAttr { 4929f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4930f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static NotTailCalledAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 4931f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) NotTailCalledAttr(Loc, Ctx, 0); 4932f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4933f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4934f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4935f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4936f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NotTailCalledAttr(SourceRange R, ASTContext &Ctx 4937f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4938f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4939f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::NotTailCalled, R, SI, false, false) 4940f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4941f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4942f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4943f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot NotTailCalledAttr *clone(ASTContext &C) const; 4944f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4945f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4946f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4947f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4948f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4949f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::NotTailCalled; } 4950f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4951f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4952f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass OMPCaptureKindAttr : public Attr { 4953f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned captureKind; 4954f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4955f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4956f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static OMPCaptureKindAttr *CreateImplicit(ASTContext &Ctx, unsigned CaptureKind, SourceRange Loc = SourceRange()) { 4957f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) OMPCaptureKindAttr(Loc, Ctx, CaptureKind, 0); 4958f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4959f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4960f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4961f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4962f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OMPCaptureKindAttr(SourceRange R, ASTContext &Ctx 4963f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned CaptureKind 4964f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4965f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4966f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : Attr(attr::OMPCaptureKind, R, SI, false, false) 4967f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , captureKind(CaptureKind) 4968f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4969f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4970f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4971f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OMPCaptureKindAttr *clone(ASTContext &C) const; 4972f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 4973f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 4974f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 4975f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getCaptureKind() const { 4976f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return captureKind; 4977f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4978f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4979f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4980f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4981f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::OMPCaptureKind; } 4982f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 4983f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4984f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass OMPCaptureNoInitAttr : public InheritableAttr { 4985f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 4986f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static OMPCaptureNoInitAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 4987f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) OMPCaptureNoInitAttr(Loc, Ctx, 0); 4988f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 4989f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 4990f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4991f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4992f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OMPCaptureNoInitAttr(SourceRange R, ASTContext &Ctx 4993f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 4994f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 4995f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::OMPCaptureNoInit, R, SI, false, false) 4996f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 4997f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 4998f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 4999f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OMPCaptureNoInitAttr *clone(ASTContext &C) const; 5000f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 5001f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 5002f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 5003f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5004f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5005f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::OMPCaptureNoInit; } 5006f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 5007f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5008f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass OMPDeclareSimdDeclAttr : public Attr { 5009f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 5010f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum BranchStateTy { 5011f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot BS_Undefined, 5012f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot BS_Inbranch, 5013f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot BS_Notinbranch 5014f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 5015f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotprivate: 5016f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot BranchStateTy branchState; 5017f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5018f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotExpr * simdlen; 5019f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5020f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned uniforms_Size; 5021f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr * *uniforms_; 5022f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5023f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned aligneds_Size; 5024f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr * *aligneds_; 5025f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5026f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned alignments_Size; 5027f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr * *alignments_; 5028f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5029f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned linears_Size; 5030f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr * *linears_; 5031f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5032f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned modifiers_Size; 5033f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned *modifiers_; 5034f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5035f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned steps_Size; 5036f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr * *steps_; 5037f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5038f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 5039f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static OMPDeclareSimdDeclAttr *CreateImplicit(ASTContext &Ctx, BranchStateTy BranchState, Expr * Simdlen, Expr * *Uniforms, unsigned UniformsSize, Expr * *Aligneds, unsigned AlignedsSize, Expr * *Alignments, unsigned AlignmentsSize, Expr * *Linears, unsigned LinearsSize, unsigned *Modifiers, unsigned ModifiersSize, Expr * *Steps, unsigned StepsSize, SourceRange Loc = SourceRange()) { 5040f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) OMPDeclareSimdDeclAttr(Loc, Ctx, BranchState, Simdlen, Uniforms, UniformsSize, Aligneds, AlignedsSize, Alignments, AlignmentsSize, Linears, LinearsSize, Modifiers, ModifiersSize, Steps, StepsSize, 0); 5041f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 5042f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 5043f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5044f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5045f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OMPDeclareSimdDeclAttr(SourceRange R, ASTContext &Ctx 5046f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , BranchStateTy BranchState 5047f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * Simdlen 5048f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * *Uniforms, unsigned UniformsSize 5049f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * *Aligneds, unsigned AlignedsSize 5050f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * *Alignments, unsigned AlignmentsSize 5051f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * *Linears, unsigned LinearsSize 5052f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned *Modifiers, unsigned ModifiersSize 5053f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * *Steps, unsigned StepsSize 5054f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 5055f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 5056f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : Attr(attr::OMPDeclareSimdDecl, R, SI, false, false) 5057f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , branchState(BranchState) 5058f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , simdlen(Simdlen) 5059f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , uniforms_Size(UniformsSize), uniforms_(new (Ctx, 16) Expr *[uniforms_Size]) 5060f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , aligneds_Size(AlignedsSize), aligneds_(new (Ctx, 16) Expr *[aligneds_Size]) 5061f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , alignments_Size(AlignmentsSize), alignments_(new (Ctx, 16) Expr *[alignments_Size]) 5062f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , linears_Size(LinearsSize), linears_(new (Ctx, 16) Expr *[linears_Size]) 5063f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , modifiers_Size(ModifiersSize), modifiers_(new (Ctx, 16) unsigned[modifiers_Size]) 5064f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , steps_Size(StepsSize), steps_(new (Ctx, 16) Expr *[steps_Size]) 5065f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 5066f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::copy(Uniforms, Uniforms + uniforms_Size, uniforms_); 5067f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::copy(Aligneds, Aligneds + aligneds_Size, aligneds_); 5068f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::copy(Alignments, Alignments + alignments_Size, alignments_); 5069f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::copy(Linears, Linears + linears_Size, linears_); 5070f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::copy(Modifiers, Modifiers + modifiers_Size, modifiers_); 5071f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::copy(Steps, Steps + steps_Size, steps_); 5072f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5073f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5074f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OMPDeclareSimdDeclAttr(SourceRange R, ASTContext &Ctx 5075f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , BranchStateTy BranchState 5076f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * Simdlen 5077f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 5078f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 5079f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : Attr(attr::OMPDeclareSimdDecl, R, SI, false, false) 5080f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , branchState(BranchState) 5081f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , simdlen(Simdlen) 5082f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , uniforms_Size(0), uniforms_(nullptr) 5083f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , aligneds_Size(0), aligneds_(nullptr) 5084f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , alignments_Size(0), alignments_(nullptr) 5085f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , linears_Size(0), linears_(nullptr) 5086f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , modifiers_Size(0), modifiers_(nullptr) 5087f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , steps_Size(0), steps_(nullptr) 5088f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 5089f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5090f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5091f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OMPDeclareSimdDeclAttr *clone(ASTContext &C) const; 5092f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 5093f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 5094f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 5095f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot BranchStateTy getBranchState() const { 5096f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return branchState; 5097f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5098f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5099f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool ConvertStrToBranchStateTy(StringRef Val, BranchStateTy &Out) { 5100f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Optional<BranchStateTy> R = llvm::StringSwitch<Optional<BranchStateTy>>(Val) 5101f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("", OMPDeclareSimdDeclAttr::BS_Undefined) 5102f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("inbranch", OMPDeclareSimdDeclAttr::BS_Inbranch) 5103f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("notinbranch", OMPDeclareSimdDeclAttr::BS_Notinbranch) 5104f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Default(Optional<BranchStateTy>()); 5105f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (R) { 5106f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Out = *R; 5107f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return true; 5108f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5109f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return false; 5110f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5111f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5112f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static const char *ConvertBranchStateTyToStr(BranchStateTy Val) { 5113f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch(Val) { 5114f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case OMPDeclareSimdDeclAttr::BS_Undefined: return ""; 5115f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case OMPDeclareSimdDeclAttr::BS_Inbranch: return "inbranch"; 5116f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case OMPDeclareSimdDeclAttr::BS_Notinbranch: return "notinbranch"; 5117f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5118f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm_unreachable("No enumerator with that value"); 5119f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5120f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr * getSimdlen() const { 5121f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return simdlen; 5122f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5123f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5124f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot typedef Expr ** uniforms_iterator; 5125f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot uniforms_iterator uniforms_begin() const { return uniforms_; } 5126f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot uniforms_iterator uniforms_end() const { return uniforms_ + uniforms_Size; } 5127f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned uniforms_size() const { return uniforms_Size; } 5128f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::iterator_range<uniforms_iterator> uniforms() const { return llvm::make_range(uniforms_begin(), uniforms_end()); } 5129f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5130f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5131f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot typedef Expr ** aligneds_iterator; 5132f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot aligneds_iterator aligneds_begin() const { return aligneds_; } 5133f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot aligneds_iterator aligneds_end() const { return aligneds_ + aligneds_Size; } 5134f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned aligneds_size() const { return aligneds_Size; } 5135f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::iterator_range<aligneds_iterator> aligneds() const { return llvm::make_range(aligneds_begin(), aligneds_end()); } 5136f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5137f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5138f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot typedef Expr ** alignments_iterator; 5139f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot alignments_iterator alignments_begin() const { return alignments_; } 5140f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot alignments_iterator alignments_end() const { return alignments_ + alignments_Size; } 5141f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned alignments_size() const { return alignments_Size; } 5142f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::iterator_range<alignments_iterator> alignments() const { return llvm::make_range(alignments_begin(), alignments_end()); } 5143f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5144f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5145f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot typedef Expr ** linears_iterator; 5146f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot linears_iterator linears_begin() const { return linears_; } 5147f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot linears_iterator linears_end() const { return linears_ + linears_Size; } 5148f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned linears_size() const { return linears_Size; } 5149f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::iterator_range<linears_iterator> linears() const { return llvm::make_range(linears_begin(), linears_end()); } 5150f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5151f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5152f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot typedef unsigned* modifiers_iterator; 5153f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot modifiers_iterator modifiers_begin() const { return modifiers_; } 5154f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot modifiers_iterator modifiers_end() const { return modifiers_ + modifiers_Size; } 5155f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned modifiers_size() const { return modifiers_Size; } 5156f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::iterator_range<modifiers_iterator> modifiers() const { return llvm::make_range(modifiers_begin(), modifiers_end()); } 5157f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5158f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5159f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot typedef Expr ** steps_iterator; 5160f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot steps_iterator steps_begin() const { return steps_; } 5161f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot steps_iterator steps_end() const { return steps_ + steps_Size; } 5162f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned steps_size() const { return steps_Size; } 5163f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::iterator_range<steps_iterator> steps() const { return llvm::make_range(steps_begin(), steps_end()); } 5164f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5165f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5166f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5167f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPrettyPragma(raw_ostream & OS, const PrintingPolicy &Policy) 5168f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const { 5169f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (getBranchState() != BS_Undefined) 5170f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OS << ConvertBranchStateTyToStr(getBranchState()) << " "; 5171f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (auto *E = getSimdlen()) { 5172f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OS << "simdlen("; 5173f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot E->printPretty(OS, nullptr, Policy); 5174f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OS << ") "; 5175f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5176f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (uniforms_size() > 0) { 5177f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OS << "uniform"; 5178f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot StringRef Sep = "("; 5179f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot for (auto *E : uniforms()) { 5180f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OS << Sep; 5181f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot E->printPretty(OS, nullptr, Policy); 5182f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Sep = ", "; 5183f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5184f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OS << ") "; 5185f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5186f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot alignments_iterator NI = alignments_begin(); 5187f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot for (auto *E : aligneds()) { 5188f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OS << "aligned("; 5189f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot E->printPretty(OS, nullptr, Policy); 5190f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (*NI) { 5191f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OS << ": "; 5192f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot (*NI)->printPretty(OS, nullptr, Policy); 5193f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5194f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OS << ") "; 5195f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ++NI; 5196f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5197f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot steps_iterator I = steps_begin(); 5198f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot modifiers_iterator MI = modifiers_begin(); 5199f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot for (auto *E : linears()) { 5200f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OS << "linear("; 5201f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (*MI != OMPC_LINEAR_unknown) 5202f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OS << getOpenMPSimpleClauseTypeName(OMPC_linear, *MI) << "("; 5203f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot E->printPretty(OS, nullptr, Policy); 5204f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (*MI != OMPC_LINEAR_unknown) 5205f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OS << ")"; 5206f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (*I) { 5207f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OS << ": "; 5208f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot (*I)->printPretty(OS, nullptr, Policy); 5209f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5210f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OS << ") "; 5211f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ++I; 5212f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ++MI; 5213f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5214f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5215f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5216f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5217f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::OMPDeclareSimdDecl; } 5218f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 5219f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5220f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass OMPDeclareTargetDeclAttr : public Attr { 5221f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 5222f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum MapTypeTy { 5223f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MT_To, 5224f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MT_Link 5225f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 5226f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotprivate: 5227f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MapTypeTy mapType; 5228f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5229f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 5230f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static OMPDeclareTargetDeclAttr *CreateImplicit(ASTContext &Ctx, MapTypeTy MapType, SourceRange Loc = SourceRange()) { 5231f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) OMPDeclareTargetDeclAttr(Loc, Ctx, MapType, 0); 5232f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 5233f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 5234f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5235f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5236f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OMPDeclareTargetDeclAttr(SourceRange R, ASTContext &Ctx 5237f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , MapTypeTy MapType 5238f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 5239f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 5240f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : Attr(attr::OMPDeclareTargetDecl, R, SI, false, false) 5241f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , mapType(MapType) 5242f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 5243f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5244f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5245f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OMPDeclareTargetDeclAttr *clone(ASTContext &C) const; 5246f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 5247f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 5248f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 5249f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MapTypeTy getMapType() const { 5250f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return mapType; 5251f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5252f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5253f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool ConvertStrToMapTypeTy(StringRef Val, MapTypeTy &Out) { 5254f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Optional<MapTypeTy> R = llvm::StringSwitch<Optional<MapTypeTy>>(Val) 5255f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("to", OMPDeclareTargetDeclAttr::MT_To) 5256f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("link", OMPDeclareTargetDeclAttr::MT_Link) 5257f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Default(Optional<MapTypeTy>()); 5258f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (R) { 5259f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Out = *R; 5260f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return true; 5261f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5262f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return false; 5263f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5264f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5265f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static const char *ConvertMapTypeTyToStr(MapTypeTy Val) { 5266f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch(Val) { 5267f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case OMPDeclareTargetDeclAttr::MT_To: return "to"; 5268f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case OMPDeclareTargetDeclAttr::MT_Link: return "link"; 5269f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5270f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm_unreachable("No enumerator with that value"); 5271f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5272f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5273f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPrettyPragma(raw_ostream &OS, const PrintingPolicy &Policy) const { 5274f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot // Use fake syntax because it is for testing and debugging purpose only. 5275f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (getMapType() != MT_To) 5276f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OS << ConvertMapTypeTyToStr(getMapType()) << " "; 5277f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5278f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5279f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5280f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::OMPDeclareTargetDecl; } 5281f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 5282f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5283f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass OMPThreadPrivateDeclAttr : public InheritableAttr { 5284f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 5285f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static OMPThreadPrivateDeclAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 5286f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) OMPThreadPrivateDeclAttr(Loc, Ctx, 0); 5287f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 5288f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 5289f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5290f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5291f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OMPThreadPrivateDeclAttr(SourceRange R, ASTContext &Ctx 5292f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 5293f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 5294f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::OMPThreadPrivateDecl, R, SI, false, false) 5295f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 5296f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5297f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5298f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OMPThreadPrivateDeclAttr *clone(ASTContext &C) const; 5299f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 5300f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 5301f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 5302f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5303f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5304f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::OMPThreadPrivateDecl; } 5305f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 5306f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5307f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ObjCBoxableAttr : public Attr { 5308f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 5309f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ObjCBoxableAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 5310f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ObjCBoxableAttr(Loc, Ctx, 0); 5311f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 5312f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 5313f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5314f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5315f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCBoxableAttr(SourceRange R, ASTContext &Ctx 5316f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 5317f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 5318f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : Attr(attr::ObjCBoxable, R, SI, false, false) 5319f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 5320f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5321f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5322f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCBoxableAttr *clone(ASTContext &C) const; 5323f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 5324f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 5325f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 5326f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5327f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5328f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ObjCBoxable; } 5329f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 5330f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5331f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ObjCBridgeAttr : public InheritableAttr { 5332f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotIdentifierInfo * bridgedType; 5333f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5334f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 5335f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ObjCBridgeAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * BridgedType, SourceRange Loc = SourceRange()) { 5336f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ObjCBridgeAttr(Loc, Ctx, BridgedType, 0); 5337f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 5338f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 5339f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5340f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5341f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCBridgeAttr(SourceRange R, ASTContext &Ctx 5342f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , IdentifierInfo * BridgedType 5343f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 5344f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 5345f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ObjCBridge, R, SI, false, false) 5346f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , bridgedType(BridgedType) 5347f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 5348f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5349f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5350f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCBridgeAttr *clone(ASTContext &C) const; 5351f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 5352f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 5353f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 5354f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot IdentifierInfo * getBridgedType() const { 5355f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return bridgedType; 5356f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5357f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5358f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5359f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5360f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ObjCBridge; } 5361f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 5362f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5363f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ObjCBridgeMutableAttr : public InheritableAttr { 5364f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotIdentifierInfo * bridgedType; 5365f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5366f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 5367f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ObjCBridgeMutableAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * BridgedType, SourceRange Loc = SourceRange()) { 5368f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ObjCBridgeMutableAttr(Loc, Ctx, BridgedType, 0); 5369f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 5370f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 5371f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5372f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5373f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCBridgeMutableAttr(SourceRange R, ASTContext &Ctx 5374f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , IdentifierInfo * BridgedType 5375f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 5376f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 5377f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ObjCBridgeMutable, R, SI, false, false) 5378f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , bridgedType(BridgedType) 5379f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 5380f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5381f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5382f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCBridgeMutableAttr *clone(ASTContext &C) const; 5383f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 5384f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 5385f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 5386f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot IdentifierInfo * getBridgedType() const { 5387f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return bridgedType; 5388f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5389f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5390f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5391f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5392f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ObjCBridgeMutable; } 5393f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 5394f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5395f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ObjCBridgeRelatedAttr : public InheritableAttr { 5396f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotIdentifierInfo * relatedClass; 5397f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5398f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotIdentifierInfo * classMethod; 5399f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5400f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotIdentifierInfo * instanceMethod; 5401f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5402f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 5403f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ObjCBridgeRelatedAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * RelatedClass, IdentifierInfo * ClassMethod, IdentifierInfo * InstanceMethod, SourceRange Loc = SourceRange()) { 5404f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ObjCBridgeRelatedAttr(Loc, Ctx, RelatedClass, ClassMethod, InstanceMethod, 0); 5405f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 5406f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 5407f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5408f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5409f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCBridgeRelatedAttr(SourceRange R, ASTContext &Ctx 5410f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , IdentifierInfo * RelatedClass 5411f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , IdentifierInfo * ClassMethod 5412f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , IdentifierInfo * InstanceMethod 5413f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 5414f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 5415f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ObjCBridgeRelated, R, SI, false, false) 5416f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , relatedClass(RelatedClass) 5417f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , classMethod(ClassMethod) 5418f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , instanceMethod(InstanceMethod) 5419f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 5420f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5421f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5422f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCBridgeRelatedAttr(SourceRange R, ASTContext &Ctx 5423f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , IdentifierInfo * RelatedClass 5424f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 5425f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 5426f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ObjCBridgeRelated, R, SI, false, false) 5427f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , relatedClass(RelatedClass) 5428f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , classMethod() 5429f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , instanceMethod() 5430f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 5431f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5432f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5433f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCBridgeRelatedAttr *clone(ASTContext &C) const; 5434f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 5435f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 5436f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 5437f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot IdentifierInfo * getRelatedClass() const { 5438f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return relatedClass; 5439f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5440f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5441f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot IdentifierInfo * getClassMethod() const { 5442f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return classMethod; 5443f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5444f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5445f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot IdentifierInfo * getInstanceMethod() const { 5446f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return instanceMethod; 5447f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5448f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5449f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5450f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5451f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ObjCBridgeRelated; } 5452f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 5453f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5454f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ObjCDesignatedInitializerAttr : public Attr { 5455f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 5456f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ObjCDesignatedInitializerAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 5457f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ObjCDesignatedInitializerAttr(Loc, Ctx, 0); 5458f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 5459f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 5460f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5461f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5462f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCDesignatedInitializerAttr(SourceRange R, ASTContext &Ctx 5463f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 5464f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 5465f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : Attr(attr::ObjCDesignatedInitializer, R, SI, false, false) 5466f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 5467f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5468f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5469f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCDesignatedInitializerAttr *clone(ASTContext &C) const; 5470f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 5471f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 5472f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 5473f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5474f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5475f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ObjCDesignatedInitializer; } 5476f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 5477f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5478f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ObjCExceptionAttr : public InheritableAttr { 5479f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 5480f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ObjCExceptionAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 5481f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ObjCExceptionAttr(Loc, Ctx, 0); 5482f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 5483f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 5484f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5485f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5486f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCExceptionAttr(SourceRange R, ASTContext &Ctx 5487f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 5488f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 5489f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ObjCException, R, SI, false, false) 5490f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 5491f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5492f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5493f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCExceptionAttr *clone(ASTContext &C) const; 5494f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 5495f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 5496f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 5497f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5498f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5499f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ObjCException; } 5500f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 5501f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5502f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ObjCExplicitProtocolImplAttr : public InheritableAttr { 5503f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 5504f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ObjCExplicitProtocolImplAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 5505f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ObjCExplicitProtocolImplAttr(Loc, Ctx, 0); 5506f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 5507f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 5508f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5509f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5510f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCExplicitProtocolImplAttr(SourceRange R, ASTContext &Ctx 5511f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 5512f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 5513f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ObjCExplicitProtocolImpl, R, SI, false, false) 5514f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 5515f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5516f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5517f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCExplicitProtocolImplAttr *clone(ASTContext &C) const; 5518f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 5519f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 5520f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 5521f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5522f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5523f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ObjCExplicitProtocolImpl; } 5524f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 5525f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5526f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ObjCIndependentClassAttr : public InheritableAttr { 5527f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 5528f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ObjCIndependentClassAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 5529f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ObjCIndependentClassAttr(Loc, Ctx, 0); 5530f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 5531f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 5532f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5533f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5534f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCIndependentClassAttr(SourceRange R, ASTContext &Ctx 5535f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 5536f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 5537f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ObjCIndependentClass, R, SI, false, false) 5538f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 5539f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5540f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5541f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCIndependentClassAttr *clone(ASTContext &C) const; 5542f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 5543f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 5544f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 5545f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5546f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5547f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ObjCIndependentClass; } 5548f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 5549f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5550f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ObjCMethodFamilyAttr : public InheritableAttr { 5551f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 5552f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum FamilyKind { 5553f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OMF_None, 5554f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OMF_alloc, 5555f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OMF_copy, 5556f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OMF_init, 5557f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OMF_mutableCopy, 5558f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OMF_new 5559f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 5560f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotprivate: 5561f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot FamilyKind family; 5562f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5563f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 5564f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ObjCMethodFamilyAttr *CreateImplicit(ASTContext &Ctx, FamilyKind Family, SourceRange Loc = SourceRange()) { 5565f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ObjCMethodFamilyAttr(Loc, Ctx, Family, 0); 5566f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 5567f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 5568f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5569f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5570f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCMethodFamilyAttr(SourceRange R, ASTContext &Ctx 5571f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , FamilyKind Family 5572f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 5573f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 5574f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ObjCMethodFamily, R, SI, false, false) 5575f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , family(Family) 5576f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 5577f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5578f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5579f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCMethodFamilyAttr *clone(ASTContext &C) const; 5580f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 5581f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 5582f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 5583f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot FamilyKind getFamily() const { 5584f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return family; 5585f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5586f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5587f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool ConvertStrToFamilyKind(StringRef Val, FamilyKind &Out) { 5588f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Optional<FamilyKind> R = llvm::StringSwitch<Optional<FamilyKind>>(Val) 5589f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("none", ObjCMethodFamilyAttr::OMF_None) 5590f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("alloc", ObjCMethodFamilyAttr::OMF_alloc) 5591f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("copy", ObjCMethodFamilyAttr::OMF_copy) 5592f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("init", ObjCMethodFamilyAttr::OMF_init) 5593f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("mutableCopy", ObjCMethodFamilyAttr::OMF_mutableCopy) 5594f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("new", ObjCMethodFamilyAttr::OMF_new) 5595f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Default(Optional<FamilyKind>()); 5596f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (R) { 5597f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Out = *R; 5598f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return true; 5599f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5600f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return false; 5601f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5602f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5603f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static const char *ConvertFamilyKindToStr(FamilyKind Val) { 5604f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch(Val) { 5605f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case ObjCMethodFamilyAttr::OMF_None: return "none"; 5606f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case ObjCMethodFamilyAttr::OMF_alloc: return "alloc"; 5607f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case ObjCMethodFamilyAttr::OMF_copy: return "copy"; 5608f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case ObjCMethodFamilyAttr::OMF_init: return "init"; 5609f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case ObjCMethodFamilyAttr::OMF_mutableCopy: return "mutableCopy"; 5610f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case ObjCMethodFamilyAttr::OMF_new: return "new"; 5611f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5612f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm_unreachable("No enumerator with that value"); 5613f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5614f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5615f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5616f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ObjCMethodFamily; } 5617f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 5618f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5619f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ObjCNSObjectAttr : public InheritableAttr { 5620f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 5621f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ObjCNSObjectAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 5622f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ObjCNSObjectAttr(Loc, Ctx, 0); 5623f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 5624f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 5625f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5626f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5627f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCNSObjectAttr(SourceRange R, ASTContext &Ctx 5628f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 5629f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 5630f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ObjCNSObject, R, SI, false, false) 5631f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 5632f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5633f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5634f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCNSObjectAttr *clone(ASTContext &C) const; 5635f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 5636f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 5637f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 5638f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5639f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5640f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ObjCNSObject; } 5641f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 5642f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5643f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ObjCPreciseLifetimeAttr : public InheritableAttr { 5644f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 5645f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ObjCPreciseLifetimeAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 5646f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ObjCPreciseLifetimeAttr(Loc, Ctx, 0); 5647f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 5648f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 5649f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5650f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5651f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCPreciseLifetimeAttr(SourceRange R, ASTContext &Ctx 5652f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 5653f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 5654f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ObjCPreciseLifetime, R, SI, false, false) 5655f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 5656f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5657f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5658f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCPreciseLifetimeAttr *clone(ASTContext &C) const; 5659f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 5660f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 5661f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 5662f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5663f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5664f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ObjCPreciseLifetime; } 5665f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 5666f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5667f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ObjCRequiresPropertyDefsAttr : public InheritableAttr { 5668f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 5669f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ObjCRequiresPropertyDefsAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 5670f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ObjCRequiresPropertyDefsAttr(Loc, Ctx, 0); 5671f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 5672f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 5673f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5674f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5675f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCRequiresPropertyDefsAttr(SourceRange R, ASTContext &Ctx 5676f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 5677f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 5678f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ObjCRequiresPropertyDefs, R, SI, false, false) 5679f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 5680f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5681f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5682f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCRequiresPropertyDefsAttr *clone(ASTContext &C) const; 5683f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 5684f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 5685f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 5686f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5687f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5688f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ObjCRequiresPropertyDefs; } 5689f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 5690f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5691f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ObjCRequiresSuperAttr : public InheritableAttr { 5692f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 5693f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ObjCRequiresSuperAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 5694f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ObjCRequiresSuperAttr(Loc, Ctx, 0); 5695f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 5696f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 5697f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5698f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5699f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCRequiresSuperAttr(SourceRange R, ASTContext &Ctx 5700f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 5701f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 5702f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ObjCRequiresSuper, R, SI, false, false) 5703f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 5704f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5705f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5706f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCRequiresSuperAttr *clone(ASTContext &C) const; 5707f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 5708f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 5709f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 5710f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5711f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5712f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ObjCRequiresSuper; } 5713f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 5714f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5715f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ObjCReturnsInnerPointerAttr : public InheritableAttr { 5716f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 5717f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ObjCReturnsInnerPointerAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 5718f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ObjCReturnsInnerPointerAttr(Loc, Ctx, 0); 5719f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 5720f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 5721f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5722f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5723f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCReturnsInnerPointerAttr(SourceRange R, ASTContext &Ctx 5724f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 5725f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 5726f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ObjCReturnsInnerPointer, R, SI, false, false) 5727f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 5728f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5729f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5730f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCReturnsInnerPointerAttr *clone(ASTContext &C) const; 5731f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 5732f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 5733f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 5734f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5735f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5736f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ObjCReturnsInnerPointer; } 5737f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 5738f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5739f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ObjCRootClassAttr : public InheritableAttr { 5740f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 5741f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ObjCRootClassAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 5742f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ObjCRootClassAttr(Loc, Ctx, 0); 5743f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 5744f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 5745f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5746f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5747f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCRootClassAttr(SourceRange R, ASTContext &Ctx 5748f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 5749f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 5750f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ObjCRootClass, R, SI, false, false) 5751f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 5752f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5753f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5754f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCRootClassAttr *clone(ASTContext &C) const; 5755f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 5756f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 5757f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 5758f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5759f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5760f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ObjCRootClass; } 5761f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 5762f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5763f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ObjCRuntimeNameAttr : public Attr { 5764f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned metadataNameLength; 5765f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotchar *metadataName; 5766f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5767f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 5768f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ObjCRuntimeNameAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef MetadataName, SourceRange Loc = SourceRange()) { 5769f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ObjCRuntimeNameAttr(Loc, Ctx, MetadataName, 0); 5770f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 5771f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 5772f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5773f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5774f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCRuntimeNameAttr(SourceRange R, ASTContext &Ctx 5775f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , llvm::StringRef MetadataName 5776f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 5777f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 5778f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : Attr(attr::ObjCRuntimeName, R, SI, false, false) 5779f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , metadataNameLength(MetadataName.size()),metadataName(new (Ctx, 1) char[metadataNameLength]) 5780f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 5781f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!MetadataName.empty()) 5782f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(metadataName, MetadataName.data(), metadataNameLength); 5783f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5784f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5785f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCRuntimeNameAttr *clone(ASTContext &C) const; 5786f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 5787f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 5788f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 5789f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::StringRef getMetadataName() const { 5790f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return llvm::StringRef(metadataName, metadataNameLength); 5791f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5792f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getMetadataNameLength() const { 5793f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return metadataNameLength; 5794f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5795f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void setMetadataName(ASTContext &C, llvm::StringRef S) { 5796f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot metadataNameLength = S.size(); 5797f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot this->metadataName = new (C, 1) char [metadataNameLength]; 5798f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!S.empty()) 5799f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(this->metadataName, S.data(), metadataNameLength); 5800f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5801f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5802f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5803f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5804f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ObjCRuntimeName; } 5805f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 5806f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5807f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ObjCRuntimeVisibleAttr : public Attr { 5808f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 5809f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ObjCRuntimeVisibleAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 5810f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ObjCRuntimeVisibleAttr(Loc, Ctx, 0); 5811f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 5812f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 5813f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5814f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5815f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCRuntimeVisibleAttr(SourceRange R, ASTContext &Ctx 5816f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 5817f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 5818f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : Attr(attr::ObjCRuntimeVisible, R, SI, false, false) 5819f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 5820f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5821f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5822f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCRuntimeVisibleAttr *clone(ASTContext &C) const; 5823f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 5824f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 5825f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 5826f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5827f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5828f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ObjCRuntimeVisible; } 5829f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 5830f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5831f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ObjCSubclassingRestrictedAttr : public InheritableAttr { 5832f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 5833f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ObjCSubclassingRestrictedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 5834f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ObjCSubclassingRestrictedAttr(Loc, Ctx, 0); 5835f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 5836f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 5837f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5838f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5839f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCSubclassingRestrictedAttr(SourceRange R, ASTContext &Ctx 5840f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 5841f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 5842f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ObjCSubclassingRestricted, R, SI, false, false) 5843f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 5844f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5845f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5846f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ObjCSubclassingRestrictedAttr *clone(ASTContext &C) const; 5847f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 5848f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 5849f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 5850f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5851f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5852f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ObjCSubclassingRestricted; } 5853f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 5854f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5855f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass OpenCLAccessAttr : public Attr { 5856f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 5857f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum Spelling { 5858f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Keyword_read_only = 0, 5859f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Keyword_write_only = 2, 5860f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Keyword_read_write = 4 5861f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 5862f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5863f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static OpenCLAccessAttr *CreateImplicit(ASTContext &Ctx, Spelling S, SourceRange Loc = SourceRange()) { 5864f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) OpenCLAccessAttr(Loc, Ctx, S); 5865f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 5866f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 5867f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5868f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5869f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OpenCLAccessAttr(SourceRange R, ASTContext &Ctx 5870f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 5871f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 5872f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : Attr(attr::OpenCLAccess, R, SI, false, false) 5873f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 5874f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5875f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5876f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OpenCLAccessAttr *clone(ASTContext &C) const; 5877f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 5878f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 5879f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 5880f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Spelling getSemanticSpelling() const { 5881f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch (SpellingListIndex) { 5882f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot default: llvm_unreachable("Unknown spelling list index"); 5883f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 0: return Keyword_read_only; 5884f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 1: return Keyword_read_only; 5885f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 2: return Keyword_write_only; 5886f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 3: return Keyword_write_only; 5887f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 4: return Keyword_read_write; 5888f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 5: return Keyword_read_write; 5889f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5890f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5891f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool isReadOnly() const { return SpellingListIndex == 0 || 5892f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SpellingListIndex == 1; } 5893f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool isReadWrite() const { return SpellingListIndex == 4 || 5894f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SpellingListIndex == 5; } 5895f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool isWriteOnly() const { return SpellingListIndex == 2 || 5896f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SpellingListIndex == 3; } 5897f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5898f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5899f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::OpenCLAccess; } 5900f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 5901f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5902f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass OpenCLIntelReqdSubGroupSizeAttr : public InheritableAttr { 5903f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned subGroupSize; 5904f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5905f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 5906f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static OpenCLIntelReqdSubGroupSizeAttr *CreateImplicit(ASTContext &Ctx, unsigned SubGroupSize, SourceRange Loc = SourceRange()) { 5907f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) OpenCLIntelReqdSubGroupSizeAttr(Loc, Ctx, SubGroupSize, 0); 5908f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 5909f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 5910f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5911f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5912f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OpenCLIntelReqdSubGroupSizeAttr(SourceRange R, ASTContext &Ctx 5913f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SubGroupSize 5914f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 5915f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 5916f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::OpenCLIntelReqdSubGroupSize, R, SI, false, false) 5917f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , subGroupSize(SubGroupSize) 5918f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 5919f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5920f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5921f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OpenCLIntelReqdSubGroupSizeAttr *clone(ASTContext &C) const; 5922f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 5923f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 5924f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 5925f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getSubGroupSize() const { 5926f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return subGroupSize; 5927f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5928f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5929f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5930f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5931f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::OpenCLIntelReqdSubGroupSize; } 5932f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 5933f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5934f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass OpenCLKernelAttr : public InheritableAttr { 5935f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 5936f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static OpenCLKernelAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 5937f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) OpenCLKernelAttr(Loc, Ctx, 0); 5938f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 5939f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 5940f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5941f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5942f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OpenCLKernelAttr(SourceRange R, ASTContext &Ctx 5943f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 5944f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 5945f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::OpenCLKernel, R, SI, false, false) 5946f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 5947f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5948f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5949f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OpenCLKernelAttr *clone(ASTContext &C) const; 5950f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 5951f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 5952f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 5953f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5954f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5955f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::OpenCLKernel; } 5956f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 5957f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5958f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass OpenCLUnrollHintAttr : public InheritableAttr { 5959f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned unrollHint; 5960f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5961f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 5962f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static OpenCLUnrollHintAttr *CreateImplicit(ASTContext &Ctx, unsigned UnrollHint, SourceRange Loc = SourceRange()) { 5963f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) OpenCLUnrollHintAttr(Loc, Ctx, UnrollHint, 0); 5964f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 5965f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 5966f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5967f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5968f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OpenCLUnrollHintAttr(SourceRange R, ASTContext &Ctx 5969f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned UnrollHint 5970f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 5971f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 5972f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::OpenCLUnrollHint, R, SI, false, false) 5973f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unrollHint(UnrollHint) 5974f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 5975f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5976f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5977f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OpenCLUnrollHintAttr *clone(ASTContext &C) const; 5978f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 5979f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 5980f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 5981f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getUnrollHint() const { 5982f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return unrollHint; 5983f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5984f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5985f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5986f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5987f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::OpenCLUnrollHint; } 5988f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 5989f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5990f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass OptimizeNoneAttr : public InheritableAttr { 5991f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 5992f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static OptimizeNoneAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 5993f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) OptimizeNoneAttr(Loc, Ctx, 0); 5994f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 5995f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 5996f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 5997f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 5998f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OptimizeNoneAttr(SourceRange R, ASTContext &Ctx 5999f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 6000f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 6001f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::OptimizeNone, R, SI, false, false) 6002f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 6003f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6004f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6005f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OptimizeNoneAttr *clone(ASTContext &C) const; 6006f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 6007f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 6008f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 6009f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6010f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6011f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::OptimizeNone; } 6012f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 6013f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6014f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass OverloadableAttr : public Attr { 6015f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 6016f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static OverloadableAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 6017f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) OverloadableAttr(Loc, Ctx, 0); 6018f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 6019f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 6020f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6021f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6022f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OverloadableAttr(SourceRange R, ASTContext &Ctx 6023f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 6024f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 6025f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : Attr(attr::Overloadable, R, SI, false, false) 6026f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 6027f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6028f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6029f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OverloadableAttr *clone(ASTContext &C) const; 6030f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 6031f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 6032f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 6033f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6034f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6035f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Overloadable; } 6036f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 6037f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6038f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass OverrideAttr : public InheritableAttr { 6039f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 6040f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static OverrideAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 6041f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) OverrideAttr(Loc, Ctx, 0); 6042f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 6043f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 6044f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6045f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6046f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OverrideAttr(SourceRange R, ASTContext &Ctx 6047f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 6048f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 6049f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Override, R, SI, false, false) 6050f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 6051f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6052f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6053f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OverrideAttr *clone(ASTContext &C) const; 6054f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 6055f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 6056f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 6057f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6058f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6059f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Override; } 6060f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 6061f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6062f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass OwnershipAttr : public InheritableAttr { 6063f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotIdentifierInfo * module; 6064f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6065f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned args_Size; 6066f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned *args_; 6067f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6068f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 6069f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum Spelling { 6070f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_ownership_holds = 0, 6071f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_ownership_returns = 1, 6072f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_ownership_takes = 2 6073f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 6074f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6075f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static OwnershipAttr *CreateImplicit(ASTContext &Ctx, Spelling S, IdentifierInfo * Module, unsigned *Args, unsigned ArgsSize, SourceRange Loc = SourceRange()) { 6076f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) OwnershipAttr(Loc, Ctx, Module, Args, ArgsSize, S); 6077f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 6078f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 6079f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6080f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6081f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OwnershipAttr(SourceRange R, ASTContext &Ctx 6082f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , IdentifierInfo * Module 6083f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned *Args, unsigned ArgsSize 6084f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 6085f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 6086f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Ownership, R, SI, false, false) 6087f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , module(Module) 6088f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , args_Size(ArgsSize), args_(new (Ctx, 16) unsigned[args_Size]) 6089f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 6090f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::copy(Args, Args + args_Size, args_); 6091f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6092f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6093f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OwnershipAttr(SourceRange R, ASTContext &Ctx 6094f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , IdentifierInfo * Module 6095f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 6096f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 6097f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Ownership, R, SI, false, false) 6098f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , module(Module) 6099f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , args_Size(0), args_(nullptr) 6100f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 6101f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6102f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6103f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OwnershipAttr *clone(ASTContext &C) const; 6104f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 6105f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 6106f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 6107f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Spelling getSemanticSpelling() const { 6108f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch (SpellingListIndex) { 6109f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot default: llvm_unreachable("Unknown spelling list index"); 6110f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 0: return GNU_ownership_holds; 6111f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 1: return GNU_ownership_returns; 6112f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 2: return GNU_ownership_takes; 6113f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6114f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6115f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool isHolds() const { return SpellingListIndex == 0; } 6116f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool isReturns() const { return SpellingListIndex == 1; } 6117f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool isTakes() const { return SpellingListIndex == 2; } 6118f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot IdentifierInfo * getModule() const { 6119f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return module; 6120f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6121f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6122f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot typedef unsigned* args_iterator; 6123f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot args_iterator args_begin() const { return args_; } 6124f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot args_iterator args_end() const { return args_ + args_Size; } 6125f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned args_size() const { return args_Size; } 6126f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); } 6127f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6128f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6129f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6130f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum OwnershipKind { Holds, Returns, Takes }; 6131f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot OwnershipKind getOwnKind() const { 6132f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return isHolds() ? Holds : 6133f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot isTakes() ? Takes : 6134f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Returns; 6135f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6136f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6137f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6138f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Ownership; } 6139f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 6140f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6141f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass PackedAttr : public InheritableAttr { 6142f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 6143f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static PackedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 6144f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) PackedAttr(Loc, Ctx, 0); 6145f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 6146f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 6147f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6148f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6149f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot PackedAttr(SourceRange R, ASTContext &Ctx 6150f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 6151f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 6152f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Packed, R, SI, false, false) 6153f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 6154f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6155f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6156f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot PackedAttr *clone(ASTContext &C) const; 6157f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 6158f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 6159f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 6160f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6161f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6162f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Packed; } 6163f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 6164f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6165f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ParamTypestateAttr : public InheritableAttr { 6166f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 6167f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum ConsumedState { 6168f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Unknown, 6169f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Consumed, 6170f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Unconsumed 6171f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 6172f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotprivate: 6173f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ConsumedState paramState; 6174f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6175f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 6176f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ParamTypestateAttr *CreateImplicit(ASTContext &Ctx, ConsumedState ParamState, SourceRange Loc = SourceRange()) { 6177f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ParamTypestateAttr(Loc, Ctx, ParamState, 0); 6178f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 6179f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 6180f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6181f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6182f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ParamTypestateAttr(SourceRange R, ASTContext &Ctx 6183f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , ConsumedState ParamState 6184f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 6185f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 6186f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ParamTypestate, R, SI, false, false) 6187f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , paramState(ParamState) 6188f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 6189f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6190f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6191f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ParamTypestateAttr *clone(ASTContext &C) const; 6192f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 6193f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 6194f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 6195f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ConsumedState getParamState() const { 6196f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return paramState; 6197f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6198f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6199f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool ConvertStrToConsumedState(StringRef Val, ConsumedState &Out) { 6200f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Optional<ConsumedState> R = llvm::StringSwitch<Optional<ConsumedState>>(Val) 6201f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("unknown", ParamTypestateAttr::Unknown) 6202f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("consumed", ParamTypestateAttr::Consumed) 6203f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("unconsumed", ParamTypestateAttr::Unconsumed) 6204f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Default(Optional<ConsumedState>()); 6205f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (R) { 6206f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Out = *R; 6207f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return true; 6208f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6209f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return false; 6210f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6211f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6212f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static const char *ConvertConsumedStateToStr(ConsumedState Val) { 6213f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch(Val) { 6214f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case ParamTypestateAttr::Unknown: return "unknown"; 6215f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case ParamTypestateAttr::Consumed: return "consumed"; 6216f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case ParamTypestateAttr::Unconsumed: return "unconsumed"; 6217f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6218f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm_unreachable("No enumerator with that value"); 6219f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6220f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6221f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6222f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ParamTypestate; } 6223f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 6224f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6225f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass PascalAttr : public InheritableAttr { 6226f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 6227f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static PascalAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 6228f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) PascalAttr(Loc, Ctx, 0); 6229f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 6230f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 6231f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6232f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6233f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot PascalAttr(SourceRange R, ASTContext &Ctx 6234f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 6235f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 6236f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Pascal, R, SI, false, false) 6237f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 6238f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6239f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6240f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot PascalAttr *clone(ASTContext &C) const; 6241f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 6242f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 6243f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 6244f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6245f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6246f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Pascal; } 6247f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 6248f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6249f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass PassObjectSizeAttr : public InheritableParamAttr { 6250f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotint type; 6251f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6252f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 6253f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static PassObjectSizeAttr *CreateImplicit(ASTContext &Ctx, int Type, SourceRange Loc = SourceRange()) { 6254f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) PassObjectSizeAttr(Loc, Ctx, Type, 0); 6255f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 6256f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 6257f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6258f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6259f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot PassObjectSizeAttr(SourceRange R, ASTContext &Ctx 6260f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , int Type 6261f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 6262f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 6263f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableParamAttr(attr::PassObjectSize, R, SI, false, false) 6264f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , type(Type) 6265f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 6266f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6267f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6268f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot PassObjectSizeAttr *clone(ASTContext &C) const; 6269f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 6270f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 6271f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 6272f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot int getType() const { 6273f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return type; 6274f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6275f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6276f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6277f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6278f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::PassObjectSize; } 6279f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 6280f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6281f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass PcsAttr : public InheritableAttr { 6282f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 6283f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum PCSType { 6284f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AAPCS, 6285f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot AAPCS_VFP 6286f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 6287f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotprivate: 6288f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot PCSType pCS; 6289f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6290f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 6291f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static PcsAttr *CreateImplicit(ASTContext &Ctx, PCSType PCS, SourceRange Loc = SourceRange()) { 6292f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) PcsAttr(Loc, Ctx, PCS, 0); 6293f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 6294f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 6295f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6296f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6297f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot PcsAttr(SourceRange R, ASTContext &Ctx 6298f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , PCSType PCS 6299f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 6300f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 6301f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Pcs, R, SI, false, false) 6302f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , pCS(PCS) 6303f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 6304f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6305f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6306f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot PcsAttr *clone(ASTContext &C) const; 6307f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 6308f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 6309f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 6310f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot PCSType getPCS() const { 6311f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return pCS; 6312f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6313f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6314f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool ConvertStrToPCSType(StringRef Val, PCSType &Out) { 6315f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Optional<PCSType> R = llvm::StringSwitch<Optional<PCSType>>(Val) 6316f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("aapcs", PcsAttr::AAPCS) 6317f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("aapcs-vfp", PcsAttr::AAPCS_VFP) 6318f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Default(Optional<PCSType>()); 6319f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (R) { 6320f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Out = *R; 6321f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return true; 6322f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6323f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return false; 6324f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6325f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6326f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static const char *ConvertPCSTypeToStr(PCSType Val) { 6327f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch(Val) { 6328f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case PcsAttr::AAPCS: return "aapcs"; 6329f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case PcsAttr::AAPCS_VFP: return "aapcs-vfp"; 6330f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6331f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm_unreachable("No enumerator with that value"); 6332f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6333f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6334f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6335f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Pcs; } 6336f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 6337f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6338f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass PragmaClangBSSSectionAttr : public InheritableAttr { 6339f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned nameLength; 6340f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotchar *name; 6341f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6342f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 6343f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static PragmaClangBSSSectionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, SourceRange Loc = SourceRange()) { 6344f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) PragmaClangBSSSectionAttr(Loc, Ctx, Name, 0); 6345f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 6346f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 6347f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6348f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6349f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot PragmaClangBSSSectionAttr(SourceRange R, ASTContext &Ctx 6350f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , llvm::StringRef Name 6351f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 6352f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 6353f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::PragmaClangBSSSection, R, SI, false, false) 6354f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , nameLength(Name.size()),name(new (Ctx, 1) char[nameLength]) 6355f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 6356f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!Name.empty()) 6357f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(name, Name.data(), nameLength); 6358f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6359f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6360f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot PragmaClangBSSSectionAttr *clone(ASTContext &C) const; 6361f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 6362f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 6363f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 6364f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::StringRef getName() const { 6365f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return llvm::StringRef(name, nameLength); 6366f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6367f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getNameLength() const { 6368f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return nameLength; 6369f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6370f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void setName(ASTContext &C, llvm::StringRef S) { 6371f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot nameLength = S.size(); 6372f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot this->name = new (C, 1) char [nameLength]; 6373f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!S.empty()) 6374f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(this->name, S.data(), nameLength); 6375f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6376f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6377f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6378f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6379f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::PragmaClangBSSSection; } 6380f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 6381f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6382f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass PragmaClangDataSectionAttr : public InheritableAttr { 6383f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned nameLength; 6384f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotchar *name; 6385f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6386f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 6387f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static PragmaClangDataSectionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, SourceRange Loc = SourceRange()) { 6388f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) PragmaClangDataSectionAttr(Loc, Ctx, Name, 0); 6389f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 6390f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 6391f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6392f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6393f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot PragmaClangDataSectionAttr(SourceRange R, ASTContext &Ctx 6394f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , llvm::StringRef Name 6395f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 6396f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 6397f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::PragmaClangDataSection, R, SI, false, false) 6398f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , nameLength(Name.size()),name(new (Ctx, 1) char[nameLength]) 6399f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 6400f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!Name.empty()) 6401f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(name, Name.data(), nameLength); 6402f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6403f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6404f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot PragmaClangDataSectionAttr *clone(ASTContext &C) const; 6405f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 6406f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 6407f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 6408f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::StringRef getName() const { 6409f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return llvm::StringRef(name, nameLength); 6410f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6411f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getNameLength() const { 6412f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return nameLength; 6413f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6414f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void setName(ASTContext &C, llvm::StringRef S) { 6415f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot nameLength = S.size(); 6416f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot this->name = new (C, 1) char [nameLength]; 6417f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!S.empty()) 6418f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(this->name, S.data(), nameLength); 6419f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6420f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6421f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6422f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6423f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::PragmaClangDataSection; } 6424f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 6425f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6426f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass PragmaClangRodataSectionAttr : public InheritableAttr { 6427f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned nameLength; 6428f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotchar *name; 6429f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6430f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 6431f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static PragmaClangRodataSectionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, SourceRange Loc = SourceRange()) { 6432f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) PragmaClangRodataSectionAttr(Loc, Ctx, Name, 0); 6433f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 6434f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 6435f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6436f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6437f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot PragmaClangRodataSectionAttr(SourceRange R, ASTContext &Ctx 6438f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , llvm::StringRef Name 6439f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 6440f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 6441f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::PragmaClangRodataSection, R, SI, false, false) 6442f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , nameLength(Name.size()),name(new (Ctx, 1) char[nameLength]) 6443f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 6444f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!Name.empty()) 6445f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(name, Name.data(), nameLength); 6446f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6447f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6448f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot PragmaClangRodataSectionAttr *clone(ASTContext &C) const; 6449f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 6450f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 6451f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 6452f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::StringRef getName() const { 6453f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return llvm::StringRef(name, nameLength); 6454f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6455f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getNameLength() const { 6456f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return nameLength; 6457f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6458f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void setName(ASTContext &C, llvm::StringRef S) { 6459f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot nameLength = S.size(); 6460f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot this->name = new (C, 1) char [nameLength]; 6461f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!S.empty()) 6462f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(this->name, S.data(), nameLength); 6463f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6464f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6465f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6466f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6467f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::PragmaClangRodataSection; } 6468f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 6469f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6470f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass PragmaClangTextSectionAttr : public InheritableAttr { 6471f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned nameLength; 6472f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotchar *name; 6473f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6474f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 6475f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static PragmaClangTextSectionAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, SourceRange Loc = SourceRange()) { 6476f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) PragmaClangTextSectionAttr(Loc, Ctx, Name, 0); 6477f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 6478f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 6479f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6480f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6481f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot PragmaClangTextSectionAttr(SourceRange R, ASTContext &Ctx 6482f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , llvm::StringRef Name 6483f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 6484f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 6485f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::PragmaClangTextSection, R, SI, false, false) 6486f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , nameLength(Name.size()),name(new (Ctx, 1) char[nameLength]) 6487f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 6488f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!Name.empty()) 6489f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(name, Name.data(), nameLength); 6490f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6491f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6492f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot PragmaClangTextSectionAttr *clone(ASTContext &C) const; 6493f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 6494f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 6495f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 6496f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::StringRef getName() const { 6497f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return llvm::StringRef(name, nameLength); 6498f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6499f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getNameLength() const { 6500f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return nameLength; 6501f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6502f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void setName(ASTContext &C, llvm::StringRef S) { 6503f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot nameLength = S.size(); 6504f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot this->name = new (C, 1) char [nameLength]; 6505f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!S.empty()) 6506f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(this->name, S.data(), nameLength); 6507f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6508f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6509f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6510f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6511f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::PragmaClangTextSection; } 6512f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 6513f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6514f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass PreserveAllAttr : public InheritableAttr { 6515f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 6516f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static PreserveAllAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 6517f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) PreserveAllAttr(Loc, Ctx, 0); 6518f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 6519f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 6520f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6521f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6522f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot PreserveAllAttr(SourceRange R, ASTContext &Ctx 6523f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 6524f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 6525f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::PreserveAll, R, SI, false, false) 6526f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 6527f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6528f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6529f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot PreserveAllAttr *clone(ASTContext &C) const; 6530f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 6531f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 6532f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 6533f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6534f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6535f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::PreserveAll; } 6536f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 6537f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6538f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass PreserveMostAttr : public InheritableAttr { 6539f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 6540f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static PreserveMostAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 6541f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) PreserveMostAttr(Loc, Ctx, 0); 6542f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 6543f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 6544f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6545f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6546f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot PreserveMostAttr(SourceRange R, ASTContext &Ctx 6547f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 6548f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 6549f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::PreserveMost, R, SI, false, false) 6550f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 6551f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6552f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6553f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot PreserveMostAttr *clone(ASTContext &C) const; 6554f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 6555f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 6556f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 6557f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6558f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6559f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::PreserveMost; } 6560f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 6561f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6562f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass PtGuardedByAttr : public InheritableAttr { 6563f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotExpr * arg; 6564f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6565f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 6566f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static PtGuardedByAttr *CreateImplicit(ASTContext &Ctx, Expr * Arg, SourceRange Loc = SourceRange()) { 6567f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) PtGuardedByAttr(Loc, Ctx, Arg, 0); 6568f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 6569f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 6570f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6571f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6572f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot PtGuardedByAttr(SourceRange R, ASTContext &Ctx 6573f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * Arg 6574f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 6575f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 6576f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::PtGuardedBy, R, SI, true, true) 6577f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , arg(Arg) 6578f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 6579f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6580f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6581f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot PtGuardedByAttr *clone(ASTContext &C) const; 6582f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 6583f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 6584f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 6585f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr * getArg() const { 6586f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return arg; 6587f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6588f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6589f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6590f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6591f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::PtGuardedBy; } 6592f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 6593f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6594f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass PtGuardedVarAttr : public InheritableAttr { 6595f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 6596f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static PtGuardedVarAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 6597f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) PtGuardedVarAttr(Loc, Ctx, 0); 6598f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 6599f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 6600f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6601f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6602f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot PtGuardedVarAttr(SourceRange R, ASTContext &Ctx 6603f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 6604f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 6605f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::PtGuardedVar, R, SI, false, false) 6606f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 6607f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6608f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6609f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot PtGuardedVarAttr *clone(ASTContext &C) const; 6610f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 6611f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 6612f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 6613f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6614f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6615f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::PtGuardedVar; } 6616f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 6617f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6618f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass PureAttr : public InheritableAttr { 6619f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 6620f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static PureAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 6621f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) PureAttr(Loc, Ctx, 0); 6622f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 6623f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 6624f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6625f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6626f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot PureAttr(SourceRange R, ASTContext &Ctx 6627f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 6628f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 6629f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Pure, R, SI, false, false) 6630f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 6631f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6632f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6633f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot PureAttr *clone(ASTContext &C) const; 6634f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 6635f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 6636f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 6637f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6638f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6639f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Pure; } 6640f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 6641f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6642f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass RegCallAttr : public InheritableAttr { 6643f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 6644f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static RegCallAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 6645f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) RegCallAttr(Loc, Ctx, 0); 6646f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 6647f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 6648f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6649f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6650f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot RegCallAttr(SourceRange R, ASTContext &Ctx 6651f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 6652f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 6653f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::RegCall, R, SI, false, false) 6654f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 6655f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6656f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6657f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot RegCallAttr *clone(ASTContext &C) const; 6658f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 6659f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 6660f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 6661f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6662f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6663f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::RegCall; } 6664f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 6665f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6666f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ReleaseCapabilityAttr : public InheritableAttr { 6667f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned args_Size; 6668f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr * *args_; 6669f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6670f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 6671f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum Spelling { 6672f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_release_capability = 0, 6673f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CXX11_clang_release_capability = 1, 6674f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_release_shared_capability = 2, 6675f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CXX11_clang_release_shared_capability = 3, 6676f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_release_generic_capability = 4, 6677f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CXX11_clang_release_generic_capability = 5, 6678f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_unlock_function = 6 6679f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 6680f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6681f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ReleaseCapabilityAttr *CreateImplicit(ASTContext &Ctx, Spelling S, Expr * *Args, unsigned ArgsSize, SourceRange Loc = SourceRange()) { 6682f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ReleaseCapabilityAttr(Loc, Ctx, Args, ArgsSize, S); 6683f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 6684f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 6685f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6686f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6687f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ReleaseCapabilityAttr(SourceRange R, ASTContext &Ctx 6688f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * *Args, unsigned ArgsSize 6689f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 6690f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 6691f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ReleaseCapability, R, SI, true, true) 6692f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , args_Size(ArgsSize), args_(new (Ctx, 16) Expr *[args_Size]) 6693f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 6694f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::copy(Args, Args + args_Size, args_); 6695f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6696f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6697f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ReleaseCapabilityAttr(SourceRange R, ASTContext &Ctx 6698f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 6699f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 6700f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ReleaseCapability, R, SI, true, true) 6701f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , args_Size(0), args_(nullptr) 6702f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 6703f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6704f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6705f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ReleaseCapabilityAttr *clone(ASTContext &C) const; 6706f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 6707f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 6708f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 6709f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Spelling getSemanticSpelling() const { 6710f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch (SpellingListIndex) { 6711f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot default: llvm_unreachable("Unknown spelling list index"); 6712f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 0: return GNU_release_capability; 6713f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 1: return CXX11_clang_release_capability; 6714f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 2: return GNU_release_shared_capability; 6715f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 3: return CXX11_clang_release_shared_capability; 6716f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 4: return GNU_release_generic_capability; 6717f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 5: return CXX11_clang_release_generic_capability; 6718f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 6: return GNU_unlock_function; 6719f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6720f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6721f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool isShared() const { return SpellingListIndex == 2 || 6722f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SpellingListIndex == 3; } 6723f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool isGeneric() const { return SpellingListIndex == 4 || 6724f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SpellingListIndex == 5 || 6725f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SpellingListIndex == 6; } 6726f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot typedef Expr ** args_iterator; 6727f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot args_iterator args_begin() const { return args_; } 6728f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot args_iterator args_end() const { return args_ + args_Size; } 6729f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned args_size() const { return args_Size; } 6730f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); } 6731f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6732f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6733f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6734f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6735f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ReleaseCapability; } 6736f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 6737f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6738f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass RenderScriptKernelAttr : public Attr { 6739f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 6740f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static RenderScriptKernelAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 6741f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) RenderScriptKernelAttr(Loc, Ctx, 0); 6742f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 6743f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 6744f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6745f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6746f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot RenderScriptKernelAttr(SourceRange R, ASTContext &Ctx 6747f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 6748f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 6749f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : Attr(attr::RenderScriptKernel, R, SI, false, false) 6750f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 6751f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6752f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6753f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot RenderScriptKernelAttr *clone(ASTContext &C) const; 6754f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 6755f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 6756f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 6757f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6758f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6759f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::RenderScriptKernel; } 6760f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 6761f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6762f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ReqdWorkGroupSizeAttr : public InheritableAttr { 6763f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned xDim; 6764f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6765f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned yDim; 6766f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6767f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned zDim; 6768f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6769f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 6770f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ReqdWorkGroupSizeAttr *CreateImplicit(ASTContext &Ctx, unsigned XDim, unsigned YDim, unsigned ZDim, SourceRange Loc = SourceRange()) { 6771f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ReqdWorkGroupSizeAttr(Loc, Ctx, XDim, YDim, ZDim, 0); 6772f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 6773f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 6774f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6775f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6776f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ReqdWorkGroupSizeAttr(SourceRange R, ASTContext &Ctx 6777f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned XDim 6778f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned YDim 6779f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned ZDim 6780f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 6781f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 6782f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ReqdWorkGroupSize, R, SI, false, false) 6783f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , xDim(XDim) 6784f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , yDim(YDim) 6785f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , zDim(ZDim) 6786f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 6787f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6788f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6789f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ReqdWorkGroupSizeAttr *clone(ASTContext &C) const; 6790f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 6791f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 6792f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 6793f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getXDim() const { 6794f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return xDim; 6795f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6796f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6797f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getYDim() const { 6798f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return yDim; 6799f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6800f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6801f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getZDim() const { 6802f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return zDim; 6803f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6804f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6805f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6806f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6807f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ReqdWorkGroupSize; } 6808f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 6809f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6810f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass RequireConstantInitAttr : public InheritableAttr { 6811f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 6812f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static RequireConstantInitAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 6813f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) RequireConstantInitAttr(Loc, Ctx, 0); 6814f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 6815f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 6816f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6817f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6818f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot RequireConstantInitAttr(SourceRange R, ASTContext &Ctx 6819f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 6820f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 6821f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::RequireConstantInit, R, SI, false, false) 6822f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 6823f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6824f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6825f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot RequireConstantInitAttr *clone(ASTContext &C) const; 6826f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 6827f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 6828f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 6829f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6830f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6831f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::RequireConstantInit; } 6832f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 6833f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6834f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass RequiresCapabilityAttr : public InheritableAttr { 6835f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned args_Size; 6836f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr * *args_; 6837f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6838f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 6839f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum Spelling { 6840f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_requires_capability = 0, 6841f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CXX11_clang_requires_capability = 1, 6842f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_exclusive_locks_required = 2, 6843f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_requires_shared_capability = 3, 6844f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CXX11_clang_requires_shared_capability = 4, 6845f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_shared_locks_required = 5 6846f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 6847f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6848f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static RequiresCapabilityAttr *CreateImplicit(ASTContext &Ctx, Spelling S, Expr * *Args, unsigned ArgsSize, SourceRange Loc = SourceRange()) { 6849f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) RequiresCapabilityAttr(Loc, Ctx, Args, ArgsSize, S); 6850f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 6851f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 6852f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6853f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6854f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot RequiresCapabilityAttr(SourceRange R, ASTContext &Ctx 6855f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * *Args, unsigned ArgsSize 6856f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 6857f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 6858f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::RequiresCapability, R, SI, true, true) 6859f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , args_Size(ArgsSize), args_(new (Ctx, 16) Expr *[args_Size]) 6860f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 6861f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::copy(Args, Args + args_Size, args_); 6862f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6863f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6864f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot RequiresCapabilityAttr(SourceRange R, ASTContext &Ctx 6865f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 6866f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 6867f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::RequiresCapability, R, SI, true, true) 6868f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , args_Size(0), args_(nullptr) 6869f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 6870f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6871f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6872f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot RequiresCapabilityAttr *clone(ASTContext &C) const; 6873f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 6874f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 6875f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 6876f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Spelling getSemanticSpelling() const { 6877f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch (SpellingListIndex) { 6878f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot default: llvm_unreachable("Unknown spelling list index"); 6879f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 0: return GNU_requires_capability; 6880f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 1: return CXX11_clang_requires_capability; 6881f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 2: return GNU_exclusive_locks_required; 6882f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 3: return GNU_requires_shared_capability; 6883f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 4: return CXX11_clang_requires_shared_capability; 6884f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 5: return GNU_shared_locks_required; 6885f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6886f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6887f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool isShared() const { return SpellingListIndex == 3 || 6888f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SpellingListIndex == 5 || 6889f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SpellingListIndex == 4; } 6890f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot typedef Expr ** args_iterator; 6891f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot args_iterator args_begin() const { return args_; } 6892f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot args_iterator args_end() const { return args_ + args_Size; } 6893f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned args_size() const { return args_Size; } 6894f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); } 6895f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6896f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6897f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6898f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6899f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::RequiresCapability; } 6900f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 6901f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6902f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass RestrictAttr : public InheritableAttr { 6903f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 6904f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum Spelling { 6905f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Declspec_restrict = 0, 6906f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_malloc = 1, 6907f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CXX11_gnu_malloc = 2 6908f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 6909f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6910f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static RestrictAttr *CreateImplicit(ASTContext &Ctx, Spelling S, SourceRange Loc = SourceRange()) { 6911f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) RestrictAttr(Loc, Ctx, S); 6912f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 6913f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 6914f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6915f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6916f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot RestrictAttr(SourceRange R, ASTContext &Ctx 6917f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 6918f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 6919f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Restrict, R, SI, false, false) 6920f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 6921f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6922f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6923f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot RestrictAttr *clone(ASTContext &C) const; 6924f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 6925f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 6926f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 6927f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Spelling getSemanticSpelling() const { 6928f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch (SpellingListIndex) { 6929f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot default: llvm_unreachable("Unknown spelling list index"); 6930f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 0: return Declspec_restrict; 6931f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 1: return GNU_malloc; 6932f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 2: return CXX11_gnu_malloc; 6933f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6934f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6935f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6936f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6937f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Restrict; } 6938f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 6939f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6940f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ReturnTypestateAttr : public InheritableAttr { 6941f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 6942f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum ConsumedState { 6943f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Unknown, 6944f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Consumed, 6945f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Unconsumed 6946f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 6947f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotprivate: 6948f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ConsumedState state; 6949f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6950f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 6951f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ReturnTypestateAttr *CreateImplicit(ASTContext &Ctx, ConsumedState State, SourceRange Loc = SourceRange()) { 6952f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ReturnTypestateAttr(Loc, Ctx, State, 0); 6953f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 6954f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 6955f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6956f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6957f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ReturnTypestateAttr(SourceRange R, ASTContext &Ctx 6958f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , ConsumedState State 6959f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 6960f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 6961f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ReturnTypestate, R, SI, false, false) 6962f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , state(State) 6963f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 6964f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6965f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6966f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ReturnTypestateAttr *clone(ASTContext &C) const; 6967f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 6968f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 6969f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 6970f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ConsumedState getState() const { 6971f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return state; 6972f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6973f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6974f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool ConvertStrToConsumedState(StringRef Val, ConsumedState &Out) { 6975f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Optional<ConsumedState> R = llvm::StringSwitch<Optional<ConsumedState>>(Val) 6976f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("unknown", ReturnTypestateAttr::Unknown) 6977f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("consumed", ReturnTypestateAttr::Consumed) 6978f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("unconsumed", ReturnTypestateAttr::Unconsumed) 6979f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Default(Optional<ConsumedState>()); 6980f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (R) { 6981f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Out = *R; 6982f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return true; 6983f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6984f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return false; 6985f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6986f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6987f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static const char *ConvertConsumedStateToStr(ConsumedState Val) { 6988f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch(Val) { 6989f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case ReturnTypestateAttr::Unknown: return "unknown"; 6990f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case ReturnTypestateAttr::Consumed: return "consumed"; 6991f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case ReturnTypestateAttr::Unconsumed: return "unconsumed"; 6992f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6993f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm_unreachable("No enumerator with that value"); 6994f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 6995f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6996f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 6997f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ReturnTypestate; } 6998f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 6999f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7000f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ReturnsNonNullAttr : public InheritableAttr { 7001f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 7002f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ReturnsNonNullAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 7003f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ReturnsNonNullAttr(Loc, Ctx, 0); 7004f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 7005f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 7006f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7007f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7008f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ReturnsNonNullAttr(SourceRange R, ASTContext &Ctx 7009f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 7010f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 7011f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ReturnsNonNull, R, SI, false, false) 7012f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 7013f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7014f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7015f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ReturnsNonNullAttr *clone(ASTContext &C) const; 7016f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 7017f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 7018f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 7019f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7020f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7021f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ReturnsNonNull; } 7022f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 7023f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7024f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ReturnsTwiceAttr : public InheritableAttr { 7025f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 7026f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ReturnsTwiceAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 7027f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ReturnsTwiceAttr(Loc, Ctx, 0); 7028f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 7029f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 7030f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7031f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7032f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ReturnsTwiceAttr(SourceRange R, ASTContext &Ctx 7033f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 7034f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 7035f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ReturnsTwice, R, SI, false, false) 7036f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 7037f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7038f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7039f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ReturnsTwiceAttr *clone(ASTContext &C) const; 7040f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 7041f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 7042f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 7043f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7044f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7045f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ReturnsTwice; } 7046f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 7047f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7048f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ScopedLockableAttr : public InheritableAttr { 7049f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 7050f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ScopedLockableAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 7051f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ScopedLockableAttr(Loc, Ctx, 0); 7052f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 7053f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 7054f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7055f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7056f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ScopedLockableAttr(SourceRange R, ASTContext &Ctx 7057f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 7058f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 7059f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ScopedLockable, R, SI, false, false) 7060f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 7061f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7062f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7063f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ScopedLockableAttr *clone(ASTContext &C) const; 7064f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 7065f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 7066f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 7067f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7068f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7069f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ScopedLockable; } 7070f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 7071f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7072f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass SectionAttr : public InheritableAttr { 7073f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned nameLength; 7074f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotchar *name; 7075f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7076f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 7077f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum Spelling { 7078f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_section = 0, 7079f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CXX11_gnu_section = 1, 7080f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Declspec_allocate = 2 7081f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 7082f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7083f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static SectionAttr *CreateImplicit(ASTContext &Ctx, Spelling S, llvm::StringRef Name, SourceRange Loc = SourceRange()) { 7084f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) SectionAttr(Loc, Ctx, Name, S); 7085f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 7086f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 7087f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7088f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7089f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SectionAttr(SourceRange R, ASTContext &Ctx 7090f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , llvm::StringRef Name 7091f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 7092f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 7093f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Section, R, SI, false, false) 7094f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , nameLength(Name.size()),name(new (Ctx, 1) char[nameLength]) 7095f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 7096f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!Name.empty()) 7097f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(name, Name.data(), nameLength); 7098f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7099f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7100f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SectionAttr *clone(ASTContext &C) const; 7101f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 7102f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 7103f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 7104f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Spelling getSemanticSpelling() const { 7105f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch (SpellingListIndex) { 7106f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot default: llvm_unreachable("Unknown spelling list index"); 7107f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 0: return GNU_section; 7108f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 1: return CXX11_gnu_section; 7109f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 2: return Declspec_allocate; 7110f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7111f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7112f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::StringRef getName() const { 7113f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return llvm::StringRef(name, nameLength); 7114f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7115f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getNameLength() const { 7116f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return nameLength; 7117f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7118f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void setName(ASTContext &C, llvm::StringRef S) { 7119f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot nameLength = S.size(); 7120f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot this->name = new (C, 1) char [nameLength]; 7121f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!S.empty()) 7122f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(this->name, S.data(), nameLength); 7123f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7124f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7125f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7126f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7127f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Section; } 7128f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 7129f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7130f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass SelectAnyAttr : public InheritableAttr { 7131f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 7132f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static SelectAnyAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 7133f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) SelectAnyAttr(Loc, Ctx, 0); 7134f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 7135f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 7136f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7137f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7138f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SelectAnyAttr(SourceRange R, ASTContext &Ctx 7139f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 7140f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 7141f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::SelectAny, R, SI, false, false) 7142f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 7143f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7144f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7145f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SelectAnyAttr *clone(ASTContext &C) const; 7146f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 7147f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 7148f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 7149f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7150f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7151f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::SelectAny; } 7152f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 7153f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7154f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass SentinelAttr : public InheritableAttr { 7155f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotint sentinel; 7156f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7157f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotint nullPos; 7158f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7159f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 7160f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static SentinelAttr *CreateImplicit(ASTContext &Ctx, int Sentinel, int NullPos, SourceRange Loc = SourceRange()) { 7161f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) SentinelAttr(Loc, Ctx, Sentinel, NullPos, 0); 7162f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 7163f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 7164f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7165f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7166f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SentinelAttr(SourceRange R, ASTContext &Ctx 7167f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , int Sentinel 7168f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , int NullPos 7169f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 7170f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 7171f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Sentinel, R, SI, false, false) 7172f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , sentinel(Sentinel) 7173f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , nullPos(NullPos) 7174f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 7175f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7176f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7177f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SentinelAttr(SourceRange R, ASTContext &Ctx 7178f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 7179f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 7180f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Sentinel, R, SI, false, false) 7181f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , sentinel() 7182f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , nullPos() 7183f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 7184f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7185f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7186f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SentinelAttr *clone(ASTContext &C) const; 7187f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 7188f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 7189f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 7190f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot int getSentinel() const { 7191f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return sentinel; 7192f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7193f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7194f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static const int DefaultSentinel = 0; 7195f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7196f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot int getNullPos() const { 7197f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return nullPos; 7198f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7199f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7200f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static const int DefaultNullPos = 0; 7201f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7202f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7203f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7204f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Sentinel; } 7205f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 7206f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7207f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass SetTypestateAttr : public InheritableAttr { 7208f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 7209f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum ConsumedState { 7210f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Unknown, 7211f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Consumed, 7212f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Unconsumed 7213f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 7214f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotprivate: 7215f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ConsumedState newState; 7216f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7217f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 7218f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static SetTypestateAttr *CreateImplicit(ASTContext &Ctx, ConsumedState NewState, SourceRange Loc = SourceRange()) { 7219f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) SetTypestateAttr(Loc, Ctx, NewState, 0); 7220f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 7221f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 7222f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7223f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7224f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SetTypestateAttr(SourceRange R, ASTContext &Ctx 7225f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , ConsumedState NewState 7226f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 7227f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 7228f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::SetTypestate, R, SI, false, false) 7229f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , newState(NewState) 7230f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 7231f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7232f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7233f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SetTypestateAttr *clone(ASTContext &C) const; 7234f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 7235f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 7236f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 7237f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ConsumedState getNewState() const { 7238f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return newState; 7239f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7240f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7241f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool ConvertStrToConsumedState(StringRef Val, ConsumedState &Out) { 7242f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Optional<ConsumedState> R = llvm::StringSwitch<Optional<ConsumedState>>(Val) 7243f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("unknown", SetTypestateAttr::Unknown) 7244f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("consumed", SetTypestateAttr::Consumed) 7245f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("unconsumed", SetTypestateAttr::Unconsumed) 7246f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Default(Optional<ConsumedState>()); 7247f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (R) { 7248f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Out = *R; 7249f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return true; 7250f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7251f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return false; 7252f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7253f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7254f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static const char *ConvertConsumedStateToStr(ConsumedState Val) { 7255f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch(Val) { 7256f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case SetTypestateAttr::Unknown: return "unknown"; 7257f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case SetTypestateAttr::Consumed: return "consumed"; 7258f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case SetTypestateAttr::Unconsumed: return "unconsumed"; 7259f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7260f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm_unreachable("No enumerator with that value"); 7261f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7262f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7263f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7264f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::SetTypestate; } 7265f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 7266f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7267f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass SharedTrylockFunctionAttr : public InheritableAttr { 7268f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotExpr * successValue; 7269f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7270f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned args_Size; 7271f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr * *args_; 7272f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7273f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 7274f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static SharedTrylockFunctionAttr *CreateImplicit(ASTContext &Ctx, Expr * SuccessValue, Expr * *Args, unsigned ArgsSize, SourceRange Loc = SourceRange()) { 7275f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) SharedTrylockFunctionAttr(Loc, Ctx, SuccessValue, Args, ArgsSize, 0); 7276f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 7277f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 7278f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7279f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7280f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SharedTrylockFunctionAttr(SourceRange R, ASTContext &Ctx 7281f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * SuccessValue 7282f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * *Args, unsigned ArgsSize 7283f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 7284f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 7285f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::SharedTrylockFunction, R, SI, true, true) 7286f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , successValue(SuccessValue) 7287f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , args_Size(ArgsSize), args_(new (Ctx, 16) Expr *[args_Size]) 7288f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 7289f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::copy(Args, Args + args_Size, args_); 7290f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7291f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7292f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SharedTrylockFunctionAttr(SourceRange R, ASTContext &Ctx 7293f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * SuccessValue 7294f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 7295f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 7296f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::SharedTrylockFunction, R, SI, true, true) 7297f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , successValue(SuccessValue) 7298f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , args_Size(0), args_(nullptr) 7299f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 7300f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7301f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7302f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SharedTrylockFunctionAttr *clone(ASTContext &C) const; 7303f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 7304f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 7305f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 7306f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr * getSuccessValue() const { 7307f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return successValue; 7308f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7309f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7310f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot typedef Expr ** args_iterator; 7311f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot args_iterator args_begin() const { return args_; } 7312f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot args_iterator args_end() const { return args_ + args_Size; } 7313f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned args_size() const { return args_Size; } 7314f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); } 7315f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7316f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7317f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7318f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7319f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::SharedTrylockFunction; } 7320f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 7321f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7322f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass StdCallAttr : public InheritableAttr { 7323f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 7324f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static StdCallAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 7325f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) StdCallAttr(Loc, Ctx, 0); 7326f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 7327f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 7328f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7329f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7330f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot StdCallAttr(SourceRange R, ASTContext &Ctx 7331f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 7332f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 7333f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::StdCall, R, SI, false, false) 7334f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 7335f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7336f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7337f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot StdCallAttr *clone(ASTContext &C) const; 7338f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 7339f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 7340f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 7341f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7342f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7343f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::StdCall; } 7344f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 7345f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7346f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass SuppressAttr : public StmtAttr { 7347f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned diagnosticIdentifiers_Size; 7348f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot StringRef *diagnosticIdentifiers_; 7349f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7350f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 7351f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static SuppressAttr *CreateImplicit(ASTContext &Ctx, StringRef *DiagnosticIdentifiers, unsigned DiagnosticIdentifiersSize, SourceRange Loc = SourceRange()) { 7352f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) SuppressAttr(Loc, Ctx, DiagnosticIdentifiers, DiagnosticIdentifiersSize, 0); 7353f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 7354f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 7355f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7356f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7357f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SuppressAttr(SourceRange R, ASTContext &Ctx 7358f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , StringRef *DiagnosticIdentifiers, unsigned DiagnosticIdentifiersSize 7359f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 7360f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 7361f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : StmtAttr(attr::Suppress, R, SI, false, false) 7362f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , diagnosticIdentifiers_Size(DiagnosticIdentifiersSize), diagnosticIdentifiers_(new (Ctx, 16) StringRef[diagnosticIdentifiers_Size]) 7363f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 7364f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot for (size_t I = 0, E = diagnosticIdentifiers_Size; I != E; 7365f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ++I) { 7366f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot StringRef Ref = DiagnosticIdentifiers[I]; 7367f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!Ref.empty()) { 7368f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot char *Mem = new (Ctx, 1) char[Ref.size()]; 7369f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(Mem, Ref.data(), Ref.size()); 7370f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot diagnosticIdentifiers_[I] = StringRef(Mem, Ref.size()); 7371f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7372f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7373f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7374f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7375f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SuppressAttr(SourceRange R, ASTContext &Ctx 7376f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 7377f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 7378f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : StmtAttr(attr::Suppress, R, SI, false, false) 7379f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , diagnosticIdentifiers_Size(0), diagnosticIdentifiers_(nullptr) 7380f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 7381f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7382f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7383f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SuppressAttr *clone(ASTContext &C) const; 7384f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 7385f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 7386f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 7387f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot typedef StringRef* diagnosticIdentifiers_iterator; 7388f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot diagnosticIdentifiers_iterator diagnosticIdentifiers_begin() const { return diagnosticIdentifiers_; } 7389f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot diagnosticIdentifiers_iterator diagnosticIdentifiers_end() const { return diagnosticIdentifiers_ + diagnosticIdentifiers_Size; } 7390f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned diagnosticIdentifiers_size() const { return diagnosticIdentifiers_Size; } 7391f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::iterator_range<diagnosticIdentifiers_iterator> diagnosticIdentifiers() const { return llvm::make_range(diagnosticIdentifiers_begin(), diagnosticIdentifiers_end()); } 7392f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7393f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7394f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7395f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7396f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Suppress; } 7397f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 7398f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7399f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass SwiftCallAttr : public InheritableAttr { 7400f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 7401f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static SwiftCallAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 7402f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) SwiftCallAttr(Loc, Ctx, 0); 7403f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 7404f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 7405f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7406f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7407f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SwiftCallAttr(SourceRange R, ASTContext &Ctx 7408f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 7409f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 7410f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::SwiftCall, R, SI, false, false) 7411f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 7412f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7413f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7414f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SwiftCallAttr *clone(ASTContext &C) const; 7415f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 7416f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 7417f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 7418f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7419f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7420f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::SwiftCall; } 7421f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 7422f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7423f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass SwiftContextAttr : public ParameterABIAttr { 7424f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 7425f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static SwiftContextAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 7426f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) SwiftContextAttr(Loc, Ctx, 0); 7427f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 7428f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 7429f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7430f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7431f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SwiftContextAttr(SourceRange R, ASTContext &Ctx 7432f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 7433f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 7434f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : ParameterABIAttr(attr::SwiftContext, R, SI, false, false) 7435f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 7436f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7437f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7438f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SwiftContextAttr *clone(ASTContext &C) const; 7439f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 7440f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 7441f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 7442f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7443f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7444f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::SwiftContext; } 7445f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 7446f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7447f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass SwiftErrorResultAttr : public ParameterABIAttr { 7448f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 7449f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static SwiftErrorResultAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 7450f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) SwiftErrorResultAttr(Loc, Ctx, 0); 7451f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 7452f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 7453f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7454f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7455f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SwiftErrorResultAttr(SourceRange R, ASTContext &Ctx 7456f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 7457f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 7458f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : ParameterABIAttr(attr::SwiftErrorResult, R, SI, false, false) 7459f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 7460f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7461f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7462f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SwiftErrorResultAttr *clone(ASTContext &C) const; 7463f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 7464f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 7465f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 7466f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7467f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7468f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::SwiftErrorResult; } 7469f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 7470f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7471f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass SwiftIndirectResultAttr : public ParameterABIAttr { 7472f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 7473f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static SwiftIndirectResultAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 7474f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) SwiftIndirectResultAttr(Loc, Ctx, 0); 7475f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 7476f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 7477f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7478f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7479f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SwiftIndirectResultAttr(SourceRange R, ASTContext &Ctx 7480f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 7481f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 7482f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : ParameterABIAttr(attr::SwiftIndirectResult, R, SI, false, false) 7483f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 7484f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7485f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7486f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SwiftIndirectResultAttr *clone(ASTContext &C) const; 7487f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 7488f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 7489f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 7490f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7491f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7492f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::SwiftIndirectResult; } 7493f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 7494f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7495f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass SysVABIAttr : public InheritableAttr { 7496f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 7497f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static SysVABIAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 7498f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) SysVABIAttr(Loc, Ctx, 0); 7499f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 7500f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 7501f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7502f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7503f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SysVABIAttr(SourceRange R, ASTContext &Ctx 7504f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 7505f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 7506f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::SysVABI, R, SI, false, false) 7507f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 7508f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7509f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7510f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SysVABIAttr *clone(ASTContext &C) const; 7511f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 7512f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 7513f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 7514f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7515f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7516f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::SysVABI; } 7517f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 7518f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7519f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass TLSModelAttr : public InheritableAttr { 7520f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned modelLength; 7521f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotchar *model; 7522f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7523f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 7524f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static TLSModelAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Model, SourceRange Loc = SourceRange()) { 7525f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) TLSModelAttr(Loc, Ctx, Model, 0); 7526f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 7527f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 7528f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7529f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7530f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot TLSModelAttr(SourceRange R, ASTContext &Ctx 7531f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , llvm::StringRef Model 7532f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 7533f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 7534f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::TLSModel, R, SI, false, false) 7535f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , modelLength(Model.size()),model(new (Ctx, 1) char[modelLength]) 7536f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 7537f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!Model.empty()) 7538f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(model, Model.data(), modelLength); 7539f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7540f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7541f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot TLSModelAttr *clone(ASTContext &C) const; 7542f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 7543f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 7544f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 7545f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::StringRef getModel() const { 7546f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return llvm::StringRef(model, modelLength); 7547f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7548f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getModelLength() const { 7549f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return modelLength; 7550f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7551f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void setModel(ASTContext &C, llvm::StringRef S) { 7552f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot modelLength = S.size(); 7553f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot this->model = new (C, 1) char [modelLength]; 7554f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!S.empty()) 7555f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(this->model, S.data(), modelLength); 7556f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7557f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7558f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7559f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7560f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::TLSModel; } 7561f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 7562f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7563f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass TargetAttr : public InheritableAttr { 7564f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned featuresStrLength; 7565f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotchar *featuresStr; 7566f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7567f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 7568f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static TargetAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef FeaturesStr, SourceRange Loc = SourceRange()) { 7569f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) TargetAttr(Loc, Ctx, FeaturesStr, 0); 7570f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 7571f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 7572f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7573f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7574f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot TargetAttr(SourceRange R, ASTContext &Ctx 7575f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , llvm::StringRef FeaturesStr 7576f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 7577f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 7578f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Target, R, SI, false, false) 7579f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , featuresStrLength(FeaturesStr.size()),featuresStr(new (Ctx, 1) char[featuresStrLength]) 7580f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 7581f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!FeaturesStr.empty()) 7582f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(featuresStr, FeaturesStr.data(), featuresStrLength); 7583f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7584f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7585f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot TargetAttr *clone(ASTContext &C) const; 7586f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 7587f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 7588f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 7589f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::StringRef getFeaturesStr() const { 7590f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return llvm::StringRef(featuresStr, featuresStrLength); 7591f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7592f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getFeaturesStrLength() const { 7593f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return featuresStrLength; 7594f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7595f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void setFeaturesStr(ASTContext &C, llvm::StringRef S) { 7596f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot featuresStrLength = S.size(); 7597f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot this->featuresStr = new (C, 1) char [featuresStrLength]; 7598f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!S.empty()) 7599f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(this->featuresStr, S.data(), featuresStrLength); 7600f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7601f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7602f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7603f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot struct ParsedTargetAttr { 7604f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::vector<std::string> Features; 7605f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot StringRef Architecture; 7606f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool DuplicateArchitecture = false; 7607f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 7608f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ParsedTargetAttr parse() const { 7609f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return parse(getFeaturesStr()); 7610f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7611f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ParsedTargetAttr parse(StringRef Features) { 7612f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ParsedTargetAttr Ret; 7613f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SmallVector<StringRef, 1> AttrFeatures; 7614f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Features.split(AttrFeatures, ","); 7615f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7616f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot // Grab the various features and prepend a "+" to turn on the feature to 7617f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot // the backend and add them to our existing set of features. 7618f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot for (auto &Feature : AttrFeatures) { 7619f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot // Go ahead and trim whitespace rather than either erroring or 7620f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot // accepting it weirdly. 7621f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Feature = Feature.trim(); 7622f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7623f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot // We don't support cpu tuning this way currently. 7624f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot // TODO: Support the fpmath option. It will require checking 7625f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot // overall feature validity for the function with the rest of the 7626f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot // attributes on the function. 7627f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (Feature.startswith("fpmath=") || Feature.startswith("tune=")) 7628f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot continue; 7629f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7630f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot // While we're here iterating check for a different target cpu. 7631f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (Feature.startswith("arch=")) { 7632f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!Ret.Architecture.empty()) 7633f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Ret.DuplicateArchitecture = true; 7634f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot else 7635f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Ret.Architecture = Feature.split("=").second.trim(); 7636f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } else if (Feature.startswith("no-")) 7637f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Ret.Features.push_back("-" + Feature.split("-").second.str()); 7638f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot else 7639f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Ret.Features.push_back("+" + Feature.str()); 7640f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7641f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return Ret; 7642f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7643f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7644f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7645f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Target; } 7646f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 7647f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7648f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass TestTypestateAttr : public InheritableAttr { 7649f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 7650f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum ConsumedState { 7651f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Consumed, 7652f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Unconsumed 7653f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 7654f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotprivate: 7655f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ConsumedState testState; 7656f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7657f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 7658f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static TestTypestateAttr *CreateImplicit(ASTContext &Ctx, ConsumedState TestState, SourceRange Loc = SourceRange()) { 7659f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) TestTypestateAttr(Loc, Ctx, TestState, 0); 7660f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 7661f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 7662f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7663f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7664f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot TestTypestateAttr(SourceRange R, ASTContext &Ctx 7665f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , ConsumedState TestState 7666f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 7667f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 7668f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::TestTypestate, R, SI, false, false) 7669f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , testState(TestState) 7670f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 7671f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7672f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7673f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot TestTypestateAttr *clone(ASTContext &C) const; 7674f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 7675f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 7676f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 7677f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ConsumedState getTestState() const { 7678f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return testState; 7679f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7680f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7681f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool ConvertStrToConsumedState(StringRef Val, ConsumedState &Out) { 7682f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Optional<ConsumedState> R = llvm::StringSwitch<Optional<ConsumedState>>(Val) 7683f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("consumed", TestTypestateAttr::Consumed) 7684f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("unconsumed", TestTypestateAttr::Unconsumed) 7685f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Default(Optional<ConsumedState>()); 7686f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (R) { 7687f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Out = *R; 7688f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return true; 7689f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7690f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return false; 7691f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7692f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7693f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static const char *ConvertConsumedStateToStr(ConsumedState Val) { 7694f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch(Val) { 7695f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case TestTypestateAttr::Consumed: return "consumed"; 7696f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case TestTypestateAttr::Unconsumed: return "unconsumed"; 7697f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7698f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm_unreachable("No enumerator with that value"); 7699f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7700f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7701f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7702f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::TestTypestate; } 7703f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 7704f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7705f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ThisCallAttr : public InheritableAttr { 7706f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 7707f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ThisCallAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 7708f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ThisCallAttr(Loc, Ctx, 0); 7709f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 7710f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 7711f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7712f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7713f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ThisCallAttr(SourceRange R, ASTContext &Ctx 7714f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 7715f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 7716f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::ThisCall, R, SI, false, false) 7717f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 7718f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7719f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7720f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ThisCallAttr *clone(ASTContext &C) const; 7721f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 7722f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 7723f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 7724f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7725f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7726f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::ThisCall; } 7727f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 7728f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7729f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass ThreadAttr : public Attr { 7730f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 7731f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static ThreadAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 7732f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) ThreadAttr(Loc, Ctx, 0); 7733f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 7734f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 7735f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7736f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7737f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ThreadAttr(SourceRange R, ASTContext &Ctx 7738f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 7739f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 7740f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : Attr(attr::Thread, R, SI, false, false) 7741f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 7742f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7743f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7744f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ThreadAttr *clone(ASTContext &C) const; 7745f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 7746f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 7747f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 7748f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7749f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7750f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Thread; } 7751f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 7752f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7753f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass TransparentUnionAttr : public InheritableAttr { 7754f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 7755f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static TransparentUnionAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 7756f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) TransparentUnionAttr(Loc, Ctx, 0); 7757f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 7758f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 7759f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7760f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7761f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot TransparentUnionAttr(SourceRange R, ASTContext &Ctx 7762f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 7763f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 7764f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::TransparentUnion, R, SI, false, false) 7765f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 7766f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7767f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7768f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot TransparentUnionAttr *clone(ASTContext &C) const; 7769f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 7770f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 7771f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 7772f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7773f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7774f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::TransparentUnion; } 7775f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 7776f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7777f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass TryAcquireCapabilityAttr : public InheritableAttr { 7778f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotExpr * successValue; 7779f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7780f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned args_Size; 7781f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr * *args_; 7782f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7783f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 7784f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum Spelling { 7785f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_try_acquire_capability = 0, 7786f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CXX11_clang_try_acquire_capability = 1, 7787f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_try_acquire_shared_capability = 2, 7788f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CXX11_clang_try_acquire_shared_capability = 3 7789f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 7790f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7791f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static TryAcquireCapabilityAttr *CreateImplicit(ASTContext &Ctx, Spelling S, Expr * SuccessValue, Expr * *Args, unsigned ArgsSize, SourceRange Loc = SourceRange()) { 7792f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) TryAcquireCapabilityAttr(Loc, Ctx, SuccessValue, Args, ArgsSize, S); 7793f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 7794f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 7795f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7796f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7797f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot TryAcquireCapabilityAttr(SourceRange R, ASTContext &Ctx 7798f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * SuccessValue 7799f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * *Args, unsigned ArgsSize 7800f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 7801f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 7802f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::TryAcquireCapability, R, SI, true, true) 7803f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , successValue(SuccessValue) 7804f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , args_Size(ArgsSize), args_(new (Ctx, 16) Expr *[args_Size]) 7805f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 7806f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::copy(Args, Args + args_Size, args_); 7807f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7808f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7809f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot TryAcquireCapabilityAttr(SourceRange R, ASTContext &Ctx 7810f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , Expr * SuccessValue 7811f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 7812f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 7813f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::TryAcquireCapability, R, SI, true, true) 7814f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , successValue(SuccessValue) 7815f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , args_Size(0), args_(nullptr) 7816f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 7817f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7818f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7819f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot TryAcquireCapabilityAttr *clone(ASTContext &C) const; 7820f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 7821f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 7822f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 7823f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Spelling getSemanticSpelling() const { 7824f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch (SpellingListIndex) { 7825f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot default: llvm_unreachable("Unknown spelling list index"); 7826f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 0: return GNU_try_acquire_capability; 7827f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 1: return CXX11_clang_try_acquire_capability; 7828f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 2: return GNU_try_acquire_shared_capability; 7829f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 3: return CXX11_clang_try_acquire_shared_capability; 7830f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7831f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7832f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool isShared() const { return SpellingListIndex == 2 || 7833f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SpellingListIndex == 3; } 7834f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Expr * getSuccessValue() const { 7835f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return successValue; 7836f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7837f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7838f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot typedef Expr ** args_iterator; 7839f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot args_iterator args_begin() const { return args_; } 7840f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot args_iterator args_end() const { return args_ + args_Size; } 7841f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned args_size() const { return args_Size; } 7842f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::iterator_range<args_iterator> args() const { return llvm::make_range(args_begin(), args_end()); } 7843f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7844f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7845f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7846f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7847f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::TryAcquireCapability; } 7848f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 7849f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7850f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass TypeTagForDatatypeAttr : public InheritableAttr { 7851f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotIdentifierInfo * argumentKind; 7852f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7853f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotTypeSourceInfo * matchingCType; 7854f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7855f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotbool layoutCompatible; 7856f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7857f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotbool mustBeNull; 7858f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7859f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 7860f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static TypeTagForDatatypeAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * ArgumentKind, TypeSourceInfo * MatchingCType, bool LayoutCompatible, bool MustBeNull, SourceRange Loc = SourceRange()) { 7861f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) TypeTagForDatatypeAttr(Loc, Ctx, ArgumentKind, MatchingCType, LayoutCompatible, MustBeNull, 0); 7862f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 7863f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 7864f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7865f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7866f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot TypeTagForDatatypeAttr(SourceRange R, ASTContext &Ctx 7867f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , IdentifierInfo * ArgumentKind 7868f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , TypeSourceInfo * MatchingCType 7869f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , bool LayoutCompatible 7870f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , bool MustBeNull 7871f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 7872f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 7873f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::TypeTagForDatatype, R, SI, false, false) 7874f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , argumentKind(ArgumentKind) 7875f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , matchingCType(MatchingCType) 7876f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , layoutCompatible(LayoutCompatible) 7877f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , mustBeNull(MustBeNull) 7878f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 7879f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7880f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7881f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot TypeTagForDatatypeAttr *clone(ASTContext &C) const; 7882f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 7883f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 7884f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 7885f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot IdentifierInfo * getArgumentKind() const { 7886f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return argumentKind; 7887f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7888f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7889f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot QualType getMatchingCType() const { 7890f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return matchingCType->getType(); 7891f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } TypeSourceInfo * getMatchingCTypeLoc() const { 7892f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return matchingCType; 7893f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7894f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7895f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool getLayoutCompatible() const { 7896f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return layoutCompatible; 7897f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7898f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7899f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool getMustBeNull() const { 7900f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return mustBeNull; 7901f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7902f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7903f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7904f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7905f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::TypeTagForDatatype; } 7906f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 7907f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7908f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass TypeVisibilityAttr : public InheritableAttr { 7909f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 7910f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum VisibilityType { 7911f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Default, 7912f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Hidden, 7913f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Protected 7914f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 7915f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotprivate: 7916f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot VisibilityType visibility; 7917f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7918f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 7919f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static TypeVisibilityAttr *CreateImplicit(ASTContext &Ctx, VisibilityType Visibility, SourceRange Loc = SourceRange()) { 7920f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) TypeVisibilityAttr(Loc, Ctx, Visibility, 0); 7921f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 7922f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 7923f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7924f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7925f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot TypeVisibilityAttr(SourceRange R, ASTContext &Ctx 7926f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , VisibilityType Visibility 7927f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 7928f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 7929f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::TypeVisibility, R, SI, false, false) 7930f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , visibility(Visibility) 7931f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 7932f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7933f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7934f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot TypeVisibilityAttr *clone(ASTContext &C) const; 7935f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 7936f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 7937f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 7938f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot VisibilityType getVisibility() const { 7939f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return visibility; 7940f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7941f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7942f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool ConvertStrToVisibilityType(StringRef Val, VisibilityType &Out) { 7943f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Optional<VisibilityType> R = llvm::StringSwitch<Optional<VisibilityType>>(Val) 7944f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("default", TypeVisibilityAttr::Default) 7945f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("hidden", TypeVisibilityAttr::Hidden) 7946f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("internal", TypeVisibilityAttr::Hidden) 7947f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("protected", TypeVisibilityAttr::Protected) 7948f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Default(Optional<VisibilityType>()); 7949f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (R) { 7950f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Out = *R; 7951f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return true; 7952f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7953f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return false; 7954f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7955f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7956f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static const char *ConvertVisibilityTypeToStr(VisibilityType Val) { 7957f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch(Val) { 7958f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case TypeVisibilityAttr::Default: return "default"; 7959f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case TypeVisibilityAttr::Hidden: return "hidden"; 7960f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case TypeVisibilityAttr::Protected: return "protected"; 7961f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7962f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm_unreachable("No enumerator with that value"); 7963f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7964f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7965f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7966f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::TypeVisibility; } 7967f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 7968f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7969f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass UnavailableAttr : public InheritableAttr { 7970f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned messageLength; 7971f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotchar *message; 7972f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7973f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 7974f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum ImplicitReason { 7975f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot IR_None, 7976f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot IR_ARCForbiddenType, 7977f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot IR_ForbiddenWeak, 7978f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot IR_ARCForbiddenConversion, 7979f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot IR_ARCInitReturnsUnrelated, 7980f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot IR_ARCFieldWithOwnership 7981f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 7982f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotprivate: 7983f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ImplicitReason implicitReason; 7984f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7985f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 7986f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static UnavailableAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Message, ImplicitReason ImplicitReason, SourceRange Loc = SourceRange()) { 7987f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) UnavailableAttr(Loc, Ctx, Message, ImplicitReason, 0); 7988f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 7989f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 7990f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7991f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7992f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static UnavailableAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Message, SourceRange Loc = SourceRange()) { 7993f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) UnavailableAttr(Loc, Ctx, Message, 0); 7994f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 7995f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 7996f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 7997f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 7998f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot UnavailableAttr(SourceRange R, ASTContext &Ctx 7999f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , llvm::StringRef Message 8000f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , ImplicitReason ImplicitReason 8001f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 8002f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 8003f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Unavailable, R, SI, false, false) 8004f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , messageLength(Message.size()),message(new (Ctx, 1) char[messageLength]) 8005f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , implicitReason(ImplicitReason) 8006f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 8007f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!Message.empty()) 8008f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(message, Message.data(), messageLength); 8009f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8010f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8011f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot UnavailableAttr(SourceRange R, ASTContext &Ctx 8012f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , llvm::StringRef Message 8013f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 8014f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 8015f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Unavailable, R, SI, false, false) 8016f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , messageLength(Message.size()),message(new (Ctx, 1) char[messageLength]) 8017f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , implicitReason(ImplicitReason(0)) 8018f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 8019f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!Message.empty()) 8020f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(message, Message.data(), messageLength); 8021f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8022f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8023f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot UnavailableAttr(SourceRange R, ASTContext &Ctx 8024f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 8025f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 8026f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Unavailable, R, SI, false, false) 8027f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , messageLength(0),message(nullptr) 8028f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , implicitReason(ImplicitReason(0)) 8029f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 8030f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8031f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8032f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot UnavailableAttr *clone(ASTContext &C) const; 8033f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 8034f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 8035f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 8036f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::StringRef getMessage() const { 8037f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return llvm::StringRef(message, messageLength); 8038f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8039f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getMessageLength() const { 8040f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return messageLength; 8041f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8042f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void setMessage(ASTContext &C, llvm::StringRef S) { 8043f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot messageLength = S.size(); 8044f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot this->message = new (C, 1) char [messageLength]; 8045f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!S.empty()) 8046f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(this->message, S.data(), messageLength); 8047f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8048f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8049f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ImplicitReason getImplicitReason() const { 8050f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return implicitReason; 8051f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8052f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8053f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8054f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8055f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Unavailable; } 8056f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 8057f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8058f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass UnusedAttr : public InheritableAttr { 8059f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 8060f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum Spelling { 8061f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CXX11_maybe_unused = 0, 8062f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_unused = 1, 8063f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CXX11_gnu_unused = 2, 8064f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot C2x_maybe_unused = 3 8065f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 8066f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8067f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static UnusedAttr *CreateImplicit(ASTContext &Ctx, Spelling S, SourceRange Loc = SourceRange()) { 8068f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) UnusedAttr(Loc, Ctx, S); 8069f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 8070f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 8071f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8072f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8073f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot UnusedAttr(SourceRange R, ASTContext &Ctx 8074f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 8075f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 8076f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Unused, R, SI, false, false) 8077f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 8078f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8079f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8080f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot UnusedAttr *clone(ASTContext &C) const; 8081f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 8082f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 8083f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 8084f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Spelling getSemanticSpelling() const { 8085f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch (SpellingListIndex) { 8086f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot default: llvm_unreachable("Unknown spelling list index"); 8087f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 0: return CXX11_maybe_unused; 8088f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 1: return GNU_unused; 8089f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 2: return CXX11_gnu_unused; 8090f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 3: return C2x_maybe_unused; 8091f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8092f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8093f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8094f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8095f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Unused; } 8096f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 8097f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8098f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass UsedAttr : public InheritableAttr { 8099f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 8100f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static UsedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 8101f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) UsedAttr(Loc, Ctx, 0); 8102f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 8103f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 8104f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8105f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8106f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot UsedAttr(SourceRange R, ASTContext &Ctx 8107f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 8108f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 8109f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Used, R, SI, false, false) 8110f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 8111f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8112f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8113f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot UsedAttr *clone(ASTContext &C) const; 8114f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 8115f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 8116f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 8117f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8118f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8119f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Used; } 8120f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 8121f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8122f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass UuidAttr : public InheritableAttr { 8123f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned guidLength; 8124f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotchar *guid; 8125f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8126f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 8127f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static UuidAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Guid, SourceRange Loc = SourceRange()) { 8128f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) UuidAttr(Loc, Ctx, Guid, 0); 8129f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 8130f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 8131f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8132f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8133f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot UuidAttr(SourceRange R, ASTContext &Ctx 8134f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , llvm::StringRef Guid 8135f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 8136f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 8137f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Uuid, R, SI, false, false) 8138f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , guidLength(Guid.size()),guid(new (Ctx, 1) char[guidLength]) 8139f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 8140f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!Guid.empty()) 8141f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(guid, Guid.data(), guidLength); 8142f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8143f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8144f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot UuidAttr *clone(ASTContext &C) const; 8145f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 8146f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 8147f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 8148f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::StringRef getGuid() const { 8149f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return llvm::StringRef(guid, guidLength); 8150f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8151f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getGuidLength() const { 8152f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return guidLength; 8153f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8154f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void setGuid(ASTContext &C, llvm::StringRef S) { 8155f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot guidLength = S.size(); 8156f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot this->guid = new (C, 1) char [guidLength]; 8157f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!S.empty()) 8158f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(this->guid, S.data(), guidLength); 8159f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8160f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8161f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8162f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8163f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Uuid; } 8164f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 8165f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8166f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass VecReturnAttr : public InheritableAttr { 8167f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 8168f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static VecReturnAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 8169f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) VecReturnAttr(Loc, Ctx, 0); 8170f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 8171f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 8172f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8173f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8174f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot VecReturnAttr(SourceRange R, ASTContext &Ctx 8175f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 8176f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 8177f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::VecReturn, R, SI, false, false) 8178f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 8179f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8180f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8181f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot VecReturnAttr *clone(ASTContext &C) const; 8182f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 8183f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 8184f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 8185f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8186f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8187f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::VecReturn; } 8188f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 8189f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8190f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass VecTypeHintAttr : public InheritableAttr { 8191f3014761c955345d6e05491608e73228d014afbandroid-build-team RobotTypeSourceInfo * typeHint; 8192f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8193f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 8194f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static VecTypeHintAttr *CreateImplicit(ASTContext &Ctx, TypeSourceInfo * TypeHint, SourceRange Loc = SourceRange()) { 8195f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) VecTypeHintAttr(Loc, Ctx, TypeHint, 0); 8196f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 8197f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 8198f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8199f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8200f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot VecTypeHintAttr(SourceRange R, ASTContext &Ctx 8201f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , TypeSourceInfo * TypeHint 8202f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 8203f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 8204f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::VecTypeHint, R, SI, false, false) 8205f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , typeHint(TypeHint) 8206f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 8207f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8208f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8209f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot VecTypeHintAttr *clone(ASTContext &C) const; 8210f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 8211f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 8212f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 8213f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot QualType getTypeHint() const { 8214f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return typeHint->getType(); 8215f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } TypeSourceInfo * getTypeHintLoc() const { 8216f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return typeHint; 8217f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8218f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8219f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8220f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8221f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::VecTypeHint; } 8222f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 8223f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8224f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass VectorCallAttr : public InheritableAttr { 8225f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 8226f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static VectorCallAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 8227f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) VectorCallAttr(Loc, Ctx, 0); 8228f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 8229f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 8230f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8231f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8232f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot VectorCallAttr(SourceRange R, ASTContext &Ctx 8233f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 8234f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 8235f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::VectorCall, R, SI, false, false) 8236f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 8237f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8238f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8239f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot VectorCallAttr *clone(ASTContext &C) const; 8240f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 8241f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 8242f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 8243f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8244f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8245f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::VectorCall; } 8246f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 8247f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8248f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass VisibilityAttr : public InheritableAttr { 8249f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 8250f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum VisibilityType { 8251f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Default, 8252f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Hidden, 8253f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Protected 8254f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 8255f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotprivate: 8256f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot VisibilityType visibility; 8257f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8258f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 8259f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static VisibilityAttr *CreateImplicit(ASTContext &Ctx, VisibilityType Visibility, SourceRange Loc = SourceRange()) { 8260f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) VisibilityAttr(Loc, Ctx, Visibility, 0); 8261f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 8262f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 8263f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8264f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8265f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot VisibilityAttr(SourceRange R, ASTContext &Ctx 8266f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , VisibilityType Visibility 8267f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 8268f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 8269f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Visibility, R, SI, false, false) 8270f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , visibility(Visibility) 8271f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 8272f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8273f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8274f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot VisibilityAttr *clone(ASTContext &C) const; 8275f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 8276f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 8277f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 8278f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot VisibilityType getVisibility() const { 8279f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return visibility; 8280f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8281f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8282f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool ConvertStrToVisibilityType(StringRef Val, VisibilityType &Out) { 8283f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Optional<VisibilityType> R = llvm::StringSwitch<Optional<VisibilityType>>(Val) 8284f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("default", VisibilityAttr::Default) 8285f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("hidden", VisibilityAttr::Hidden) 8286f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("internal", VisibilityAttr::Hidden) 8287f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Case("protected", VisibilityAttr::Protected) 8288f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot .Default(Optional<VisibilityType>()); 8289f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (R) { 8290f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Out = *R; 8291f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return true; 8292f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8293f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return false; 8294f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8295f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8296f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static const char *ConvertVisibilityTypeToStr(VisibilityType Val) { 8297f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch(Val) { 8298f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case VisibilityAttr::Default: return "default"; 8299f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case VisibilityAttr::Hidden: return "hidden"; 8300f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case VisibilityAttr::Protected: return "protected"; 8301f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8302f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm_unreachable("No enumerator with that value"); 8303f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8304f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8305f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8306f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Visibility; } 8307f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 8308f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8309f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass WarnUnusedAttr : public InheritableAttr { 8310f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 8311f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static WarnUnusedAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 8312f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) WarnUnusedAttr(Loc, Ctx, 0); 8313f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 8314f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 8315f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8316f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8317f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot WarnUnusedAttr(SourceRange R, ASTContext &Ctx 8318f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 8319f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 8320f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::WarnUnused, R, SI, false, false) 8321f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 8322f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8323f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8324f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot WarnUnusedAttr *clone(ASTContext &C) const; 8325f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 8326f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 8327f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 8328f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8329f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8330f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::WarnUnused; } 8331f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 8332f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8333f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass WarnUnusedResultAttr : public InheritableAttr { 8334f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 8335f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum Spelling { 8336f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CXX11_nodiscard = 0, 8337f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot C2x_nodiscard = 1, 8338f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CXX11_clang_warn_unused_result = 2, 8339f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_warn_unused_result = 3, 8340f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CXX11_gnu_warn_unused_result = 4 8341f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 8342f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8343f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static WarnUnusedResultAttr *CreateImplicit(ASTContext &Ctx, Spelling S, SourceRange Loc = SourceRange()) { 8344f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) WarnUnusedResultAttr(Loc, Ctx, S); 8345f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 8346f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 8347f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8348f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8349f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot WarnUnusedResultAttr(SourceRange R, ASTContext &Ctx 8350f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 8351f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 8352f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::WarnUnusedResult, R, SI, false, false) 8353f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 8354f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8355f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8356f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot WarnUnusedResultAttr *clone(ASTContext &C) const; 8357f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 8358f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 8359f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 8360f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Spelling getSemanticSpelling() const { 8361f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch (SpellingListIndex) { 8362f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot default: llvm_unreachable("Unknown spelling list index"); 8363f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 0: return CXX11_nodiscard; 8364f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 1: return C2x_nodiscard; 8365f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 2: return CXX11_clang_warn_unused_result; 8366f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 3: return GNU_warn_unused_result; 8367f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 4: return CXX11_gnu_warn_unused_result; 8368f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8369f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8370f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8371f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8372f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::WarnUnusedResult; } 8373f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 8374f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8375f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass WeakAttr : public InheritableAttr { 8376f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 8377f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static WeakAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 8378f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) WeakAttr(Loc, Ctx, 0); 8379f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 8380f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 8381f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8382f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8383f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot WeakAttr(SourceRange R, ASTContext &Ctx 8384f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 8385f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 8386f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::Weak, R, SI, false, false) 8387f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 8388f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8389f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8390f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot WeakAttr *clone(ASTContext &C) const; 8391f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 8392f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 8393f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 8394f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8395f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8396f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::Weak; } 8397f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 8398f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8399f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass WeakImportAttr : public InheritableAttr { 8400f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 8401f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static WeakImportAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 8402f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) WeakImportAttr(Loc, Ctx, 0); 8403f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 8404f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 8405f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8406f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8407f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot WeakImportAttr(SourceRange R, ASTContext &Ctx 8408f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 8409f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 8410f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::WeakImport, R, SI, false, false) 8411f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 8412f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8413f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8414f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot WeakImportAttr *clone(ASTContext &C) const; 8415f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 8416f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 8417f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 8418f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8419f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8420f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::WeakImport; } 8421f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 8422f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8423f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass WeakRefAttr : public InheritableAttr { 8424f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned aliaseeLength; 8425f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotchar *aliasee; 8426f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8427f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 8428f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static WeakRefAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Aliasee, SourceRange Loc = SourceRange()) { 8429f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) WeakRefAttr(Loc, Ctx, Aliasee, 0); 8430f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 8431f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 8432f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8433f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8434f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot WeakRefAttr(SourceRange R, ASTContext &Ctx 8435f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , llvm::StringRef Aliasee 8436f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 8437f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 8438f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::WeakRef, R, SI, false, false) 8439f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , aliaseeLength(Aliasee.size()),aliasee(new (Ctx, 1) char[aliaseeLength]) 8440f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 8441f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!Aliasee.empty()) 8442f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(aliasee, Aliasee.data(), aliaseeLength); 8443f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8444f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8445f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot WeakRefAttr(SourceRange R, ASTContext &Ctx 8446f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 8447f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 8448f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::WeakRef, R, SI, false, false) 8449f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , aliaseeLength(0),aliasee(nullptr) 8450f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 8451f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8452f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8453f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot WeakRefAttr *clone(ASTContext &C) const; 8454f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 8455f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 8456f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 8457f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot llvm::StringRef getAliasee() const { 8458f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return llvm::StringRef(aliasee, aliaseeLength); 8459f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8460f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getAliaseeLength() const { 8461f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return aliaseeLength; 8462f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8463f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void setAliasee(ASTContext &C, llvm::StringRef S) { 8464f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot aliaseeLength = S.size(); 8465f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot this->aliasee = new (C, 1) char [aliaseeLength]; 8466f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot if (!S.empty()) 8467f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::memcpy(this->aliasee, S.data(), aliaseeLength); 8468f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8469f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8470f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8471f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8472f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::WeakRef; } 8473f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 8474f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8475f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass WorkGroupSizeHintAttr : public InheritableAttr { 8476f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned xDim; 8477f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8478f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned yDim; 8479f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8480f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned zDim; 8481f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8482f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 8483f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static WorkGroupSizeHintAttr *CreateImplicit(ASTContext &Ctx, unsigned XDim, unsigned YDim, unsigned ZDim, SourceRange Loc = SourceRange()) { 8484f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) WorkGroupSizeHintAttr(Loc, Ctx, XDim, YDim, ZDim, 0); 8485f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 8486f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 8487f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8488f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8489f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot WorkGroupSizeHintAttr(SourceRange R, ASTContext &Ctx 8490f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned XDim 8491f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned YDim 8492f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned ZDim 8493f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 8494f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 8495f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::WorkGroupSizeHint, R, SI, false, false) 8496f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , xDim(XDim) 8497f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , yDim(YDim) 8498f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , zDim(ZDim) 8499f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 8500f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8501f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8502f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot WorkGroupSizeHintAttr *clone(ASTContext &C) const; 8503f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 8504f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 8505f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 8506f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getXDim() const { 8507f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return xDim; 8508f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8509f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8510f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getYDim() const { 8511f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return yDim; 8512f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8513f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8514f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getZDim() const { 8515f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return zDim; 8516f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8517f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8518f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8519f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8520f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::WorkGroupSizeHint; } 8521f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 8522f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8523f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass X86ForceAlignArgPointerAttr : public InheritableAttr { 8524f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 8525f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static X86ForceAlignArgPointerAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) { 8526f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) X86ForceAlignArgPointerAttr(Loc, Ctx, 0); 8527f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 8528f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 8529f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8530f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8531f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot X86ForceAlignArgPointerAttr(SourceRange R, ASTContext &Ctx 8532f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 8533f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 8534f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::X86ForceAlignArgPointer, R, SI, false, false) 8535f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 8536f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8537f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8538f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot X86ForceAlignArgPointerAttr *clone(ASTContext &C) const; 8539f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 8540f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 8541f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 8542f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8543f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8544f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::X86ForceAlignArgPointer; } 8545f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 8546f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8547f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass XRayInstrumentAttr : public InheritableAttr { 8548f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 8549f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot enum Spelling { 8550f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_xray_always_instrument = 0, 8551f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CXX11_clang_xray_always_instrument = 1, 8552f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot GNU_xray_never_instrument = 2, 8553f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot CXX11_clang_xray_never_instrument = 3 8554f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 8555f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8556f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static XRayInstrumentAttr *CreateImplicit(ASTContext &Ctx, Spelling S, SourceRange Loc = SourceRange()) { 8557f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) XRayInstrumentAttr(Loc, Ctx, S); 8558f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 8559f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 8560f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8561f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8562f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot XRayInstrumentAttr(SourceRange R, ASTContext &Ctx 8563f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 8564f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 8565f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::XRayInstrument, R, SI, false, false) 8566f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 8567f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8568f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8569f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot XRayInstrumentAttr *clone(ASTContext &C) const; 8570f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 8571f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 8572f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 8573f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot Spelling getSemanticSpelling() const { 8574f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot switch (SpellingListIndex) { 8575f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot default: llvm_unreachable("Unknown spelling list index"); 8576f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 0: return GNU_xray_always_instrument; 8577f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 1: return CXX11_clang_xray_always_instrument; 8578f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 2: return GNU_xray_never_instrument; 8579f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot case 3: return CXX11_clang_xray_never_instrument; 8580f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8581f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8582f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool alwaysXRayInstrument() const { return SpellingListIndex == 0 || 8583f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SpellingListIndex == 1; } 8584f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot bool neverXRayInstrument() const { return SpellingListIndex == 2 || 8585f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SpellingListIndex == 3; } 8586f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8587f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8588f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::XRayInstrument; } 8589f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 8590f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8591f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass XRayLogArgsAttr : public InheritableAttr { 8592f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotunsigned argumentCount; 8593f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8594f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 8595f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static XRayLogArgsAttr *CreateImplicit(ASTContext &Ctx, unsigned ArgumentCount, SourceRange Loc = SourceRange()) { 8596f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot auto *A = new (Ctx) XRayLogArgsAttr(Loc, Ctx, ArgumentCount, 0); 8597f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot A->setImplicit(true); 8598f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return A; 8599f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8600f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8601f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot XRayLogArgsAttr(SourceRange R, ASTContext &Ctx 8602f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned ArgumentCount 8603f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , unsigned SI 8604f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot ) 8605f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot : InheritableAttr(attr::XRayLogArgs, R, SI, false, false) 8606f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot , argumentCount(ArgumentCount) 8607f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot { 8608f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8609f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8610f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot XRayLogArgsAttr *clone(ASTContext &C) const; 8611f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void printPretty(raw_ostream &OS, 8612f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const PrintingPolicy &Policy) const; 8613f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const char *getSpelling() const; 8614f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned getArgumentCount() const { 8615f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot return argumentCount; 8616f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 8617f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8618f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8619f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8620f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static bool classof(const Attr *A) { return A->getKind() == attr::XRayLogArgs; } 8621f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 8622f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 8623f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot#endif // LLVM_CLANG_ATTR_CLASSES_INC 8624