137 return sinks.begin();
277 if(SVFUtil::isa<NullPtrSVFGNode>(node) ==
false)
279 return icfgNode->
getBB();
std::vector< SVFBugEvent > EventStack
virtual const SVFBasicBlock * getBB() const
Return the basic block of this ICFGNode.
void addToForwardSlice(const SVFGNode *node)
Forward and backward slice operations.
Condition finalCond
final condition
std::string dumpCond(const Condition &cond) const
bool inBackwardSlice(const SVFGNode *node)
bool isReachGlobal() const
const CallICFGNode * getRetSite(const SVFGEdge *edge) const
Condition condNeg(const Condition &cond)
const SVFBasicBlock * getSVFGNodeBB(const SVFGNode *node) const
void evalFinalCond2Event(GenericBug::EventStack &eventStack) const
Add final condition to eventStack.
SaberCondAllocator::SVFGNodeToSVFGNodeSetMap SVFGNodeToSVFGNodeSetMap
SVFGNodeSetIter sinksEnd() const
bool partialReachable
reachable from some paths
const SVFGNodeSet & getSinks() const
bool isAllReachable() const
const SVFGNodeToSVFGNodeSetMap & getRemovedSUVFEdges() const
bool isPartialReachable() const
Condition condOr(const Condition &lhs, const Condition &rhs)
bool isSatisfiableForPairs()
Set< const SVFGNode * > SVFGNodeSet
const SVFGNode * getCurSVFGNode() const
Get/set current SVFG node.
Condition getTrueCond() const
bool inForwardSlice(const SVFGNode *node)
bool isSatisfiableForAll()
bool fullReachable
reachable from all paths
const SVFG * getSVFG() const
FIFOWorkList< const SVFGNode * > VFWorkList
worklist for value-flow guard computation
bool isEquivalentBranchCond(const Condition &lhs, const Condition &rhs) const
FIFOWorkList< const SVFBasicBlock * > CFWorkList
worklist for control-flow guard computation
Condition ComputeInterCallVFGGuard(const SVFBasicBlock *src, const SVFBasicBlock *dst, const SVFBasicBlock *callBB)
void destroy()
Release memory.
const CallICFGNode * getCallSite(const SVFGEdge *edge) const
Get callsite ID and get returnsiteID from SVFGEdge.
u32_t getBackwardSliceSize() const
Condition getFalseCond() const
const SVFGNode * getSource() const
root and sink operations
bool AllPathReachableSolve()
Guarded reachability solve.
SaberCondAllocator::Condition Condition
u32_t getForwardSliceSize() const
SaberCondAllocator * pathAllocator
path condition allocator
bool reachGlob
Whether slice reach a global.
SVFGNodeSet sinks
a set of sink nodes
void clearCFCond()
Clear Control flow conditions before each VF computation.
SVFGNodeSetIter backwardSliceBegin() const
bool setVFCond(const SVFGNode *node, const Condition &cond)
Condition ComputeInterRetVFGGuard(const SVFBasicBlock *src, const SVFBasicBlock *dst, const SVFBasicBlock *retBB)
Condition computeInvalidCondFromRemovedSUVFEdge(const SVFGNode *cur)
Compute invalid branch condition stemming from removed strong update value-flow edges.
SVFGNodeSet forwardslice
the forward slice
void addToBackwardSlice(const SVFGNode *node)
Condition condAnd(const Condition &lhs, const Condition &rhs)
Condition operations.
void addToSinks(const SVFGNode *node)
virtual ~ProgSlice()
Destructor.
const SVFGNode * root
root node on the slice
Map< const SVFGNode *, Condition > SVFGNodeToCondMap
map a SVFGNode to its condition during value-flow guard computation
SVFGNodeSetIter forwardSliceEnd() const
SVFGNodeSet backwardslice
the backward slice
SVFGNodeSetIter sinksBegin() const
SVFGNodeSetIter forwardSliceBegin() const
Condition ComputeIntraVFGGuard(const SVFBasicBlock *src, const SVFBasicBlock *dst)
Compute guards for value-flows.
Condition getVFCond(const SVFGNode *node) const
Get/set VF (value-flow) and CF (control-flow) conditions.
SVFGNodeSetIter backwardSliceEnd() const
SVFGNodeToCondMap svfgNodeToCondMap
map a SVFGNode to its path condition starting from root
void setCurSVFGNode(const SVFGNode *node)
const SVFGNode * _curSVFGNode
current svfg node during guard computation
SVFGNodeSet::const_iterator SVFGNodeSetIter
void setFinalCond(const Condition &cond)
Set final condition after all path reachability analysis.
void setPartialReachable()
std::string evalFinalCond() const
Evaluate final condition.
ProgSlice(const SVFGNode *src, SaberCondAllocator *pa, const SVFG *graph)
Constructor.
std::string dumpCond(const Condition &cond) const
Map< const SVFGNode *, Set< const SVFGNode * > > SVFGNodeToSVFGNodeSetMap
Condition condOr(const Condition &lhs, const Condition &rhs)
Condition condNeg(const Condition &cond)
Condition condAnd(const Condition &lhs, const Condition &rhs)
Condition operations.
virtual Condition ComputeInterRetVFGGuard(const SVFBasicBlock *src, const SVFBasicBlock *dst, const SVFBasicBlock *retBB)
Condition getFalseCond() const
bool isEquivalentBranchCond(const Condition &lhs, const Condition &rhs) const
Whether lhs and rhs are equivalent branch conditions.
Condition getTrueCond() const
SVFGNodeToSVFGNodeSetMap & getRemovedSUVFEdges()
void setCurEvalSVFGNode(const SVFGNode *node)
Set current value for branch condition evaluation.
virtual Condition ComputeInterCallVFGGuard(const SVFBasicBlock *src, const SVFBasicBlock *dst, const SVFBasicBlock *callBB)
virtual Condition ComputeIntraVFGGuard(const SVFBasicBlock *src, const SVFBasicBlock *dst)
Guard Computation for a value-flow (between two basic blocks)
virtual const ICFGNode * getICFGNode() const
Return corresponding ICFG node.
llvm::IRBuilder IRBuilder