summaryrefslogtreecommitdiff
path: root/lib/VMCore
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2010-07-21 18:01:42 +0000
committerDan Gohman <gohman@apple.com>2010-07-21 18:01:42 +0000
commitd9c86dc6d95885f0c88f8068a06eab87da328490 (patch)
tree2f661b32d65955aba6ec8faafff81b580259d652 /lib/VMCore
parent1ec7f5feb30e5cd63772e0c97d51cae00b0af7c5 (diff)
downloadllvm-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.cpp14
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