Clean up the newly added C++ AST nodes.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@72643 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/AST/ExprCXX.cpp b/lib/AST/ExprCXX.cpp
index fccef01..4a15245 100644
--- a/lib/AST/ExprCXX.cpp
+++ b/lib/AST/ExprCXX.cpp
@@ -238,8 +238,12 @@
 
 CXXTemporary *CXXTemporary::Create(ASTContext &C, 
                                    const CXXDestructorDecl *Destructor) {
-  // FIXME: Allocate using the ASTContext.
-  return new CXXTemporary(Destructor);
+  return new (C) CXXTemporary(Destructor);
+}
+
+void CXXTemporary::Destroy(ASTContext &C) {
+  this->~CXXTemporary();
+  C.Deallocate(this);
 }
 
 CXXBindTemporaryExpr *CXXBindTemporaryExpr::Create(ASTContext &C, 
@@ -251,6 +255,12 @@
   return new (C) CXXBindTemporaryExpr(Temp, SubExpr);
 }
 
+void CXXBindTemporaryExpr::Destroy(ASTContext &C) {
+  Temp->Destroy(C);
+  this->~CXXBindTemporaryExpr();
+  C.Deallocate(this);
+}
+
 CXXTemporaryObjectExpr::CXXTemporaryObjectExpr(ASTContext &C,
                                                CXXConstructorDecl *Cons,
                                                QualType writtenTy,
@@ -306,6 +316,19 @@
   }
 }
 
+CXXExprWithTemporaries *CXXExprWithTemporaries::Create(ASTContext &C, 
+                                                       Expr *SubExpr,
+                                                       CXXTemporary **Temps, 
+                                                       unsigned NumTemps) {
+  return new (C) CXXExprWithTemporaries(SubExpr, Temps, NumTemps);
+}
+
+void CXXExprWithTemporaries::Destroy(ASTContext &C) {
+  DestroyChildren(C);
+  this->~CXXExprWithTemporaries();
+  C.Deallocate(this);
+}
+
 CXXExprWithTemporaries::~CXXExprWithTemporaries() {
   delete[] Temps;
 }