diff options
author | Jeffrey Yasskin <jyasskin@google.com> | 2009-12-17 19:55:06 +0000 |
---|---|---|
committer | Jeffrey Yasskin <jyasskin@google.com> | 2009-12-17 19:55:06 +0000 |
commit | ad715f86c90b06cc4ab9e1336d1bc3bf13ecb16d (patch) | |
tree | 4a10bbf7f6939ab35b86d00d5b25e54d669aabf4 /lib/VMCore/LLVMContextImpl.h | |
parent | af15ffb9127dff185b74ff8b37a9d570ca547c61 (diff) | |
download | llvm-ad715f86c90b06cc4ab9e1336d1bc3bf13ecb16d.tar.gz llvm-ad715f86c90b06cc4ab9e1336d1bc3bf13ecb16d.tar.bz2 llvm-ad715f86c90b06cc4ab9e1336d1bc3bf13ecb16d.tar.xz |
This fixes a memory leak in OpaqueType found by Google's internal heapchecker.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91611 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/VMCore/LLVMContextImpl.h')
-rw-r--r-- | lib/VMCore/LLVMContextImpl.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/lib/VMCore/LLVMContextImpl.h b/lib/VMCore/LLVMContextImpl.h index 8a2378ec7c..2ea2d5e910 100644 --- a/lib/VMCore/LLVMContextImpl.h +++ b/lib/VMCore/LLVMContextImpl.h @@ -27,6 +27,7 @@ #include "llvm/ADT/APInt.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/FoldingSet.h" +#include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/StringMap.h" #include <vector> @@ -159,6 +160,11 @@ public: TypeMap<StructValType, StructType> StructTypes; TypeMap<IntegerValType, IntegerType> IntegerTypes; + // Opaque types are not structurally uniqued, so don't use TypeMap. + typedef SmallPtrSet<const OpaqueType*, 8> OpaqueTypesTy; + OpaqueTypesTy OpaqueTypes; + + /// ValueHandles - This map keeps track of all of the value handles that are /// watching a Value*. The Value::HasValueHandle bit is used to know // whether or not a value has an entry in this map. @@ -201,6 +207,11 @@ public: delete I->second; } MDNodeSet.clear(); + for (OpaqueTypesTy::iterator I = OpaqueTypes.begin(), E = OpaqueTypes.end(); + I != E; ++I) { + (*I)->AbstractTypeUsers.clear(); + delete *I; + } } }; |