clang 17.0.0git
|
#include "clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h"
Public Types | |
using | NodeTy = ExplodedNode |
using | AllNodesTy = llvm::FoldingSet< ExplodedNode > |
using | roots_iterator = NodeVector::iterator |
using | const_roots_iterator = NodeVector::const_iterator |
using | eop_iterator = NodeVector::iterator |
using | const_eop_iterator = NodeVector::const_iterator |
using | node_iterator = AllNodesTy::iterator |
using | const_node_iterator = AllNodesTy::const_iterator |
using | NodeMap = llvm::DenseMap< const ExplodedNode *, ExplodedNode * > |
Public Member Functions | |
ExplodedGraph () | |
~ExplodedGraph () | |
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. | |
ExplodedNode * | createUncachedNode (const ProgramPoint &L, ProgramStateRef State, int64_t Id, bool IsSink=false) |
Create a node for a (Location, State) pair, but don't store it for deduplication later. | |
std::unique_ptr< ExplodedGraph > | MakeEmptyGraph () const |
ExplodedNode * | addRoot (ExplodedNode *V) |
addRoot - Add an untyped node to the set of roots. | |
ExplodedNode * | addEndOfPath (ExplodedNode *V) |
addEndOfPath - Add an untyped node to the set of EOP nodes. | |
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. | |
void | enableNodeReclamation (unsigned Interval) |
Enable tracking of recently allocated nodes for potential reclamation when calling reclaimRecentlyAllocatedNodes(). | |
void | reclaimRecentlyAllocatedNodes () |
Reclaim "uninteresting" nodes created since the last time this method was called. | |
Static Public Member Functions | |
static bool | isInterestingLValueExpr (const Expr *Ex) |
Returns true if nodes for the given expression kind are always kept around. | |
Protected Types | |
using | NodeVector = std::vector< ExplodedNode * > |
Protected Attributes | |
NodeVector | Roots |
The roots of the simulation graph. | |
NodeVector | EndNodes |
The nodes in the simulation graph which have been specially marked as the endpoint of an abstract simulation path. | |
llvm::FoldingSet< ExplodedNode > | Nodes |
Nodes - The nodes in the graph. | |
BumpVectorContext | BVC |
BVC - Allocator and context for allocating nodes and their predecessor and successor groups. | |
int64_t | NumNodes = 0 |
NumNodes - The number of nodes in the graph. | |
NodeVector | ChangedNodes |
A list of recently allocated nodes that can potentially be recycled. | |
NodeVector | FreeNodes |
A list of nodes that can be reused. | |
unsigned | ReclaimNodeInterval = 0 |
Determines how often nodes are reclaimed. | |
unsigned | ReclaimCounter |
Counter to determine when to reclaim nodes. | |
Friends | |
class | CoreEngine |
Definition at line 302 of file ExplodedGraph.h.
using clang::ento::ExplodedGraph::AllNodesTy = llvm::FoldingSet<ExplodedNode> |
Definition at line 390 of file ExplodedGraph.h.
using clang::ento::ExplodedGraph::const_eop_iterator = NodeVector::const_iterator |
Definition at line 394 of file ExplodedGraph.h.
using clang::ento::ExplodedGraph::const_node_iterator = AllNodesTy::const_iterator |
Definition at line 396 of file ExplodedGraph.h.
using clang::ento::ExplodedGraph::const_roots_iterator = NodeVector::const_iterator |
Definition at line 392 of file ExplodedGraph.h.
using clang::ento::ExplodedGraph::eop_iterator = NodeVector::iterator |
Definition at line 393 of file ExplodedGraph.h.
using clang::ento::ExplodedGraph::node_iterator = AllNodesTy::iterator |
Definition at line 395 of file ExplodedGraph.h.
using clang::ento::ExplodedGraph::NodeMap = llvm::DenseMap<const ExplodedNode *, ExplodedNode *> |
Definition at line 425 of file ExplodedGraph.h.
Definition at line 389 of file ExplodedGraph.h.
|
protected |
Definition at line 307 of file ExplodedGraph.h.
using clang::ento::ExplodedGraph::roots_iterator = NodeVector::iterator |
Definition at line 391 of file ExplodedGraph.h.
|
default |
|
default |
|
inline |
addEndOfPath - Add an untyped node to the set of EOP nodes.
Definition at line 375 of file ExplodedGraph.h.
Referenced by clang::ento::CoreEngine::enqueueEndOfFunction().
|
inline |
addRoot - Add an untyped node to the set of roots.
Definition at line 369 of file ExplodedGraph.h.
Referenced by clang::ento::CoreEngine::ExecuteWorkList().
ExplodedNode * ExplodedGraph::createUncachedNode | ( | const ProgramPoint & | L, |
ProgramStateRef | State, | ||
int64_t | Id, | ||
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 431 of file ExplodedGraph.cpp.
References getAllocator(), Id, and V.
|
inline |
Definition at line 383 of file ExplodedGraph.h.
References NumNodes.
|
inline |
Enable tracking of recently allocated nodes for potential reclamation when calling reclaimRecentlyAllocatedNodes().
Definition at line 444 of file ExplodedGraph.h.
References ReclaimCounter, and ReclaimNodeInterval.
Referenced by clang::ento::ExprEngine::ExprEngine().
|
inline |
Definition at line 414 of file ExplodedGraph.h.
References EndNodes.
Referenced by clang::ento::CoreEngine::ExecuteWorkListWithInitialState().
|
inline |
Definition at line 418 of file ExplodedGraph.h.
References EndNodes.
|
inline |
Definition at line 416 of file ExplodedGraph.h.
References EndNodes.
Referenced by clang::ento::CoreEngine::ExecuteWorkListWithInitialState().
|
inline |
Definition at line 420 of file ExplodedGraph.h.
References EndNodes.
|
inline |
Definition at line 422 of file ExplodedGraph.h.
References BVC, and clang::BumpVectorContext::getAllocator().
Referenced by 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 393 of file ExplodedGraph.cpp.
References ChangedNodes, FreeNodes, getAllocator(), Nodes, NumNodes, clang::ento::ExplodedNode::Profile(), ReclaimNodeInterval, and V.
Referenced by clang::ento::CoreEngine::enqueueStmtNode(), clang::ento::CoreEngine::ExecuteWorkList(), clang::ento::SwitchNodeBuilder::generateCaseStmtNode(), clang::ento::SwitchNodeBuilder::generateDefaultCaseNode(), clang::ento::IndirectGotoNodeBuilder::generateNode(), clang::ento::NodeBuilder::generateNodeImpl(), clang::ento::ExprEngine::processCallEnter(), and clang::ento::ExprEngine::processCallExit().
|
inline |
Definition at line 423 of file ExplodedGraph.h.
References BVC.
Returns true if nodes for the given expression kind are always kept around.
Definition at line 50 of file ExplodedGraph.cpp.
References clang::Expr::isLValue().
|
inline |
Definition at line 364 of file ExplodedGraph.h.
Referenced by trim().
|
inline |
Definition at line 398 of file ExplodedGraph.h.
References Nodes.
|
inline |
Definition at line 402 of file ExplodedGraph.h.
References Nodes.
|
inline |
Definition at line 400 of file ExplodedGraph.h.
References Nodes.
|
inline |
Definition at line 404 of file ExplodedGraph.h.
References Nodes.
|
inline |
Definition at line 381 of file ExplodedGraph.h.
References EndNodes.
|
inline |
Definition at line 380 of file ExplodedGraph.h.
References Roots.
Referenced by clang::ento::CoreEngine::ExecuteWorkList().
void ExplodedGraph::reclaimRecentlyAllocatedNodes | ( | ) |
Reclaim "uninteresting" nodes created since the last time this method was called.
Definition at line 169 of file ExplodedGraph.cpp.
References ChangedNodes, ReclaimCounter, and ReclaimNodeInterval.
Referenced by clang::ento::ExprEngine::ProcessStmt().
|
inline |
Definition at line 386 of file ExplodedGraph.h.
References Nodes.
Referenced by clang::ento::CoreEngine::ExecuteWorkList().
|
inline |
Definition at line 406 of file ExplodedGraph.h.
References Roots.
Referenced by llvm::GraphTraits< clang::ento::ExplodedGraph * >::getEntryNode(), clang::ento::ExprEngine::getRootLocationContext(), and clang::ento::ExprEngine::processCFGBlockEntrance().
|
inline |
Definition at line 410 of file ExplodedGraph.h.
References Roots.
|
inline |
Definition at line 408 of file ExplodedGraph.h.
References Roots.
Referenced by clang::ento::ExprEngine::getRootLocationContext().
|
inline |
Definition at line 412 of file ExplodedGraph.h.
References Roots.
|
inline |
Definition at line 384 of file ExplodedGraph.h.
References NumNodes.
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 441 of file ExplodedGraph.cpp.
References clang::ento::ExplodedNode::addPredecessor(), clang::ento::ExplodedNode::getID(), clang::ento::ExplodedNode::getLocation(), clang::ento::ExplodedNode::isSink(), MakeEmptyGraph(), and Nodes.
Referenced by clang::ento::ExprEngine::DumpGraph().
|
friend |
Definition at line 304 of file ExplodedGraph.h.
|
protected |
BVC - Allocator and context for allocating nodes and their predecessor and successor groups.
Definition at line 324 of file ExplodedGraph.h.
Referenced by getAllocator(), and getNodeAllocator().
|
protected |
A list of recently allocated nodes that can potentially be recycled.
Definition at line 330 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 317 of file ExplodedGraph.h.
Referenced by addEndOfPath(), eop_begin(), eop_end(), and num_eops().
|
protected |
A list of nodes that can be reused.
Definition at line 333 of file ExplodedGraph.h.
Referenced by getNode().
|
protected |
Nodes - The nodes in the graph.
Definition at line 320 of file ExplodedGraph.h.
Referenced by getNode(), nodes_begin(), nodes_end(), reserve(), and trim().
|
protected |
NumNodes - The number of nodes in the graph.
Definition at line 327 of file ExplodedGraph.h.
|
protected |
Counter to determine when to reclaim nodes.
Definition at line 341 of file ExplodedGraph.h.
Referenced by enableNodeReclamation(), and reclaimRecentlyAllocatedNodes().
|
protected |
Determines how often nodes are reclaimed.
If this is 0, nodes will never be reclaimed.
Definition at line 338 of file ExplodedGraph.h.
Referenced by enableNodeReclamation(), 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 313 of file ExplodedGraph.h.
Referenced by addRoot(), num_roots(), roots_begin(), and roots_end().