From: Fariborz Jahanian Date: Wed, 22 Jul 2009 17:41:53 +0000 (+0000) Subject: Allocate BaseOrMemberInitializers and CXXBaseSpecifier nodes X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=71c6e714778740d98cd01252101d0aaf1efa1553;p=clang Allocate BaseOrMemberInitializers and CXXBaseSpecifier nodes via ASTContext. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@76758 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/AST/DeclCXX.cpp b/lib/AST/DeclCXX.cpp index 7ba2394b04..af54fb07d1 100644 --- a/lib/AST/DeclCXX.cpp +++ b/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(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/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index 1dcac3fc9e..2b8d0a8972 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/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/lib/Sema/SemaTemplateInstantiate.cpp b/lib/Sema/SemaTemplateInstantiate.cpp index 998d6e5ef5..b58422b489 100644 --- a/lib/Sema/SemaTemplateInstantiate.cpp +++ b/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; }