diff options
author | NAKAMURA Takumi <geek4civic@gmail.com> | 2014-08-11 06:53:11 +0000 |
---|---|---|
committer | NAKAMURA Takumi <geek4civic@gmail.com> | 2014-08-11 06:53:11 +0000 |
commit | 69f3528c6abc83efd48977ba9c67150b93f15580 (patch) | |
tree | 59a38ba9ed4d72ada59170840e829f69fe76f8e7 | |
parent | fca534444b34a755d0350836739b96096050de17 (diff) | |
download | bcm5719-llvm-69f3528c6abc83efd48977ba9c67150b93f15580.tar.gz bcm5719-llvm-69f3528c6abc83efd48977ba9c67150b93f15580.zip |
Revert r215331, "unique_ptrify CompilerInstance::OutputFile(s) and remove a unique_ptr around a non-owning raw_ostream in CodeGenAction::CreateASTConsumer"
It cannot be compiled on Visual Studio 2012.
clang\include\clang/Frontend/CompilerInstance.h(153):
error C2248: 'std::unique_ptr<_Ty>::unique_ptr' : cannot access private member declared in class 'std::unique_ptr<_Ty>'
with
[
_Ty=llvm::raw_ostream
]
D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\memory(1447) : see declaration of 'std::unique_ptr<_Ty>::unique_ptr'
with
[
_Ty=llvm::raw_ostream
]
This diagnostic occurred in the compiler generated function 'clang::CompilerInstance::OutputFile::OutputFile(const clang::CompilerInstance::OutputFile &)'
llvm-svn: 215346
-rw-r--r-- | clang/include/clang/Frontend/CompilerInstance.h | 21 | ||||
-rw-r--r-- | clang/lib/CodeGen/CodeGenAction.cpp | 4 | ||||
-rw-r--r-- | clang/lib/Frontend/CompilerInstance.cpp | 30 |
3 files changed, 28 insertions, 27 deletions
diff --git a/clang/include/clang/Frontend/CompilerInstance.h b/clang/include/clang/Frontend/CompilerInstance.h index 3524d6ad1a0..89397d39457 100644 --- a/clang/include/clang/Frontend/CompilerInstance.h +++ b/clang/include/clang/Frontend/CompilerInstance.h @@ -144,11 +144,11 @@ class CompilerInstance : public ModuleLoader { struct OutputFile { std::string Filename; std::string TempFilename; - std::unique_ptr<raw_ostream> OS; + raw_ostream *OS; OutputFile(const std::string &filename, const std::string &tempFilename, - std::unique_ptr<raw_ostream> OS) - : Filename(filename), TempFilename(tempFilename), OS(std::move(OS)) { } + raw_ostream *os) + : Filename(filename), TempFilename(tempFilename), OS(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(OutputFile OutFile); + void addOutputFile(const OutputFile &OutFile); /// clearOutputFiles - Clear the output file list, destroying the contained /// output streams. @@ -657,11 +657,14 @@ public: /// stored here on success. /// \param TempPathName [out] - If given, the temporary file path name /// will be stored here on success. - static std::unique_ptr<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 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, std::string *TempPathName); llvm::raw_null_ostream *createNullOutputFile(); diff --git a/clang/lib/CodeGen/CodeGenAction.cpp b/clang/lib/CodeGen/CodeGenAction.cpp index d8666114f08..407b92b27c0 100644 --- a/clang/lib/CodeGen/CodeGenAction.cpp +++ b/clang/lib/CodeGen/CodeGenAction.cpp @@ -610,7 +610,7 @@ static raw_ostream *GetOutputStream(CompilerInstance &CI, std::unique_ptr<ASTConsumer> CodeGenAction::CreateASTConsumer(CompilerInstance &CI, StringRef InFile) { BackendAction BA = static_cast<BackendAction>(Act); - raw_ostream *OS = GetOutputStream(CI, InFile, BA); + std::unique_ptr<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<BackendConsumer> Result(new BackendConsumer( BA, CI.getDiagnostics(), CI.getCodeGenOpts(), CI.getTargetOpts(), CI.getLangOpts(), CI.getFrontendOpts().ShowTimers, InFile, - LinkModuleToUse, OS, *VMContext, CoverageInfo)); + LinkModuleToUse, OS.release(), *VMContext, CoverageInfo)); BEConsumer = Result.get(); return std::move(Result); } diff --git a/clang/lib/Frontend/CompilerInstance.cpp b/clang/lib/Frontend/CompilerInstance.cpp index 2de221d13a5..d8f4400f447 100644 --- a/clang/lib/Frontend/CompilerInstance.cpp +++ b/clang/lib/Frontend/CompilerInstance.cpp @@ -518,15 +518,15 @@ void CompilerInstance::createSema(TranslationUnitKind TUKind, // Output Files -void CompilerInstance::addOutputFile(OutputFile OutFile) { +void CompilerInstance::addOutputFile(const OutputFile &OutFile) { assert(OutFile.OS && "Attempt to add empty stream to output list!"); - OutputFiles.push_back(std::move(OutFile)); + OutputFiles.push_back(OutFile); } void CompilerInstance::clearOutputFiles(bool EraseFiles) { for (std::list<OutputFile>::iterator it = OutputFiles.begin(), ie = OutputFiles.end(); it != ie; ++it) { - it->OS.reset(); + delete it->OS; if (!it->TempFilename.empty()) { if (EraseFiles) { llvm::sys::fs::remove(it->TempFilename); @@ -561,10 +561,9 @@ CompilerInstance::createDefaultOutputFile(bool Binary, } llvm::raw_null_ostream *CompilerInstance::createNullOutputFile() { - auto OS = llvm::make_unique<llvm::raw_null_ostream>(); - auto *Res = OS.get(); - addOutputFile(OutputFile("", "", std::move(OS))); - return Res; + llvm::raw_null_ostream *OS = new llvm::raw_null_ostream(); + addOutputFile(OutputFile("", "", OS)); + return OS; } llvm::raw_fd_ostream * @@ -575,7 +574,7 @@ CompilerInstance::createOutputFile(StringRef OutputPath, bool UseTemporary, bool CreateMissingDirectories) { std::string Error, OutputPathName, TempPathName; - auto OS = createOutputFile(OutputPath, Error, Binary, + llvm::raw_fd_ostream *OS = createOutputFile(OutputPath, Error, Binary, RemoveFileOnSignal, InFile, Extension, UseTemporary, @@ -588,16 +587,15 @@ 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, std::move(OS))); + TempPathName, OS)); - return Res; + return OS; } -std::unique_ptr<llvm::raw_fd_ostream> +llvm::raw_fd_ostream * CompilerInstance::createOutputFile(StringRef OutputPath, std::string &Error, bool Binary, @@ -665,7 +663,7 @@ CompilerInstance::createOutputFile(StringRef OutputPath, } if (!EC) { - OS = llvm::make_unique<llvm::raw_fd_ostream>(fd, /*shouldClose=*/true); + OS.reset(new llvm::raw_fd_ostream(fd, /*shouldClose=*/true)); OSFile = TempFile = TempPath.str(); } // If we failed to create the temporary, fallback to writing to the file @@ -675,9 +673,9 @@ CompilerInstance::createOutputFile(StringRef OutputPath, if (!OS) { OSFile = OutFile; - OS = llvm::make_unique<llvm::raw_fd_ostream>( + OS.reset(new llvm::raw_fd_ostream( 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; } @@ -691,7 +689,7 @@ CompilerInstance::createOutputFile(StringRef OutputPath, if (TempPathName) *TempPathName = TempFile; - return OS; + return OS.release(); } // Initialization Utilities |