47 worklist.
push(source);
51 while(!worklist.
empty())
87 ") --> " <<
"succ (" << succ->
getId() <<
") condition: " <<
getVFCond(succ) <<
"\n");
124 for (
const auto &succ: suVFEdgesIt->second)
189 assert(edge->
isRetVFGEdge() &&
"not a return svfg edge?");
223 std::stringstream rawstr(str);
240 rawstr <<
"\t\t --> (" << *iter <<
") \n";
#define DBOUT(TYPE, X)
LLVM debug macros, define type of your DBUG model of each pass.
bool push(const Data &data)
std::vector< SVFBugEvent > EventStack
NodeType * getDstNode() const
iterator OutEdgeBegin()
iterators
Condition finalCond
final condition
bool inBackwardSlice(const SVFGNode *node)
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.
SVFGNodeSetIter sinksEnd() const
const SVFGNodeToSVFGNodeSetMap & getRemovedSUVFEdges() const
Condition condOr(const Condition &lhs, const Condition &rhs)
bool isSatisfiableForPairs()
Condition getTrueCond() const
bool isSatisfiableForAll()
const SVFG * getSVFG() const
FIFOWorkList< const SVFGNode * > VFWorkList
worklist for value-flow guard computation
bool isEquivalentBranchCond(const Condition &lhs, const Condition &rhs) const
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.
Condition getFalseCond() const
const SVFGNode * getSource() const
root and sink operations
bool AllPathReachableSolve()
Guarded reachability solve.
SaberCondAllocator::Condition Condition
SaberCondAllocator * pathAllocator
path condition allocator
void clearCFCond()
Clear Control flow conditions before each VF computation.
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.
Condition condAnd(const Condition &lhs, const Condition &rhs)
Condition operations.
SVFGNodeSetIter sinksBegin() 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.
void setCurSVFGNode(const SVFGNode *node)
SVFGNodeSet::const_iterator SVFGNodeSetIter
void setFinalCond(const Condition &cond)
Set final condition after all path reachability analysis.
std::string evalFinalCond() const
Evaluate final condition.
NodeID getId() const
Get ID.
virtual const std::string getSourceLoc() const
SparseBitVectorIterator iterator
bool isRetVFGEdge() const
bool isCallVFGEdge() const
VFGEdge::VFGEdgeSetTy::const_iterator const_iterator
const CallICFGNode * getCallSite(CallSiteID id) const
std::enable_if_t<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type > cast(const Y &Val)
std::ostream & outs()
Overwrite llvm::outs().
LLVM_NODISCARD std::enable_if_t<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type > dyn_cast(const Y &Val)
std::unordered_set< Key, Hash, KeyEqual, Allocator > Set