[llvm-commits] [llvm] r82434 - /llvm/trunk/include/llvm/Support/FormattedStream.h

Daniel Dunbar daniel at zuster.org
Sun Sep 20 20:56:03 PDT 2009


Author: ddunbar
Date: Sun Sep 20 22:56:00 2009
New Revision: 82434

URL: http://llvm.org/viewvc/llvm-project?rev=82434&view=rev
Log:
Don't allow formatted_ostream to be unbuffered, even if its underlying buffer
is.
 - The problem is that formatted_ostream forces its underlying buffer to be
   unbuffered, so if some client happens to wrap a formatted_ostream around
   something, but still use the underlying stream, then we can end up writing on
   a fully unbuffered output (which was never intended to be unbuffered).

 - This makes clang (and presumably llvm-gcc) -emit-llvm -S a mere 10x faster.

Modified:
    llvm/trunk/include/llvm/Support/FormattedStream.h

Modified: llvm/trunk/include/llvm/Support/FormattedStream.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/FormattedStream.h?rev=82434&r1=82433&r2=82434&view=diff

==============================================================================
--- llvm/trunk/include/llvm/Support/FormattedStream.h (original)
+++ llvm/trunk/include/llvm/Support/FormattedStream.h Sun Sep 20 22:56:00 2009
@@ -105,10 +105,15 @@
       // own buffering, and it doesn't need or want TheStream to do another
       // layer of buffering underneath. Resize the buffer to what TheStream
       // had been using, and tell TheStream not to do its own buffering.
+      //
+      // If the underlying stream is unbuffered, just use its preferred buffer
+      // size. We can't treat this as an honest wish for unbuffered output,
+      // because it could very well be a stream we previously forced to be
+      // unbuffered.
       if (size_t BufferSize = TheStream->GetBufferSize())
         SetBufferSize(BufferSize);
       else
-        SetUnbuffered();
+        SetBuffered();
       TheStream->SetUnbuffered();
 
       Scanned = 0;





More information about the llvm-commits mailing list