clang 8.0.0

Classes | Public Types | Public Member Functions | Static Public Member Functions | Friends | List of all members
clang::ento::ExplodedNode Class Reference

`#include "clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h"`

Inheritance diagram for clang::ento::ExplodedNode:
[legend]
Collaboration diagram for clang::ento::ExplodedNode:
[legend]

## Public Types
using | succ_iterator = ExplodedNode *const *
using | const_succ_iterator = const ExplodedNode *const *
using | pred_iterator = ExplodedNode *const *
using | const_pred_iterator = const ExplodedNode *const *

## Public Member Functions
| ExplodedNode (const ProgramPoint &loc, ProgramStateRef state, bool IsSink)
ProgramPoint | getLocation () const
| getLocation - Returns the edge associated with the given node. More...
const LocationContext * | getLocationContext () const
const StackFrameContext * | getStackFrame () const
const Decl & | getCodeDecl () const
CFG & | getCFG () const
ParentMap & | getParentMap () const
template<typename T >
T & | getAnalysis () const
const ProgramStateRef & | getState () const
template<typename T >
Optional< T > | getLocationAs () const LLVM_LVALUE_FUNCTION
SVal | getSVal (const Stmt *S) const
| Get the value of an arbitrary expression at this node. More...
void | Profile (llvm::FoldingSetNodeID &ID) const
void | addPredecessor (ExplodedNode *V, ExplodedGraph &G)
| addPredeccessor - Adds a predecessor to the current node, and in tandem add this node as a successor of the other node. More...
unsigned | succ_size () const
unsigned | pred_size () const
bool | succ_empty () const
bool | pred_empty () const
bool | isSink () const
bool | hasSinglePred () const
ExplodedNode * | getFirstPred ()
const ExplodedNode * | getFirstPred () const
ExplodedNode * | getFirstSucc ()
const ExplodedNode * | getFirstSucc () const
pred_iterator | pred_begin ()
pred_iterator | pred_end ()
const_pred_iterator | pred_begin () const
const_pred_iterator | pred_end () const
succ_iterator | succ_begin ()
succ_iterator | succ_end ()
const_succ_iterator | succ_begin () const
const_succ_iterator | succ_end () const
int64_t | getID (ExplodedGraph *G) const
bool | isTrivial () const
| The node is trivial if it has only one successor, only one predecessor, it's predecessor has only one successor, and its program state is the same as the program state of the previous node. More...

## Static Public Member Functions
static void | Profile (llvm::FoldingSetNodeID &ID, const ProgramPoint &Loc, const ProgramStateRef &state, bool IsSink)

## Friends
class | BranchNodeBuilder
class | CoreEngine
class | EndOfFunctionNodeBuilder
class | ExplodedGraph
class | IndirectGotoNodeBuilder
class | NodeBuilder
class | SwitchNodeBuilder

## Detailed Description

Definition at line 66 of file ExplodedGraph.h.

## Member Typedef Documentation

## ◆ const_pred_iterator

using clang::ento::ExplodedNode::const_pred_iterator = const ExplodedNode * const *

Definition at line 225 of file ExplodedGraph.h.

## ◆ const_succ_iterator

using clang::ento::ExplodedNode::const_succ_iterator = const ExplodedNode * const *

Definition at line 223 of file ExplodedGraph.h.

## ◆ pred_iterator

using clang::ento::ExplodedNode::pred_iterator = ExplodedNode * const *

Definition at line 224 of file ExplodedGraph.h.

## ◆ succ_iterator

using clang::ento::ExplodedNode::succ_iterator = ExplodedNode * const *

Definition at line 222 of file ExplodedGraph.h.

## Constructor & Destructor Documentation

## ◆ ExplodedNode()

clang::ento::ExplodedNode::ExplodedNode | ( | const ProgramPoint & | loc,
|  | ProgramStateRef | state,
|  | bool | IsSink
| ) |  |
| inline explicit

Definition at line 136 of file ExplodedGraph.h.

References isSink().

## Member Function Documentation

## ◆ addPredecessor()

void ExplodedNode::addPredecessor | ( | ExplodedNode * | V,
|  | ExplodedGraph & | G
| ) |  |

addPredeccessor - Adds a predecessor to the current node, and in tandem add this node as a successor of the other node.

Definition at line 206 of file ExplodedGraph.cpp.

References clang::ento::ExplodedGraph::getAllocator(), clang::ento::ExplodedGraph::getNodeAllocator(), isSink(), P, and clang::BumpVector< T >::push_back().

Referenced by clang::ento::CoreEngine::enqueueStmtNode(), clang::ento::CoreEngine::ExecuteWorkListWithInitialState(), clang::ento::SwitchNodeBuilder::generateCaseStmtNode(), clang::ento::SwitchNodeBuilder::generateDefaultCaseNode(), clang::ento::IndirectGotoNodeBuilder::generateNode(), clang::ento::NodeBuilder::generateNodeImpl(), clang::ento::ExprEngine::processCallEnter(), clang::ento::ExprEngine::processCallExit(), Profile(), and clang::ento::ExplodedGraph::trim().

## ◆ getAnalysis()

template<typename T >

T& clang::ento::ExplodedNode::getAnalysis | ( |  | ) | const
| inline

Definition at line 160 of file ExplodedGraph.h.

References clang::LocationContext::getAnalysis(), and getLocationContext().

## ◆ getCFG()

CFG& clang::ento::ExplodedNode::getCFG | ( |  | ) | const
| inline

Definition at line 155 of file ExplodedGraph.h.

References clang::LocationContext::getCFG(), and getLocationContext().

## ◆ getCodeDecl()

const Decl& clang::ento::ExplodedNode::getCodeDecl | ( |  | ) | const
| inline

Definition at line 153 of file ExplodedGraph.h.

References clang::LocationContext::getDecl(), and getLocationContext().

## ◆ getFirstPred() [1/2]

ExplodedNode* clang::ento::ExplodedNode::getFirstPred | ( |  | ) |
| inline

Definition at line 205 of file ExplodedGraph.h.

References pred_begin(), and pred_empty().

Referenced by clang::ento::CoreEngine::dispatchWorkItem(), clang::ento::allocation_state::getContainerObjRegion(), getFirstPred(), and clang::ento::mpi::MPIBugReporter::reportUnmatchedWait().

## ◆ getFirstPred() [2/2]

const ExplodedNode* clang::ento::ExplodedNode::getFirstPred | ( |  | ) | const
| inline

Definition at line 209 of file ExplodedGraph.h.

References getFirstPred().

## ◆ getFirstSucc() [1/2]

ExplodedNode* clang::ento::ExplodedNode::getFirstSucc | ( |  | ) |
| inline

Definition at line 213 of file ExplodedGraph.h.

References succ_begin(), and succ_empty().

Referenced by llvm::GraphTraits< clang::ento::ExplodedGraph * >::child_end(), getFirstSucc(), clang::ento::PathDiagnosticLocation::getNextStmt(), and llvm::GraphTraits< clang::ento::ExplodedGraph * >::predecessorOfTrivial().

## ◆ getFirstSucc() [2/2]

const ExplodedNode* clang::ento::ExplodedNode::getFirstSucc | ( |  | ) | const
| inline

Definition at line 217 of file ExplodedGraph.h.

References getFirstSucc().

## ◆ getID()

int64_t ExplodedNode::getID | ( | ExplodedGraph * | G | ) | const

Definition at line 286 of file ExplodedGraph.cpp.

References clang::ento::ExplodedGraph::getAllocator().

Referenced by succ_end().

## ◆ getLocation()

ProgramPoint clang::ento::ExplodedNode::getLocation | ( |  | ) | const
| inline

getLocation - Returns the edge associated with the given node.

Definition at line 143 of file ExplodedGraph.h.

Referenced by clang::ento::PathDiagnosticLocation::createEndOfPath(), clang::ento::CoreEngine::dispatchWorkItem(), clang::ento::WorkList::enqueue(), clang::ento::CoreEngine::enqueueStmtNode(), clang::ento::ExprEngine::evalEagerlyAssumeBinOpBifurcation(), clang::ento::CoreEngine::ExecuteWorkList(), getLocationContext(), clang::ento::CheckerContext::getLocationRegionIfPostStore(), clang::ento::StackHintGeneratorForSymbol::getMessage(), getStackFrame(), clang::ento::PathDiagnosticLocation::getStmt(), clang::ento::ExplodedGraph::isInterestingLValueExpr(), clang::ento::WorkList::makeBFSBlockDFSContents(), clang::ento::WorkList::makeUnexploredFirst(), clang::ento::WorkList::makeUnexploredFirstPriorityQueue(), clang::ento::ExprEngine::processCFGBlockEntrance(), clang::ento::ExprEngine::processEndOfFunction(), clang::ento::mpi::MPIBugReporter::reportUnmatchedWait(), clang::ento::ExplodedGraph::trim(), clang::ento::ExprEngine::VisitLogicalExpr(), and clang::ento::ExprEngine::VisitObjCMessage().

## ◆ getLocationAs()

template<typename T >

Optional<T> clang::ento::ExplodedNode::getLocationAs | ( |  | ) | const
| inline

Definition at line 167 of file ExplodedGraph.h.

References clang::ProgramPoint::getAs().

Referenced by clang::ento::PathDiagnosticLocation::createEndOfPath().

## ◆ getLocationContext()

const LocationContext* clang::ento::ExplodedNode::getLocationContext | ( |  | ) | const
| inline

Definition at line 145 of file ExplodedGraph.h.

References getLocation(), and clang::ProgramPoint::getLocationContext().

Referenced by clang::ento::ExprEngine::bindReturnValue(), clang::ento::retaincountchecker::RetainCountChecker::checkEndFunction(), clang::ento::ExprEngine::CreateCXXTemporaryObject(), clang::ento::PathDiagnosticLocation::createEndOfPath(), clang::ento::CoreEngine::enqueueStmtNode(), clang::ento::ExprEngine::evalBind(), clang::ento::ExprEngine::evalEagerlyAssumeBinOpBifurcation(), clang::ento::CoreEngine::ExecuteWorkListWithInitialState(), clang::ento::SwitchNodeBuilder::generateCaseStmtNode(), clang::ento::SwitchNodeBuilder::generateDefaultCaseNode(), clang::ento::BranchNodeBuilder::generateNode(), clang::ento::IndirectGotoNodeBuilder::generateNode(), getAnalysis(), getCFG(), getCodeDecl(), clang::ento::CheckerContext::getCurrentAnalysisDeclContext(), clang::ento::BugReport::getDeclWithIssue(), clang::ento::CheckerContext::getLocationContext(), clang::ento::IndirectGotoNodeBuilder::getLocationContext(), clang::ento::SwitchNodeBuilder::getLocationContext(), getParentMap(), clang::ento::PathDiagnosticLocation::getStmt(), clang::ento::ExplodedGraph::isInterestingLValueExpr(), clang::ento::WorkList::makeBFSBlockDFSContents(), clang::ento::WorkList::makeUnexploredFirst(), mayInlineDecl(), clang::ento::ExprEngine::ProcessAutomaticObjDtor(), clang::ento::ExprEngine::ProcessBaseDtor(), clang::ento::ExprEngine::processBranch(), clang::ento::ExprEngine::processCallExit(), clang::ento::ExprEngine::processCFGBlockEntrance(), clang::ento::ExprEngine::processCFGElement(), clang::ento::ExprEngine::processCleanupTemporaryBranch(), clang::ento::ExprEngine::ProcessDeleteDtor(), clang::ento::ExprEngine::processEndOfFunction(), clang::ento::ExprEngine::ProcessInitializer(), clang::ento::ExprEngine::ProcessMemberDtor(), clang::ento::ExprEngine::ProcessNewAllocator(), clang::ento::retaincountchecker::RetainCountChecker::processObjCLiterals(), clang::ento::ExprEngine::ProcessStmt(), clang::ento::ExprEngine::ProcessTemporaryDtor(), clang::ento::ExprEngine::removeDeadOnEndOfFunction(), clang::ento::CheckerManager::runCheckersForBranchCondition(), clang::ento::CheckerManager::runCheckersForCallEvent(), clang::ento::CheckerManager::runCheckersForEndFunction(), clang::ento::updateLoopStack(), clang::ento::ExprEngine::VisitBlockExpr(), clang::ento::ExprEngine::VisitCallExpr(), clang::ento::ExprEngine::VisitCast(), clang::ento::ExprEngine::VisitCommonDeclRefExpr(), clang::ento::ExprEngine::VisitCompoundLiteralExpr(), clang::ento::ExprEngine::VisitCXXCatchStmt(), clang::ento::ExprEngine::VisitCXXConstructExpr(), clang::ento::ExprEngine::VisitCXXNewAllocatorCall(), clang::ento::ExprEngine::VisitCXXNewExpr(), clang::ento::ExprEngine::VisitCXXThisExpr(), clang::ento::ExprEngine::VisitDeclStmt(), clang::ento::ExprEngine::VisitGCCAsmStmt(), clang::ento::ExprEngine::VisitGuardedExpr(), clang::ento::ExprEngine::VisitIncrementDecrementOperator(), clang::ento::ExprEngine::VisitInitListExpr(), clang::ento::ExprEngine::VisitLambdaExpr(), clang::ento::ExprEngine::VisitLogicalExpr(), clang::ento::ExprEngine::VisitLvalObjCIvarRefExpr(), and clang::ento::ExprEngine::VisitObjCMessage().

## ◆ getParentMap()

ParentMap& clang::ento::ExplodedNode::getParentMap | ( |  | ) | const
| inline

Definition at line 157 of file ExplodedGraph.h.

References getLocationContext(), and clang::LocationContext::getParentMap().

## ◆ getStackFrame()

const StackFrameContext* clang::ento::ExplodedNode::getStackFrame | ( |  | ) | const
| inline

Definition at line 149 of file ExplodedGraph.h.

References getLocation(), and clang::ProgramPoint::getStackFrame().

Referenced by clang::ento::CheckerContext::getStackFrame(), clang::ento::ExprEngine::processCallExit(), and clang::ento::ExprEngine::processEndOfFunction().

## ◆ getState()

const ProgramStateRef& clang::ento::ExplodedNode::getState | ( |  | ) | const
| inline

Definition at line 164 of file ExplodedGraph.h.

Referenced by clang::ento::mpi::MPIChecker::checkDoubleNonblocking(), clang::ento::retaincountchecker::RetainCountChecker::checkEndFunction(), clang::ento::CheckerContext::CheckerContext(), clang::ento::retaincountchecker::RetainCountChecker::checkPostStmt(), clang::ento::ExprEngine::CreateCXXTemporaryObject(), clang::ento::ExprEngine::defaultEvalCall(), clang::ento::CoreEngine::enqueueStmtNode(), clang::ento::ExprEngine::evalBind(), clang::ento::ExprEngine::evalEagerlyAssumeBinOpBifurcation(), clang::ento::ExprEngine::evalLoad(), clang::ento::allocation_state::getContainerObjRegion(), clang::ento::StackHintGeneratorForSymbol::getMessage(), clang::ento::CheckerContext::getState(), clang::ento::ExplodedGraph::isInterestingLValueExpr(), clang::ento::ExprEngine::ProcessAutomaticObjDtor(), clang::ento::ExprEngine::ProcessBaseDtor(), clang::ento::ExprEngine::processBranch(), clang::ento::ExprEngine::processCallEnter(), clang::ento::ExprEngine::processCallExit(), clang::ento::ExprEngine::processCFGBlockEntrance(), clang::ento::ExprEngine::processCleanupTemporaryBranch(), clang::ento::ExprEngine::ProcessDeleteDtor(), clang::ento::ExprEngine::processEndOfFunction(), clang::ento::ExprEngine::ProcessInitializer(), clang::ento::ExprEngine::ProcessMemberDtor(), clang::ento::ExprEngine::ProcessNewAllocator(), clang::ento::ExprEngine::ProcessTemporaryDtor(), clang::ento::ExprEngine::removeDead(), clang::ento::mpi::MPIBugReporter::reportUnmatchedWait(), clang::ento::CheckerManager::runCheckersForObjCMessage(), clang::ento::updateLoopStack(), clang::ento::ExprEngine::VisitBlockExpr(), clang::ento::ExprEngine::VisitCallExpr(), clang::ento::ExprEngine::VisitCast(), clang::ento::ExprEngine::VisitCommonDeclRefExpr(), clang::ento::ExprEngine::VisitCompoundLiteralExpr(), clang::ento::ExprEngine::VisitCXXCatchStmt(), clang::ento::ExprEngine::VisitCXXConstructExpr(), clang::ento::ExprEngine::VisitCXXDeleteExpr(), clang::ento::ExprEngine::VisitCXXNewAllocatorCall(), clang::ento::ExprEngine::VisitCXXNewExpr(), clang::ento::ExprEngine::VisitCXXThisExpr(), clang::ento::ExprEngine::VisitDeclStmt(), clang::ento::ExprEngine::VisitGCCAsmStmt(), clang::ento::ExprEngine::VisitGuardedExpr(), clang::ento::ExprEngine::VisitIncrementDecrementOperator(), clang::ento::ExprEngine::VisitInitListExpr(), clang::ento::ExprEngine::VisitLambdaExpr(), clang::ento::ExprEngine::VisitLogicalExpr(), clang::ento::ExprEngine::VisitLvalObjCIvarRefExpr(), clang::ento::ExprEngine::VisitMSAsmStmt(), and clang::ento::ExprEngine::VisitObjCMessage().

## ◆ getSVal()

SVal clang::ento::ExplodedNode::getSVal | ( | const Stmt * | S | ) | const
| inline

Get the value of an arbitrary expression at this node.

Definition at line 172 of file ExplodedGraph.h.

Referenced by clang::ento::retaincountchecker::RetainCountChecker::checkPostStmt(), clang::ento::CheckerContext::getCalleeDecl(), clang::ento::StackHintGeneratorForSymbol::getMessage(), and clang::ento::retaincountchecker::RetainCountChecker::processObjCLiterals().

## ◆ hasSinglePred()

bool clang::ento::ExplodedNode::hasSinglePred | ( |  | ) | const
| inline

Definition at line 201 of file ExplodedGraph.h.

References pred_size().

Referenced by clang::ento::CoreEngine::dispatchWorkItem().

## ◆ isSink()

bool clang::ento::ExplodedNode::isSink | ( |  | ) | const
| inline

Definition at line 199 of file ExplodedGraph.h.

Referenced by clang::ento::ExplodedNodeSet::Add(), addPredecessor(), clang::ento::CoreEngine::enqueueStmtNode(), ExplodedNode(), clang::ento::ExplodedNodeSet::ExplodedNodeSet(), clang::ento::NodeBuilderWithSinks::generateSink(), Profile(), and clang::ento::ExplodedGraph::trim().

## ◆ isTrivial()

bool ExplodedNode::isTrivial | ( |  | ) | const

The node is trivial if it has only one successor, only one predecessor, it's predecessor has only one successor, and its program state is the same as the program state of the previous node.

Trivial nodes may be skipped while printing exploded graph.

Definition at line 290 of file ExplodedGraph.cpp.

Referenced by llvm::GraphTraits< clang::ento::ExplodedGraph * >::predecessorOfTrivial(), and succ_end().

## ◆ pred_begin() [1/2]

pred_iterator clang::ento::ExplodedNode::pred_begin | ( |  | ) |
| inline

Definition at line 227 of file ExplodedGraph.h.

Referenced by alreadyExecutedAtLeastOneLoopIteration(), getFirstPred(), clang::ento::ExplodedGraph::isInterestingLValueExpr(), pred_begin(), clang::ento::ExprEngine::VisitGuardedExpr(), and clang::ento::ExprEngine::VisitLogicalExpr().

## ◆ pred_begin() [2/2]

const_pred_iterator clang::ento::ExplodedNode::pred_begin | ( |  | ) | const
| inline

Definition at line 230 of file ExplodedGraph.h.

References pred_begin().

## ◆ pred_empty()

bool clang::ento::ExplodedNode::pred_empty | ( |  | ) | const
| inline

Definition at line 197 of file ExplodedGraph.h.

Referenced by getFirstPred(), and clang::ento::isPossiblyEscaped().

## ◆ pred_end() [1/2]

pred_iterator clang::ento::ExplodedNode::pred_end | ( |  | ) |
| inline

Definition at line 228 of file ExplodedGraph.h.

Referenced by pred_end().

## ◆ pred_end() [2/2]

const_pred_iterator clang::ento::ExplodedNode::pred_end | ( |  | ) | const
| inline

Definition at line 233 of file ExplodedGraph.h.

References pred_end().

## ◆ pred_size()

unsigned clang::ento::ExplodedNode::pred_size | ( |  | ) | const
| inline

Definition at line 195 of file ExplodedGraph.h.

Referenced by hasSinglePred(), clang::ento::ExplodedGraph::isInterestingLValueExpr(), and clang::ento::ExprEngine::VisitLogicalExpr().

## ◆ Profile() [1/2]

static void clang::ento::ExplodedNode::Profile | ( | llvm::FoldingSetNodeID & | ID,
|  | const ProgramPoint & | Loc,
|  | const ProgramStateRef & | state,
|  | bool | IsSink
| ) |  |
| inline static

Definition at line 176 of file ExplodedGraph.h.

Referenced by clang::ento::ExplodedGraph::getNode(), and Profile().

## ◆ Profile() [2/2]

void clang::ento::ExplodedNode::Profile | ( | llvm::FoldingSetNodeID & | ID | ) | const
| inline

Definition at line 185 of file ExplodedGraph.h.

References addPredecessor(), isSink(), and Profile().

## ◆ succ_begin() [1/2]

succ_iterator clang::ento::ExplodedNode::succ_begin | ( |  | ) |
| inline

Definition at line 237 of file ExplodedGraph.h.

Referenced by llvm::GraphTraits< clang::ento::ExplodedGraph * >::child_begin(), getFirstSucc(), clang::ento::ExplodedGraph::isInterestingLValueExpr(), and succ_begin().

## ◆ succ_begin() [2/2]

const_succ_iterator clang::ento::ExplodedNode::succ_begin | ( |  | ) | const
| inline

Definition at line 240 of file ExplodedGraph.h.

References succ_begin().

## ◆ succ_empty()

bool clang::ento::ExplodedNode::succ_empty | ( |  | ) | const
| inline

Definition at line 196 of file ExplodedGraph.h.

Referenced by getFirstSucc().

## ◆ succ_end() [1/2]

succ_iterator clang::ento::ExplodedNode::succ_end | ( |  | ) |
| inline

Definition at line 238 of file ExplodedGraph.h.

Referenced by llvm::GraphTraits< clang::ento::ExplodedGraph * >::child_end(), and succ_end().

## ◆ succ_end() [2/2]

const_succ_iterator clang::ento::ExplodedNode::succ_end | ( |  | ) | const
| inline

Definition at line 243 of file ExplodedGraph.h.

References getID(), isTrivial(), and succ_end().

## ◆ succ_size()

unsigned clang::ento::ExplodedNode::succ_size | ( |  | ) | const
| inline

Definition at line 194 of file ExplodedGraph.h.

Referenced by clang::ento::ExplodedGraph::isInterestingLValueExpr(), and llvm::GraphTraits< clang::ento::ExplodedGraph * >::predecessorOfTrivial().

## Friends And Related Function Documentation

## ◆ BranchNodeBuilder

friend class BranchNodeBuilder
| friend

Definition at line 67 of file ExplodedGraph.h.

## ◆ CoreEngine

friend class CoreEngine
| friend

Definition at line 68 of file ExplodedGraph.h.

## ◆ EndOfFunctionNodeBuilder

friend class EndOfFunctionNodeBuilder
| friend

Definition at line 69 of file ExplodedGraph.h.

## ◆ ExplodedGraph

friend class ExplodedGraph
| friend

Definition at line 70 of file ExplodedGraph.h.

## ◆ IndirectGotoNodeBuilder

friend class IndirectGotoNodeBuilder
| friend

Definition at line 71 of file ExplodedGraph.h.

## ◆ NodeBuilder

friend class NodeBuilder
| friend

Definition at line 72 of file ExplodedGraph.h.

## ◆ SwitchNodeBuilder

friend class SwitchNodeBuilder
| friend

Definition at line 73 of file ExplodedGraph.h.

The documentation for this class was generated from the following files:

- include/clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h
- lib/StaticAnalyzer/Core/ExplodedGraph.cpp