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 f0090d8..dcd3367 100644
--- a/lib/Support/raw_ostream.cpp
+++ b/lib/Support/raw_ostream.cpp
@@ -315,6 +315,10 @@
     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_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) {}