diff options
author | Dan Gohman <gohman@apple.com> | 2010-07-21 18:01:42 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2010-07-21 18:01:42 +0000 |
commit | d9c86dc6d95885f0c88f8068a06eab87da328490 (patch) | |
tree | 2f661b32d65955aba6ec8faafff81b580259d652 /lib/VMCore | |
parent | 1ec7f5feb30e5cd63772e0c97d51cae00b0af7c5 (diff) | |
download | llvm-d9c86dc6d95885f0c88f8068a06eab87da328490.tar.gz llvm-d9c86dc6d95885f0c88f8068a06eab87da328490.tar.bz2 llvm-d9c86dc6d95885f0c88f8068a06eab87da328490.tar.xz |
Use TrackingVH instead of WeakVH for NamedMDNode's operands, since nodes
referenced by NamedMDNodes shouldn't be deleted.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109021 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/VMCore')
-rw-r--r-- | lib/VMCore/Metadata.cpp | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/lib/VMCore/Metadata.cpp b/lib/VMCore/Metadata.cpp index b64bde548d..a89cffd8e0 100644 --- a/lib/VMCore/Metadata.cpp +++ b/lib/VMCore/Metadata.cpp @@ -346,8 +346,8 @@ void ilist_traits<NamedMDNode>::removeNodeFromList(NamedMDNode *N) { ST.remove(N->getName()); } -static SmallVector<WeakVH, 4> &getNMDOps(void *Operands) { - return *(SmallVector<WeakVH, 4>*)Operands; +static SmallVector<TrackingVH<MDNode>, 4> &getNMDOps(void *Operands) { + return *(SmallVector<TrackingVH<MDNode>, 4>*)Operands; } NamedMDNode::NamedMDNode(LLVMContext &C, const Twine &N, @@ -355,11 +355,11 @@ NamedMDNode::NamedMDNode(LLVMContext &C, const Twine &N, unsigned NumMDs, Module *ParentModule) : Value(Type::getMetadataTy(C), Value::NamedMDNodeVal), Parent(0) { setName(N); - Operands = new SmallVector<WeakVH, 4>(); + Operands = new SmallVector<TrackingVH<MDNode>, 4>(); - SmallVector<WeakVH, 4> &Node = getNMDOps(Operands); + SmallVector<TrackingVH<MDNode>, 4> &Node = getNMDOps(Operands); for (unsigned i = 0; i != NumMDs; ++i) - Node.push_back(WeakVH(MDs[i])); + Node.push_back(TrackingVH<MDNode>(MDs[i])); if (ParentModule) ParentModule->getNamedMDList().push_back(this); @@ -389,12 +389,12 @@ unsigned NamedMDNode::getNumOperands() const { /// getOperand - Return specified operand. MDNode *NamedMDNode::getOperand(unsigned i) const { assert(i < getNumOperands() && "Invalid Operand number!"); - return dyn_cast_or_null<MDNode>(getNMDOps(Operands)[i]); + return dyn_cast_or_null<MDNode>(&*getNMDOps(Operands)[i]); } /// addOperand - Add metadata Operand. void NamedMDNode::addOperand(MDNode *M) { - getNMDOps(Operands).push_back(WeakVH(M)); + getNMDOps(Operands).push_back(TrackingVH<MDNode>(M)); } /// eraseFromParent - Drop all references and remove the node from parent |