summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/lib/AST/DeclCXX.cpp11
-rw-r--r--clang/lib/Sema/SemaDeclCXX.cpp12
-rw-r--r--clang/lib/Sema/SemaTemplateInstantiate.cpp3
3 files changed, 14 insertions, 12 deletions
diff --git a/clang/lib/AST/DeclCXX.cpp b/clang/lib/AST/DeclCXX.cpp
index 7ba2394b042..af54fb07d1e 100644
--- a/clang/lib/AST/DeclCXX.cpp
+++ b/clang/lib/AST/DeclCXX.cpp
@@ -51,6 +51,7 @@ CXXRecordDecl::~CXXRecordDecl() {
void CXXRecordDecl::Destroy(ASTContext &C) {
C.Deallocate(Bases);
+ C.Deallocate(VBases);
this->RecordDecl::Destroy(C);
}
@@ -129,7 +130,7 @@ CXXRecordDecl::setBases(ASTContext &C,
CXXRecordDecl *VBaseClassDecl
= cast<CXXRecordDecl>(QT->getAsRecordType()->getDecl());
this->VBases[i] =
- *new CXXBaseSpecifier(
+ *new (C) CXXBaseSpecifier(
VBaseClassDecl->getSourceRange(), true,
VBaseClassDecl->getTagKind() == RecordDecl::TK_class,
UniqueVbases[i]->getAccessSpecifier(), QT);
@@ -571,7 +572,8 @@ CXXConstructorDecl::setBaseOrMemberInitializers(
}
if (i == NumInitializers) {
CXXBaseOrMemberInitializer *Member =
- new CXXBaseOrMemberInitializer(VBase->getType(), 0, 0,SourceLocation());
+ new (C) CXXBaseOrMemberInitializer(VBase->getType(), 0, 0,
+ SourceLocation());
AllToInit.push_back(Member);
}
}
@@ -593,7 +595,8 @@ CXXConstructorDecl::setBaseOrMemberInitializers(
}
if (i == NumInitializers) {
CXXBaseOrMemberInitializer *Member =
- new CXXBaseOrMemberInitializer(Base->getType(), 0, 0, SourceLocation());
+ new (C) CXXBaseOrMemberInitializer(Base->getType(), 0, 0,
+ SourceLocation());
AllToInit.push_back(Member);
}
}
@@ -615,7 +618,7 @@ CXXConstructorDecl::setBaseOrMemberInitializers(
if (FieldType->getAsRecordType()) {
CXXBaseOrMemberInitializer *Member =
- new CXXBaseOrMemberInitializer((*Field), 0, 0, SourceLocation());
+ new (C) CXXBaseOrMemberInitializer((*Field), 0, 0, SourceLocation());
AllToInit.push_back(Member);
}
}
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index 1dcac3fc9ec..2b8d0a89723 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -359,7 +359,7 @@ Sema::CheckBaseSpecifier(CXXRecordDecl *Class,
}
if (BaseType->isDependentType())
- return new CXXBaseSpecifier(SpecifierRange, Virtual,
+ return new (Context) CXXBaseSpecifier(SpecifierRange, Virtual,
Class->getTagKind() == RecordDecl::TK_class,
Access, BaseType);
@@ -416,7 +416,7 @@ Sema::CheckBaseSpecifier(CXXRecordDecl *Class,
// Create the base specifier.
// FIXME: Allocate via ASTContext?
- return new CXXBaseSpecifier(SpecifierRange, Virtual,
+ return new (Context) CXXBaseSpecifier(SpecifierRange, Virtual,
Class->getTagKind() == RecordDecl::TK_class,
Access, BaseType);
}
@@ -697,8 +697,8 @@ Sema::ActOnMemInitializer(DeclPtrTy ConstructorD,
if (Member) {
// FIXME: Perform direct initialization of the member.
- return new CXXBaseOrMemberInitializer(Member, (Expr **)Args, NumArgs,
- IdLoc);
+ return new (Context) CXXBaseOrMemberInitializer(Member, (Expr **)Args,
+ NumArgs, IdLoc);
}
}
// It didn't name a member, so see if it names a class.
@@ -770,8 +770,8 @@ Sema::ActOnMemInitializer(DeclPtrTy ConstructorD,
<< SourceRange(IdLoc, RParenLoc);
- return new CXXBaseOrMemberInitializer(BaseType, (Expr **)Args, NumArgs,
- IdLoc);
+ return new (Context) CXXBaseOrMemberInitializer(BaseType, (Expr **)Args,
+ NumArgs, IdLoc);
}
static void *GetKeyForTopLevelField(FieldDecl *Field) {
diff --git a/clang/lib/Sema/SemaTemplateInstantiate.cpp b/clang/lib/Sema/SemaTemplateInstantiate.cpp
index 998d6e5ef57..b58422b489c 100644
--- a/clang/lib/Sema/SemaTemplateInstantiate.cpp
+++ b/clang/lib/Sema/SemaTemplateInstantiate.cpp
@@ -821,8 +821,7 @@ Sema::InstantiateBaseSpecifiers(CXXRecordDecl *Instantiation,
Base = Pattern->bases_begin(), BaseEnd = Pattern->bases_end();
Base != BaseEnd; ++Base) {
if (!Base->getType()->isDependentType()) {
- // FIXME: Allocate via ASTContext
- InstantiatedBases.push_back(new CXXBaseSpecifier(*Base));
+ InstantiatedBases.push_back(new (Context) CXXBaseSpecifier(*Base));
continue;
}
OpenPOWER on IntegriCloud