diff options
-rw-r--r-- | examples/HowToUseJIT/HowToUseJIT.cpp | 4 | ||||
-rw-r--r-- | lib/VMCore/Type.cpp | 16 |
2 files changed, 20 insertions, 0 deletions
diff --git a/examples/HowToUseJIT/HowToUseJIT.cpp b/examples/HowToUseJIT/HowToUseJIT.cpp index 0482df6248..b5c6d11191 100644 --- a/examples/HowToUseJIT/HowToUseJIT.cpp +++ b/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/lib/VMCore/Type.cpp b/lib/VMCore/Type.cpp index c14d5119e5..f0ee04ae24 100644 --- a/lib/VMCore/Type.cpp +++ b/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); |