[llvm] r255831 - Simplify memory management with std::unique_ptr.
Rafael Espindola via llvm-commits
llvm-commits at lists.llvm.org
Wed Dec 16 14:28:34 PST 2015
Author: rafael
Date: Wed Dec 16 16:28:34 2015
New Revision: 255831
URL: http://llvm.org/viewvc/llvm-project?rev=255831&view=rev
Log:
Simplify memory management with std::unique_ptr.
Modified:
llvm/trunk/include/llvm/ADT/Statistic.h
llvm/trunk/lib/Support/Statistic.cpp
llvm/trunk/lib/Support/Timer.cpp
Modified: llvm/trunk/include/llvm/ADT/Statistic.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/Statistic.h?rev=255831&r1=255830&r2=255831&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ADT/Statistic.h (original)
+++ llvm/trunk/include/llvm/ADT/Statistic.h Wed Dec 16 16:28:34 2015
@@ -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();
Modified: llvm/trunk/lib/Support/Statistic.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Statistic.cpp?rev=255831&r1=255830&r2=255831&view=diff
==============================================================================
--- llvm/trunk/lib/Support/Statistic.cpp (original)
+++ llvm/trunk/lib/Support/Statistic.cpp Wed Dec 16 16:28:34 2015
@@ -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. "
- << "Build with asserts or with -DLLVM_ENABLE_STATS\n";
- OutStream.flush();
- delete &OutStream; // Close the file.
+ std::unique_ptr<raw_ostream> OutStream = CreateInfoOutputFile();
+ (*OutStream) << "Statistics are disabled. "
+ << "Build with asserts or with -DLLVM_ENABLE_STATS\n";
}
#endif
}
Modified: llvm/trunk/lib/Support/Timer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Timer.cpp?rev=255831&r1=255830&r2=255831&view=diff
==============================================================================
--- llvm/trunk/lib/Support/Timer.cpp (original)
+++ llvm/trunk/lib/Support/Timer.cpp Wed Dec 16 16:28:34 2015
@@ -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.
}
@@ -292,10 +289,9 @@ void TimerGroup::removeTimer(Timer &T) {
// them were started.
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) {
More information about the llvm-commits
mailing list