X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=blobdiff_plain;f=lib%2FSupport%2FTimer.cpp;h=f032ee5d30d04ef06f8b510574eee17daeddc4cc;hp=7738283bad086719c1a3ec8561889436c036cc09;hb=df7186636e51e63281bd318234b7d97f25efe491;hpb=9020dc35dc63ad1b3cffcdfaeb2d8396d23223db diff --git a/lib/Support/Timer.cpp b/lib/Support/Timer.cpp index 7738283bad0..f032ee5d30d 100644 --- a/lib/Support/Timer.cpp +++ b/lib/Support/Timer.cpp @@ -12,20 +12,17 @@ //===----------------------------------------------------------------------===// #include "llvm/Support/Timer.h" +#include "llvm/ADT/Statistic.h" #include "llvm/ADT/StringMap.h" #include "llvm/Support/CommandLine.h" -#include "llvm/Support/Debug.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/Format.h" #include "llvm/Support/ManagedStatic.h" -#include "llvm/Support/MutexGuard.h" +#include "llvm/Support/Mutex.h" #include "llvm/Support/Process.h" #include "llvm/Support/raw_ostream.h" using namespace llvm; -// CreateInfoOutputFile - Return a file stream to print our output on. -namespace llvm { extern raw_ostream *CreateInfoOutputFile(); } - // 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 @@ -53,28 +50,27 @@ namespace { cl::Hidden, cl::location(getLibSupportInfoOutputFilename())); } -// CreateInfoOutputFile - Return a file stream to print our output on. -raw_ostream *llvm::CreateInfoOutputFile() { +// Return a file stream to print our output on. +std::unique_ptr llvm::CreateInfoOutputFile() { const std::string &OutputFilename = getLibSupportInfoOutputFilename(); if (OutputFilename.empty()) - return new raw_fd_ostream(2, false); // stderr. + return llvm::make_unique(2, false); // stderr. if (OutputFilename == "-") - return new raw_fd_ostream(1, false); // stdout. - + return llvm::make_unique(1, false); // stdout. + // Append mode is used because the info output file is opened and closed // each time -stats or -time-passes wants to print output to it. To // compensate for this, the test-suite Makefiles have code to delete the // info output file before running commands which write to it. - std::string Error; - raw_ostream *Result = new raw_fd_ostream( - OutputFilename.c_str(), Error, sys::fs::F_Append | sys::fs::F_Text); - if (Error.empty()) + std::error_code EC; + auto Result = llvm::make_unique( + OutputFilename, EC, sys::fs::F_Append | sys::fs::F_Text); + if (!EC) return Result; - + errs() << "Error opening info-output-file '" << OutputFilename << " for appending!\n"; - delete Result; - return new raw_fd_ostream(2, false); // stderr. + return llvm::make_unique(2, false); // stderr. } @@ -293,10 +289,9 @@ void TimerGroup::removeTimer(Timer &T) { // them were started. if (FirstTimer || TimersToPrint.empty()) return; - - raw_ostream *OutStream = CreateInfoOutputFile(); + + std::unique_ptr OutStream = CreateInfoOutputFile(); PrintQueuedTimers(*OutStream); - delete OutStream; // Close the file. } void TimerGroup::addTimer(Timer &T) {