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 7ba2394..af54fb0 100644
--- a/lib/AST/DeclCXX.cpp
+++ b/lib/AST/DeclCXX.cpp
@@ -51,6 +51,7 @@
 
 void CXXRecordDecl::Destroy(ASTContext &C) {
   C.Deallocate(Bases);
+  C.Deallocate(VBases);
   this->RecordDecl::Destroy(C);
 }
 
@@ -129,7 +130,7 @@
       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 @@
     }
     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 @@
     }
     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 @@
       
       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 1dcac3f..2b8d0a8 100644
--- a/lib/Sema/SemaDeclCXX.cpp
+++ b/lib/Sema/SemaDeclCXX.cpp
@@ -359,7 +359,7 @@
   }
 
   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 @@
   
   // 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 @@
 
     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 @@
     << 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 998d6e5..b58422b 100644
--- a/lib/Sema/SemaTemplateInstantiate.cpp
+++ b/lib/Sema/SemaTemplateInstantiate.cpp
@@ -821,8 +821,7 @@
          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;
     }