diff options
author | Chris Lattner <sabre@nondot.org> | 2003-07-31 19:38:34 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2003-07-31 19:38:34 +0000 |
commit | 71336a9c14d2da7fd9ab094eed8c6f3695b864ee (patch) | |
tree | d2e358a3b0ef77508a4ba8b2a2dd265fdcc8d7ea /lib/Support | |
parent | 396aecd032413d461a9b8a0b2499ee6a838859f4 (diff) | |
download | external_llvm-71336a9c14d2da7fd9ab094eed8c6f3695b864ee.zip external_llvm-71336a9c14d2da7fd9ab094eed8c6f3695b864ee.tar.gz external_llvm-71336a9c14d2da7fd9ab094eed8c6f3695b864ee.tar.bz2 |
Fix the JIT in the Nightly tester. This was not a fun bug to track down.
See the comments in the patch for details.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7457 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Support')
-rw-r--r-- | lib/Support/Timer.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/lib/Support/Timer.cpp b/lib/Support/Timer.cpp index e4c085d..3672feb 100644 --- a/lib/Support/Timer.cpp +++ b/lib/Support/Timer.cpp @@ -17,7 +17,18 @@ #include <functional> #include <fstream> -static std::string LibSupportInfoOutputFilename; +// getLibSupportInfoOutputFilename - This ugly hack is brought to you courtesy +// of constructor/destructor ordering being unspecified by C++. Basically the +// problem is that a Statistic<> object gets destroyed, which ends up calling +// 'GetLibSupportInfoOutputFile()' (below), which calls this function. +// LibSupportInfoOutputFilename used to be a global variable, but sometimes it +// would get destroyed before the Statistic, causing havoc to ensue. We "fix" +// this by creating the string the first time it is needed and never destroying +// it. +static std::string &getLibSupportInfoOutputFilename() { + static std::string *LibSupportInfoOutputFilename = new std::string(); + return *LibSupportInfoOutputFilename; +} namespace { #ifdef HAVE_MALLINFO @@ -30,7 +41,7 @@ namespace { cl::opt<std::string, true> InfoOutputFilename("info-output-file", cl::desc("File to append -stats and -timer output to"), - cl::Hidden, cl::location(LibSupportInfoOutputFilename)); + cl::Hidden, cl::location(getLibSupportInfoOutputFilename())); } static TimerGroup *DefaultTimerGroup = 0; @@ -232,6 +243,7 @@ void Timer::print(const Timer &Total, std::ostream &OS) { // GetLibSupportInfoOutputFile - Return a file stream to print our output on... std::ostream *GetLibSupportInfoOutputFile() { + std::string &LibSupportInfoOutputFilename = getLibSupportInfoOutputFilename(); if (LibSupportInfoOutputFilename.empty()) return &std::cerr; if (LibSupportInfoOutputFilename == "-") |