aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNuno Lopes <nunoplopes@sapo.pt>2008-10-24 22:51:00 +0000
committerNuno Lopes <nunoplopes@sapo.pt>2008-10-24 22:51:00 +0000
commitdd49267500646992eaa2b194ef8122be22e18207 (patch)
tree749e0e8bdc4f33565063b6cd08fe6c2f1947424e
parent8dc53930ac5ec96e47ca15c1f5265a87e40da5ca (diff)
fix leaking of the module provider
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@58127 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--Driver/Backend.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/Driver/Backend.cpp b/Driver/Backend.cpp
index f8cfa997e2..37c5f1651b 100644
--- a/Driver/Backend.cpp
+++ b/Driver/Backend.cpp
@@ -52,6 +52,7 @@ namespace {
llvm::TargetData *TheTargetData;
llvm::raw_ostream *AsmOutStream;
+ mutable llvm::ModuleProvider *ModuleProvider;
mutable FunctionPassManager *CodeGenPasses;
mutable PassManager *PerModulePasses;
mutable FunctionPassManager *PerFunctionPasses;
@@ -81,7 +82,7 @@ namespace {
InputFile(infile),
OutputFile(outfile),
Gen(CreateLLVMCodeGen(Diags, Features, InputFile, GenerateDebugInfo)),
- TheModule(0), TheTargetData(0), AsmOutStream(0),
+ TheModule(0), TheTargetData(0), AsmOutStream(0), ModuleProvider(0),
CodeGenPasses(0), PerModulePasses(0), PerFunctionPasses(0) {}
~BackendConsumer() {
@@ -91,6 +92,7 @@ namespace {
delete AsmOutStream;
delete TheTargetData;
delete TheModule;
+ delete ModuleProvider;
delete CodeGenPasses;
delete PerModulePasses;
delete PerFunctionPasses;
@@ -120,8 +122,8 @@ namespace {
FunctionPassManager *BackendConsumer::getCodeGenPasses() const {
if (!CodeGenPasses) {
- CodeGenPasses =
- new FunctionPassManager(new ExistingModuleProvider(TheModule));
+ ModuleProvider = new ExistingModuleProvider(TheModule);
+ CodeGenPasses = new FunctionPassManager(ModuleProvider);
CodeGenPasses->add(new TargetData(*TheTargetData));
}