From 38ad05a6a6a669c107ee9da686e37ea7d2f7aace Mon Sep 17 00:00:00 2001 From: Yaron Keren Date: Thu, 30 Mar 2017 19:30:51 +0000 Subject: [PATCH] Following r297661, disable dup workaround to disable duplicate STDOUT fd closing and instead directly prevent closing of STD* file descriptors. We do not want to close STDOUT as there may have been several uses of it such as the case: llc %s -o=- -pass-remarks-output=- -filetype=asm which cause multiple closes of STDOUT_FILENO and/or use-after-close of it. Using dup() in getFD doesn't work as we end up with original STDOUT_FILENO open anyhow. reviewed by Rafael Espindola Differential Revision: https://reviews.llvm.org/D31505 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@299098 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Support/raw_ostream.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/Support/raw_ostream.cpp b/lib/Support/raw_ostream.cpp index 5deab5de4f6..d804a006824 100644 --- a/lib/Support/raw_ostream.cpp +++ b/lib/Support/raw_ostream.cpp @@ -473,7 +473,7 @@ static int getFD(StringRef Filename, std::error_code &EC, // possible. if (!(Flags & sys::fs::F_Text)) sys::ChangeStdoutToBinary(); - return dup(STDOUT_FILENO); + return STDOUT_FILENO; } int FD; @@ -497,6 +497,13 @@ raw_fd_ostream::raw_fd_ostream(int fd, bool shouldClose, bool unbuffered) ShouldClose = false; return; } + // We do not want to close STDOUT as there may have been several uses of it + // such as the case: llc %s -o=- -pass-remarks-output=- -filetype=asm + // which cause multiple closes of STDOUT_FILENO and/or use-after-close of it. + // Using dup() in getFD doesn't work as we end up with original STDOUT_FILENO + // open anyhow. + if (FD <= STDERR_FILENO) + ShouldClose = false; // Get the starting position. off_t loc = ::lseek(FD, 0, SEEK_CUR); -- 2.40.0