From: Fariborz Jahanian Date: Wed, 22 Jul 2009 00:42:46 +0000 (+0000) Subject: Minor mod. per Doug's comment. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cf1831204b2b575fc57b851172f0426559ae482c;p=clang Minor mod. per Doug's comment. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@76708 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/AST/DeclCXX.h b/include/clang/AST/DeclCXX.h index 14a3bd7121..ffacc0e1f3 100644 --- a/include/clang/AST/DeclCXX.h +++ b/include/clang/AST/DeclCXX.h @@ -890,6 +890,12 @@ public: /// }; /// @endcode class CXXDestructorDecl : public CXXMethodDecl { + enum KindOfObjectToDestroy { + VBASE = 0x1, + DRCTNONVBASE = 0x2, + ANYBASE = 0x3 + }; + /// ImplicitlyDefined - Whether this destructor was implicitly /// defined by the compiler. When false, the destructor was defined /// by the user. In C++03, this flag will have the same value as @@ -900,7 +906,10 @@ class CXXDestructorDecl : public CXXMethodDecl { /// Support for base and member destruction. /// BaseOrMemberDestructions - The arguments used to destruct the base - /// or member. + /// or member. Each uintptr_t value represents one of base classes (either + /// virtual or direct non-virtual base), or non-static data member + /// to be destroyed. The low two bits encode the kind of object + /// being destroyed. uintptr_t *BaseOrMemberDestructions; unsigned NumBaseOrMemberDestructions; @@ -975,21 +984,21 @@ public: /// isVbaseToDestroy - returns true, if object is virtual base. bool isVbaseToDestroy(uintptr_t Vbase) const { - return (Vbase & 0x1) != 0; + return (Vbase & VBASE) != 0; } /// isDirectNonVBaseToDestroy - returns true, if object is direct non-virtual /// base. bool isDirectNonVBaseToDestroy(uintptr_t DrctNonVbase) const { - return (DrctNonVbase & 0x2) != 0; + return (DrctNonVbase & DRCTNONVBASE) != 0; } /// isAnyBaseToDestroy - returns true, if object is any base (virtual or /// direct non-virtual) bool isAnyBaseToDestroy(uintptr_t AnyBase) const { - return (AnyBase & 0x3) != 0; + return (AnyBase & ANYBASE) != 0; } /// isMemberToDestroy - returns true if object is a non-static data member. bool isMemberToDestroy(uintptr_t Member) const { - return (Member & 0x3) == 0; + return (Member & ANYBASE) == 0; } /// getAnyBaseClassToDestroy - Get the type for the given base class object. Type *getAnyBaseClassToDestroy(uintptr_t Base) const { diff --git a/lib/AST/DeclCXX.cpp b/lib/AST/DeclCXX.cpp index 2f8a1ebd7e..7ba2394b04 100644 --- a/lib/AST/DeclCXX.cpp +++ b/lib/AST/DeclCXX.cpp @@ -498,7 +498,7 @@ CXXDestructorDecl::computeBaseOrMembersToDestroy(ASTContext &C) { if (BaseClassDecl->hasTrivialDestructor()) continue; uintptr_t Member = - reinterpret_cast(VBase->getType().getTypePtr()) | 0x1; + reinterpret_cast(VBase->getType().getTypePtr()) | VBASE; AllToDestruct.push_back(Member); } for (CXXRecordDecl::base_class_iterator Base = @@ -513,7 +513,7 @@ CXXDestructorDecl::computeBaseOrMembersToDestroy(ASTContext &C) { continue; uintptr_t Member = - reinterpret_cast(Base->getType().getTypePtr()) | 0x2; + reinterpret_cast(Base->getType().getTypePtr()) | DRCTNONVBASE; AllToDestruct.push_back(Member); }