diff options
author | Devang Patel <dpatel@apple.com> | 2009-08-03 06:19:01 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2009-08-03 06:19:01 +0000 |
commit | a82f8838c60b7a3b240e185983dacb3291396f3e (patch) | |
tree | b9682c32f806ce7050af704b1df876388b7bc3e6 | |
parent | 8d632c1e984c1d2810e0e78a73977fdb0b23e125 (diff) |
Add NamedMDNode destructor.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77959 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/Metadata.h | 9 | ||||
-rw-r--r-- | lib/VMCore/Metadata.cpp | 17 |
2 files changed, 26 insertions, 0 deletions
diff --git a/include/llvm/Metadata.h b/include/llvm/Metadata.h index 95100c2749..7b48d8afbf 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<WeakMetadataVH>::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 bf0611f9e4..f548e54944 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(); +} |