[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