forked from OSchip/llvm-project
Simplify memory management with std::unique_ptr.
llvm-svn: 255831
This commit is contained in:
parent
533336a368
commit
b94ab5ffbd
|
@ -28,9 +28,11 @@
|
|||
|
||||
#include "llvm/Support/Atomic.h"
|
||||
#include "llvm/Support/Valgrind.h"
|
||||
#include <memory>
|
||||
|
||||
namespace llvm {
|
||||
class raw_ostream;
|
||||
class raw_fd_ostream;
|
||||
|
||||
class Statistic {
|
||||
public:
|
||||
|
@ -170,6 +172,9 @@ void EnableStatistics();
|
|||
/// \brief Check if statistics are enabled.
|
||||
bool AreStatisticsEnabled();
|
||||
|
||||
/// \brief Return a file stream to print our output on.
|
||||
std::unique_ptr<raw_fd_ostream> CreateInfoOutputFile();
|
||||
|
||||
/// \brief Print statistics to the file returned by CreateInfoOutputFile().
|
||||
void PrintStatistics();
|
||||
|
||||
|
|
|
@ -34,9 +34,6 @@
|
|||
#include <cstring>
|
||||
using namespace llvm;
|
||||
|
||||
// CreateInfoOutputFile - Return a file stream to print our output on.
|
||||
namespace llvm { extern raw_ostream *CreateInfoOutputFile(); }
|
||||
|
||||
/// -stats - Command line option to cause transformations to emit stats about
|
||||
/// what they did.
|
||||
///
|
||||
|
@ -145,20 +142,18 @@ void llvm::PrintStatistics() {
|
|||
if (Stats.Stats.empty()) return;
|
||||
|
||||
// Get the stream to write to.
|
||||
raw_ostream &OutStream = *CreateInfoOutputFile();
|
||||
PrintStatistics(OutStream);
|
||||
delete &OutStream; // Close the file.
|
||||
std::unique_ptr<raw_ostream> OutStream = CreateInfoOutputFile();
|
||||
PrintStatistics(*OutStream);
|
||||
|
||||
#else
|
||||
// Check if the -stats option is set instead of checking
|
||||
// !Stats.Stats.empty(). In release builds, Statistics operators
|
||||
// do nothing, so stats are never Registered.
|
||||
if (Enabled) {
|
||||
// Get the stream to write to.
|
||||
raw_ostream &OutStream = *CreateInfoOutputFile();
|
||||
OutStream << "Statistics are disabled. "
|
||||
std::unique_ptr<raw_ostream> OutStream = CreateInfoOutputFile();
|
||||
(*OutStream) << "Statistics are disabled. "
|
||||
<< "Build with asserts or with -DLLVM_ENABLE_STATS\n";
|
||||
OutStream.flush();
|
||||
delete &OutStream; // Close the file.
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/Support/Timer.h"
|
||||
#include "llvm/ADT/Statistic.h"
|
||||
#include "llvm/ADT/StringMap.h"
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
#include "llvm/Support/FileSystem.h"
|
||||
|
@ -22,9 +23,6 @@
|
|||
#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
|
||||
|
@ -52,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<raw_fd_ostream> llvm::CreateInfoOutputFile() {
|
||||
const std::string &OutputFilename = getLibSupportInfoOutputFilename();
|
||||
if (OutputFilename.empty())
|
||||
return new raw_fd_ostream(2, false); // stderr.
|
||||
return llvm::make_unique<raw_fd_ostream>(2, false); // stderr.
|
||||
if (OutputFilename == "-")
|
||||
return new raw_fd_ostream(1, false); // stdout.
|
||||
return llvm::make_unique<raw_fd_ostream>(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::error_code EC;
|
||||
raw_ostream *Result = new raw_fd_ostream(OutputFilename, EC,
|
||||
sys::fs::F_Append | sys::fs::F_Text);
|
||||
auto Result = llvm::make_unique<raw_fd_ostream>(
|
||||
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<raw_fd_ostream>(2, false); // stderr.
|
||||
}
|
||||
|
||||
|
||||
|
@ -293,9 +290,8 @@ void TimerGroup::removeTimer(Timer &T) {
|
|||
if (FirstTimer || TimersToPrint.empty())
|
||||
return;
|
||||
|
||||
raw_ostream *OutStream = CreateInfoOutputFile();
|
||||
std::unique_ptr<raw_ostream> OutStream = CreateInfoOutputFile();
|
||||
PrintQueuedTimers(*OutStream);
|
||||
delete OutStream; // Close the file.
|
||||
}
|
||||
|
||||
void TimerGroup::addTimer(Timer &T) {
|
||||
|
|
Loading…
Reference in New Issue