From: Ted Kremenek Date: Tue, 11 Mar 2008 19:02:40 +0000 (+0000) Subject: Expanded graph-visualization to include optional pretty-printing of checker-specific... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=75da3e82722cc6a616eaab28b75f9a6973178c49;p=clang Expanded graph-visualization to include optional pretty-printing of checker-specific state. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@48238 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Analysis/GRExprEngine.cpp b/Analysis/GRExprEngine.cpp index 6d1c03d537..e2fec9f88f 100644 --- a/Analysis/GRExprEngine.cpp +++ b/Analysis/GRExprEngine.cpp @@ -1554,6 +1554,7 @@ GRExprEngine::AssumeSymInt(ValueState* St, bool Assumption, #ifndef NDEBUG static GRExprEngine* GraphPrintCheckerState; static SourceManager* GraphPrintSourceManager; +static ValueState::CheckerStatePrinter* GraphCheckerStatePrinter; namespace llvm { template<> @@ -1794,7 +1795,7 @@ struct VISIBILITY_HIDDEN DOTGraphTraits : Out << "\\|StateID: " << (void*) N->getState() << "\\|"; - N->getState()->printDOT(Out); + N->getState()->printDOT(Out, GraphCheckerStatePrinter); Out << "\\l"; return Out.str(); @@ -1825,11 +1826,13 @@ void GRExprEngine::ViewGraph(bool trim) { else { GraphPrintCheckerState = this; GraphPrintSourceManager = &getContext().getSourceManager(); + GraphCheckerStatePrinter = TF->getCheckerStatePrinter(); llvm::ViewGraph(*G.roots_begin(), "GRExprEngine"); GraphPrintCheckerState = NULL; GraphPrintSourceManager = NULL; + GraphCheckerStatePrinter = NULL; } #endif } @@ -1838,6 +1841,7 @@ void GRExprEngine::ViewGraph(NodeTy** Beg, NodeTy** End) { #ifndef NDEBUG GraphPrintCheckerState = this; GraphPrintSourceManager = &getContext().getSourceManager(); + GraphCheckerStatePrinter = TF->getCheckerStatePrinter(); GRExprEngine::GraphTy* TrimmedG = G.Trim(Beg, End); @@ -1850,5 +1854,6 @@ void GRExprEngine::ViewGraph(NodeTy** Beg, NodeTy** End) { GraphPrintCheckerState = NULL; GraphPrintSourceManager = NULL; + GraphCheckerStatePrinter = NULL; #endif } diff --git a/include/clang/Analysis/PathSensitive/GRTransferFuncs.h b/include/clang/Analysis/PathSensitive/GRTransferFuncs.h index 256cadd945..7432c7fb61 100644 --- a/include/clang/Analysis/PathSensitive/GRTransferFuncs.h +++ b/include/clang/Analysis/PathSensitive/GRTransferFuncs.h @@ -17,17 +17,19 @@ #include "clang/Analysis/PathSensitive/RValues.h" #include "clang/Analysis/PathSensitive/GRCoreEngine.h" +#include "clang/Analysis/PathSensitive/ValueState.h" namespace clang { - class ValueState; - class ValueStateManager; - class GRTransferFuncs { public: GRTransferFuncs() {} virtual ~GRTransferFuncs() {} + virtual ValueState::CheckerStatePrinter* getCheckerStatePrinter() { + return NULL; + } + // Casts. virtual RVal EvalCast(BasicValueFactory& BasicVals, NonLVal V,