[llvm-commits] [llvm] r134945 - /llvm/trunk/lib/VMCore/LLVMContextImpl.cpp

Nick Lewycky nicholas at mxc.ca
Mon Jul 11 17:26:08 PDT 2011


Author: nicholas
Date: Mon Jul 11 19:26:08 2011
New Revision: 134945

URL: http://llvm.org/viewvc/llvm-project?rev=134945&view=rev
Log:
TypeMap had a destructor that destroyed the types it held. DenseMap did not, so
destroy those types in ~LLVMContext.

Modified:
    llvm/trunk/lib/VMCore/LLVMContextImpl.cpp

Modified: llvm/trunk/lib/VMCore/LLVMContextImpl.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/LLVMContextImpl.cpp?rev=134945&r1=134944&r2=134945&view=diff
==============================================================================
--- llvm/trunk/lib/VMCore/LLVMContextImpl.cpp (original)
+++ llvm/trunk/lib/VMCore/LLVMContextImpl.cpp Mon Jul 11 19:26:08 2011
@@ -13,6 +13,7 @@
 
 #include "LLVMContextImpl.h"
 #include "llvm/Module.h"
+#include "llvm/ADT/STLExtras.h"
 #include <algorithm>
 using namespace llvm;
 
@@ -54,9 +55,7 @@
   // will try to remove itself from OwnedModules set.  This would cause
   // iterator invalidation if we iterated on the set directly.
   std::vector<Module*> Modules(OwnedModules.begin(), OwnedModules.end());
-  for (std::vector<Module*>::iterator I = Modules.begin(), E = Modules.end();
-       I != E; ++I)
-    delete *I;
+  DeleteContainerPointers(Modules);
   
   std::for_each(ExprConstants.map_begin(), ExprConstants.map_end(),
                 DropReferences());
@@ -74,14 +73,8 @@
   NullPtrConstants.freeConstants();
   UndefValueConstants.freeConstants();
   InlineAsms.freeConstants();
-  for (IntMapTy::iterator I = IntConstants.begin(), E = IntConstants.end(); 
-       I != E; ++I) {
-    delete I->second;
-  }
-  for (FPMapTy::iterator I = FPConstants.begin(), E = FPConstants.end(); 
-       I != E; ++I) {
-    delete I->second;
-  }
+  DeleteContainerSeconds(IntConstants);
+  DeleteContainerSeconds(FPConstants);
   
   // Destroy MDNodes.  ~MDNode can move and remove nodes between the MDNodeSet
   // and the NonUniquedMDNodes sets, so copy the values out first.
@@ -99,7 +92,18 @@
   assert(MDNodeSet.empty() && NonUniquedMDNodes.empty() &&
          "Destroying all MDNodes didn't empty the Context's sets.");
   // Destroy MDStrings.
-  for (StringMap<MDString*>::iterator I = MDStringCache.begin(),
-         E = MDStringCache.end(); I != E; ++I)
-    delete I->second;
+  DeleteContainerSeconds(MDStringCache);
+
+  // Destroy types.
+  DeleteContainerSeconds(IntegerTypes);
+  DeleteContainerSeconds(FunctionTypes);
+  DeleteContainerSeconds(AnonStructTypes);
+  DeleteContainerSeconds(ArrayTypes);
+  DeleteContainerSeconds(VectorTypes);
+  DeleteContainerSeconds(PointerTypes);
+  DeleteContainerSeconds(ASPointerTypes);
+
+  for (StringMap<StructType *>::iterator I = NamedStructTypes.begin(), E = NamedStructTypes.end(); I != E; ++I) {
+    delete I->getValue();
+  }
 }





More information about the llvm-commits mailing list