From 02b2fe524cc2a7480d06ce6a0104e0ce36d31ee9 Mon Sep 17 00:00:00 2001 From: David Blaikie Date: Sun, 10 Aug 2014 23:35:58 +0000 Subject: [PATCH] unique_ptrify CompilerInstance::OutputFile(s) and remove a unique_ptr around a non-owning raw_ostream in CodeGenAction::CreateASTConsumer git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@215331 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Frontend/CompilerInstance.h | 21 +++++++--------- lib/CodeGen/CodeGenAction.cpp | 4 +-- lib/Frontend/CompilerInstance.cpp | 30 ++++++++++++----------- 3 files changed, 27 insertions(+), 28 deletions(-) diff --git a/include/clang/Frontend/CompilerInstance.h b/include/clang/Frontend/CompilerInstance.h index 89397d3945..3524d6ad1a 100644 --- a/include/clang/Frontend/CompilerInstance.h +++ b/include/clang/Frontend/CompilerInstance.h @@ -144,11 +144,11 @@ class CompilerInstance : public ModuleLoader { struct OutputFile { std::string Filename; std::string TempFilename; - raw_ostream *OS; + std::unique_ptr OS; OutputFile(const std::string &filename, const std::string &tempFilename, - raw_ostream *os) - : Filename(filename), TempFilename(tempFilename), OS(os) { } + std::unique_ptr OS) + : Filename(filename), TempFilename(tempFilename), OS(std::move(OS)) { } }; /// The list of active output files. @@ -508,7 +508,7 @@ public: /// addOutputFile - Add an output file onto the list of tracked output files. /// /// \param OutFile - The output file info. - void addOutputFile(const OutputFile &OutFile); + void addOutputFile(OutputFile OutFile); /// clearOutputFiles - Clear the output file list, destroying the contained /// output streams. @@ -657,14 +657,11 @@ public: /// stored here on success. /// \param TempPathName [out] - If given, the temporary file path name /// will be stored here on success. - static llvm::raw_fd_ostream * - createOutputFile(StringRef OutputPath, std::string &Error, - bool Binary, bool RemoveFileOnSignal, - StringRef BaseInput, - StringRef Extension, - bool UseTemporary, - bool CreateMissingDirectories, - std::string *ResultPathName, + static std::unique_ptr + createOutputFile(StringRef OutputPath, std::string &Error, bool Binary, + bool RemoveFileOnSignal, StringRef BaseInput, + StringRef Extension, bool UseTemporary, + bool CreateMissingDirectories, std::string *ResultPathName, std::string *TempPathName); llvm::raw_null_ostream *createNullOutputFile(); diff --git a/lib/CodeGen/CodeGenAction.cpp b/lib/CodeGen/CodeGenAction.cpp index 407b92b27c..d8666114f0 100644 --- a/lib/CodeGen/CodeGenAction.cpp +++ b/lib/CodeGen/CodeGenAction.cpp @@ -610,7 +610,7 @@ static raw_ostream *GetOutputStream(CompilerInstance &CI, std::unique_ptr CodeGenAction::CreateASTConsumer(CompilerInstance &CI, StringRef InFile) { BackendAction BA = static_cast(Act); - std::unique_ptr OS(GetOutputStream(CI, InFile, BA)); + raw_ostream *OS = GetOutputStream(CI, InFile, BA); if (BA != Backend_EmitNothing && !OS) return nullptr; @@ -649,7 +649,7 @@ CodeGenAction::CreateASTConsumer(CompilerInstance &CI, StringRef InFile) { std::unique_ptr Result(new BackendConsumer( BA, CI.getDiagnostics(), CI.getCodeGenOpts(), CI.getTargetOpts(), CI.getLangOpts(), CI.getFrontendOpts().ShowTimers, InFile, - LinkModuleToUse, OS.release(), *VMContext, CoverageInfo)); + LinkModuleToUse, OS, *VMContext, CoverageInfo)); BEConsumer = Result.get(); return std::move(Result); } diff --git a/lib/Frontend/CompilerInstance.cpp b/lib/Frontend/CompilerInstance.cpp index d8f4400f44..2de221d13a 100644 --- a/lib/Frontend/CompilerInstance.cpp +++ b/lib/Frontend/CompilerInstance.cpp @@ -518,15 +518,15 @@ void CompilerInstance::createSema(TranslationUnitKind TUKind, // Output Files -void CompilerInstance::addOutputFile(const OutputFile &OutFile) { +void CompilerInstance::addOutputFile(OutputFile OutFile) { assert(OutFile.OS && "Attempt to add empty stream to output list!"); - OutputFiles.push_back(OutFile); + OutputFiles.push_back(std::move(OutFile)); } void CompilerInstance::clearOutputFiles(bool EraseFiles) { for (std::list::iterator it = OutputFiles.begin(), ie = OutputFiles.end(); it != ie; ++it) { - delete it->OS; + it->OS.reset(); if (!it->TempFilename.empty()) { if (EraseFiles) { llvm::sys::fs::remove(it->TempFilename); @@ -561,9 +561,10 @@ CompilerInstance::createDefaultOutputFile(bool Binary, } llvm::raw_null_ostream *CompilerInstance::createNullOutputFile() { - llvm::raw_null_ostream *OS = new llvm::raw_null_ostream(); - addOutputFile(OutputFile("", "", OS)); - return OS; + auto OS = llvm::make_unique(); + auto *Res = OS.get(); + addOutputFile(OutputFile("", "", std::move(OS))); + return Res; } llvm::raw_fd_ostream * @@ -574,7 +575,7 @@ CompilerInstance::createOutputFile(StringRef OutputPath, bool UseTemporary, bool CreateMissingDirectories) { std::string Error, OutputPathName, TempPathName; - llvm::raw_fd_ostream *OS = createOutputFile(OutputPath, Error, Binary, + auto OS = createOutputFile(OutputPath, Error, Binary, RemoveFileOnSignal, InFile, Extension, UseTemporary, @@ -587,15 +588,16 @@ CompilerInstance::createOutputFile(StringRef OutputPath, return nullptr; } + auto *Res = OS.get(); // Add the output file -- but don't try to remove "-", since this means we are // using stdin. addOutputFile(OutputFile((OutputPathName != "-") ? OutputPathName : "", - TempPathName, OS)); + TempPathName, std::move(OS))); - return OS; + return Res; } -llvm::raw_fd_ostream * +std::unique_ptr CompilerInstance::createOutputFile(StringRef OutputPath, std::string &Error, bool Binary, @@ -663,7 +665,7 @@ CompilerInstance::createOutputFile(StringRef OutputPath, } if (!EC) { - OS.reset(new llvm::raw_fd_ostream(fd, /*shouldClose=*/true)); + OS = llvm::make_unique(fd, /*shouldClose=*/true); OSFile = TempFile = TempPath.str(); } // If we failed to create the temporary, fallback to writing to the file @@ -673,9 +675,9 @@ CompilerInstance::createOutputFile(StringRef OutputPath, if (!OS) { OSFile = OutFile; - OS.reset(new llvm::raw_fd_ostream( + OS = llvm::make_unique( OSFile.c_str(), Error, - (Binary ? llvm::sys::fs::F_None : llvm::sys::fs::F_Text))); + (Binary ? llvm::sys::fs::F_None : llvm::sys::fs::F_Text)); if (!Error.empty()) return nullptr; } @@ -689,7 +691,7 @@ CompilerInstance::createOutputFile(StringRef OutputPath, if (TempPathName) *TempPathName = TempFile; - return OS.release(); + return OS; } // Initialization Utilities -- 2.40.0