[llvm-commits] [llvm] r109021 - in /llvm/trunk: include/llvm/Metadata.h lib/VMCore/Metadata.cpp
Dan Gohman
gohman at apple.com
Wed Jul 21 11:01:42 PDT 2010
Author: djg
Date: Wed Jul 21 13:01:42 2010
New Revision: 109021
URL: http://llvm.org/viewvc/llvm-project?rev=109021&view=rev
Log:
Use TrackingVH instead of WeakVH for NamedMDNode's operands, since nodes
referenced by NamedMDNodes shouldn't be deleted.
Modified:
llvm/trunk/include/llvm/Metadata.h
llvm/trunk/lib/VMCore/Metadata.cpp
Modified: llvm/trunk/include/llvm/Metadata.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Metadata.h?rev=109021&r1=109020&r2=109021&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Metadata.h (original)
+++ llvm/trunk/include/llvm/Metadata.h Wed Jul 21 13:01:42 2010
@@ -185,7 +185,7 @@
std::string Name;
Module *Parent;
- void *Operands; // SmallVector<WeakVH<MDNode>, 4>
+ void *Operands; // SmallVector<TrackingVH<MDNode>, 4>
void setParent(Module *M) { Parent = M; }
protected:
Modified: llvm/trunk/lib/VMCore/Metadata.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Metadata.cpp?rev=109021&r1=109020&r2=109021&view=diff
==============================================================================
--- llvm/trunk/lib/VMCore/Metadata.cpp (original)
+++ llvm/trunk/lib/VMCore/Metadata.cpp Wed Jul 21 13:01:42 2010
@@ -346,8 +346,8 @@
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 @@
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 @@
/// 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
More information about the llvm-commits
mailing list