When standard output is a terminal, set outs() to be unbuffered, to

mimic the behavior of stdtout, which is line-buffered when the output
is a terminal. This fixes some issues with bugpoint output appearing
being printed out of order.

llvm-svn: 78953
This commit is contained in:
Dan Gohman 2009-08-13 23:18:56 +00:00
parent f55822e7cd
commit 0c10b8864a

View File

@ -315,6 +315,10 @@ raw_fd_ostream::raw_fd_ostream(const char *Filename, bool Binary, bool Force,
if (Binary)
sys::Program::ChangeStdoutToBinary();
ShouldClose = false;
// Mimic stdout by defaulting to unbuffered if the output device
// is a terminal.
if (sys::Process::StandardOutIsDisplayed())
SetUnbuffered();
return;
}
@ -411,7 +415,13 @@ raw_ostream &raw_fd_ostream::resetColor() {
// raw_stdout/err_ostream
//===----------------------------------------------------------------------===//
raw_stdout_ostream::raw_stdout_ostream():raw_fd_ostream(STDOUT_FILENO, false) {}
// Set buffer settings to model stdout and stderr behavior.
// raw_ostream doesn't support line buffering, so set standard output to be
// unbuffered when the output device is a terminal. Set standard error to
// be unbuffered.
raw_stdout_ostream::raw_stdout_ostream()
: raw_fd_ostream(STDOUT_FILENO, false,
sys::Process::StandardOutIsDisplayed()) {}
raw_stderr_ostream::raw_stderr_ostream():raw_fd_ostream(STDERR_FILENO, false,
true) {}