summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Support/raw_ostream.cpp
diff options
context:
space:
mode:
authorBob Haarman <llvm@inglorion.net>2017-10-24 01:26:22 +0000
committerBob Haarman <llvm@inglorion.net>2017-10-24 01:26:22 +0000
commit9ce2d03e5421979f9f007ec01d5aa429c36822ed (patch)
treea8015bd7c4e8e0d6b30bf383027547f881a786df /llvm/lib/Support/raw_ostream.cpp
parent0501f97cef778f7ebdb0441a359f62dbd93ca87d (diff)
downloadbcm5719-llvm-9ce2d03e5421979f9f007ec01d5aa429c36822ed.tar.gz
bcm5719-llvm-9ce2d03e5421979f9f007ec01d5aa429c36822ed.zip
[raw_fd_ostream] report actual error in error messages
Summary: Previously, we would emit error messages like "IO failure on output stream". This change causes use to include information about what actually went wrong, e.g. "No space left on device". Reviewers: sunfish, rnk Reviewed By: rnk Subscribers: mehdi_amini, llvm-commits, hiraditya Differential Revision: https://reviews.llvm.org/D39203 llvm-svn: 316404
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