diff --git a/include/clang/AST/Decl.h b/include/clang/AST/Decl.h
index 2c7dfec..f4ca149 100644
--- a/include/clang/AST/Decl.h
+++ b/include/clang/AST/Decl.h
@@ -385,10 +385,12 @@
     : NNS(0), NNSRange(), NumTemplParamLists(0), TemplParamLists(0) {}
   /// setTemplateParameterListsInfo - Sets info about matched template
   /// parameter lists.
-  void setTemplateParameterListsInfo(unsigned NumTPLists,
+  void setTemplateParameterListsInfo(ASTContext &Context,
+                                     unsigned NumTPLists,
                                      TemplateParameterList **TPLists);
-  /// Destructor: frees the array of template parameter lists pointers.
-  ~QualifierInfo() { delete[] TemplParamLists; }
+  
+  void Destroy(ASTContext &Context);
+  
 private:
   // Copy constructor and copy assignment are disabled.
   QualifierInfo(const QualifierInfo&);
@@ -447,9 +449,9 @@
     assert(index < getNumTemplateParameterLists());
     return getExtInfo()->TemplParamLists[index];
   }
-  void setTemplateParameterListsInfo(unsigned NumTPLists,
+  void setTemplateParameterListsInfo(ASTContext &Context, unsigned NumTPLists,
                                      TemplateParameterList **TPLists) {
-    getExtInfo()->setTemplateParameterListsInfo(NumTPLists, TPLists);
+    getExtInfo()->setTemplateParameterListsInfo(Context, NumTPLists, TPLists);
   }
 
   SourceLocation getTypeSpecStartLoc() const;
@@ -1887,9 +1889,9 @@
     assert(i < getNumTemplateParameterLists());
     return getExtInfo()->TemplParamLists[i];
   }
-  void setTemplateParameterListsInfo(unsigned NumTPLists,
+  void setTemplateParameterListsInfo(ASTContext &Context, unsigned NumTPLists,
                                      TemplateParameterList **TPLists) {
-    getExtInfo()->setTemplateParameterListsInfo(NumTPLists, TPLists);
+    getExtInfo()->setTemplateParameterListsInfo(Context, NumTPLists, TPLists);
   }
 
   // Implement isa/cast/dyncast/etc.
diff --git a/lib/AST/Decl.cpp b/lib/AST/Decl.cpp
index 4593c6f..25687e1 100644
--- a/lib/AST/Decl.cpp
+++ b/lib/AST/Decl.cpp
@@ -567,7 +567,8 @@
 }
 
 void
-QualifierInfo::setTemplateParameterListsInfo(unsigned NumTPLists,
+QualifierInfo::setTemplateParameterListsInfo(ASTContext &Context,
+                                             unsigned NumTPLists,
                                              TemplateParameterList **TPLists) {
   assert((NumTPLists == 0 || TPLists != 0) &&
          "Empty array of template parameters with positive size!");
@@ -576,19 +577,25 @@
 
   // Free previous template parameters (if any).
   if (NumTemplParamLists > 0) {
-    delete[] TemplParamLists;
+    Context.Deallocate(TemplParamLists);
     TemplParamLists = 0;
     NumTemplParamLists = 0;
   }
   // Set info on matched template parameter lists (if any).
   if (NumTPLists > 0) {
-    TemplParamLists = new TemplateParameterList*[NumTPLists];
+    TemplParamLists = new (Context) TemplateParameterList*[NumTPLists];
     NumTemplParamLists = NumTPLists;
     for (unsigned i = NumTPLists; i-- > 0; )
       TemplParamLists[i] = TPLists[i];
   }
 }
 
+void QualifierInfo::Destroy(ASTContext &Context) {
+  // FIXME: Deallocate template parameter lists themselves!
+  if (TemplParamLists)
+    Context.Deallocate(TemplParamLists);
+}
+
 //===----------------------------------------------------------------------===//
 // VarDecl Implementation
 //===----------------------------------------------------------------------===//
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp
index 9ba3ee6..d1818b8 100644
--- a/lib/Sema/SemaDecl.cpp
+++ b/lib/Sema/SemaDecl.cpp
@@ -2573,7 +2573,8 @@
   SetNestedNameSpecifier(NewVD, D);
 
   if (NumMatchedTemplateParamLists > 0) {
-    NewVD->setTemplateParameterListsInfo(NumMatchedTemplateParamLists,
+    NewVD->setTemplateParameterListsInfo(Context,
+                                         NumMatchedTemplateParamLists,
                         (TemplateParameterList**)TemplateParamLists.release());
   }
 
@@ -3151,7 +3152,8 @@
   }
 
   if (NumMatchedTemplateParamLists > 0) {
-    NewFD->setTemplateParameterListsInfo(NumMatchedTemplateParamLists,
+    NewFD->setTemplateParameterListsInfo(Context,
+                                         NumMatchedTemplateParamLists,
                         (TemplateParameterList**)TemplateParamLists.release());
   }
 
@@ -5412,7 +5414,8 @@
         = static_cast<NestedNameSpecifier*>(SS.getScopeRep());
       New->setQualifierInfo(NNS, SS.getRange());
       if (NumMatchedTemplateParamLists > 0) {
-        New->setTemplateParameterListsInfo(NumMatchedTemplateParamLists,
+        New->setTemplateParameterListsInfo(Context,
+                                           NumMatchedTemplateParamLists,
                     (TemplateParameterList**) TemplateParameterLists.release());
       }
     }
diff --git a/lib/Sema/SemaTemplate.cpp b/lib/Sema/SemaTemplate.cpp
index 21d5702..234665c 100644
--- a/lib/Sema/SemaTemplate.cpp
+++ b/lib/Sema/SemaTemplate.cpp
@@ -3868,7 +3868,8 @@
                                                        SequenceNumber);
     SetNestedNameSpecifier(Partial, SS);
     if (NumMatchedTemplateParamLists > 0) {
-      Partial->setTemplateParameterListsInfo(NumMatchedTemplateParamLists,
+      Partial->setTemplateParameterListsInfo(Context,
+                                             NumMatchedTemplateParamLists,
                     (TemplateParameterList**) TemplateParameterLists.release());
     }
 
@@ -3929,8 +3930,8 @@
                                                 PrevDecl);
     SetNestedNameSpecifier(Specialization, SS);
     if (NumMatchedTemplateParamLists > 0) {
-      Specialization->setTemplateParameterListsInfo(
-                    NumMatchedTemplateParamLists,
+      Specialization->setTemplateParameterListsInfo(Context,
+                                                  NumMatchedTemplateParamLists,
                     (TemplateParameterList**) TemplateParameterLists.release());
     }
 
