IR: Split Metadata from Value
[oota-llvm.git] / lib / IR / LLVMContextImpl.cpp
index 3fd0bb37a4d48f71218f3635e8488ef84722a654..7c34f0949a4e0ab68693ffb12c10d59561f7a8d2 100644 (file)
@@ -120,6 +120,21 @@ LLVMContextImpl::~LLVMContextImpl() {
     delete &*Elem;
   }
 
+  // Destroy MetadataAsValues.
+  {
+    SmallVector<MetadataAsValue *, 8> MDVs;
+    MDVs.reserve(MetadataAsValues.size());
+    for (auto &Pair : MetadataAsValues)
+      MDVs.push_back(Pair.second);
+    MetadataAsValues.clear();
+    for (auto *V : MDVs)
+      delete V;
+  }
+
+  // Destroy ValuesAsMetadata.
+  for (auto &Pair : ValuesAsMetadata)
+    delete Pair.second;
+
   // Destroy MDNodes.  ~MDNode can move and remove nodes between the MDNodeSet
   // and the NonUniquedMDNodes sets, so copy the values out first.
   SmallVector<GenericMDNode *, 8> MDNodes;