clang
6.0.0
|
#include "clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h"
Public Types | |
typedef ExplodedNode | NodeTy |
typedef llvm::FoldingSet< ExplodedNode > | AllNodesTy |
typedef NodeVector::iterator | roots_iterator |
typedef NodeVector::const_iterator | const_roots_iterator |
typedef NodeVector::iterator | eop_iterator |
typedef NodeVector::const_iterator | const_eop_iterator |
typedef AllNodesTy::iterator | node_iterator |
typedef AllNodesTy::const_iterator | const_node_iterator |
typedef llvm::DenseMap< const ExplodedNode *, ExplodedNode * > | NodeMap |
Public Member Functions | |
ExplodedNode * | getNode (const ProgramPoint &L, ProgramStateRef State, bool IsSink=false, bool *IsNew=nullptr) |
Retrieve the node associated with a (Location,State) pair, where the 'Location' is a ProgramPoint in the CFG. More... | |
ExplodedNode * | createUncachedNode (const ProgramPoint &L, ProgramStateRef State, bool IsSink=false) |
Create a node for a (Location, State) pair, but don't store it for deduplication later. More... | |
std::unique_ptr< ExplodedGraph > | MakeEmptyGraph () const |
ExplodedNode * | addRoot (ExplodedNode *V) |
addRoot - Add an untyped node to the set of roots. More... | |
ExplodedNode * | addEndOfPath (ExplodedNode *V) |
addEndOfPath - Add an untyped node to the set of EOP nodes. More... | |
ExplodedGraph () | |
~ExplodedGraph () | |
unsigned | num_roots () const |
unsigned | num_eops () const |
bool | empty () const |
unsigned | size () const |
void | reserve (unsigned NodeCount) |
node_iterator | nodes_begin () |
node_iterator | nodes_end () |
const_node_iterator | nodes_begin () const |
const_node_iterator | nodes_end () const |
roots_iterator | roots_begin () |
roots_iterator | roots_end () |
const_roots_iterator | roots_begin () const |
const_roots_iterator | roots_end () const |
eop_iterator | eop_begin () |
eop_iterator | eop_end () |
const_eop_iterator | eop_begin () const |
const_eop_iterator | eop_end () const |
llvm::BumpPtrAllocator & | getAllocator () |
BumpVectorContext & | getNodeAllocator () |
std::unique_ptr< ExplodedGraph > | trim (ArrayRef< const NodeTy *> Nodes, InterExplodedGraphMap *ForwardMap=nullptr, InterExplodedGraphMap *InverseMap=nullptr) const |
Creates a trimmed version of the graph that only contains paths leading to the given nodes. More... | |
void | enableNodeReclamation (unsigned Interval) |
Enable tracking of recently allocated nodes for potential reclamation when calling reclaimRecentlyAllocatedNodes(). More... | |
void | reclaimRecentlyAllocatedNodes () |
Reclaim "uninteresting" nodes created since the last time this method was called. More... | |
Static Public Member Functions | |
static bool | isInterestingLValueExpr (const Expr *Ex) |
Returns true if nodes for the given expression kind are always kept around. More... | |
Protected Types | |
typedef std::vector< ExplodedNode * > | NodeVector |
Protected Attributes | |
NodeVector | Roots |
The roots of the simulation graph. More... | |
NodeVector | EndNodes |
The nodes in the simulation graph which have been specially marked as the endpoint of an abstract simulation path. More... | |
llvm::FoldingSet< ExplodedNode > | Nodes |
Nodes - The nodes in the graph. More... | |
BumpVectorContext | BVC |
BVC - Allocator and context for allocating nodes and their predecessor and successor groups. More... | |
unsigned | NumNodes |
NumNodes - The number of nodes in the graph. More... | |
NodeVector | ChangedNodes |
A list of recently allocated nodes that can potentially be recycled. More... | |
NodeVector | FreeNodes |
A list of nodes that can be reused. More... | |
unsigned | ReclaimNodeInterval |
Determines how often nodes are reclaimed. More... | |
unsigned | ReclaimCounter |
Counter to determine when to reclaim nodes. More... | |
Friends | |
class | CoreEngine |
Definition at line 246 of file ExplodedGraph.h.
typedef llvm::FoldingSet<ExplodedNode> clang::ento::ExplodedGraph::AllNodesTy |
Definition at line 335 of file ExplodedGraph.h.
typedef NodeVector::const_iterator clang::ento::ExplodedGraph::const_eop_iterator |
Definition at line 339 of file ExplodedGraph.h.
typedef AllNodesTy::const_iterator clang::ento::ExplodedGraph::const_node_iterator |
Definition at line 341 of file ExplodedGraph.h.
typedef NodeVector::const_iterator clang::ento::ExplodedGraph::const_roots_iterator |
Definition at line 337 of file ExplodedGraph.h.
typedef NodeVector::iterator clang::ento::ExplodedGraph::eop_iterator |
Definition at line 338 of file ExplodedGraph.h.
typedef AllNodesTy::iterator clang::ento::ExplodedGraph::node_iterator |
Definition at line 340 of file ExplodedGraph.h.
typedef llvm::DenseMap<const ExplodedNode*, ExplodedNode*> clang::ento::ExplodedGraph::NodeMap |
Definition at line 370 of file ExplodedGraph.h.
Definition at line 334 of file ExplodedGraph.h.
|
protected |
Definition at line 251 of file ExplodedGraph.h.
typedef NodeVector::iterator clang::ento::ExplodedGraph::roots_iterator |
Definition at line 336 of file ExplodedGraph.h.
ExplodedGraph::ExplodedGraph | ( | ) |
Definition at line 48 of file ExplodedGraph.cpp.
ExplodedGraph::~ExplodedGraph | ( | ) |
Definition at line 51 of file ExplodedGraph.cpp.
|
inline |
addEndOfPath - Add an untyped node to the set of EOP nodes.
Definition at line 316 of file ExplodedGraph.h.
References clang::ento::ExplodedNode::ExplodedGraph.
|
inline |
addRoot - Add an untyped node to the set of roots.
Definition at line 310 of file ExplodedGraph.h.
ExplodedNode * ExplodedGraph::createUncachedNode | ( | const ProgramPoint & | L, |
ProgramStateRef | State, | ||
bool | IsSink = false |
||
) |
Create a node for a (Location, State) pair, but don't store it for deduplication later.
This is useful when copying an already completed ExplodedGraph for further processing.
Definition at line 337 of file ExplodedGraph.cpp.
References getAllocator().
|
inline |
Definition at line 328 of file ExplodedGraph.h.
|
inline |
Enable tracking of recently allocated nodes for potential reclamation when calling reclaimRecentlyAllocatedNodes().
Definition at line 389 of file ExplodedGraph.h.
Referenced by clang::ento::ExprEngine::ExprEngine().
|
inline |
Definition at line 359 of file ExplodedGraph.h.
|
inline |
Definition at line 363 of file ExplodedGraph.h.
|
inline |
Definition at line 361 of file ExplodedGraph.h.
|
inline |
Definition at line 365 of file ExplodedGraph.h.
|
inline |
Definition at line 367 of file ExplodedGraph.h.
References clang::BumpVectorContext::getAllocator().
Referenced by clang::ento::ExplodedNode::addPredecessor(), createUncachedNode(), and getNode().
ExplodedNode * ExplodedGraph::getNode | ( | const ProgramPoint & | L, |
ProgramStateRef | State, | ||
bool | IsSink = false , |
||
bool * | IsNew = nullptr |
||
) |
Retrieve the node associated with a (Location,State) pair, where the 'Location' is a ProgramPoint in the CFG.
If no node for this pair exists, it is created. IsNew is set to true if the node was freshly created.
Definition at line 299 of file ExplodedGraph.cpp.
References ChangedNodes, FreeNodes, getAllocator(), Nodes, NumNodes, clang::ento::ExplodedNode::Profile(), and ReclaimNodeInterval.
Referenced by clang::ento::ExprEngine::processCallEnter(), and clang::ento::ExprEngine::processCallExit().
|
inline |
Definition at line 368 of file ExplodedGraph.h.
Referenced by clang::ento::ExplodedNode::addPredecessor().
Returns true if nodes for the given expression kind are always kept around.
Definition at line 57 of file ExplodedGraph.cpp.
References clang::ProgramPoint::castAs(), FreeNodes, clang::ProgramPoint::getAs(), clang::ento::ExplodedNode::getLocation(), clang::ento::ExplodedNode::getLocationContext(), clang::ProgramPoint::getLocationContext(), clang::LocationContext::getParentMap(), clang::ento::ExplodedNode::getState(), clang::ProgramPoint::getTag(), clang::ento::CallEvent::isCallStmt(), clang::ParentMap::isConsumedExpr(), clang::Expr::isLValue(), Nodes, NumNodes, clang::ento::ExplodedNode::pred_begin(), clang::ento::ExplodedNode::pred_size(), clang::CodeGen::state, clang::ento::ExplodedNode::succ_begin(), and clang::ento::ExplodedNode::succ_size().
|
inline |
Definition at line 305 of file ExplodedGraph.h.
|
inline |
Definition at line 343 of file ExplodedGraph.h.
|
inline |
Definition at line 347 of file ExplodedGraph.h.
|
inline |
Definition at line 345 of file ExplodedGraph.h.
|
inline |
Definition at line 349 of file ExplodedGraph.h.
|
inline |
Definition at line 326 of file ExplodedGraph.h.
|
inline |
Definition at line 325 of file ExplodedGraph.h.
void ExplodedGraph::reclaimRecentlyAllocatedNodes | ( | ) |
Reclaim "uninteresting" nodes created since the last time this method was called.
Definition at line 178 of file ExplodedGraph.cpp.
References ChangedNodes, ReclaimCounter, and ReclaimNodeInterval.
|
inline |
Definition at line 331 of file ExplodedGraph.h.
|
inline |
Definition at line 351 of file ExplodedGraph.h.
|
inline |
Definition at line 355 of file ExplodedGraph.h.
|
inline |
Definition at line 353 of file ExplodedGraph.h.
|
inline |
Definition at line 357 of file ExplodedGraph.h.
|
inline |
Definition at line 329 of file ExplodedGraph.h.
std::unique_ptr< ExplodedGraph > ExplodedGraph::trim | ( | ArrayRef< const NodeTy *> | Nodes, |
InterExplodedGraphMap * | ForwardMap = nullptr , |
||
InterExplodedGraphMap * | InverseMap = nullptr |
||
) | const |
Creates a trimmed version of the graph that only contains paths leading to the given nodes.
Nodes | The nodes which must appear in the final graph. Presumably these are end-of-path nodes (i.e. they have no successors). | |
[out] | ForwardMap | A optional map from nodes in this graph to nodes in the returned graph. |
[out] | InverseMap | An optional map from nodes in the returned graph to nodes in this graph. |
Definition at line 346 of file ExplodedGraph.cpp.
References Nodes.
|
friend |
Definition at line 248 of file ExplodedGraph.h.
|
protected |
BVC - Allocator and context for allocating nodes and their predecessor and successor groups.
Definition at line 268 of file ExplodedGraph.h.
|
protected |
A list of recently allocated nodes that can potentially be recycled.
Definition at line 274 of file ExplodedGraph.h.
Referenced by getNode(), and reclaimRecentlyAllocatedNodes().
|
protected |
The nodes in the simulation graph which have been specially marked as the endpoint of an abstract simulation path.
Definition at line 261 of file ExplodedGraph.h.
|
protected |
A list of nodes that can be reused.
Definition at line 277 of file ExplodedGraph.h.
Referenced by getNode(), and isInterestingLValueExpr().
|
protected |
Nodes - The nodes in the graph.
Definition at line 264 of file ExplodedGraph.h.
Referenced by getNode(), isInterestingLValueExpr(), and trim().
|
protected |
NumNodes - The number of nodes in the graph.
Definition at line 271 of file ExplodedGraph.h.
Referenced by getNode(), and isInterestingLValueExpr().
|
protected |
Counter to determine when to reclaim nodes.
Definition at line 285 of file ExplodedGraph.h.
Referenced by reclaimRecentlyAllocatedNodes().
|
protected |
Determines how often nodes are reclaimed.
If this is 0, nodes will never be reclaimed.
Definition at line 282 of file ExplodedGraph.h.
Referenced by getNode(), and reclaimRecentlyAllocatedNodes().
|
protected |
The roots of the simulation graph.
Usually there will be only one, but clients are free to establish multiple subgraphs within a single SimulGraph. Moreover, these subgraphs can often merge when paths from different roots reach the same state at the same program location.
Definition at line 257 of file ExplodedGraph.h.