[analyzer] Dump unique identifiers for statements in exploded graph

Differential Revision: https://reviews.llvm.org/D51823

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@342310 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
George Karpenkov 2018-09-15 02:02:09 +00:00
parent 03164d3e0e
commit f702afcb3e
1 changed files with 13 additions and 18 deletions

View File

@ -2974,7 +2974,7 @@ struct DOTGraphTraits<ExplodedNode*> : public DefaultDOTGraphTraits {
}
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*> : public DefaultDOTGraphTraits {
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*> : public DefaultDOTGraphTraits {
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*> : public DefaultDOTGraphTraits {
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*> : public DefaultDOTGraphTraits {
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*> : public DefaultDOTGraphTraits {
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*> : public DefaultDOTGraphTraits {
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*> : public DefaultDOTGraphTraits {
}
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();