From: Ted Kremenek Date: Mon, 12 Jan 2009 22:49:54 +0000 (+0000) Subject: Fix crasher due to use-after-release: DeclContext now owns all ObjCMethodDecls, and... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ee49d0496bb8ff2bbf479bb7fbcfbdc71eed7461;p=clang Fix crasher due to use-after-release: DeclContext now owns all ObjCMethodDecls, and shouldn't be released elsewhere. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@62113 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/AST/DeclObjC.h b/include/clang/AST/DeclObjC.h index 9139050660..f11608f04a 100644 --- a/include/clang/AST/DeclObjC.h +++ b/include/clang/AST/DeclObjC.h @@ -602,10 +602,6 @@ class ObjCProtocolDecl : public ObjCContainerDecl { virtual ~ObjCProtocolDecl(); public: - - /// Destroy - Call destructors and release memory. - virtual void Destroy(ASTContext& C); - static ObjCProtocolDecl *Create(ASTContext &C, DeclContext *DC, SourceLocation L, IdentifierInfo *Id); diff --git a/lib/AST/DeclObjC.cpp b/lib/AST/DeclObjC.cpp index 9fc0f763bb..ea7a047780 100644 --- a/lib/AST/DeclObjC.cpp +++ b/lib/AST/DeclObjC.cpp @@ -73,13 +73,9 @@ void ObjCInterfaceDecl::Destroy(ASTContext& C) { for (ivar_iterator I=ivar_begin(), E=ivar_end(); I!=E; ++I) if (*I) (*I)->Destroy(C); - for (method_iterator I=meth_begin(), E=meth_end(); I!=E; ++I) - if (*I) const_cast((*I))->Destroy(C); - // FIXME: Because there is no clear ownership // role between ObjCInterfaceDecls and the ObjCPropertyDecls that they // reference, we destroy ObjCPropertyDecls in ~TranslationUnit. - Decl::Destroy(C); } @@ -115,20 +111,6 @@ ObjCProtocolDecl::~ObjCProtocolDecl() { delete [] PropertyDecl; } -void ObjCProtocolDecl::Destroy(ASTContext& C) { - - // Referenced Protocols are not owned, so don't Destroy them. - - for (method_iterator I=meth_begin(), E=meth_end(); I!=E; ++I) - if (*I) const_cast((*I))->Destroy(C); - - // FIXME: Because there is no clear ownership - // role between ObjCProtocolDecls and the ObjCPropertyDecls that they - // reference, we destroy ObjCPropertyDecls in ~TranslationUnit. - - Decl::Destroy(C); -} - ObjCClassDecl *ObjCClassDecl::Create(ASTContext &C, DeclContext *DC, SourceLocation L,