From a95d3750441ac8ad03e36af8e6e74039c9a3109d Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Sat, 13 Sep 2008 05:16:45 +0000 Subject: [PATCH] Patch by Csaba Hruska! "Here is a patch what replaces std::ostream with llvm::raw_ostream. This patch covers the AST library, but ignores Analysis lib." git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56185 91177308-0d34-0410-b5e6-96231b3b80d8 --- Driver/ASTConsumers.cpp | 16 +++++++++++----- Driver/ASTConsumers.h | 3 ++- Driver/RewriteMacros.cpp | 21 +++++++++++++-------- Driver/RewriteObjC.cpp | 31 +++++++++++++++++++------------ Driver/SerializationTest.cpp | 10 ++++++---- include/clang/AST/CFG.h | 8 ++++---- include/clang/AST/PrettyPrinter.h | 4 ++-- include/clang/AST/Stmt.h | 4 ++-- lib/AST/CFG.cpp | 28 +++++++++++++++------------- lib/AST/StmtPrinter.cpp | 13 +++++++------ lib/AST/StmtViz.cpp | 3 ++- lib/AST/Type.cpp | 6 ++++-- lib/Analysis/GRExprEngine.cpp | 18 +++++++++++++----- lib/Analysis/GRState.cpp | 8 ++++++-- lib/Driver/HTMLDiagnostics.cpp | 20 +++++++++++++------- lib/Rewrite/HTMLRewrite.cpp | 8 +++++--- lib/Rewrite/Rewriter.cpp | 5 +++-- 17 files changed, 127 insertions(+), 79 deletions(-) diff --git a/Driver/ASTConsumers.cpp b/Driver/ASTConsumers.cpp index ec809ab69b..9c74301a9b 100644 --- a/Driver/ASTConsumers.cpp +++ b/Driver/ASTConsumers.cpp @@ -24,6 +24,7 @@ #include "llvm/Bitcode/ReaderWriter.h" #include "llvm/Support/Streams.h" #include "llvm/Support/Timer.h" +#include "llvm/Support/raw_ostream.h" #include "llvm/ADT/OwningPtr.h" #include @@ -35,10 +36,11 @@ using namespace clang; namespace { class DeclPrinter { public: - std::ostream& Out; + llvm::raw_ostream& Out; - DeclPrinter(std::ostream* out) : Out(out ? *out : *llvm::cerr.stream()) {} - DeclPrinter() : Out(*llvm::cerr.stream()) {} + DeclPrinter(llvm::raw_ostream* out) : Out(out ? *out : llvm::errs()) {} + DeclPrinter() : Out(llvm::errs()) {} + virtual ~DeclPrinter(); void PrintDecl(Decl *D); void PrintFunctionDeclStart(FunctionDecl *FD); @@ -56,6 +58,10 @@ namespace { }; } // end anonymous namespace +DeclPrinter::~DeclPrinter() { + Out.flush(); +} + void DeclPrinter:: PrintDecl(Decl *D) { if (FunctionDecl *FD = dyn_cast(D)) { PrintFunctionDeclStart(FD); @@ -422,7 +428,7 @@ void DeclPrinter::PrintObjCPropertyImplDecl(ObjCPropertyImplDecl *PID) { namespace { class ASTPrinter : public ASTConsumer, public DeclPrinter { public: - ASTPrinter(std::ostream* o = NULL) : DeclPrinter(o) {} + ASTPrinter(llvm::raw_ostream* o = NULL) : DeclPrinter(o) {} virtual void HandleTopLevelDecl(Decl *D) { PrintDecl(D); @@ -430,7 +436,7 @@ namespace { }; } -ASTConsumer *clang::CreateASTPrinter(std::ostream* out) { +ASTConsumer *clang::CreateASTPrinter(llvm::raw_ostream* out) { return new ASTPrinter(out); } diff --git a/Driver/ASTConsumers.h b/Driver/ASTConsumers.h index 7cb4ffb227..e56ad7cc06 100644 --- a/Driver/ASTConsumers.h +++ b/Driver/ASTConsumers.h @@ -14,6 +14,7 @@ #ifndef DRIVER_ASTCONSUMERS_H #define DRIVER_ASTCONSUMERS_H +#include "llvm/Support/raw_ostream.h" #include #include @@ -30,7 +31,7 @@ struct LangOptions; class Preprocessor; class PreprocessorFactory; -ASTConsumer *CreateASTPrinter(std::ostream* OS = NULL); +ASTConsumer *CreateASTPrinter(llvm::raw_ostream* OS = NULL); ASTConsumer *CreateASTDumper(); diff --git a/Driver/RewriteMacros.cpp b/Driver/RewriteMacros.cpp index 5500186f20..5106367839 100644 --- a/Driver/RewriteMacros.cpp +++ b/Driver/RewriteMacros.cpp @@ -17,8 +17,9 @@ #include "clang/Lex/Preprocessor.h" #include "clang/Basic/SourceManager.h" #include "llvm/Support/Streams.h" +#include "llvm/Support/raw_ostream.h" #include "llvm/System/Path.h" -#include +#include "llvm/ADT/OwningPtr.h" using namespace clang; /// isSameToken - Return true if the two specified tokens start have the same @@ -205,20 +206,23 @@ void clang::RewriteMacrosInInput(Preprocessor &PP,const std::string &InFileName, } // Create the output file. - std::ostream *OutFile; + llvm::OwningPtr OwnedStream; + llvm::raw_ostream *OutFile; if (OutFileName == "-") { - OutFile = llvm::cout.stream(); + OutFile = &llvm::outs(); } else if (!OutFileName.empty()) { - OutFile = new std::ofstream(OutFileName.c_str(), - std::ios_base::binary|std::ios_base::out); + std::string Err; + OutFile = new llvm::raw_fd_ostream(OutFileName.c_str(), Err); + OwnedStream.reset(OutFile); } else if (InFileName == "-") { - OutFile = llvm::cout.stream(); + OutFile = &llvm::outs(); } else { llvm::sys::Path Path(InFileName); Path.eraseSuffix(); Path.appendSuffix("cpp"); - OutFile = new std::ofstream(Path.toString().c_str(), - std::ios_base::binary|std::ios_base::out); + std::string Err; + OutFile = new llvm::raw_fd_ostream(Path.toString().c_str(), Err); + OwnedStream.reset(OutFile); } // Get the buffer corresponding to MainFileID. If we haven't changed it, then @@ -230,4 +234,5 @@ void clang::RewriteMacrosInInput(Preprocessor &PP,const std::string &InFileName, } else { fprintf(stderr, "No changes\n"); } + OutFile->flush(); } diff --git a/Driver/RewriteObjC.cpp b/Driver/RewriteObjC.cpp index bd809beae8..1ec83bf9c8 100644 --- a/Driver/RewriteObjC.cpp +++ b/Driver/RewriteObjC.cpp @@ -22,12 +22,12 @@ #include "clang/Lex/Lexer.h" #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/SmallPtrSet.h" +#include "llvm/ADT/OwningPtr.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/Streams.h" +#include "llvm/Support/raw_ostream.h" #include "llvm/System/Path.h" -#include -#include using namespace clang; using llvm::utostr; @@ -453,20 +453,23 @@ void RewriteObjC::HandleTranslationUnit(TranslationUnit& TU) { // Create the output file. - std::ostream *OutFile; + llvm::OwningPtr OwnedStream; + llvm::raw_ostream *OutFile; if (OutFileName == "-") { - OutFile = llvm::cout.stream(); + OutFile = &llvm::outs(); } else if (!OutFileName.empty()) { - OutFile = new std::ofstream(OutFileName.c_str(), - std::ios_base::binary|std::ios_base::out); + std::string Err; + OutFile = new llvm::raw_fd_ostream(OutFileName.c_str(), Err); + OwnedStream.reset(OutFile); } else if (InFileName == "-") { - OutFile = llvm::cout.stream(); + OutFile = &llvm::outs(); } else { llvm::sys::Path Path(InFileName); Path.eraseSuffix(); Path.appendSuffix("cpp"); - OutFile = new std::ofstream(Path.toString().c_str(), - std::ios_base::binary|std::ios_base::out); + std::string Err; + OutFile = new llvm::raw_fd_ostream(Path.toString().c_str(), Err); + OwnedStream.reset(OutFile); } RewriteInclude(); @@ -489,6 +492,7 @@ void RewriteObjC::HandleTranslationUnit(TranslationUnit& TU) { } // Emit metadata. *OutFile << ResultStr; + OutFile->flush(); } //===----------------------------------------------------------------------===// @@ -1040,7 +1044,8 @@ Stmt *RewriteObjC::RewriteFunctionBodyOrGlobalInitializer(Stmt *S) { if (ImplicitCastExpr *ICE = dyn_cast(S)) { CastExpr *Replacement = new CastExpr(ICE->getType(), ICE->getSubExpr(), SourceLocation()); // Get the new text. - std::ostringstream Buf; + std::string SStr; + llvm::raw_string_ostream Buf(SStr); Replacement->printPretty(Buf); const std::string &Str = Buf.str(); @@ -1333,7 +1338,8 @@ Stmt *RewriteObjC::RewriteObjCSynchronizedStmt(ObjCAtSynchronizedStmt *S) { buf += " objc_sync_exit("; Expr *syncExpr = new ExplicitCastExpr(Context->getObjCIdType(), S->getSynchExpr(), SourceLocation()); - std::ostringstream syncExprBuf; + std::string syncExprBufS; + llvm::raw_string_ostream syncExprBuf(syncExprBufS); syncExpr->printPretty(syncExprBuf); buf += syncExprBuf.str(); buf += ");\n"; @@ -1942,7 +1948,8 @@ Stmt *RewriteObjC::RewriteObjCStringLiteral(ObjCStringLiteral *Exp) { Preamble += " __attribute__ ((section (\"__DATA, __cfstring\"))) = {__CFConstantStringClassReference,"; Preamble += "0x000007c8,"; // utf8_str // The pretty printer for StringLiteral handles escape characters properly. - std::ostringstream prettyBuf; + std::string prettyBufS; + llvm::raw_string_ostream prettyBuf(prettyBufS); Exp->getString()->printPretty(prettyBuf); Preamble += prettyBuf.str(); Preamble += ","; diff --git a/Driver/SerializationTest.cpp b/Driver/SerializationTest.cpp index 50d06d4d77..9f93479912 100644 --- a/Driver/SerializationTest.cpp +++ b/Driver/SerializationTest.cpp @@ -64,8 +64,9 @@ bool SerializationTest::Serialize(llvm::sys::Path& Filename, TranslationUnit& TU) { { // Pretty-print the decls to a temp file. - std::ofstream DeclPP(FNameDeclPrint.c_str()); - assert (DeclPP && "Could not open file for printing out decls."); + std::string Err; + llvm::raw_fd_ostream DeclPP(FNameDeclPrint.c_str(), Err); + assert (Err.empty() && "Could not open file for printing out decls."); llvm::OwningPtr FilePrinter(CreateASTPrinter(&DeclPP)); for (TranslationUnit::iterator I=TU.begin(), E=TU.end(); I!=E; ++I) @@ -87,8 +88,9 @@ bool SerializationTest::Deserialize(llvm::sys::Path& Filename, { // Pretty-print the deserialized decls to a temp file. - std::ofstream DeclPP(FNameDeclPrint.c_str()); - assert (DeclPP && "Could not open file for printing out decls."); + std::string Err; + llvm::raw_fd_ostream DeclPP(FNameDeclPrint.c_str(), Err); + assert (Err.empty() && "Could not open file for printing out decls."); llvm::OwningPtr FilePrinter(CreateASTPrinter(&DeclPP)); for (TranslationUnit::iterator I=NewTU->begin(), E=NewTU->end(); I!=E; ++I) diff --git a/include/clang/AST/CFG.h b/include/clang/AST/CFG.h index b9ceee0836..1d82ee2da5 100644 --- a/include/clang/AST/CFG.h +++ b/include/clang/AST/CFG.h @@ -17,9 +17,9 @@ #include "llvm/ADT/GraphTraits.h" #include "llvm/Support/Allocator.h" +#include "llvm/Support/raw_ostream.h" #include #include -#include #include namespace clang { @@ -174,8 +174,8 @@ public: unsigned getBlockID() const { return BlockID; } void dump(const CFG* cfg) const; - void print(std::ostream& OS, const CFG* cfg) const; - void printTerminator(std::ostream& OS) const; + void print(llvm::raw_ostream& OS, const CFG* cfg) const; + void printTerminator(llvm::raw_ostream& OS) const; }; @@ -276,7 +276,7 @@ public: //===--------------------------------------------------------------------===// void viewCFG() const; - void print(std::ostream& OS) const; + void print(llvm::raw_ostream& OS) const; void dump() const; //===--------------------------------------------------------------------===// diff --git a/include/clang/AST/PrettyPrinter.h b/include/clang/AST/PrettyPrinter.h index 9de8331e7f..f43b59f693 100644 --- a/include/clang/AST/PrettyPrinter.h +++ b/include/clang/AST/PrettyPrinter.h @@ -14,7 +14,7 @@ #ifndef LLVM_CLANG_AST_PRETTY_PRINTER_H #define LLVM_CLANG_AST_PRETTY_PRINTER_H -#include +#include "llvm/Support/raw_ostream.h" namespace clang { @@ -23,7 +23,7 @@ class Stmt; class PrinterHelper { public: virtual ~PrinterHelper(); - virtual bool handledStmt(Stmt* E, std::ostream& OS) = 0; + virtual bool handledStmt(Stmt* E, llvm::raw_ostream& OS) = 0; }; } // end namespace clang diff --git a/include/clang/AST/Stmt.h b/include/clang/AST/Stmt.h index 0461dab890..d8cf087ea1 100644 --- a/include/clang/AST/Stmt.h +++ b/include/clang/AST/Stmt.h @@ -15,12 +15,12 @@ #define LLVM_CLANG_AST_STMT_H #include "llvm/Support/Casting.h" +#include "llvm/Support/raw_ostream.h" #include "clang/Basic/SourceLocation.h" #include "clang/AST/StmtIterator.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/iterator.h" #include "llvm/Bitcode/SerializationFwd.h" -#include #include using llvm::dyn_cast_or_null; @@ -92,7 +92,7 @@ public: /// dumpPretty/printPretty - These two methods do a "pretty print" of the AST /// back to its original source language syntax. void dumpPretty() const; - void printPretty(std::ostream &OS, PrinterHelper* = NULL) const; + void printPretty(llvm::raw_ostream &OS, PrinterHelper* = NULL) const; /// viewAST - Visualize an AST rooted at this Stmt* using GraphViz. Only /// works on systems with GraphViz (Mac OS X) or dot+gv installed. diff --git a/lib/AST/CFG.cpp b/lib/AST/CFG.cpp index 84bf1e72a4..78c8dca423 100644 --- a/lib/AST/CFG.cpp +++ b/lib/AST/CFG.cpp @@ -21,6 +21,7 @@ #include "llvm/Support/Streams.h" #include "llvm/Support/Compiler.h" #include +#include #include #include #include @@ -1306,7 +1307,7 @@ public: void setBlockID(signed i) { CurrentBlock = i; } void setStmtID(unsigned i) { CurrentStmt = i; } - virtual bool handledStmt(Stmt* Terminator, std::ostream& OS) { + virtual bool handledStmt(Stmt* Terminator, llvm::raw_ostream& OS) { StmtMapTy::iterator I = StmtMap.find(Terminator); @@ -1325,10 +1326,10 @@ public: class VISIBILITY_HIDDEN CFGBlockTerminatorPrint : public StmtVisitor { - std::ostream& OS; + llvm::raw_ostream& OS; StmtPrinterHelper* Helper; public: - CFGBlockTerminatorPrint(std::ostream& os, StmtPrinterHelper* helper) + CFGBlockTerminatorPrint(llvm::raw_ostream& os, StmtPrinterHelper* helper) : OS(os), Helper(helper) {} void VisitIfStmt(IfStmt* I) { @@ -1406,7 +1407,7 @@ public: }; -void print_stmt(std::ostream&OS, StmtPrinterHelper* Helper, Stmt* Terminator) { +void print_stmt(llvm::raw_ostream&OS, StmtPrinterHelper* Helper, Stmt* Terminator) { if (Helper) { // special printing for statement-expressions. if (StmtExpr* SE = dyn_cast(Terminator)) { @@ -1437,7 +1438,7 @@ void print_stmt(std::ostream&OS, StmtPrinterHelper* Helper, Stmt* Terminator) { if (isa(Terminator)) OS << '\n'; } -void print_block(std::ostream& OS, const CFG* cfg, const CFGBlock& B, +void print_block(llvm::raw_ostream& OS, const CFG* cfg, const CFGBlock& B, StmtPrinterHelper* Helper, bool print_edges) { if (Helper) Helper->setBlockID(B.getBlockID()); @@ -1488,7 +1489,7 @@ void print_block(std::ostream& OS, const CFG* cfg, const CFGBlock& B, if (print_edges) OS << " "; - OS << std::setw(3) << j << ": "; + OS << llvm::format("%3d", j) << ": "; if (Helper) Helper->setStmtID(j); @@ -1546,10 +1547,10 @@ void print_block(std::ostream& OS, const CFG* cfg, const CFGBlock& B, } // end anonymous namespace /// dump - A simple pretty printer of a CFG that outputs to stderr. -void CFG::dump() const { print(*llvm::cerr.stream()); } +void CFG::dump() const { print(llvm::errs()); } /// print - A simple pretty printer of a CFG that outputs to an ostream. -void CFG::print(std::ostream& OS) const { +void CFG::print(llvm::raw_ostream& OS) const { StmtPrinterHelper Helper(this); @@ -1570,17 +1571,17 @@ void CFG::print(std::ostream& OS) const { } /// dump - A simply pretty printer of a CFGBlock that outputs to stderr. -void CFGBlock::dump(const CFG* cfg) const { print(*llvm::cerr.stream(), cfg); } +void CFGBlock::dump(const CFG* cfg) const { print(llvm::errs(), cfg); } /// print - A simple pretty printer of a CFGBlock that outputs to an ostream. /// Generally this will only be called from CFG::print. -void CFGBlock::print(std::ostream& OS, const CFG* cfg) const { +void CFGBlock::print(llvm::raw_ostream& OS, const CFG* cfg) const { StmtPrinterHelper Helper(cfg); print_block(OS, cfg, *this, &Helper, true); } /// printTerminator - A simple pretty printer of the terminator of a CFGBlock. -void CFGBlock::printTerminator(std::ostream& OS) const { +void CFGBlock::printTerminator(llvm::raw_ostream& OS) const { CFGBlockTerminatorPrint TPrinter(OS,NULL); TPrinter.Visit(const_cast(getTerminator())); } @@ -1685,9 +1686,10 @@ struct DOTGraphTraits : public DefaultDOTGraphTraits { static std::string getNodeLabel(const CFGBlock* Node, const CFG* Graph) { #ifndef NDEBUG - std::ostringstream Out; + std::string OutSStr; + llvm::raw_string_ostream Out(OutSStr); print_block(Out,Graph, *Node, GraphHelper, false); - std::string OutStr = Out.str(); + std::string& OutStr = Out.str(); if (OutStr[0] == '\n') OutStr.erase(OutStr.begin()); diff --git a/lib/AST/StmtPrinter.cpp b/lib/AST/StmtPrinter.cpp index 3c3e207a02..566ab717ea 100644 --- a/lib/AST/StmtPrinter.cpp +++ b/lib/AST/StmtPrinter.cpp @@ -17,6 +17,7 @@ #include "clang/AST/PrettyPrinter.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/Streams.h" +#include "llvm/Support/Format.h" using namespace clang; //===----------------------------------------------------------------------===// @@ -25,11 +26,11 @@ using namespace clang; namespace { class VISIBILITY_HIDDEN StmtPrinter : public StmtVisitor { - std::ostream &OS; + llvm::raw_ostream &OS; unsigned IndentLevel; clang::PrinterHelper* Helper; public: - StmtPrinter(std::ostream &os, PrinterHelper* helper) : + StmtPrinter(llvm::raw_ostream &os, PrinterHelper* helper) : OS(os), IndentLevel(0), Helper(helper) {} void PrintStmt(Stmt *S, int SubIndent = 1) { @@ -58,7 +59,7 @@ namespace { OS << ""; } - std::ostream &Indent(int Delta = 0) const { + llvm::raw_ostream &Indent(int Delta = 0) const { for (int i = 0, e = IndentLevel+Delta; i < e; ++i) OS << " "; return OS; @@ -547,7 +548,7 @@ void StmtPrinter::VisitCharacterLiteral(CharacterLiteral *Node) { if (value < 256 && isprint(value)) { OS << "'" << (char)value << "'"; } else if (value < 256) { - OS << "'\\x" << std::hex << value << std::dec << "'"; + OS << "'\\x" << llvm::format("%x", value) << "'"; } else { // FIXME what to really do here? OS << value; @@ -924,10 +925,10 @@ void StmtPrinter::VisitBlockDeclRefExpr(BlockDeclRefExpr *Node) { //===----------------------------------------------------------------------===// void Stmt::dumpPretty() const { - printPretty(*llvm::cerr.stream()); + printPretty(llvm::errs()); } -void Stmt::printPretty(std::ostream &OS, PrinterHelper* Helper) const { +void Stmt::printPretty(llvm::raw_ostream &OS, PrinterHelper* Helper) const { if (this == 0) { OS << ""; return; diff --git a/lib/AST/StmtViz.cpp b/lib/AST/StmtViz.cpp index 51d514b20a..6790efbd56 100644 --- a/lib/AST/StmtViz.cpp +++ b/lib/AST/StmtViz.cpp @@ -33,7 +33,8 @@ struct DOTGraphTraits : public DefaultDOTGraphTraits { static std::string getNodeLabel(const Stmt* Node, const Stmt* Graph) { #ifndef NDEBUG - std::ostringstream Out; + std::string OutSStr; + llvm::raw_string_ostream Out(OutSStr); if (Node) Out << Node->getStmtClassName(); diff --git a/lib/AST/Type.cpp b/lib/AST/Type.cpp index 2ecc357d95..f836e5b995 100644 --- a/lib/AST/Type.cpp +++ b/lib/AST/Type.cpp @@ -910,7 +910,8 @@ void VariableArrayType::getAsStringInternal(std::string &S) const { S += '*'; if (getSizeExpr()) { - std::ostringstream s; + std::string SStr; + llvm::raw_string_ostream s(SStr); getSizeExpr()->printPretty(s); S += s.str(); } @@ -937,7 +938,8 @@ void ExtVectorType::getAsStringInternal(std::string &S) const { void TypeOfExpr::getAsStringInternal(std::string &InnerString) const { if (!InnerString.empty()) // Prefix the basic type, e.g. 'typeof(e) X'. InnerString = ' ' + InnerString; - std::ostringstream s; + std::string Str; + llvm::raw_string_ostream s(Str); getUnderlyingExpr()->printPretty(s); InnerString = "typeof(" + s.str() + ")" + InnerString; } diff --git a/lib/Analysis/GRExprEngine.cpp b/lib/Analysis/GRExprEngine.cpp index 8af5a74f19..d8c0320d66 100644 --- a/lib/Analysis/GRExprEngine.cpp +++ b/lib/Analysis/GRExprEngine.cpp @@ -19,6 +19,7 @@ #include "llvm/Support/Streams.h" #include "llvm/ADT/ImmutableList.h" #include "llvm/Support/Compiler.h" +#include "llvm/Support/raw_ostream.h" #ifndef NDEBUG #include "llvm/Support/GraphWriter.h" @@ -2194,7 +2195,9 @@ struct VISIBILITY_HIDDEN DOTGraphTraits : SourceLocation SLoc = S->getLocStart(); Out << S->getStmtClassName() << ' ' << (void*) S << ' '; - S->printPretty(Out); + llvm::raw_os_ostream OutS(Out); + S->printPretty(OutS); + OutS.flush(); if (SLoc.isFileID()) { Out << "\\lline=" @@ -2237,7 +2240,9 @@ struct VISIBILITY_HIDDEN DOTGraphTraits : Out << "\\|Terminator: "; - E.getSrc()->printTerminator(Out); + llvm::raw_os_ostream OutS(Out); + E.getSrc()->printTerminator(OutS); + OutS.flush(); if (SLoc.isFileID()) { Out << "\\lline=" @@ -2251,11 +2256,14 @@ struct VISIBILITY_HIDDEN DOTGraphTraits : if (Label) { if (CaseStmt* C = dyn_cast(Label)) { Out << "\\lcase "; - C->getLHS()->printPretty(Out); - + llvm::raw_os_ostream OutS(Out); + C->getLHS()->printPretty(OutS); + OutS.flush(); + if (Stmt* RHS = C->getRHS()) { Out << " .. "; - RHS->printPretty(Out); + RHS->printPretty(OutS); + OutS.flush(); } Out << ":"; diff --git a/lib/Analysis/GRState.cpp b/lib/Analysis/GRState.cpp index 72eeda97b1..4bef72c6c5 100644 --- a/lib/Analysis/GRState.cpp +++ b/lib/Analysis/GRState.cpp @@ -154,7 +154,9 @@ void GRState::print(std::ostream& Out, StoreManager& StoreMgr, else { Out << nl; } Out << " (" << (void*) I.getKey() << ") "; - I.getKey()->printPretty(Out); + llvm::raw_os_ostream OutS(Out); + I.getKey()->printPretty(OutS); + OutS.flush(); Out << " : "; I.getData().print(Out); } @@ -171,7 +173,9 @@ void GRState::print(std::ostream& Out, StoreManager& StoreMgr, else { Out << nl; } Out << " (" << (void*) I.getKey() << ") "; - I.getKey()->printPretty(Out); + llvm::raw_os_ostream OutS(Out); + I.getKey()->printPretty(OutS); + OutS.flush(); Out << " : "; I.getData().print(Out); } diff --git a/lib/Driver/HTMLDiagnostics.cpp b/lib/Driver/HTMLDiagnostics.cpp index e691882098..5025e87e59 100644 --- a/lib/Driver/HTMLDiagnostics.cpp +++ b/lib/Driver/HTMLDiagnostics.cpp @@ -23,9 +23,9 @@ #include "llvm/Support/Compiler.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/Streams.h" +#include "llvm/Support/raw_ostream.h" #include "llvm/System/Path.h" #include -#include using namespace clang; @@ -220,7 +220,8 @@ void HTMLDiagnostics::ReportDiag(const PathDiagnostic& D) { // Add the name of the file as an

tag. { - std::ostringstream os; + std::string s; + llvm::raw_string_ostream os(s); os << "

Bug Summary

\n\n" "
File:" @@ -252,26 +253,30 @@ void HTMLDiagnostics::ReportDiag(const PathDiagnostic& D) { const std::string& BugDesc = D.getDescription(); if (!BugDesc.empty()) { - std::ostringstream os; + std::string s; + llvm::raw_string_ostream os(s); os << "\n\n"; R.InsertStrBefore(SourceLocation::getFileLoc(FileID, 0), os.str()); } { - std::ostringstream os; + std::string s; + llvm::raw_string_ostream os(s); os << "\n\n"; R.InsertStrBefore(SourceLocation::getFileLoc(FileID, 0), os.str()); } { - std::ostringstream os; + std::string s; + llvm::raw_string_ostream os(s); os << "\n\n"; R.InsertStrBefore(SourceLocation::getFileLoc(FileID, 0), os.str()); } { - std::ostringstream os; + std::string s; + llvm::raw_string_ostream os(s); os << "\n\n"; R.InsertStrBefore(SourceLocation::getFileLoc(FileID, 0), os.str()); } @@ -365,7 +370,8 @@ void HTMLDiagnostics::HandlePiece(Rewriter& R, unsigned BugFileID, // Create the html for the message. - std::ostringstream os; + std::string s; + llvm::raw_string_ostream os(s); os << "\n
" << "
+#include "llvm/Support/raw_ostream.h" using namespace clang; @@ -161,7 +161,8 @@ std::string html::EscapeText(const std::string& s, bool EscapeSpaces, bool ReplaceTabs) { unsigned len = s.size(); - std::ostringstream os; + std::string Str; + llvm::raw_string_ostream os(Str); for (unsigned i = 0 ; i < len; ++i) { @@ -272,7 +273,8 @@ void html::AddHeaderFooterInternalBuiltinCSS(Rewriter& R, unsigned FileID, SourceLocation StartLoc = SourceLocation::getFileLoc(FileID, 0); SourceLocation EndLoc = SourceLocation::getFileLoc(FileID, FileEnd-FileStart); - std::ostringstream os; + std::string s; + llvm::raw_string_ostream os(s); os << "\n" // Use HTML 5 doctype "\n\n"; diff --git a/lib/Rewrite/Rewriter.cpp b/lib/Rewrite/Rewriter.cpp index e1a6651a9a..f414e1c5f2 100644 --- a/lib/Rewrite/Rewriter.cpp +++ b/lib/Rewrite/Rewriter.cpp @@ -16,7 +16,7 @@ #include "clang/AST/Stmt.h" #include "clang/Lex/Lexer.h" #include "clang/Basic/SourceManager.h" -#include +#include "llvm/Support/raw_ostream.h" using namespace clang; void RewriteBuffer::RemoveText(unsigned OrigOffset, unsigned Size) { @@ -166,7 +166,8 @@ bool Rewriter::ReplaceStmt(Stmt *From, Stmt *To) { return true; // Get the new text. - std::ostringstream S; + std::string SStr; + llvm::raw_string_ostream S(SStr); To->printPretty(S); const std::string &Str = S.str(); -- 2.50.1