From a82f8838c60b7a3b240e185983dacb3291396f3e Mon Sep 17 00:00:00 2001 From: Devang Patel Date: Mon, 3 Aug 2009 06:19:01 +0000 Subject: [PATCH] Add NamedMDNode destructor. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77959 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Metadata.h | 9 +++++++++ lib/VMCore/Metadata.cpp | 17 +++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/include/llvm/Metadata.h b/include/llvm/Metadata.h index 95100c27496..7b48d8afbfa 100644 --- a/include/llvm/Metadata.h +++ b/include/llvm/Metadata.h @@ -200,6 +200,15 @@ public: return new NamedMDNode(N, MDs, NumMDs, M); } + /// eraseFromParent - Drop all references and remove the node from parent + /// module. + void eraseFromParent(); + + /// dropAllReferences - Remove all uses and clear node vector. + void dropAllReferences(); + + ~NamedMDNode(); + typedef SmallVectorImpl::const_iterator const_elem_iterator; /// getParent - Get the module that holds this named metadata collection. diff --git a/lib/VMCore/Metadata.cpp b/lib/VMCore/Metadata.cpp index bf0611f9e46..f548e549441 100644 --- a/lib/VMCore/Metadata.cpp +++ b/lib/VMCore/Metadata.cpp @@ -83,3 +83,20 @@ NamedMDNode::NamedMDNode(const Twine &N, MetadataBase*const* MDs, if (ParentModule) ParentModule->getNamedMDList().push_back(this); } + +/// eraseFromParent - Drop all references and remove the node from parent +/// module. +void NamedMDNode::eraseFromParent() { + dropAllReferences(); + getParent()->getNamedMDList().erase(this); +} + +/// dropAllReferences - Remove all uses and clear node vector. +void NamedMDNode::dropAllReferences() { + // FIXME: Update metadata use list. + Node.clear(); +} + +NamedMDNode::~NamedMDNode() { + dropAllReferences(); +}