add an a Attr::Destroy method and force clients to go through it.  As part of 
this, make DeclBase::Destroy destroy attributes instead of the DeclBase dtor.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66020 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp
index 8d32578..6a6628f 100644
--- a/lib/Sema/SemaDecl.cpp
+++ b/lib/Sema/SemaDecl.cpp
@@ -482,11 +482,11 @@
 }
 
 /// MergeAttributes - append attributes from the Old decl to the New one.
-static void MergeAttributes(Decl *New, Decl *Old) {
-  Attr *attr = const_cast<Attr*>(Old->getAttrs()), *tmp;
+static void MergeAttributes(Decl *New, Decl *Old, ASTContext &C) {
+  Attr *attr = const_cast<Attr*>(Old->getAttrs());
 
   while (attr) {
-    tmp = attr;
+    Attr *tmp = attr;
     attr = attr->getNext();
 
     if (!DeclHasAttr(New, tmp) && tmp->isMerged()) {
@@ -494,7 +494,7 @@
       New->addAttr(tmp);
     } else {
       tmp->setNext(0);
-      delete(tmp);
+      tmp->Destroy(C);
     }
   }
 
@@ -678,7 +678,7 @@
 /// \returns false
 bool Sema::MergeCompatibleFunctionDecls(FunctionDecl *New, FunctionDecl *Old) {
   // Merge the attributes
-  MergeAttributes(New, Old);
+  MergeAttributes(New, Old, Context);
 
   // Merge the storage class.
   New->setStorageClass(Old->getStorageClass());
@@ -767,7 +767,7 @@
     return true;
   }
 
-  MergeAttributes(New, Old);
+  MergeAttributes(New, Old, Context);
 
   // Merge the types
   QualType MergedT = Context.mergeTypes(New->getType(), Old->getType());