clang API Documentation
#include <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. If no node for this pair exists, it is created. IsNew is set to true if the node was freshly created. | |
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. | |
ExplodedGraph () | |
~ExplodedGraph () | |
unsigned | num_roots () const |
unsigned | num_eops () const |
bool | empty () const |
unsigned | size () const |
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 |
void | enableNodeReclamation (unsigned Interval) |
void | reclaimRecentlyAllocatedNodes () |
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 | |
typedef std::vector < ExplodedNode * > | NodeVector |
Protected Attributes | |
NodeVector | Roots |
NodeVector | EndNodes |
llvm::FoldingSet< ExplodedNode > | Nodes |
Nodes - The nodes in the graph. | |
BumpVectorContext | BVC |
unsigned | NumNodes |
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 |
unsigned | ReclaimCounter |
Counter to determine when to reclaim nodes. | |
Friends | |
class | CoreEngine |
Definition at line 249 of file ExplodedGraph.h.
typedef llvm::FoldingSet<ExplodedNode> clang::ento::ExplodedGraph::AllNodesTy |
Definition at line 328 of file ExplodedGraph.h.
typedef NodeVector::const_iterator clang::ento::ExplodedGraph::const_eop_iterator |
Definition at line 332 of file ExplodedGraph.h.
typedef AllNodesTy::const_iterator clang::ento::ExplodedGraph::const_node_iterator |
Definition at line 334 of file ExplodedGraph.h.
typedef NodeVector::const_iterator clang::ento::ExplodedGraph::const_roots_iterator |
Definition at line 330 of file ExplodedGraph.h.
typedef NodeVector::iterator clang::ento::ExplodedGraph::eop_iterator |
Definition at line 331 of file ExplodedGraph.h.
typedef AllNodesTy::iterator clang::ento::ExplodedGraph::node_iterator |
Definition at line 333 of file ExplodedGraph.h.
typedef llvm::DenseMap<const ExplodedNode*, ExplodedNode*> clang::ento::ExplodedGraph::NodeMap |
Definition at line 363 of file ExplodedGraph.h.
Definition at line 327 of file ExplodedGraph.h.
typedef std::vector<ExplodedNode *> clang::ento::ExplodedGraph::NodeVector [protected] |
Definition at line 254 of file ExplodedGraph.h.
typedef NodeVector::iterator clang::ento::ExplodedGraph::roots_iterator |
Definition at line 329 of file ExplodedGraph.h.
Definition at line 50 of file ExplodedGraph.cpp.
Definition at line 53 of file ExplodedGraph.cpp.
ExplodedNode* clang::ento::ExplodedGraph::addEndOfPath | ( | ExplodedNode * | V | ) | [inline] |
addEndOfPath - Add an untyped node to the set of EOP nodes.
Definition at line 311 of file ExplodedGraph.h.
References EndNodes.
ExplodedNode* clang::ento::ExplodedGraph::addRoot | ( | ExplodedNode * | V | ) | [inline] |
addRoot - Add an untyped node to the set of roots.
Definition at line 305 of file ExplodedGraph.h.
References Roots.
bool clang::ento::ExplodedGraph::empty | ( | ) | const [inline] |
Definition at line 323 of file ExplodedGraph.h.
References NumNodes.
void clang::ento::ExplodedGraph::enableNodeReclamation | ( | unsigned | Interval | ) | [inline] |
Enable tracking of recently allocated nodes for potential reclamation when calling reclaimRecentlyAllocatedNodes().
Definition at line 382 of file ExplodedGraph.h.
References ReclaimCounter, and ReclaimNodeInterval.
eop_iterator clang::ento::ExplodedGraph::eop_begin | ( | ) | [inline] |
Definition at line 352 of file ExplodedGraph.h.
References EndNodes.
const_eop_iterator clang::ento::ExplodedGraph::eop_begin | ( | ) | const [inline] |
Definition at line 356 of file ExplodedGraph.h.
References EndNodes.
eop_iterator clang::ento::ExplodedGraph::eop_end | ( | ) | [inline] |
Definition at line 354 of file ExplodedGraph.h.
References EndNodes.
const_eop_iterator clang::ento::ExplodedGraph::eop_end | ( | ) | const [inline] |
Definition at line 358 of file ExplodedGraph.h.
References EndNodes.
llvm::BumpPtrAllocator& clang::ento::ExplodedGraph::getAllocator | ( | ) | [inline] |
Definition at line 360 of file ExplodedGraph.h.
References BVC, and clang::BumpVectorContext::getAllocator().
Referenced by 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 301 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().
Definition at line 361 of file ExplodedGraph.h.
References BVC.
bool ExplodedGraph::isInterestingLValueExpr | ( | const Expr * | Ex | ) | [static] |
Returns true if nodes for the given expression kind are always kept around.
Definition at line 59 of file ExplodedGraph.cpp.
References clang::Expr::isLValue().
Referenced by clang::ento::bugreporter::trackNullOrUndefValue().
std::unique_ptr<ExplodedGraph> clang::ento::ExplodedGraph::MakeEmptyGraph | ( | ) | const [inline] |
Definition at line 300 of file ExplodedGraph.h.
Referenced by trim().
node_iterator clang::ento::ExplodedGraph::nodes_begin | ( | ) | [inline] |
Definition at line 336 of file ExplodedGraph.h.
References Nodes.
const_node_iterator clang::ento::ExplodedGraph::nodes_begin | ( | ) | const [inline] |
Definition at line 340 of file ExplodedGraph.h.
References Nodes.
node_iterator clang::ento::ExplodedGraph::nodes_end | ( | ) | [inline] |
Definition at line 338 of file ExplodedGraph.h.
References Nodes.
const_node_iterator clang::ento::ExplodedGraph::nodes_end | ( | ) | const [inline] |
Definition at line 342 of file ExplodedGraph.h.
References Nodes.
unsigned clang::ento::ExplodedGraph::num_eops | ( | ) | const [inline] |
Definition at line 321 of file ExplodedGraph.h.
References EndNodes.
unsigned clang::ento::ExplodedGraph::num_roots | ( | ) | const [inline] |
Definition at line 320 of file ExplodedGraph.h.
References Roots.
Reclaim "uninteresting" nodes created since the last time this method was called.
Definition at line 180 of file ExplodedGraph.cpp.
References ChangedNodes, ReclaimCounter, and ReclaimNodeInterval.
Referenced by clang::ento::ExprEngine::ProcessStmt().
roots_iterator clang::ento::ExplodedGraph::roots_begin | ( | ) | [inline] |
Definition at line 344 of file ExplodedGraph.h.
References Roots.
Referenced by clang::ento::ExprEngine::processCFGBlockEntrance(), and clang::ento::ExprEngine::ViewGraph().
const_roots_iterator clang::ento::ExplodedGraph::roots_begin | ( | ) | const [inline] |
Definition at line 348 of file ExplodedGraph.h.
References Roots.
roots_iterator clang::ento::ExplodedGraph::roots_end | ( | ) | [inline] |
Definition at line 346 of file ExplodedGraph.h.
References Roots.
const_roots_iterator clang::ento::ExplodedGraph::roots_end | ( | ) | const [inline] |
Definition at line 350 of file ExplodedGraph.h.
References Roots.
unsigned clang::ento::ExplodedGraph::size | ( | ) | const [inline] |
Definition at line 324 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 340 of file ExplodedGraph.cpp.
References clang::ento::ExplodedNode::addPredecessor(), clang::ento::ExplodedNode::getLocation(), clang::ento::ExplodedNode::isSink(), MakeEmptyGraph(), and Nodes.
Referenced by clang::ento::ExprEngine::ViewGraph().
friend class CoreEngine [friend] |
Definition at line 251 of file ExplodedGraph.h.
BumpVectorContext clang::ento::ExplodedGraph::BVC [protected] |
BVC - Allocator and context for allocating nodes and their predecessor and successor groups.
Definition at line 271 of file ExplodedGraph.h.
Referenced by getAllocator(), and getNodeAllocator().
NodeVector clang::ento::ExplodedGraph::ChangedNodes [protected] |
A list of recently allocated nodes that can potentially be recycled.
Definition at line 277 of file ExplodedGraph.h.
Referenced by getNode(), and reclaimRecentlyAllocatedNodes().
NodeVector clang::ento::ExplodedGraph::EndNodes [protected] |
The nodes in the simulation graph which have been specially marked as the endpoint of an abstract simulation path.
Definition at line 264 of file ExplodedGraph.h.
Referenced by addEndOfPath(), eop_begin(), eop_end(), and num_eops().
NodeVector clang::ento::ExplodedGraph::FreeNodes [protected] |
A list of nodes that can be reused.
Definition at line 280 of file ExplodedGraph.h.
Referenced by getNode().
llvm::FoldingSet<ExplodedNode> clang::ento::ExplodedGraph::Nodes [protected] |
Nodes - The nodes in the graph.
Definition at line 267 of file ExplodedGraph.h.
Referenced by getNode(), nodes_begin(), nodes_end(), and trim().
unsigned clang::ento::ExplodedGraph::NumNodes [protected] |
NumNodes - The number of nodes in the graph.
Definition at line 274 of file ExplodedGraph.h.
unsigned clang::ento::ExplodedGraph::ReclaimCounter [protected] |
Counter to determine when to reclaim nodes.
Definition at line 288 of file ExplodedGraph.h.
Referenced by enableNodeReclamation(), and reclaimRecentlyAllocatedNodes().
Determines how often nodes are reclaimed.
If this is 0, nodes will never be reclaimed.
Definition at line 285 of file ExplodedGraph.h.
Referenced by enableNodeReclamation(), getNode(), and reclaimRecentlyAllocatedNodes().
NodeVector clang::ento::ExplodedGraph::Roots [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 260 of file ExplodedGraph.h.
Referenced by addRoot(), num_roots(), roots_begin(), and roots_end().