r342310 - [analyzer] Dump unique identifiers for statements in exploded graph
George Karpenkov via cfe-commits
cfe-commits at lists.llvm.org
Fri Sep 14 19:02:09 PDT 2018
Author: george.karpenkov
Date: Fri Sep 14 19:02:09 2018
New Revision: 342310
URL: http://llvm.org/viewvc/llvm-project?rev=342310&view=rev
Log:
[analyzer] Dump unique identifiers for statements in exploded graph
Differential Revision: https://reviews.llvm.org/D51823
Modified:
cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp
Modified: cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp?rev=342310&r1=342309&r2=342310&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp Fri Sep 14 19:02:09 2018
@@ -2974,7 +2974,7 @@ struct DOTGraphTraits<ExplodedNode*> : p
}
static void dumpProgramPoint(ProgramPoint Loc,
- const PrintingPolicy &PP,
+ const ASTContext &Context,
llvm::raw_string_ostream &Out) {
switch (Loc.getKind()) {
case ProgramPoint::BlockEntranceKind:
@@ -3019,9 +3019,7 @@ struct DOTGraphTraits<ExplodedNode*> : p
case ProgramPoint::PreImplicitCallKind: {
ImplicitCallPoint PC = Loc.castAs<ImplicitCallPoint>();
Out << "PreCall: ";
-
- // FIXME: Get proper printing options.
- PC.getDecl()->print(Out, LangOptions());
+ PC.getDecl()->print(Out, Context.getLangOpts());
printLocation(Out, PC.getLocation());
break;
}
@@ -3029,9 +3027,7 @@ struct DOTGraphTraits<ExplodedNode*> : p
case ProgramPoint::PostImplicitCallKind: {
ImplicitCallPoint PC = Loc.castAs<ImplicitCallPoint>();
Out << "PostCall: ";
-
- // FIXME: Get proper printing options.
- PC.getDecl()->print(Out, LangOptions());
+ PC.getDecl()->print(Out, Context.getLangOpts());
printLocation(Out, PC.getLocation());
break;
}
@@ -3045,8 +3041,7 @@ struct DOTGraphTraits<ExplodedNode*> : p
else {
QualType Ty = Init->getTypeSourceInfo()->getType();
Ty = Ty.getLocalUnqualifiedType();
- LangOptions LO; // FIXME.
- Ty.print(Out, LO);
+ Ty.print(Out, Context.getLangOpts());
}
break;
}
@@ -3060,8 +3055,7 @@ struct DOTGraphTraits<ExplodedNode*> : p
SourceLocation SLoc = T->getBeginLoc();
Out << "\\|Terminator: ";
- LangOptions LO; // FIXME.
- E.getSrc()->printTerminator(Out, LO);
+ E.getSrc()->printTerminator(Out, Context.getLangOpts());
if (SLoc.isFileID()) {
Out << "\\lline="
@@ -3076,13 +3070,13 @@ struct DOTGraphTraits<ExplodedNode*> : p
if (Label) {
if (const auto *C = dyn_cast<CaseStmt>(Label)) {
Out << "\\lcase ";
- LangOptions LO; // FIXME.
if (C->getLHS())
- C->getLHS()->printPretty(Out, nullptr, PrintingPolicy(LO));
+ C->getLHS()->printPretty(Out, nullptr,
+ Context.getPrintingPolicy());
if (const Stmt *RHS = C->getRHS()) {
Out << " .. ";
- RHS->printPretty(Out, nullptr, PrintingPolicy(LO));
+ RHS->printPretty(Out, nullptr, Context.getPrintingPolicy());
}
Out << ":";
@@ -3112,8 +3106,9 @@ struct DOTGraphTraits<ExplodedNode*> : p
const Stmt *S = Loc.castAs<StmtPoint>().getStmt();
assert(S != nullptr && "Expecting non-null Stmt");
- Out << S->getStmtClassName() << ' ' << (const void *)S << ' ';
- S->printPretty(Out, nullptr, PP);
+ Out << S->getStmtClassName() << ' '
+ << S->getID(Context) << " (" << (const void *)S << ") ";
+ S->printPretty(Out, nullptr, Context.getPrintingPolicy());
printLocation(Out, S->getBeginLoc());
if (Loc.getAs<PreStmt>())
@@ -3149,12 +3144,12 @@ struct DOTGraphTraits<ExplodedNode*> : p
}
ProgramStateRef State = N->getState();
- const auto &PP = State->getStateManager().getContext().getPrintingPolicy();
+ const ASTContext &Context = State->getStateManager().getContext();
// Dump program point for all the previously skipped nodes.
const ExplodedNode *OtherNode = FirstHiddenNode;
while (true) {
- dumpProgramPoint(OtherNode->getLocation(), PP, Out);
+ dumpProgramPoint(OtherNode->getLocation(), Context, Out);
if (const ProgramPointTag *Tag = OtherNode->getLocation().getTag())
Out << "\\lTag:" << Tag->getTagDescription();
More information about the cfe-commits
mailing list