]> granicus.if.org Git - clang/commitdiff
Allocate BaseOrMemberInitializers and CXXBaseSpecifier nodes
authorFariborz Jahanian <fjahanian@apple.com>
Wed, 22 Jul 2009 17:41:53 +0000 (17:41 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Wed, 22 Jul 2009 17:41:53 +0000 (17:41 +0000)
via ASTContext.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@76758 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/DeclCXX.cpp
lib/Sema/SemaDeclCXX.cpp
lib/Sema/SemaTemplateInstantiate.cpp

index 7ba2394b0427ef9e1f4f5181e70e721b6f0f69a3..af54fb07d1e6b52e761b664109b7584f1b073cf4 100644 (file)
@@ -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);
       }      
     }
index 1dcac3fc9ec92dd441b0895d0df2bdf7035badd8..2b8d0a89723840c008368e5be7dc4dc4a0469df6 100644 (file)
@@ -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) {
index 998d6e5ef5728375e2da385ae5e48a70bc8b5e1f..b58422b489c765f4a560ba4f64e7ce79f282bafc 100644 (file)
@@ -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;
     }