diff options
-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(); +} |