aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2008-11-11 06:35:39 +0000
committerDaniel Dunbar <daniel@zuster.org>2008-11-11 06:35:39 +0000
commitd68ba0ee188d08e7a10b5f295675e0782ef4f990 (patch)
treecd937e1431db09e3ca665d0478076a9619b0483a
parent4c992639102d7ede0f85d7a8cb9ffb7c419c50ea (diff)
Move backend output out of destructor.
Don't free AST consumer when --disable-free is set. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59030 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--Driver/Backend.cpp8
-rw-r--r--Driver/clang.cpp3
2 files changed, 8 insertions, 3 deletions
diff --git a/Driver/Backend.cpp b/Driver/Backend.cpp
index dbe46fcf2f..f16c069497 100644
--- a/Driver/Backend.cpp
+++ b/Driver/Backend.cpp
@@ -89,9 +89,6 @@ namespace {
CodeGenPasses(0), PerModulePasses(0), PerFunctionPasses(0) {}
~BackendConsumer() {
- // FIXME: Move out of destructor.
- EmitAssembly();
-
delete AsmOutStream;
delete TheTargetData;
delete ModuleProvider;
@@ -115,6 +112,11 @@ namespace {
virtual void HandleTranslationUnit(TranslationUnit& TU) {
Gen->HandleTranslationUnit(TU);
+
+ EmitAssembly();
+ // Force a flush here in case we never get released.
+ if (AsmOutStream)
+ AsmOutStream->flush();
}
virtual void HandleTagDeclDefinition(TagDecl *D) {
diff --git a/Driver/clang.cpp b/Driver/clang.cpp
index 5fc86a7759..4973a42819 100644
--- a/Driver/clang.cpp
+++ b/Driver/clang.cpp
@@ -1363,6 +1363,9 @@ static void ProcessInputFile(Preprocessor &PP, PreprocessorFactory &PPF,
// files.
if (ClearSourceMgr)
PP.getSourceManager().clearIDTables();
+
+ if (DisableFree)
+ Consumer.take();
}
static void ProcessSerializedFile(const std::string& InFile, Diagnostic& Diag,