diff options
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/AST/DeclCXX.cpp | 14 | ||||
| -rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 2 | 
2 files changed, 10 insertions, 6 deletions
| 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. | 

