diff options
| author | Fariborz Jahanian <fjahanian@apple.com> | 2009-07-02 18:26:15 +0000 | 
|---|---|---|
| committer | Fariborz Jahanian <fjahanian@apple.com> | 2009-07-02 18:26:15 +0000 | 
| commit | 9fa077c6263be3379eb7650dbec02feb6395330c (patch) | |
| tree | ec9350d7c863e7a6acbabb0093f331b0352e1d32 | |
| parent | df67d426d9cd967a1a2a89610fd4b8d719a78a48 (diff) | |
| download | bcm5719-llvm-9fa077c6263be3379eb7650dbec02feb6395330c.tar.gz bcm5719-llvm-9fa077c6263be3379eb7650dbec02feb6395330c.zip  | |
Patch to allocate list of bases in CXXRecordDecl
using ASTContxt allocation.
llvm-svn: 74717
| -rw-r--r-- | clang/include/clang/AST/DeclCXX.h | 5 | ||||
| -rw-r--r-- | clang/lib/AST/DeclCXX.cpp | 14 | ||||
| -rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 2 | 
3 files changed, 14 insertions, 7 deletions
diff --git a/clang/include/clang/AST/DeclCXX.h b/clang/include/clang/AST/DeclCXX.h index a6e55ea65ab..c523e96e03b 100644 --- a/clang/include/clang/AST/DeclCXX.h +++ b/clang/include/clang/AST/DeclCXX.h @@ -297,8 +297,11 @@ public:                                 CXXRecordDecl* PrevDecl=0,                                 bool DelayTypeCreation = false); +  virtual void Destroy(ASTContext& C); +      /// setBases - Sets the base classes of this struct or class. -  void setBases(CXXBaseSpecifier const * const *Bases, unsigned NumBases); +  void setBases(ASTContext &C, +                CXXBaseSpecifier const * const *Bases, unsigned NumBases);    /// getNumBases - Retrieves the number of base classes of this    /// class. diff --git a/clang/lib/AST/DeclCXX.cpp b/clang/lib/AST/DeclCXX.cpp index 9bdf07b29e5..b8b29528066 100644 --- a/clang/lib/AST/DeclCXX.cpp +++ b/clang/lib/AST/DeclCXX.cpp @@ -44,11 +44,16 @@ CXXRecordDecl *CXXRecordDecl::Create(ASTContext &C, TagKind TK, DeclContext *DC,  }  CXXRecordDecl::~CXXRecordDecl() { -  delete [] Bases; +} + +void CXXRecordDecl::Destroy(ASTContext &C) { +  C.Deallocate(Bases); +  this->RecordDecl::Destroy(C);  }  void  -CXXRecordDecl::setBases(CXXBaseSpecifier const * const *Bases,  +CXXRecordDecl::setBases(ASTContext &C, +                        CXXBaseSpecifier const * const *Bases,                           unsigned NumBases) {    // C++ [dcl.init.aggr]p1:     //   An aggregate is an array or a class (clause 9) with [...] @@ -56,10 +61,9 @@ CXXRecordDecl::setBases(CXXBaseSpecifier const * const *Bases,    Aggregate = false;    if (this->Bases) -    delete [] this->Bases; +    C.Deallocate(this->Bases); -  // FIXME: allocate using the ASTContext -  this->Bases = new CXXBaseSpecifier[NumBases]; +  this->Bases = new(C) CXXBaseSpecifier [NumBases];    this->NumBases = NumBases;    for (unsigned i = 0; i < NumBases; ++i)      this->Bases[i] = *Bases[i]; diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index bef63a16d6c..d0357622620 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -481,7 +481,7 @@ bool Sema::AttachBaseSpecifiers(CXXRecordDecl *Class, CXXBaseSpecifier **Bases,    }    // Attach the remaining base class specifiers to the derived class. -  Class->setBases(Bases, NumGoodBases); +  Class->setBases(Context, Bases, NumGoodBases);    // Delete the remaining (good) base class specifiers, since their    // data has been copied into the CXXRecordDecl.  | 

