aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2009-01-12 22:49:54 +0000
committerTed Kremenek <kremenek@apple.com>2009-01-12 22:49:54 +0000
commitee49d0496bb8ff2bbf479bb7fbcfbdc71eed7461 (patch)
tree4bc8901a7a2fa97a40b24f640dff908099ec3b19
parent4920f1ffb62b13b88e579476803c093f97f3e17f (diff)
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
-rw-r--r--include/clang/AST/DeclObjC.h4
-rw-r--r--lib/AST/DeclObjC.cpp18
2 files changed, 0 insertions, 22 deletions
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<ObjCMethodDecl*>((*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<ObjCMethodDecl*>((*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,