diff options
Diffstat (limited to 'llvm/lib/VMCore/LLVMContextImpl.h')
-rw-r--r-- | llvm/lib/VMCore/LLVMContextImpl.h | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/llvm/lib/VMCore/LLVMContextImpl.h b/llvm/lib/VMCore/LLVMContextImpl.h index 4016c0aa05a..2faf6ac6e38 100644 --- a/llvm/lib/VMCore/LLVMContextImpl.h +++ b/llvm/lib/VMCore/LLVMContextImpl.h @@ -96,7 +96,6 @@ struct DenseMapAPFloatKeyInfo { class LLVMContextImpl { public: sys::SmartRWMutex<true> ConstantsLock; - typedef DenseMap<DenseMapAPIntKeyInfo::KeyTy, ConstantInt*, DenseMapAPIntKeyInfo> IntMapTy; IntMapTy IntConstants; @@ -196,6 +195,28 @@ public: Int16Ty(C, 16), Int32Ty(C, 32), Int64Ty(C, 64) { } + + ~LLVMContextImpl() + { + ExprConstants.freeConstants(); + ArrayConstants.freeConstants(); + StructConstants.freeConstants(); + VectorConstants.freeConstants(); + + AggZeroConstants.freeConstants(); + NullPtrConstants.freeConstants(); + UndefValueConstants.freeConstants(); + for (IntMapTy::iterator I=IntConstants.begin(), E=IntConstants.end(); + I != E; ++I) { + if (I->second->use_empty()) + delete I->second; + } + for (FPMapTy::iterator I=FPConstants.begin(), E=FPConstants.end(); + I != E; ++I) { + if (I->second->use_empty()) + delete I->second; + } + } }; } |