#include "clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h"
#include "clang/AST/Expr.h"
#include "clang/AST/ExprObjC.h"
#include "clang/AST/ParentMap.h"
#include "clang/AST/Stmt.h"
#include "clang/Analysis/CFGStmtMap.h"
#include "clang/Analysis/ProgramPoint.h"
#include "clang/Analysis/Support/BumpVector.h"
#include "clang/Basic/LLVM.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramState_Fwd.h"
#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/FoldingSet.h"
#include "llvm/ADT/PointerUnion.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/Support/Casting.h"
#include <cassert>
#include <memory>
#include <optional>
usingnamespaceclang;
usingnamespaceento;
ExplodedGraph::ExplodedGraph() = default;
ExplodedGraph::~ExplodedGraph() = default;
bool ExplodedGraph::isInterestingLValueExpr(const Expr *Ex) { … }
bool ExplodedGraph::shouldCollect(const ExplodedNode *node) { … }
void ExplodedGraph::collectNode(ExplodedNode *node) { … }
void ExplodedGraph::reclaimRecentlyAllocatedNodes() { … }
ExplodedNodeVector;
GroupStorage;
void ExplodedNode::addPredecessor(ExplodedNode *V, ExplodedGraph &G) { … }
void ExplodedNode::NodeGroup::replaceNode(ExplodedNode *node) { … }
void ExplodedNode::NodeGroup::addNode(ExplodedNode *N, ExplodedGraph &G) { … }
unsigned ExplodedNode::NodeGroup::size() const { … }
ExplodedNode * const *ExplodedNode::NodeGroup::begin() const { … }
ExplodedNode * const *ExplodedNode::NodeGroup::end() const { … }
bool ExplodedNode::isTrivial() const { … }
const CFGBlock *ExplodedNode::getCFGBlock() const { … }
static const LocationContext *
findTopAutosynthesizedParentContext(const LocationContext *LC) { … }
const Stmt *ExplodedNode::getStmtForDiagnostics() const { … }
const Stmt *ExplodedNode::getNextStmtForDiagnostics() const { … }
const Stmt *ExplodedNode::getPreviousStmtForDiagnostics() const { … }
const Stmt *ExplodedNode::getCurrentOrPreviousStmtForDiagnostics() const { … }
ExplodedNode *ExplodedGraph::getNode(const ProgramPoint &L,
ProgramStateRef State,
bool IsSink,
bool* IsNew) { … }
ExplodedNode *ExplodedGraph::createUncachedNode(const ProgramPoint &L,
ProgramStateRef State,
int64_t Id,
bool IsSink) { … }
std::unique_ptr<ExplodedGraph>
ExplodedGraph::trim(ArrayRef<const NodeTy *> Sinks,
InterExplodedGraphMap *ForwardMap,
InterExplodedGraphMap *InverseMap) const { … }