[cfe-commits] r106172 - in /cfe/trunk: include/clang/AST/Attr.h include/clang/AST/Makefile include/clang/Basic/Attr.td include/clang/Basic/AttrKinds.h include/clang/Basic/DeclNodes.td include/clang/Basic/Makefile include/clang/Basic/StmtNodes.td lib/AST/AttrImpl.cpp lib/Frontend/PCHReaderDecl.cpp lib/Frontend/PCHWriter.cpp tools/libclang/CXCursor.cpp

Fariborz Jahanian fjahanian at apple.com
Wed Jun 16 17:11:14 PDT 2010


Hi Sean,

I am getting build failure:

llvm[3]: Building Clang attribute classes with tblgen
tblgen: Unknown command line argument '-gen-clang-attr-classes'.  Try:  
'/Volumes/sandbox/llvm/Debug/bin/tblgen -help'
make[3]: *** [/Volumes/sandbox/llvm/tools/clang/include/clang/AST/ 
Debug/Attrs.inc.tmp] Error 1
make[3]: *** Waiting for unfinished jobs....
make[2]: *** [all] Error 1
make[1]: *** [all] Error 1
make: *** [all] Error 1

- Fariborz

On Jun 16, 2010, at 4:43 PM, Sean Hunt wrote:

> Author: coppro
> Date: Wed Jun 16 18:43:53 2010
> New Revision: 106172
>
> URL: http://llvm.org/viewvc/llvm-project?rev=106172&view=rev
> Log:
> Implement first TD-based usage of attributes.
>
> Currently, there are two effective changes:
>
> - Attr::Kind has been changed to attr::Kind, in a separate namespace
>   rather than the Attr class. This is because the enumerator needs to
>   be visible to parse.
> - The class definitions for the C++0x attributes other than aligned  
> are
>   generated by TableGen.
>
> The specific classes generated by TableGen are controlled by an  
> array in
> TableGen (see the accompanying commit to the LLVM repository). I  
> will be
> expanding the amount of code generated as I develop the new  
> attributes system
> while initially keeping it confined to these attributes.
>
> Added:
>    cfe/trunk/include/clang/Basic/Attr.td
>    cfe/trunk/include/clang/Basic/AttrKinds.h
> Modified:
>    cfe/trunk/include/clang/AST/Attr.h
>    cfe/trunk/include/clang/AST/Makefile
>    cfe/trunk/include/clang/Basic/DeclNodes.td
>    cfe/trunk/include/clang/Basic/Makefile
>    cfe/trunk/include/clang/Basic/StmtNodes.td
>    cfe/trunk/lib/AST/AttrImpl.cpp
>    cfe/trunk/lib/Frontend/PCHReaderDecl.cpp
>    cfe/trunk/lib/Frontend/PCHWriter.cpp
>    cfe/trunk/tools/libclang/CXCursor.cpp
>
> Modified: cfe/trunk/include/clang/AST/Attr.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Attr.h?rev=106172&r1=106171&r2=106172&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- cfe/trunk/include/clang/AST/Attr.h (original)
> +++ cfe/trunk/include/clang/AST/Attr.h Wed Jun 16 18:43:53 2010
> @@ -16,6 +16,7 @@
>
> #include "llvm/Support/Casting.h"
> #include "llvm/ADT/StringRef.h"
> +#include "clang/Basic/AttrKinds.h"
> #include <cassert>
> #include <cstring>
> #include <algorithm>
> @@ -41,75 +42,9 @@
>
> /// Attr - This represents one attribute.
> class Attr {
> -public:
> -  enum Kind {
> -    Alias,
> -    Aligned,
> -    AlignMac68k,
> -    AlwaysInline,
> -    AnalyzerNoReturn, // Clang-specific.
> -    Annotate,
> -    AsmLabel, // Represent GCC asm label extension.
> -    BaseCheck,
> -    Blocks,
> -    CDecl,
> -    Cleanup,
> -    Const,
> -    Constructor,
> -    Deprecated,
> -    Destructor,
> -    FastCall,
> -    Final,
> -    Format,
> -    FormatArg,
> -    GNUInline,
> -    Hiding,
> -    IBOutletKind, // Clang-specific. Use "Kind" suffix to not  
> conflict w/ macro.
> -    IBOutletCollectionKind, // Clang-specific.
> -    IBActionKind, // Clang-specific. Use "Kind" suffix to not  
> conflict w/ macro.
> -    Malloc,
> -    MaxFieldAlignment,
> -    NoDebug,
> -    NoInline,
> -    NonNull,
> -    NoReturn,
> -    NoThrow,
> -    ObjCException,
> -    ObjCNSObject,
> -    Override,
> -    CFReturnsRetained,      // Clang/Checker-specific.
> -    CFReturnsNotRetained,   // Clang/Checker-specific.
> -    NSReturnsRetained,      // Clang/Checker-specific.
> -    NSReturnsNotRetained,   // Clang/Checker-specific.
> -    Overloadable, // Clang-specific
> -    Packed,
> -    Pure,
> -    Regparm,
> -    ReqdWorkGroupSize,   // OpenCL-specific
> -    Section,
> -    Sentinel,
> -    StdCall,
> -    ThisCall,
> -    TransparentUnion,
> -    Unavailable,
> -    Unused,
> -    Used,
> -    Visibility,
> -    WarnUnusedResult,
> -    Weak,
> -    WeakImport,
> -    WeakRef,
> -
> -    FIRST_TARGET_ATTRIBUTE,
> -    DLLExport,
> -    DLLImport,
> -    MSP430Interrupt,
> -    X86ForceAlignArgPointer
> -  };
> -
> private:
>   Attr *Next;
> -  Kind AttrKind;
> +  attr::Kind AttrKind;
>   bool Inherited : 1;
>
> protected:
> @@ -122,7 +57,7 @@
>   }
>
> protected:
> -  Attr(Kind AK) : Next(0), AttrKind(AK), Inherited(false) {}
> +  Attr(attr::Kind AK) : Next(0), AttrKind(AK), Inherited(false) {}
>   virtual ~Attr() {
>     assert(Next == 0 && "Destroy didn't work");
>   }
> @@ -133,7 +68,7 @@
>   /// declarations.
>   virtual bool isMerged() const { return true; }
>
> -  Kind getKind() const { return AttrKind; }
> +  attr::Kind getKind() const { return AttrKind; }
>
>   Attr *getNext() { return Next; }
>   const Attr *getNext() const { return Next; }
> @@ -163,13 +98,15 @@
>   // Implement isa/cast/dyncast/etc.
>   static bool classof(const Attr *) { return true; }
> };
> +
> +#include "clang/AST/Attrs.inc"
>
> class AttrWithString : public Attr {
> private:
>   const char *Str;
>   unsigned StrLen;
> protected:
> -  AttrWithString(Attr::Kind AK, ASTContext &C, llvm::StringRef s);
> +  AttrWithString(attr::Kind AK, ASTContext &C, llvm::StringRef s);
>   llvm::StringRef getString() const { return llvm::StringRef(Str,  
> StrLen); }
>   void ReplaceString(ASTContext &C, llvm::StringRef newS);
> public:
> @@ -179,9 +116,9 @@
> #define  
> DEF_SIMPLE_ATTR(ATTR)                                           \
> class ATTR##Attr : public Attr  
> {                                        \
> public 
> :                                                                 \
> -  ATTR##Attr() : Attr(ATTR)  
> {}                                          \
> +  ATTR##Attr() : Attr(attr::ATTR)  
> {}                                          \
>   virtual Attr *clone(ASTContext &C)  
> const;                             \
> -  static bool classof(const Attr *A) { return A->getKind() ==  
> ATTR; }   \
> +  static bool classof(const Attr *A) { return A->getKind() ==  
> attr::ATTR; }   \
>   static bool classof(const ATTR##Attr *A) { return  
> true; }             \
> }
>
> @@ -194,7 +131,7 @@
>
> public:
>   MaxFieldAlignmentAttr(unsigned alignment)
> -    : Attr(MaxFieldAlignment), Alignment(alignment) {}
> +    : Attr(attr::MaxFieldAlignment), Alignment(alignment) {}
>
>   /// getAlignment - The specified alignment in bits.
>   unsigned getAlignment() const { return Alignment; }
> @@ -203,7 +140,7 @@
>
>   // Implement isa/cast/dyncast/etc.
>   static bool classof(const Attr *A) {
> -    return A->getKind() == MaxFieldAlignment;
> +    return A->getKind() == attr::MaxFieldAlignment;
>   }
>   static bool classof(const MaxFieldAlignmentAttr *A) { return true; }
> };
> @@ -214,7 +151,7 @@
>   unsigned Alignment;
> public:
>   AlignedAttr(unsigned alignment)
> -    : Attr(Aligned), Alignment(alignment) {}
> +    : Attr(attr::Aligned), Alignment(alignment) {}
>
>   /// getAlignment - The specified alignment in bits.
>   unsigned getAlignment() const { return Alignment; }
> @@ -232,7 +169,7 @@
>
>   // Implement isa/cast/dyncast/etc.
>   static bool classof(const Attr *A) {
> -    return A->getKind() == Aligned;
> +    return A->getKind() == attr::Aligned;
>   }
>   static bool classof(const AlignedAttr *A) { return true; }
> };
> @@ -240,7 +177,7 @@
> class AnnotateAttr : public AttrWithString {
> public:
>   AnnotateAttr(ASTContext &C, llvm::StringRef ann)
> -    : AttrWithString(Annotate, C, ann) {}
> +    : AttrWithString(attr::Annotate, C, ann) {}
>
>   llvm::StringRef getAnnotation() const { return getString(); }
>
> @@ -248,7 +185,7 @@
>
>   // Implement isa/cast/dyncast/etc.
>   static bool classof(const Attr *A) {
> -    return A->getKind() == Annotate;
> +    return A->getKind() == attr::Annotate;
>   }
>   static bool classof(const AnnotateAttr *A) { return true; }
> };
> @@ -256,7 +193,7 @@
> class AsmLabelAttr : public AttrWithString {
> public:
>   AsmLabelAttr(ASTContext &C, llvm::StringRef L)
> -    : AttrWithString(AsmLabel, C, L) {}
> +    : AttrWithString(attr::AsmLabel, C, L) {}
>
>   llvm::StringRef getLabel() const { return getString(); }
>
> @@ -264,7 +201,7 @@
>
>   // Implement isa/cast/dyncast/etc.
>   static bool classof(const Attr *A) {
> -    return A->getKind() == AsmLabel;
> +    return A->getKind() == attr::AsmLabel;
>   }
>   static bool classof(const AsmLabelAttr *A) { return true; }
> };
> @@ -274,54 +211,56 @@
> class AliasAttr : public AttrWithString {
> public:
>   AliasAttr(ASTContext &C, llvm::StringRef aliasee)
> -    : AttrWithString(Alias, C, aliasee) {}
> +    : AttrWithString(attr::Alias, C, aliasee) {}
>
>   llvm::StringRef getAliasee() const { return getString(); }
>
>   virtual Attr *clone(ASTContext &C) const;
>
>   // Implement isa/cast/dyncast/etc.
> -  static bool classof(const Attr *A) { return A->getKind() ==  
> Alias; }
> +  static bool classof(const Attr *A) { return A->getKind() ==  
> attr::Alias; }
>   static bool classof(const AliasAttr *A) { return true; }
> };
>
> class ConstructorAttr : public Attr {
>   int priority;
> public:
> -  ConstructorAttr(int p) : Attr(Constructor), priority(p) {}
> +  ConstructorAttr(int p) : Attr(attr::Constructor), priority(p) {}
>
>   int getPriority() const { return priority; }
>
>   virtual Attr *clone(ASTContext &C) const;
>
>   // Implement isa/cast/dyncast/etc.
> -  static bool classof(const Attr *A) { return A->getKind() ==  
> Constructor; }
> +  static bool classof(const Attr *A)
> +    { return A->getKind() == attr::Constructor; }
>   static bool classof(const ConstructorAttr *A) { return true; }
> };
>
> class DestructorAttr : public Attr {
>   int priority;
> public:
> -  DestructorAttr(int p) : Attr(Destructor), priority(p) {}
> +  DestructorAttr(int p) : Attr(attr::Destructor), priority(p) {}
>
>   int getPriority() const { return priority; }
>
>   virtual Attr *clone(ASTContext &C) const;
>
>   // Implement isa/cast/dyncast/etc.
> -  static bool classof(const Attr *A) { return A->getKind() ==  
> Destructor; }
> +  static bool classof(const Attr *A)
> +    { return A->getKind() == attr::Destructor; }
>   static bool classof(const DestructorAttr *A) { return true; }
> };
>
> class IBOutletAttr : public Attr {
> public:
> -  IBOutletAttr() : Attr(IBOutletKind) {}
> +  IBOutletAttr() : Attr(attr::IBOutlet) {}
>
>   virtual Attr *clone(ASTContext &C) const;
>
>   // Implement isa/cast/dyncast/etc.
>   static bool classof(const Attr *A) {
> -    return A->getKind() == IBOutletKind;
> +    return A->getKind() == attr::IBOutlet;
>   }
>   static bool classof(const IBOutletAttr *A) { return true; }
> };
> @@ -330,7 +269,7 @@
>   const ObjCInterfaceDecl *D;
> public:
>   IBOutletCollectionAttr(const ObjCInterfaceDecl *d = 0)
> -    : Attr(IBOutletCollectionKind), D(d) {}
> +    : Attr(attr::IBOutletCollection), D(d) {}
>
>   const ObjCInterfaceDecl *getClass() const { return D; }
>
> @@ -338,27 +277,26 @@
>
>   // Implement isa/cast/dyncast/etc.
>   static bool classof(const Attr *A) {
> -    return A->getKind() == IBOutletCollectionKind;
> +    return A->getKind() == attr::IBOutletCollection;
>   }
>   static bool classof(const IBOutletCollectionAttr *A) { return  
> true; }
> };
>
> class IBActionAttr : public Attr {
> public:
> -  IBActionAttr() : Attr(IBActionKind) {}
> +  IBActionAttr() : Attr(attr::IBAction) {}
>
>   virtual Attr *clone(ASTContext &C) const;
>
>     // Implement isa/cast/dyncast/etc.
>   static bool classof(const Attr *A) {
> -    return A->getKind() == IBActionKind;
> +    return A->getKind() == attr::IBAction;
>   }
>   static bool classof(const IBActionAttr *A) { return true; }
> };
>
> DEF_SIMPLE_ATTR(AnalyzerNoReturn);
> DEF_SIMPLE_ATTR(Deprecated);
> -DEF_SIMPLE_ATTR(Final);
> DEF_SIMPLE_ATTR(GNUInline);
> DEF_SIMPLE_ATTR(Malloc);
> DEF_SIMPLE_ATTR(NoReturn);
> @@ -366,7 +304,7 @@
> class SectionAttr : public AttrWithString {
> public:
>   SectionAttr(ASTContext &C, llvm::StringRef N)
> -    : AttrWithString(Section, C, N) {}
> +    : AttrWithString(attr::Section, C, N) {}
>
>   llvm::StringRef getName() const { return getString(); }
>
> @@ -374,7 +312,7 @@
>
>   // Implement isa/cast/dyncast/etc.
>   static bool classof(const Attr *A) {
> -    return A->getKind() == Section;
> +    return A->getKind() == attr::Section;
>   }
>   static bool classof(const SectionAttr *A) { return true; }
> };
> @@ -408,7 +346,7 @@
>
>   virtual Attr *clone(ASTContext &C) const;
>
> -  static bool classof(const Attr *A) { return A->getKind() ==  
> NonNull; }
> +  static bool classof(const Attr *A) { return A->getKind() ==  
> attr::NonNull; }
>   static bool classof(const NonNullAttr *A) { return true; }
> };
>
> @@ -416,7 +354,7 @@
>   int formatIdx, firstArg;
> public:
>   FormatAttr(ASTContext &C, llvm::StringRef type, int idx, int first)
> -    : AttrWithString(Format, C, type), formatIdx(idx),  
> firstArg(first) {}
> +    : AttrWithString(attr::Format, C, type), formatIdx(idx),  
> firstArg(first) {}
>
>   llvm::StringRef getType() const { return getString(); }
>   void setType(ASTContext &C, llvm::StringRef type);
> @@ -426,27 +364,27 @@
>   virtual Attr *clone(ASTContext &C) const;
>
>   // Implement isa/cast/dyncast/etc.
> -  static bool classof(const Attr *A) { return A->getKind() ==  
> Format; }
> +  static bool classof(const Attr *A) { return A->getKind() ==  
> attr::Format; }
>   static bool classof(const FormatAttr *A) { return true; }
> };
>
> class FormatArgAttr : public Attr {
>   int formatIdx;
> public:
> -  FormatArgAttr(int idx) : Attr(FormatArg), formatIdx(idx) {}
> +  FormatArgAttr(int idx) : Attr(attr::FormatArg), formatIdx(idx) {}
>   int getFormatIdx() const { return formatIdx; }
>
>   virtual Attr *clone(ASTContext &C) const;
>
>   // Implement isa/cast/dyncast/etc.
> -  static bool classof(const Attr *A) { return A->getKind() ==  
> FormatArg; }
> +  static bool classof(const Attr *A) { return A->getKind() ==  
> attr::FormatArg; }
>   static bool classof(const FormatArgAttr *A) { return true; }
> };
>
> class SentinelAttr : public Attr {
>   int sentinel, NullPos;
> public:
> -  SentinelAttr(int sentinel_val, int nullPos) : Attr(Sentinel),
> +  SentinelAttr(int sentinel_val, int nullPos) : Attr(attr::Sentinel),
>                sentinel(sentinel_val), NullPos(nullPos) {}
>   int getSentinel() const { return sentinel; }
>   int getNullPos() const { return NullPos; }
> @@ -454,7 +392,7 @@
>   virtual Attr *clone(ASTContext &C) const;
>
>   // Implement isa/cast/dyncast/etc.
> -  static bool classof(const Attr *A) { return A->getKind() ==  
> Sentinel; }
> +  static bool classof(const Attr *A) { return A->getKind() ==  
> attr::Sentinel; }
>   static bool classof(const SentinelAttr *A) { return true; }
> };
>
> @@ -469,7 +407,7 @@
> private:
>   VisibilityTypes VisibilityType;
> public:
> -  VisibilityAttr(VisibilityTypes v) : Attr(Visibility),
> +  VisibilityAttr(VisibilityTypes v) : Attr(attr::Visibility),
>                  VisibilityType(v) {}
>
>   VisibilityTypes getVisibility() const { return VisibilityType; }
> @@ -477,7 +415,8 @@
>   virtual Attr *clone(ASTContext &C) const;
>
>   // Implement isa/cast/dyncast/etc.
> -  static bool classof(const Attr *A) { return A->getKind() ==  
> Visibility; }
> +  static bool classof(const Attr *A)
> +    { return A->getKind() == attr::Visibility; }
>   static bool classof(const VisibilityAttr *A) { return true; }
> };
>
> @@ -491,13 +430,14 @@
>
> class OverloadableAttr : public Attr {
> public:
> -  OverloadableAttr() : Attr(Overloadable) { }
> +  OverloadableAttr() : Attr(attr::Overloadable) { }
>
>   virtual bool isMerged() const { return false; }
>
>   virtual Attr *clone(ASTContext &C) const;
>
> -  static bool classof(const Attr *A) { return A->getKind() ==  
> Overloadable; }
> +  static bool classof(const Attr *A)
> +    { return A->getKind() == attr::Overloadable; }
>   static bool classof(const OverloadableAttr *) { return true; }
> };
>
> @@ -509,14 +449,14 @@
> private:
>   BlocksAttrTypes BlocksAttrType;
> public:
> -  BlocksAttr(BlocksAttrTypes t) : Attr(Blocks), BlocksAttrType(t) {}
> +  BlocksAttr(BlocksAttrTypes t) : Attr(attr::Blocks),  
> BlocksAttrType(t) {}
>
>   BlocksAttrTypes getType() const { return BlocksAttrType; }
>
>   virtual Attr *clone(ASTContext &C) const;
>
>   // Implement isa/cast/dyncast/etc.
> -  static bool classof(const Attr *A) { return A->getKind() ==  
> Blocks; }
> +  static bool classof(const Attr *A) { return A->getKind() ==  
> attr::Blocks; }
>   static bool classof(const BlocksAttr *A) { return true; }
> };
>
> @@ -526,14 +466,14 @@
>   FunctionDecl *FD;
>
> public:
> -  CleanupAttr(FunctionDecl *fd) : Attr(Cleanup), FD(fd) {}
> +  CleanupAttr(FunctionDecl *fd) : Attr(attr::Cleanup), FD(fd) {}
>
>   const FunctionDecl *getFunctionDecl() const { return FD; }
>
>   virtual Attr *clone(ASTContext &C) const;
>
>   // Implement isa/cast/dyncast/etc.
> -  static bool classof(const Attr *A) { return A->getKind() ==  
> Cleanup; }
> +  static bool classof(const Attr *A) { return A->getKind() ==  
> attr::Cleanup; }
>   static bool classof(const CleanupAttr *A) { return true; }
> };
>
> @@ -545,14 +485,14 @@
>   unsigned NumParams;
>
> public:
> -  RegparmAttr(unsigned np) : Attr(Regparm), NumParams(np) {}
> +  RegparmAttr(unsigned np) : Attr(attr::Regparm), NumParams(np) {}
>
>   unsigned getNumParams() const { return NumParams; }
>
>   virtual Attr *clone(ASTContext &C) const;
>
>   // Implement isa/cast/dyncast/etc.
> -  static bool classof(const Attr *A) { return A->getKind() ==  
> Regparm; }
> +  static bool classof(const Attr *A) { return A->getKind() ==  
> attr::Regparm; }
>   static bool classof(const RegparmAttr *A) { return true; }
> };
>
> @@ -560,7 +500,7 @@
>   unsigned X, Y, Z;
> public:
>   ReqdWorkGroupSizeAttr(unsigned X, unsigned Y, unsigned Z)
> -  : Attr(ReqdWorkGroupSize), X(X), Y(Y), Z(Z) {}
> +  : Attr(attr::ReqdWorkGroupSize), X(X), Y(Y), Z(Z) {}
>
>   unsigned getXDim() const { return X; }
>   unsigned getYDim() const { return Y; }
> @@ -570,7 +510,7 @@
>
>   // Implement isa/cast/dyncast/etc.
>   static bool classof(const Attr *A) {
> -    return A->getKind() == ReqdWorkGroupSize;
> +    return A->getKind() == attr::ReqdWorkGroupSize;
>   }
>   static bool classof(const ReqdWorkGroupSizeAttr *A) { return true; }
> };
> @@ -581,11 +521,6 @@
> DEF_SIMPLE_ATTR(NSReturnsNotRetained);
> DEF_SIMPLE_ATTR(NSReturnsRetained);
>
> -// C++0x member checking attributes.
> -DEF_SIMPLE_ATTR(BaseCheck);
> -DEF_SIMPLE_ATTR(Hiding);
> -DEF_SIMPLE_ATTR(Override);
> -
> // Target-specific attributes
> DEF_SIMPLE_ATTR(DLLImport);
> DEF_SIMPLE_ATTR(DLLExport);
> @@ -594,14 +529,15 @@
>   unsigned Number;
>
> public:
> -  MSP430InterruptAttr(unsigned n) : Attr(MSP430Interrupt),  
> Number(n) {}
> +  MSP430InterruptAttr(unsigned n) : Attr(attr::MSP430Interrupt),  
> Number(n) {}
>
>   unsigned getNumber() const { return Number; }
>
>   virtual Attr *clone(ASTContext &C) const;
>
>   // Implement isa/cast/dyncast/etc.
> -  static bool classof(const Attr *A) { return A->getKind() ==  
> MSP430Interrupt; }
> +  static bool classof(const Attr *A)
> +    { return A->getKind() == attr::MSP430Interrupt; }
>   static bool classof(const MSP430InterruptAttr *A) { return true; }
> };
>
>
> Modified: cfe/trunk/include/clang/AST/Makefile
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Makefile?rev=106172&r1=106171&r2=106172&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- cfe/trunk/include/clang/AST/Makefile (original)
> +++ cfe/trunk/include/clang/AST/Makefile Wed Jun 16 18:43:53 2010
> @@ -1,17 +1,23 @@
> CLANG_LEVEL := ../../..
> -BUILT_SOURCES = StmtNodes.inc DeclNodes.inc
> TD_SRC_DIR = $(PROJ_SRC_DIR)/../Basic
> +BUILT_SOURCES = Attrs.inc StmtNodes.inc DeclNodes.inc
>
> TABLEGEN_INC_FILES_COMMON = 1
>
> include $(CLANG_LEVEL)/Makefile
>
> -INPUT_TDS = $(TD_SRC_DIR)/StmtNodes.td $(TD_SRC_DIR)/DeclNodes.td
> +$(ObjDir)/Attrs.inc.tmp : $(TD_SRC_DIR)/Attr.td $(TBLGEN) \
> +                              $(ObjDir)/.dir
> +	$(Echo) "Building Clang attribute classes with tblgen"
> +	$(Verb) $(TableGen) -gen-clang-attr-classes -o $(call SYSPATH, $@) \
> +		-I $(PROJ_SRC_DIR)/../../ $<
>
> -$(ObjDir)/StmtNodes.inc.tmp : $(TD_SRC_DIR)/StmtNodes.td $(TBLGEN) $ 
> (ObjDir)/.dir
> +$(ObjDir)/StmtNodes.inc.tmp : $(TD_SRC_DIR)/StmtNodes.td $(TBLGEN) \
> +                              $(ObjDir)/.dir
> 	$(Echo) "Building Clang statement node tables with tblgen"
> 	$(Verb) $(TableGen) -gen-clang-stmt-nodes -o $(call SYSPATH, $@) $<
>
> -$(ObjDir)/DeclNodes.inc.tmp : $(TD_SRC_DIR)/DeclNodes.td $(TBLGEN) $ 
> (ObjDir)/.dir
> +$(ObjDir)/DeclNodes.inc.tmp : $(TD_SRC_DIR)/DeclNodes.td $(TBLGEN) \
> +                              $(ObjDir)/.dir
> 	$(Echo) "Building Clang declaration node tables with tblgen"
> 	$(Verb) $(TableGen) -gen-clang-decl-nodes -o $(call SYSPATH, $@) $<
>
> Added: cfe/trunk/include/clang/Basic/Attr.td
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Attr.td?rev=106172&view=auto
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- cfe/trunk/include/clang/Basic/Attr.td (added)
> +++ cfe/trunk/include/clang/Basic/Attr.td Wed Jun 16 18:43:53 2010
> @@ -0,0 +1,357 @@
> + 
> ////////////////////////////////////////////////////////////////////////////////
> +// Note: This file is a work in progress. Please update it only if  
> you believe
> +// there is an obvious error; otherwise please check with Sean  
> Hunt. He can
> +// be reached at rideau3 at gmail.com.
> + 
> ////////////////////////////////////////////////////////////////////////////////
> +
> +class AttrSubject;
> +
> +include "clang/Basic/DeclNodes.td"
> +include "clang/Basic/StmtNodes.td"
> +
> +// A subset-subject is an AttrSubject constrained to operate only  
> on some subset
> +// of that subject.
> +//
> +// The description is used in output messages to specify what the  
> subject
> +// represents. FIXME: Deal with translation issues.
> +//
> +// The code fragment is a boolean expression that will confirm that  
> the subject
> +// meets the requirements; the subject will have the name S, and  
> will have the
> +// type specified by the base. It should be a simple boolean  
> expression.
> +
> +class SubsetSubject<AttrSubject base, string description, code check>
> +    : AttrSubject {
> +  AttrSubject Base = base;
> +  string Description = description;
> +  code CheckCode = check;
> +}
> +
> +def NormalVar : SubsetSubject<Var, "non-register, non-parameter  
> variable",
> +                              [{S->getStorageClass() !=  
> VarDecl::Register &&
> +                                S->getKind() != Decl::ImplicitParam
> +                                S->getKind() != Decl::ParmVar
> +                                S->getKind() !=  
> Decl::NonTypeTemplateParm}]>;
> +def CXXVirtualMethod : SubsetSubject<CXXRecord, "virtual member  
> function",
> +                                     [{S->isVirtual()}]>;
> +def NonBitField : SubsetSubject<Field, "non-bit field",
> +                                [{!S->isBitField()}]>;
> +
> +class Argument<string name> {
> +  string Name = name;
> +}
> +
> +class IdentifierArgument<string name> : Argument<name>;
> +class IntArgument<string name> : Argument<name>;
> +class StringArgument<string name> : Argument<name>;
> +class ExprArgument<string name> : Argument<name>;
> +class FunctionArgument<string name> : Argument<name>;
> +class ObjCInterfaceArgument<string name> : Argument<name>;
> +class UnsignedIntArgument<string name> : Argument<name>;
> +class UnsignedIntOrTypeArgument<string name> : Argument<name>;
> +
> +class DefaultIntArgument<string name, int default> :  
> IntArgument<name> {
> +  int Default = default;
> +}
> +
> +class VariadicArgument<Argument arg> : Argument<arg.Name> {
> +  Argument VariadicArg = arg;
> +}
> +
> +class Attr {
> +  list<string> Spellings;
> +  list<AttrSubject> Subjects;
> +  list<Argument> Args = [];
> +  list<string> Namespaces = [];
> +  list<string> Aliases = [];
> +  bit DoNotEmit = 1;
> +}
> +
> +//
> +// Attributes begin here
> +//
> +
> +def Alias : Attr {
> +  let Spellings = ["alias"];
> +  let Args = [StringArgument<"AliasName">];
> +}
> +
> +def Aligned : Attr {
> +  let Spellings = ["align", "aligned"];
> +  let Subjects = [NonBitField, NormalVar, Tag];
> +  let Args = [UnsignedIntOrTypeArgument<"Alignment">];
> +  let Namespaces = ["", "std"];
> +}
> +
> +def AlignMac68k : Attr {
> +  let Spellings = [];
> +}
> +
> +def AlwaysInline : Attr {
> +  let Spellings = ["always_inline"];
> +}
> +
> +def AnalyzerNoReturn : Attr {
> +  let Spellings = ["analyzer_noreturn"];
> +}
> +
> +def Annotate : Attr {
> +  let Spellings = ["annotate"];
> +  let Args = [StringArgument<"Annotation">];
> +}
> +
> +def AsmLabel : Attr {
> +  let Spellings = [];
> +  let Args = [StringArgument<"Label">];
> +}
> +
> +def BaseCheck : Attr {
> +  let Spellings = ["base_check"];
> +  let Subjects = [CXXRecord];
> +  let Namespaces = ["", "std"];
> +  let DoNotEmit = 0;
> +}
> +
> +def Blocks : Attr {
> +  let Spellings = ["blocks"];
> +  let Args = [IdentifierArgument<"Type">];
> +}
> +
> +def CarriesDependency : Attr {
> +  let Spellings = ["carries_dependency"];
> +  let Subjects = [ParmVar, Function];
> +  let Namespaces = ["", "std"];
> +  let DoNotEmit = 0;
> +}
> +
> +def CDecl : Attr {
> +  let Spellings = ["cdecl", "__cdecl"];
> +}
> +
> +def CFReturnsRetained : Attr {
> +  let Spellings = ["cf_returns_retained"];
> +}
> +
> +def CFReturnsNotRetained : Attr {
> +  let Spellings = ["cf_returns_not_retained"];
> +}
> +
> +def Cleanup : Attr {
> +  let Spellings = ["cleanup"];
> +  let Args = [FunctionArgument<"FunctionDecl">];
> +}
> +
> +def Const : Attr {
> +  let Spellings = ["const"];
> +}
> +
> +def Constructor : Attr {
> +  let Spellings = ["constructor"];
> +  let Args = [IntArgument<"Priority">];
> +}
> +
> +def Deprecated : Attr {
> +  let Spellings = ["deprecated"];
> +}
> +
> +def Destructor : Attr {
> +  let Spellings = ["destructor"];
> +  let Args = [IntArgument<"Priority">];
> +}
> +
> +def DLLExport : Attr {
> +  let Spellings = ["dllexport"];
> +}
> +
> +def DLLImport : Attr {
> +  let Spellings = ["dllimport"];
> +}
> +
> +def FastCall : Attr {
> +  let Spellings = ["fastcall", "__fastcall"];
> +}
> +
> +def Final : Attr {
> +  let Spellings = ["final"];
> +  let Subjects = [CXXRecord, CXXVirtualMethod];
> +  let Namespaces = ["", "std"];
> +  let DoNotEmit = 0;
> +}
> +
> +def Format : Attr {
> +  let Spellings = ["format"];
> +  let Args = [StringArgument<"Type">, IntArgument<"FormatIdx">,
> +              IntArgument<"FirstArg">];
> +}
> +
> +def FormatArg : Attr {
> +  let Spellings = ["format_arg"];
> +  let Args = [IntArgument<"FormatIdx">];
> +}
> +
> +def GNUInline : Attr {
> +  let Spellings = ["gnu_inline"];
> +}
> +
> +def Hiding : Attr {
> +  let Spellings = ["hiding"];
> +  let Subjects = [Field, CXXMethod];
> +  let Namespaces = ["", "std"];
> +  let DoNotEmit = 0;
> +}
> +
> +def IBAction : Attr {
> +  let Spellings = ["ibaction"];
> +}
> +
> +def IBOutlet : Attr {
> +  let Spellings = ["iboutlet"];
> +}
> +
> +def IBOutletCollection : Attr {
> +  let Spellings = ["iboutletcollection"];
> +  let Args = [ObjCInterfaceArgument<"Class">];
> +}
> +
> +def Malloc : Attr {
> +  let Spellings = ["malloc"];
> +}
> +
> +def MaxFieldAlignment : Attr {
> +  let Spellings = [];
> +  let Args = [UnsignedIntArgument<"Alignment">];
> +}
> +
> +def MSP430Interrupt : Attr {
> +  let Spellings = [];
> +  let Args = [UnsignedIntArgument<"Number">];
> +}
> +
> +def NoDebug : Attr {
> +  let Spellings = ["nodebug"];
> +}
> +
> +def NoInline : Attr {
> +  let Spellings = ["noinline"];
> +}
> +
> +def NonNull : Attr {
> +  let Spellings = ["nonnull"];
> +  let Args = [VariadicArgument<UnsignedIntArgument<"Args">>];
> +}
> +
> +def NoReturn : Attr {
> +  let Spellings = ["noreturn"];
> +  // FIXME: Does GCC allow this on the function instead?
> +  let Subjects = [Function];
> +  let Namespaces = ["", "std"];
> +}
> +
> +def NoThrow : Attr {
> +  let Spellings = ["nothrow"];
> +}
> +
> +def NSReturnsRetained : Attr {
> +  let Spellings = ["ns_returns_retained"];
> +}
> +
> +def NSReturnsNotRetained : Attr {
> +  let Spellings = ["ns_returns_not_retained"];
> +}
> +
> +def ObjCException : Attr {
> +  let Spellings = ["objc_exception"];
> +}
> +
> +def ObjCNSObject : Attr {
> +  let Spellings = ["NSOjbect"];
> +}
> +
> +def Override : Attr {
> +  let Spellings = ["override"];
> +  let Subjects = [CXXVirtualMethod];
> +  let Namespaces = ["", "std"];
> +  let DoNotEmit = 0;
> +}
> +
> +def Overloadable : Attr {
> +  let Spellings = ["overloadable"];
> +}
> +
> +def Packed : Attr {
> +  let Spellings = ["packed"];
> +}
> +
> +def Pure : Attr {
> +  let Spellings = ["pure"];
> +}
> +
> +def Regparm : Attr {
> +  let Spellings = ["regparm"];
> +  let Args = [UnsignedIntArgument<"NumParams">];
> +}
> +
> +def ReqdWorkGroupSize : Attr {
> +  let Spellings = ["reqd_work_group_size"];
> +  let Args = [UnsignedIntArgument<"XDim">,  
> UnsignedIntArgument<"YDim">,
> +              UnsignedIntArgument<"ZDim">];
> +}
> +
> +def Section : Attr {
> +  let Spellings = ["section"];
> +  let Args = [StringArgument<"Name">];
> +}
> +
> +def Sentinel : Attr {
> +  let Spellings = ["sentinel"];
> +  let Args = [DefaultIntArgument<"NulPos", 0>,
> +              DefaultIntArgument<"Sentinel", 0>];
> +}
> +
> +def StdCall : Attr {
> +  let Spellings = ["stdcall", "__stdcall"];
> +}
> +
> +def ThisCall : Attr {
> +  let Spellings = ["thiscall", "__thiscall"];
> +}
> +
> +def TransparentUnion : Attr {
> +  let Spellings = ["transparent_union"];
> +}
> +
> +def Unavailable : Attr {
> +  let Spellings = ["unavailable"];
> +}
> +
> +def Unused : Attr {
> +  let Spellings = ["unused"];
> +}
> +
> +def Used : Attr {
> +  let Spellings = ["used"];
> +}
> +
> +def Visibility : Attr {
> +  let Spellings = ["visibility"];
> +  let Args = [StringArgument<"Visibility">];
> +}
> +
> +def WarnUnusedResult : Attr {
> +  let Spellings = ["warn_unused_result"];
> +}
> +
> +def Weak : Attr {
> +  let Spellings = ["weak"];
> +}
> +
> +def WeakImport : Attr {
> +  let Spellings = ["weak_import"];
> +}
> +
> +def WeakRef : Attr {
> +  let Spellings = ["weakref"];
> +}
> +
> +def X86ForceAlignArgPointer : Attr {
> +  let Spellings = [];
> +}
>
> Added: cfe/trunk/include/clang/Basic/AttrKinds.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/AttrKinds.h?rev=106172&view=auto
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- cfe/trunk/include/clang/Basic/AttrKinds.h (added)
> +++ cfe/trunk/include/clang/Basic/AttrKinds.h Wed Jun 16 18:43:53 2010
> @@ -0,0 +1,31 @@
> +//===----- Attr.h - Enum values for C Attribute Kinds ----------*- C 
> ++ -*-===//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open  
> Source
> +// License. See LICENSE.TXT for details.
> +//
> +// 
> = 
> = 
> = 
> ----------------------------------------------------------------------= 
> ==//
> +//
> +//  This file defines the attr::Kind enum
> +//
> +// 
> = 
> = 
> = 
> ----------------------------------------------------------------------= 
> ==//
> +
> +#ifndef LLVM_CLANG_ATTRKINDS_H
> +#define LLVM_CLANG_ATTRKINDS_H
> +
> +namespace clang {
> +
> +namespace attr {
> +
> +// Kind - This is a list of all the recognized kinds of attributes.
> +enum Kind {
> +#define ATTR(X) X,
> +#include "clang/Basic/AttrList.inc"
> +  NUM_ATTRS
> +};
> +
> +} // end namespace attr
> +} // end namespace clang
> +
> +#endif
>
> Modified: cfe/trunk/include/clang/Basic/DeclNodes.td
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DeclNodes.td?rev=106172&r1=106171&r2=106172&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- cfe/trunk/include/clang/Basic/DeclNodes.td (original)
> +++ cfe/trunk/include/clang/Basic/DeclNodes.td Wed Jun 16 18:43:53  
> 2010
> @@ -1,4 +1,6 @@
> -class Decl<bit abstract = 0> {
> +class AttrSubject;
> +
> +class Decl<bit abstract = 0> : AttrSubject {
>   bit Abstract = abstract;
> }
>
>
> Modified: cfe/trunk/include/clang/Basic/Makefile
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Makefile?rev=106172&r1=106171&r2=106172&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- cfe/trunk/include/clang/Basic/Makefile (original)
> +++ cfe/trunk/include/clang/Basic/Makefile Wed Jun 16 18:43:53 2010
> @@ -3,7 +3,7 @@
> 	DiagnosticCommonKinds.inc DiagnosticDriverKinds.inc \
> 	DiagnosticFrontendKinds.inc DiagnosticLexKinds.inc \
> 	DiagnosticParseKinds.inc DiagnosticSemaKinds.inc \
> -        DiagnosticGroups.inc
> +        DiagnosticGroups.inc AttrList.inc
>
> TABLEGEN_INC_FILES_COMMON = 1
>
> @@ -19,4 +19,7 @@
> 	$(Echo) "Building Clang diagnostic groups with tblgen"
> 	$(Verb) $(TableGen) -gen-clang-diag-groups -o $(call SYSPATH, $@) $<
>
> -
> +$(ObjDir)/AttrList.inc.tmp : Attr.td $(TBLGEN) $(ObjDir)/.dir
> +	$(Echo) "Building Clang attribute list with tblgen"
> +	$(Verb) $(TableGen) -gen-clang-attr-list -o $(call SYSPATH, $@) \
> +	  -I $(PROJ_SRC_DIR)/../.. $<
>
> Modified: cfe/trunk/include/clang/Basic/StmtNodes.td
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/StmtNodes.td?rev=106172&r1=106171&r2=106172&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- cfe/trunk/include/clang/Basic/StmtNodes.td (original)
> +++ cfe/trunk/include/clang/Basic/StmtNodes.td Wed Jun 16 18:43:53  
> 2010
> @@ -1,4 +1,6 @@
> -class Stmt<bit abstract = 0> {
> +class AttrSubject;
> +
> +class Stmt<bit abstract = 0> : AttrSubject {
>   bit Abstract = abstract;
> }
>
>
> Modified: cfe/trunk/lib/AST/AttrImpl.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/AttrImpl.cpp?rev=106172&r1=106171&r2=106172&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- cfe/trunk/lib/AST/AttrImpl.cpp (original)
> +++ cfe/trunk/lib/AST/AttrImpl.cpp Wed Jun 16 18:43:53 2010
> @@ -24,7 +24,7 @@
>   C.Deallocate((void*)this);
> }
>
> -AttrWithString::AttrWithString(Attr::Kind AK, ASTContext &C,  
> llvm::StringRef s)
> +AttrWithString::AttrWithString(attr::Kind AK, ASTContext &C,  
> llvm::StringRef s)
>   : Attr(AK) {
>   assert(!s.empty());
>   StrLen = s.size();
> @@ -51,7 +51,7 @@
> }
>
> NonNullAttr::NonNullAttr(ASTContext &C, unsigned* arg_nums, unsigned  
> size)
> -  : Attr(NonNull), ArgNums(0), Size(0) {
> +  : Attr(attr::NonNull), ArgNums(0), Size(0) {
>   if (size == 0)
>     return;
>   assert(arg_nums);
>
> Modified: cfe/trunk/lib/Frontend/PCHReaderDecl.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/PCHReaderDecl.cpp?rev=106172&r1=106171&r2=106172&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- cfe/trunk/lib/Frontend/PCHReaderDecl.cpp (original)
> +++ cfe/trunk/lib/Frontend/PCHReaderDecl.cpp Wed Jun 16 18:43:53 2010
> @@ -679,24 +679,24 @@
>   (void)RecCode;
>
> #define SIMPLE_ATTR(Name)                       \
> - case Attr::Name:                               \
> + case attr::Name:                               \
>    New = ::new (*Context) Name##Attr();         \
>    break
>
> #define STRING_ATTR(Name)                                       \
> - case Attr::Name:                                               \
> + case attr::Name:                                               \
>    New = ::new (*Context) Name##Attr(*Context, ReadString(Record,  
> Idx));  \
>    break
>
> #define UNSIGNED_ATTR(Name)                             \
> - case Attr::Name:                                       \
> + case attr::Name:                                       \
>    New = ::new (*Context) Name##Attr(Record[Idx++]);    \
>    break
>
>   Attr *Attrs = 0;
>   while (Idx < Record.size()) {
>     Attr *New = 0;
> -    Attr::Kind Kind = (Attr::Kind)Record[Idx++];
> +    attr::Kind Kind = (attr::Kind)Record[Idx++];
>     bool IsInherited = Record[Idx++];
>
>     switch (Kind) {
> @@ -712,14 +712,14 @@
>     STRING_ATTR(AsmLabel);
>     SIMPLE_ATTR(BaseCheck);
>
> -    case Attr::Blocks:
> +    case attr::Blocks:
>       New = ::new (*Context) BlocksAttr(
>                                    
> (BlocksAttr::BlocksAttrTypes)Record[Idx++]);
>       break;
>
>     SIMPLE_ATTR(CDecl);
>
> -    case Attr::Cleanup:
> +    case attr::Cleanup:
>       New = ::new (*Context) CleanupAttr(
>                                    
> cast<FunctionDecl>(GetDecl(Record[Idx++])));
>       break;
> @@ -733,7 +733,7 @@
>     SIMPLE_ATTR(FastCall);
>     SIMPLE_ATTR(Final);
>
> -    case Attr::Format: {
> +    case attr::Format: {
>       std::string Type = ReadString(Record, Idx);
>       unsigned FormatIdx = Record[Idx++];
>       unsigned FirstArg = Record[Idx++];
> @@ -741,13 +741,13 @@
>       break;
>     }
>
> -    case Attr::FormatArg: {
> +    case attr::FormatArg: {
>       unsigned FormatIdx = Record[Idx++];
>       New = ::new (*Context) FormatArgAttr(FormatIdx);
>       break;
>     }
>
> -    case Attr::Sentinel: {
> +    case attr::Sentinel: {
>       int sentinel = Record[Idx++];
>       int nullPos = Record[Idx++];
>       New = ::new (*Context) SentinelAttr(sentinel, nullPos);
> @@ -757,15 +757,15 @@
>     SIMPLE_ATTR(GNUInline);
>     SIMPLE_ATTR(Hiding);
>
> -    case Attr::IBActionKind:
> +    case attr::IBAction:
>       New = ::new (*Context) IBActionAttr();
>       break;
>
> -    case Attr::IBOutletKind:
> +    case attr::IBOutlet:
>       New = ::new (*Context) IBOutletAttr();
>       break;
>
> -    case Attr::IBOutletCollectionKind: {
> +    case attr::IBOutletCollection: {
>       ObjCInterfaceDecl *D =
>         cast_or_null<ObjCInterfaceDecl>(GetDecl(Record[Idx++]));
>       New = ::new (*Context) IBOutletCollectionAttr(D);
> @@ -778,7 +778,7 @@
>     SIMPLE_ATTR(NoReturn);
>     SIMPLE_ATTR(NoThrow);
>
> -    case Attr::NonNull: {
> +    case attr::NonNull: {
>       unsigned Size = Record[Idx++];
>       llvm::SmallVector<unsigned, 16> ArgNums;
>       ArgNums.insert(ArgNums.end(), &Record[Idx], &Record[Idx] +  
> Size);
> @@ -787,7 +787,7 @@
>       break;
>     }
>
> -    case Attr::ReqdWorkGroupSize: {
> +    case attr::ReqdWorkGroupSize: {
>       unsigned X = Record[Idx++];
>       unsigned Y = Record[Idx++];
>       unsigned Z = Record[Idx++];
> @@ -815,7 +815,7 @@
>     SIMPLE_ATTR(Unused);
>     SIMPLE_ATTR(Used);
>
> -    case Attr::Visibility:
> +    case attr::Visibility:
>       New = ::new (*Context) VisibilityAttr(
>                                
> (VisibilityAttr::VisibilityTypes)Record[Idx++]);
>       break;
>
> Modified: cfe/trunk/lib/Frontend/PCHWriter.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/PCHWriter.cpp?rev=106172&r1=106171&r2=106172&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- cfe/trunk/lib/Frontend/PCHWriter.cpp (original)
> +++ cfe/trunk/lib/Frontend/PCHWriter.cpp Wed Jun 16 18:43:53 2010
> @@ -1842,66 +1842,66 @@
>     default:
>       assert(0 && "Does not support PCH writing for this attribute  
> yet!");
>       break;
> -    case Attr::Alias:
> +    case attr::Alias:
>       AddString(cast<AliasAttr>(Attr)->getAliasee(), Record);
>       break;
>
> -    case Attr::AlignMac68k:
> +    case attr::AlignMac68k:
>       break;
>
> -    case Attr::Aligned:
> +    case attr::Aligned:
>       Record.push_back(cast<AlignedAttr>(Attr)->getAlignment());
>       break;
>
> -    case Attr::AlwaysInline:
> +    case attr::AlwaysInline:
>       break;
>
> -    case Attr::AnalyzerNoReturn:
> +    case attr::AnalyzerNoReturn:
>       break;
>
> -    case Attr::Annotate:
> +    case attr::Annotate:
>       AddString(cast<AnnotateAttr>(Attr)->getAnnotation(), Record);
>       break;
>
> -    case Attr::AsmLabel:
> +    case attr::AsmLabel:
>       AddString(cast<AsmLabelAttr>(Attr)->getLabel(), Record);
>       break;
>
> -    case Attr::BaseCheck:
> +    case attr::BaseCheck:
>       break;
>
> -    case Attr::Blocks:
> +    case attr::Blocks:
>       Record.push_back(cast<BlocksAttr>(Attr)->getType()); // FIXME:  
> stable
>       break;
>
> -    case Attr::CDecl:
> +    case attr::CDecl:
>       break;
>
> -    case Attr::Cleanup:
> +    case attr::Cleanup:
>       AddDeclRef(cast<CleanupAttr>(Attr)->getFunctionDecl(), Record);
>       break;
>
> -    case Attr::Const:
> +    case attr::Const:
>       break;
>
> -    case Attr::Constructor:
> +    case attr::Constructor:
>       Record.push_back(cast<ConstructorAttr>(Attr)->getPriority());
>       break;
>
> -    case Attr::DLLExport:
> -    case Attr::DLLImport:
> -    case Attr::Deprecated:
> +    case attr::DLLExport:
> +    case attr::DLLImport:
> +    case attr::Deprecated:
>       break;
>
> -    case Attr::Destructor:
> +    case attr::Destructor:
>       Record.push_back(cast<DestructorAttr>(Attr)->getPriority());
>       break;
>
> -    case Attr::FastCall:
> -    case Attr::Final:
> +    case attr::FastCall:
> +    case attr::Final:
>       break;
>
> -    case Attr::Format: {
> +    case attr::Format: {
>       const FormatAttr *Format = cast<FormatAttr>(Attr);
>       AddString(Format->getType(), Record);
>       Record.push_back(Format->getFormatIdx());
> @@ -1909,93 +1909,93 @@
>       break;
>     }
>
> -    case Attr::FormatArg: {
> +    case attr::FormatArg: {
>       const FormatArgAttr *Format = cast<FormatArgAttr>(Attr);
>       Record.push_back(Format->getFormatIdx());
>       break;
>     }
>
> -    case Attr::Sentinel : {
> +    case attr::Sentinel : {
>       const SentinelAttr *Sentinel = cast<SentinelAttr>(Attr);
>       Record.push_back(Sentinel->getSentinel());
>       Record.push_back(Sentinel->getNullPos());
>       break;
>     }
>
> -    case Attr::GNUInline:
> -    case Attr::Hiding:
> -    case Attr::IBActionKind:
> -    case Attr::IBOutletKind:
> -    case Attr::Malloc:
> -    case Attr::NoDebug:
> -    case Attr::NoInline:
> -    case Attr::NoReturn:
> -    case Attr::NoThrow:
> +    case attr::GNUInline:
> +    case attr::Hiding:
> +    case attr::IBAction:
> +    case attr::IBOutlet:
> +    case attr::Malloc:
> +    case attr::NoDebug:
> +    case attr::NoInline:
> +    case attr::NoReturn:
> +    case attr::NoThrow:
>       break;
>
> -    case Attr::IBOutletCollectionKind: {
> +    case attr::IBOutletCollection: {
>       const IBOutletCollectionAttr *ICA =  
> cast<IBOutletCollectionAttr>(Attr);
>       AddDeclRef(ICA->getClass(), Record);
>       break;
>     }
>
> -    case Attr::NonNull: {
> +    case attr::NonNull: {
>       const NonNullAttr *NonNull = cast<NonNullAttr>(Attr);
>       Record.push_back(NonNull->size());
>       Record.insert(Record.end(), NonNull->begin(), NonNull->end());
>       break;
>     }
>
> -    case Attr::CFReturnsNotRetained:
> -    case Attr::CFReturnsRetained:
> -    case Attr::NSReturnsNotRetained:
> -    case Attr::NSReturnsRetained:
> -    case Attr::ObjCException:
> -    case Attr::ObjCNSObject:
> -    case Attr::Overloadable:
> -    case Attr::Override:
> +    case attr::CFReturnsNotRetained:
> +    case attr::CFReturnsRetained:
> +    case attr::NSReturnsNotRetained:
> +    case attr::NSReturnsRetained:
> +    case attr::ObjCException:
> +    case attr::ObjCNSObject:
> +    case attr::Overloadable:
> +    case attr::Override:
>       break;
>
> -    case Attr::MaxFieldAlignment:
> +    case attr::MaxFieldAlignment:
>       Record.push_back(cast<MaxFieldAlignmentAttr>(Attr)- 
> >getAlignment());
>       break;
>
> -    case Attr::Packed:
> +    case attr::Packed:
>       break;
>
> -    case Attr::Pure:
> +    case attr::Pure:
>       break;
>
> -    case Attr::Regparm:
> +    case attr::Regparm:
>       Record.push_back(cast<RegparmAttr>(Attr)->getNumParams());
>       break;
>
> -    case Attr::ReqdWorkGroupSize:
> +    case attr::ReqdWorkGroupSize:
>       Record.push_back(cast<ReqdWorkGroupSizeAttr>(Attr)->getXDim());
>       Record.push_back(cast<ReqdWorkGroupSizeAttr>(Attr)->getYDim());
>       Record.push_back(cast<ReqdWorkGroupSizeAttr>(Attr)->getZDim());
>       break;
>
> -    case Attr::Section:
> +    case attr::Section:
>       AddString(cast<SectionAttr>(Attr)->getName(), Record);
>       break;
>
> -    case Attr::StdCall:
> -    case Attr::TransparentUnion:
> -    case Attr::Unavailable:
> -    case Attr::Unused:
> -    case Attr::Used:
> +    case attr::StdCall:
> +    case attr::TransparentUnion:
> +    case attr::Unavailable:
> +    case attr::Unused:
> +    case attr::Used:
>       break;
>
> -    case Attr::Visibility:
> +    case attr::Visibility:
>       // FIXME: stable encoding
>       Record.push_back(cast<VisibilityAttr>(Attr)->getVisibility());
>       break;
>
> -    case Attr::WarnUnusedResult:
> -    case Attr::Weak:
> -    case Attr::WeakRef:
> -    case Attr::WeakImport:
> +    case attr::WarnUnusedResult:
> +    case attr::Weak:
> +    case attr::WeakRef:
> +    case attr::WeakImport:
>       break;
>     }
>   }
>
> Modified: cfe/trunk/tools/libclang/CXCursor.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CXCursor.cpp?rev=106172&r1=106171&r2=106172&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- cfe/trunk/tools/libclang/CXCursor.cpp (original)
> +++ cfe/trunk/tools/libclang/CXCursor.cpp Wed Jun 16 18:43:53 2010
> @@ -78,9 +78,9 @@
>   assert(A && "Invalid arguments!");
>   switch (A->getKind()) {
>     default: break;
> -    case Attr::IBActionKind: return CXCursor_IBActionAttr;
> -    case Attr::IBOutletKind: return CXCursor_IBOutletAttr;
> -    case Attr::IBOutletCollectionKind: return  
> CXCursor_IBOutletCollectionAttr;
> +    case attr::IBAction: return CXCursor_IBActionAttr;
> +    case attr::IBOutlet: return CXCursor_IBOutletAttr;
> +    case attr::IBOutletCollection: return  
> CXCursor_IBOutletCollectionAttr;
>   }
>
>   return CXCursor_UnexposedAttr;
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits




More information about the cfe-commits mailing list