From: Dan Gohman Date: Thu, 13 Aug 2009 23:18:56 +0000 (+0000) Subject: When standard output is a terminal, set outs() to be unbuffered, to X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=ec9b26100e06d566ccb4516c6fe3f2a685ecd941;p=oota-llvm.git 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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78953 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Support/raw_ostream.cpp b/lib/Support/raw_ostream.cpp index f0090d8d93f..dcd33673acd 100644 --- a/lib/Support/raw_ostream.cpp +++ b/lib/Support/raw_ostream.cpp @@ -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) {}