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