aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2009-07-02 18:26:15 +0000
committerFariborz Jahanian <fjahanian@apple.com>2009-07-02 18:26:15 +0000
commit5ffcd7b1ba8bfcb253f0a0bdf7c94c4d0270a4ab (patch)
tree0f13bf513ffb47533e29c13c7cbb5d7f53ef12ef
parent1508636e99faddf569a57fce82c0fb3aa2124396 (diff)
Patch to allocate list of bases in CXXRecordDecl
using ASTContxt allocation. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@74717 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/clang/AST/DeclCXX.h5
-rw-r--r--lib/AST/DeclCXX.cpp14
-rw-r--r--lib/Sema/SemaDeclCXX.cpp2
3 files changed, 14 insertions, 7 deletions
diff --git a/include/clang/AST/DeclCXX.h b/include/clang/AST/DeclCXX.h
index a6e55ea65a..c523e96e03 100644
--- a/include/clang/AST/DeclCXX.h
+++ b/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/lib/AST/DeclCXX.cpp b/lib/AST/DeclCXX.cpp
index 9bdf07b29e..b8b2952806 100644
--- a/lib/AST/DeclCXX.cpp
+++ b/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/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp
index bef63a16d6..d035762262 100644
--- a/lib/Sema/SemaDeclCXX.cpp
+++ b/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.