Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(91)

Unified Diff: src/IceCompileServer.cpp

Issue 1111603003: Subzero: Fix asm (non-ELF) output files. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/IceBrowserCompileServer.h ('k') | src/IceGlobalContext.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/IceCompileServer.cpp
diff --git a/src/IceCompileServer.cpp b/src/IceCompileServer.cpp
index cf398d41dc8b197f93a2fa69015c122b881e39e9..25b8092bf256e886936f95e8a95c634d2f589f1e 100644
--- a/src/IceCompileServer.cpp
+++ b/src/IceCompileServer.cpp
@@ -30,13 +30,13 @@ namespace Ice {
namespace {
-std::unique_ptr<Ostream> getStream(const IceString &Filename) {
- std::ofstream Ofs;
- if (Filename != "-") {
- Ofs.open(Filename.c_str(), std::ofstream::out);
- return std::unique_ptr<Ostream>(new llvm::raw_os_ostream(Ofs));
- } else {
+std::unique_ptr<Ostream> makeStream(const IceString &Filename,
+ std::error_code &EC) {
+ if (Filename == "-") {
return std::unique_ptr<Ostream>(new llvm::raw_os_ostream(std::cout));
+ } else {
+ return std::unique_ptr<Ostream>(
+ new llvm::raw_fd_ostream(Filename, EC, llvm::sys::fs::F_None));
}
}
@@ -55,7 +55,11 @@ void CLCompileServer::run() {
ClFlags::getParsedClFlags(Flags);
ClFlags::getParsedClFlagsExtra(ExtraFlags);
- std::unique_ptr<Ostream> Ls = getStream(ExtraFlags.getLogFilename());
+ std::error_code EC;
+ std::unique_ptr<Ostream> Ls = makeStream(ExtraFlags.getLogFilename(), EC);
+ if (EC) {
+ llvm::report_fatal_error("Unable to open log file");
+ }
Ls->SetUnbuffered();
std::unique_ptr<Ostream> Os;
std::unique_ptr<ELFStreamer> ELFStr;
@@ -65,7 +69,6 @@ void CLCompileServer::run() {
*Ls << "Error: writing binary ELF to stdout is unsupported\n";
return transferErrorCode(getReturnValue(ExtraFlags, Ice::EC_Args));
}
- std::error_code EC;
std::unique_ptr<llvm::raw_fd_ostream> FdOs(new llvm::raw_fd_ostream(
ExtraFlags.getOutputFilename(), EC, llvm::sys::fs::F_None));
if (EC) {
@@ -81,7 +84,12 @@ void CLCompileServer::run() {
} break;
case FT_Asm:
case FT_Iasm: {
- Os = getStream(ExtraFlags.getOutputFilename());
+ Os = makeStream(ExtraFlags.getOutputFilename(), EC);
+ if (EC) {
+ *Ls << "Failed to open output file: " << ExtraFlags.getOutputFilename()
+ << ":\n" << EC.message() << "\n";
+ return transferErrorCode(getReturnValue(ExtraFlags, Ice::EC_Args));
+ }
Os->SetUnbuffered();
} break;
}
@@ -96,8 +104,8 @@ void CLCompileServer::run() {
return transferErrorCode(getReturnValue(ExtraFlags, Ice::EC_Bitcode));
}
- Ctx.reset(new GlobalContext(Ls.get(), Os.get(), Ls.get(), ELFStr.get(),
- Flags));
+ Ctx.reset(
+ new GlobalContext(Ls.get(), Os.get(), Ls.get(), ELFStr.get(), Flags));
if (Ctx->getFlags().getNumTranslationThreads() != 0) {
std::thread CompileThread([this, &ExtraFlags, &InputStream]() {
Ctx->initParserThread();
« no previous file with comments | « src/IceBrowserCompileServer.h ('k') | src/IceGlobalContext.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698