summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNAKAMURA Takumi <geek4civic@gmail.com>2014-08-11 06:53:11 +0000
committerNAKAMURA Takumi <geek4civic@gmail.com>2014-08-11 06:53:11 +0000
commit69f3528c6abc83efd48977ba9c67150b93f15580 (patch)
tree59a38ba9ed4d72ada59170840e829f69fe76f8e7
parentfca534444b34a755d0350836739b96096050de17 (diff)
downloadbcm5719-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.h21
-rw-r--r--clang/lib/CodeGen/CodeGenAction.cpp4
-rw-r--r--clang/lib/Frontend/CompilerInstance.cpp30
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
OpenPOWER on IntegriCloud