Index: llvm/trunk/include/llvm/Support/raw_ostream.h
===================================================================
--- llvm/trunk/include/llvm/Support/raw_ostream.h
+++ llvm/trunk/include/llvm/Support/raw_ostream.h
@@ -479,6 +479,9 @@
 
 /// A raw_ostream that writes to an std::string.  This is a simple adaptor
 /// class. This class does not encounter output errors.
+/// raw_string_ostream operates without a buffer, delegating all memory
+/// management to the std::string. Thus the std::string is always up-to-date,
+/// may be used directly and there is no need to call flush().
 class raw_string_ostream : public raw_ostream {
   std::string &OS;
 
@@ -490,13 +493,16 @@
   uint64_t current_pos() const override { return OS.size(); }
 
 public:
-  explicit raw_string_ostream(std::string &O) : OS(O) {}
+  explicit raw_string_ostream(std::string &O)
+      : raw_ostream(/*Unbuffered=*/true), OS(O) {}
+
   ~raw_string_ostream() override;
 
-  /// Flushes the stream contents to the target string and returns  the string's
-  /// reference.
+  // FIXME: uncomment and deal with the fallout.
+  // void flush() = delete;
+
+  /// Returns the string's reference.
   std::string& str() {
-    flush();
     return OS;
   }
 };