summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Support/raw_ostream.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Support/raw_ostream.cpp')
-rw-r--r--llvm/lib/Support/raw_ostream.cpp20
1 files changed, 11 insertions, 9 deletions
diff --git a/llvm/lib/Support/raw_ostream.cpp b/llvm/lib/Support/raw_ostream.cpp
index c66457ca066..d6b958d1844 100644
--- a/llvm/lib/Support/raw_ostream.cpp
+++ b/llvm/lib/Support/raw_ostream.cpp
@@ -517,8 +517,7 @@ raw_fd_ostream::raw_fd_ostream(StringRef Filename, std::error_code &EC,
/// FD is the file descriptor that this writes to. If ShouldClose is true, this
/// closes the file when the stream is destroyed.
raw_fd_ostream::raw_fd_ostream(int fd, bool shouldClose, bool unbuffered)
- : raw_pwrite_stream(unbuffered), FD(fd), ShouldClose(shouldClose),
- Error(false) {
+ : raw_pwrite_stream(unbuffered), FD(fd), ShouldClose(shouldClose) {
if (FD < 0 ) {
ShouldClose = false;
return;
@@ -552,8 +551,10 @@ raw_fd_ostream::raw_fd_ostream(int fd, bool shouldClose, bool unbuffered)
raw_fd_ostream::~raw_fd_ostream() {
if (FD >= 0) {
flush();
- if (ShouldClose && sys::Process::SafelyCloseFileDescriptor(FD))
- error_detected();
+ if (ShouldClose) {
+ if (auto EC = sys::Process::SafelyCloseFileDescriptor(FD))
+ error_detected(EC);
+ }
}
#ifdef __MINGW32__
@@ -569,7 +570,8 @@ raw_fd_ostream::~raw_fd_ostream() {
// has_error() and clear the error flag with clear_error() before
// destructing raw_ostream objects which may have errors.
if (has_error())
- report_fatal_error("IO failure on output stream.", /*GenCrashDiag=*/false);
+ report_fatal_error("IO failure on output stream: " + error().message(),
+ /*GenCrashDiag=*/false);
}
void raw_fd_ostream::write_impl(const char *Ptr, size_t Size) {
@@ -613,7 +615,7 @@ void raw_fd_ostream::write_impl(const char *Ptr, size_t Size) {
continue;
// Otherwise it's a non-recoverable error. Note it and quit.
- error_detected();
+ error_detected(std::error_code(errno, std::generic_category()));
break;
}
@@ -629,8 +631,8 @@ void raw_fd_ostream::close() {
assert(ShouldClose);
ShouldClose = false;
flush();
- if (sys::Process::SafelyCloseFileDescriptor(FD))
- error_detected();
+ if (auto EC = sys::Process::SafelyCloseFileDescriptor(FD))
+ error_detected(EC);
FD = -1;
}
@@ -645,7 +647,7 @@ uint64_t raw_fd_ostream::seek(uint64_t off) {
pos = ::lseek(FD, off, SEEK_SET);
#endif
if (pos == (uint64_t)-1)
- error_detected();
+ error_detected(std::error_code(errno, std::generic_category()));
return pos;
}
OpenPOWER on IntegriCloud