Index: clang/include/clang/StaticAnalyzer/Core/PathSensitive/Environment.h =================================================================== --- clang/include/clang/StaticAnalyzer/Core/PathSensitive/Environment.h +++ clang/include/clang/StaticAnalyzer/Core/PathSensitive/Environment.h @@ -93,6 +93,7 @@ } void print(raw_ostream &Out, const char *NL, const char *Sep, + const ASTContext &Context, const LocationContext *WithLC = nullptr) const; }; Index: clang/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h =================================================================== --- clang/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h +++ clang/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h @@ -467,9 +467,12 @@ } // Pretty-printing. - void print(raw_ostream &Out, const char *nl = "\n", const char *sep = "", + void print(raw_ostream &Out, + const ASTContext &Context, + const char *nl = "\n", const char *sep = "", const LocationContext *CurrentLC = nullptr) const; void printDOT(raw_ostream &Out, + const ASTContext &Context, const LocationContext *CurrentLC = nullptr) const; void printTaint(raw_ostream &Out, const char *nl = "\n", const char *sep = "") const; Index: clang/lib/StaticAnalyzer/Core/Environment.cpp =================================================================== --- clang/lib/StaticAnalyzer/Core/Environment.cpp +++ clang/lib/StaticAnalyzer/Core/Environment.cpp @@ -202,7 +202,9 @@ } void Environment::print(raw_ostream &Out, const char *NL, - const char *Sep, const LocationContext *WithLC) const { + const char *Sep, + const ASTContext &Context, + const LocationContext *WithLC) const { if (ExprBindings.isEmpty()) return; @@ -222,8 +224,7 @@ assert(WithLC); - LangOptions LO; // FIXME. - PrintingPolicy PP(LO); + PrintingPolicy PP = Context.getPrintingPolicy(); Out << NL << NL << "Expressions by stack frame:" << NL; WithLC->dumpStack(Out, "", NL, Sep, [&](const LocationContext *LC) { @@ -234,8 +235,9 @@ const Stmt *S = I.first.getStmt(); assert(S != nullptr && "Expected non-null Stmt"); - Out << "(" << (const void *)LC << ',' << (const void *)S << ") "; - S->printPretty(Out, nullptr, PP); + Out << "(LC" << (const void *)LC << ", S" << S->getID(Context) << " <" + << (const void *)S << "> ) "; + S->printPretty(Out, /*Helper=*/nullptr, PP); Out << " : " << I.second << NL; } }); Index: clang/lib/StaticAnalyzer/Core/ExprEngine.cpp =================================================================== --- clang/lib/StaticAnalyzer/Core/ExprEngine.cpp +++ clang/lib/StaticAnalyzer/Core/ExprEngine.cpp @@ -3109,7 +3109,7 @@ assert(S != nullptr && "Expecting non-null Stmt"); Out << S->getStmtClassName() << ' ' - << S->getID(Context) << " (" << (const void *)S << ") "; + << S->getID(Context) << " <" << (const void *)S << "> "; S->printPretty(Out, /*helper=*/nullptr, Context.getPrintingPolicy(), /*Indentation=*/2, /*NewlineSymbol=*/"\\l"); printLocation(Out, S->getBeginLoc()); @@ -3171,16 +3171,16 @@ static_cast(State->getStateManager().getOwningEngine()) ->getGraph(); - Out << "StateID: " << State->getID() << " (" << (const void *)State.get() - << ")" - << " NodeID: " << N->getID(&Graph) << " (" << (const void *)N << ")\\|"; + Out << "StateID: " << State->getID() << " <" << (const void *)State.get() + << ">" + << " NodeID: " << N->getID(&Graph) << " <" << (const void *)N << ">\\|"; bool SameAsAllPredecessors = std::all_of(N->pred_begin(), N->pred_end(), [&](const ExplodedNode *P) { return P->getState()->getID() == State->getID(); }); if (!SameAsAllPredecessors) - State->printDOT(Out, N->getLocationContext()); + State->printDOT(Out, Context, N->getLocationContext()); return Out.str(); } }; Index: clang/lib/StaticAnalyzer/Core/ProgramState.cpp =================================================================== --- clang/lib/StaticAnalyzer/Core/ProgramState.cpp +++ clang/lib/StaticAnalyzer/Core/ProgramState.cpp @@ -456,14 +456,16 @@ // State pretty-printing. //===----------------------------------------------------------------------===// -void ProgramState::print(raw_ostream &Out, const char *NL, const char *Sep, +void ProgramState::print(raw_ostream &Out, + const ASTContext &Context, + const char *NL, const char *Sep, const LocationContext *LC) const { // Print the store. ProgramStateManager &Mgr = getStateManager(); Mgr.getStoreManager().print(getStore(), Out, NL, Sep); // Print out the environment. - Env.print(Out, NL, Sep, LC); + Env.print(Out, NL, Sep, Context, LC); // Print out the constraints. Mgr.getConstraintManager().print(this, Out, NL, Sep); @@ -478,12 +480,14 @@ Mgr.getOwningEngine()->printState(Out, this, NL, Sep, LC); } -void ProgramState::printDOT(raw_ostream &Out, const LocationContext *LC) const { - print(Out, "\\l", "\\|", LC); +void ProgramState::printDOT(raw_ostream &Out, + const ASTContext &Context, + const LocationContext *LC) const { + print(Out, Context, "\\l", "\\|", LC); } LLVM_DUMP_METHOD void ProgramState::dump() const { - print(llvm::errs()); + print(llvm::errs(), getStateManager().getContext()); } void ProgramState::printTaint(raw_ostream &Out,