mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-20 10:42:36 +00:00
fix (part of) memory leak on shutdown. See PR2975.
llvm-svn: 68457
This commit is contained in:
parent
367120583b
commit
bf09e5c8f6
@ -42,6 +42,7 @@
|
|||||||
#include "llvm/ExecutionEngine/JIT.h"
|
#include "llvm/ExecutionEngine/JIT.h"
|
||||||
#include "llvm/ExecutionEngine/Interpreter.h"
|
#include "llvm/ExecutionEngine/Interpreter.h"
|
||||||
#include "llvm/ExecutionEngine/GenericValue.h"
|
#include "llvm/ExecutionEngine/GenericValue.h"
|
||||||
|
#include "llvm/Support/ManagedStatic.h"
|
||||||
#include "llvm/Support/raw_ostream.h"
|
#include "llvm/Support/raw_ostream.h"
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
@ -109,5 +110,8 @@ int main() {
|
|||||||
|
|
||||||
// Import result of execution:
|
// Import result of execution:
|
||||||
outs() << "Result: " << gv.IntVal << "\n";
|
outs() << "Result: " << gv.IntVal << "\n";
|
||||||
|
EE->freeMachineCodeForFunction(FooF);
|
||||||
|
delete EE;
|
||||||
|
llvm_shutdown();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -666,6 +666,22 @@ protected:
|
|||||||
std::multimap<unsigned, PATypeHolder> TypesByHash;
|
std::multimap<unsigned, PATypeHolder> TypesByHash;
|
||||||
|
|
||||||
public:
|
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) {
|
void RemoveFromTypesByHash(unsigned Hash, const Type *Ty) {
|
||||||
std::multimap<unsigned, PATypeHolder>::iterator I =
|
std::multimap<unsigned, PATypeHolder>::iterator I =
|
||||||
TypesByHash.lower_bound(Hash);
|
TypesByHash.lower_bound(Hash);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user