Remove MDNode from ValueMap when MDNode is destroyed.
authorDevang Patel <dpatel@apple.com>
Mon, 10 Aug 2009 22:59:46 +0000 (22:59 +0000)
committerDevang Patel <dpatel@apple.com>
Mon, 10 Aug 2009 22:59:46 +0000 (22:59 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78612 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/LLVMContextImpl.h
lib/VMCore/Metadata.cpp

index fda56083b06b9c032b3a716ff994d1aaa40518df..3d1f3b26a5c10ea2ee24af901314689e95e4eede 100644 (file)
@@ -105,7 +105,7 @@ struct LLVMContextImpl {
   
   ValueMap<char, Type, ConstantAggregateZero> AggZeroConstants;
 
-  ValueMap<std::vector<Value*>, Type, MDNode> MDNodes;
+  ValueMap<std::vector<Value*>, Type, MDNode, true /*largekey*/> MDNodes;
   
   typedef ValueMap<std::vector<Constant*>, ArrayType, 
     ConstantArray, true /*largekey*/> ArrayConstantsTy;
index 1680572ab93754daf573d1abc9958ed9cda94020..3a61d0eefb752578054d2caea5b250cffe1bbcfa 100644 (file)
@@ -92,8 +92,17 @@ void MDNode::dropAllReferences() {
   Node.clear();
 }
 
+static std::vector<Value*> getValType(MDNode *N) {
+  std::vector<Value*> Elements;
+  Elements.reserve(N->getNumElements());
+  for (unsigned i = 0, e = N->getNumElements(); i != e; ++i)
+    Elements.push_back(N->getElement(i));
+  return Elements;
+}
+
 MDNode::~MDNode() {
   dropAllReferences();
+  getType()->getContext().pImpl->MDNodes.remove(this);
 }
 //===----------------------------------------------------------------------===//
 //NamedMDNode implementation