move some objc decl destruction out of dtors into Destroy method.

llvm-svn: 65111
diff --git a/clang/lib/AST/DeclObjC.cpp b/clang/lib/AST/DeclObjC.cpp
index 506d3e4..95ba2e0 100644
--- a/clang/lib/AST/DeclObjC.cpp
+++ b/clang/lib/AST/DeclObjC.cpp
@@ -35,17 +35,16 @@
                                   isVariadic, isSynthesized, impControl);
 }
 
-ObjCMethodDecl::~ObjCMethodDecl() {  
-  delete [] ParamInfo;
-}
-
 void ObjCMethodDecl::Destroy(ASTContext& C) {
   if (Body) Body->Destroy(C);
   if (SelfDecl) SelfDecl->Destroy(C);
   
   for (param_iterator I=param_begin(), E=param_end(); I!=E; ++I)
     if (*I) (*I)->Destroy(C);
-  
+
+  delete [] ParamInfo;
+  ParamInfo = 0;
+
   Decl::Destroy(C);
 }
 
@@ -102,11 +101,15 @@
   return new (C) ObjCProtocolDecl(DC, L, Id);
 }
 
-ObjCProtocolDecl::~ObjCProtocolDecl() {
+void ObjCProtocolDecl::Destroy(ASTContext &C) {
   delete [] PropertyDecl;
+  PropertyDecl = 0;
+  ObjCContainerDecl::Destroy(C);
 }
 
 
+
+
 ObjCClassDecl *ObjCClassDecl::Create(ASTContext &C, DeclContext *DC,
                                      SourceLocation L,
                                      ObjCInterfaceDecl **Elts, unsigned nElts) {