From e97ca065c91ff9ca2a2a42eb443eaa553c40441c Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Fri, 7 Mar 2008 20:57:30 +0000 Subject: [PATCH] Improved graph visualization of ExplodedGraphs to include source line and column information. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@48031 91177308-0d34-0410-b5e6-96231b3b80d8 --- Analysis/GRExprEngine.cpp | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/Analysis/GRExprEngine.cpp b/Analysis/GRExprEngine.cpp index 87c3bd74a0..aaef2f8cb0 100644 --- a/Analysis/GRExprEngine.cpp +++ b/Analysis/GRExprEngine.cpp @@ -14,6 +14,7 @@ //===----------------------------------------------------------------------===// #include "clang/Analysis/PathSensitive/GRExprEngine.h" +#include "clang/Basic/SourceManager.h" #include "llvm/Support/Streams.h" #ifndef NDEBUG @@ -1563,6 +1564,7 @@ GRExprEngine::AssumeSymInt(ValueState* St, bool Assumption, #ifndef NDEBUG static GRExprEngine* GraphPrintCheckerState; +static SourceManager* GraphPrintSourceManager; namespace llvm { template<> @@ -1702,11 +1704,16 @@ struct VISIBILITY_HIDDEN DOTGraphTraits : break; case ProgramPoint::PostStmtKind: { - const PostStmt& L = cast(Loc); - Out << L.getStmt()->getStmtClassName() << ':' - << (void*) L.getStmt() << ' '; + const PostStmt& L = cast(Loc); + Stmt* S = L.getStmt(); + SourceLocation SLoc = S->getLocStart(); + + Out << S->getStmtClassName() << ' ' << (void*) S << ' '; + S->printPretty(Out); - L.getStmt()->printPretty(Out); + Out << "\\lline=" + << GraphPrintSourceManager->getLineNumber(SLoc) << " col=" + << GraphPrintSourceManager->getColumnNumber(SLoc) << "\\l"; if (GraphPrintCheckerState->isImplicitNullDeref(N)) Out << "\\|Implicit-Null Dereference.\\l"; @@ -1738,9 +1745,17 @@ struct VISIBILITY_HIDDEN DOTGraphTraits : << E.getDst()->getBlockID() << ')'; if (Stmt* T = E.getSrc()->getTerminator()) { + + SourceLocation SLoc = T->getLocStart(); + Out << "\\|Terminator: "; + E.getSrc()->printTerminator(Out); + Out << "\\lline=" + << GraphPrintSourceManager->getLineNumber(SLoc) << " col=" + << GraphPrintSourceManager->getColumnNumber(SLoc); + if (isa(T)) { Stmt* Label = E.getDst()->getLabel(); @@ -1798,7 +1813,9 @@ struct VISIBILITY_HIDDEN DOTGraphTraits : void GRExprEngine::ViewGraph() { #ifndef NDEBUG GraphPrintCheckerState = this; + GraphPrintSourceManager = &getContext().getSourceManager(); llvm::ViewGraph(*G.roots_begin(), "GRExprEngine"); GraphPrintCheckerState = NULL; + GraphPrintSourceManager = NULL; #endif } -- 2.50.1