diff options
-rw-r--r-- | include/clang/AST/DeclBase.h | 9 | ||||
-rw-r--r-- | lib/AST/DeclBase.cpp | 6 |
2 files changed, 9 insertions, 6 deletions
diff --git a/include/clang/AST/DeclBase.h b/include/clang/AST/DeclBase.h index 86d96a5b1c..abf5404882 100644 --- a/include/clang/AST/DeclBase.h +++ b/include/clang/AST/DeclBase.h @@ -180,7 +180,10 @@ public: bool hasAttrs() const { return HasAttrs; } void addAttr(Attr *attr); - const Attr *getAttrs() const; + const Attr *getAttrs() const { + if (!HasAttrs) return 0; // common case, no attributes. + return getAttrsImpl(); // Uncommon case, out of line hash lookup. + } void swapAttrs(Decl *D); void invalidateAttrs(); @@ -188,7 +191,6 @@ public: for (const Attr *attr = getAttrs(); attr; attr = attr->getNext()) if (const T *V = dyn_cast<T>(attr)) return V; - return 0; } @@ -326,6 +328,9 @@ protected: // FIXME: This will eventually be a pure virtual function. assert (false && "Not implemented."); } +private: + const Attr *getAttrsImpl() const; + }; /// PrettyStackTraceDecl - If a crash occurs, indicate that it happened when diff --git a/lib/AST/DeclBase.cpp b/lib/AST/DeclBase.cpp index 1e7ef549b4..812c362acd 100644 --- a/lib/AST/DeclBase.cpp +++ b/lib/AST/DeclBase.cpp @@ -171,10 +171,8 @@ void Decl::invalidateAttrs() { } } -const Attr *Decl::getAttrs() const { - if (!HasAttrs) - return 0; - +const Attr *Decl::getAttrsImpl() const { + assert(HasAttrs && "getAttrs() should verify this!"); return (*DeclAttrs)[this]; } |