diff options
author | Dan Gohman <gohman@apple.com> | 2010-08-18 21:23:17 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2010-08-18 21:23:17 +0000 |
commit | b37af7de47e5470a4d1416b2e08c80450d6125bc (patch) | |
tree | 893b0b47c785ac16d5c356a916a217bbfa4123fa | |
parent | b9933f365eefb3b6bd026ce9ed297c336d889e78 (diff) | |
download | bcm5719-llvm-b37af7de47e5470a4d1416b2e08c80450d6125bc.tar.gz bcm5719-llvm-b37af7de47e5470a4d1416b2e08c80450d6125bc.zip |
Call llvm::remove_fatal_error_handler before deallocating objects
which are used by the error handling functions.
llvm-svn: 111427
-rw-r--r-- | clang/tools/driver/cc1_main.cpp | 5 | ||||
-rw-r--r-- | clang/tools/driver/cc1as_main.cpp | 4 |
2 files changed, 7 insertions, 2 deletions
diff --git a/clang/tools/driver/cc1_main.cpp b/clang/tools/driver/cc1_main.cpp index 2eb5fd381da..bfdcefbb24e 100644 --- a/clang/tools/driver/cc1_main.cpp +++ b/clang/tools/driver/cc1_main.cpp @@ -163,6 +163,11 @@ int cc1_main(const char **ArgBegin, const char **ArgEnd, // results now. This happens in -disable-free mode. llvm::TimerGroup::printAll(llvm::errs()); + // Our error handler depends on the Diagnostics object, which we're + // potentially about to delete. Uninstall the handler now so that any + // later errors use the default handling behavior instead. + llvm::remove_fatal_error_handler(); + // When running with -disable-free, don't do any destruction or shutdown. if (Clang->getFrontendOpts().DisableFree) { if (Clang->getFrontendOpts().ShowStats) diff --git a/clang/tools/driver/cc1as_main.cpp b/clang/tools/driver/cc1as_main.cpp index 077e118d246..4620b605fb0 100644 --- a/clang/tools/driver/cc1as_main.cpp +++ b/clang/tools/driver/cc1as_main.cpp @@ -327,8 +327,8 @@ int cc1as_main(const char **ArgBegin, const char **ArgEnd, // Set an error handler, so that any LLVM backend diagnostics go through our // error handler. - install_fatal_error_handler(LLVMErrorHandler, - static_cast<void*>(&Diags)); + ScopedFatalErrorHandler FatalErrorHandler + (LLVMErrorHandler, static_cast<void*>(&Diags)); // Parse the arguments. AssemblerInvocation Asm; |