diff options
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/examples/HowToUseJIT/HowToUseJIT.cpp | 4 | ||||
-rw-r--r-- | llvm/lib/VMCore/Type.cpp | 16 |
2 files changed, 20 insertions, 0 deletions
diff --git a/llvm/examples/HowToUseJIT/HowToUseJIT.cpp b/llvm/examples/HowToUseJIT/HowToUseJIT.cpp index 0482df6248f..b5c6d111914 100644 --- a/llvm/examples/HowToUseJIT/HowToUseJIT.cpp +++ b/llvm/examples/HowToUseJIT/HowToUseJIT.cpp @@ -42,6 +42,7 @@ #include "llvm/ExecutionEngine/JIT.h" #include "llvm/ExecutionEngine/Interpreter.h" #include "llvm/ExecutionEngine/GenericValue.h" +#include "llvm/Support/ManagedStatic.h" #include "llvm/Support/raw_ostream.h" using namespace llvm; @@ -109,5 +110,8 @@ int main() { // Import result of execution: outs() << "Result: " << gv.IntVal << "\n"; + EE->freeMachineCodeForFunction(FooF); + delete EE; + llvm_shutdown(); return 0; } diff --git a/llvm/lib/VMCore/Type.cpp b/llvm/lib/VMCore/Type.cpp index c14d5119e5d..f0ee04ae247 100644 --- a/llvm/lib/VMCore/Type.cpp +++ b/llvm/lib/VMCore/Type.cpp @@ -666,6 +666,22 @@ protected: std::multimap<unsigned, PATypeHolder> TypesByHash; public: + ~TypeMapBase() + { + for (std::multimap<unsigned, PATypeHolder>::iterator I + = TypesByHash.begin(), E = TypesByHash.end(); I != E;) { + Type *Ty = I->second.get(); + if (!Ty->isAbstract() && (isa<PointerType>(Ty) || isa<FunctionType>(Ty) || + isa<VectorType>(Ty))) { + TypesByHash.erase(I++); + // PATypeHolder won't destroy it, so we must + Ty->destroy(); + } + else + ++I; + } + } + void RemoveFromTypesByHash(unsigned Hash, const Type *Ty) { std::multimap<unsigned, PATypeHolder>::iterator I = TypesByHash.lower_bound(Hash); |