39using namespace SVFUtil;
77 if (SVFUtil::isa<DummyValVar, DummyObjVar>(
pagNode))
82 if(SVFUtil::isa<DummyObjVar>(pag->
getGNode(
gepobj->getBaseNode())))
87 worklist.push_back(
it->first);
91 while(!worklist.empty())
93 NodeID id = worklist.back();
152 while(!worklist.
empty())
188 if(SVFUtil::isa<StoreSVFGNode>(
stmtNode))
201 else if(SVFUtil::isa<LoadSVFGNode>(
stmtNode))
225 if (
const StoreSVFGNode* store = SVFUtil::dyn_cast<StoreSVFGNode>(node))
265 if(SVFUtil::isa<StoreStmt>(
stmtNode->getPAGEdge()))
273 if ((*it2)->isIndirectVFGEdge())
300 for (PTACallGraph::FunctionSet::const_iterator
cit =
callees.begin(),
#define DBOUT(TYPE, X)
LLVM debug macros, define type of your DBUG model of each pass.
const PointsTo & getPts(NodeID id) override
bool push(const Data &data)
iterator begin()
Iterators.
IDToNodeMapTy::iterator iterator
Node Iterators.
NodeType * getGNode(NodeID id) const
Get a node.
bool isFieldInsensitive() const
Return true if its field limit is 0.
BVDataPTAImpl * getPTA() const
Return PTA.
static const Option< bool > CollectExtRetGlobals
void getCallees(const CallICFGNode *cs, FunctionSet &callees)
Get all callees for a callsite.
Set< const SVFFunction * > FunctionSet
bool isLocalVarInRecursiveFun(NodeID id) const
Whether a local variable is in function recursions.
bool printStat()
Whether print statistics.
bool isArrayMemObj(NodeID id) const
PTACallGraph * getCallGraph() const
Return call graph.
bool isHeapMemObj(NodeID id) const
Whether this object is heap or array.
bool isFIObjNode(NodeID id) const
void set(u32_t n)
Inserts n in the set.
std::unique_ptr< SVFG > svfg
CSToArgsListMap & getCallSiteArgsMap()
Get callsite argument list.
NodeBS getFieldsAfterCollapse(NodeID id)
std::vector< const SVFVar * > SVFVarList
const BaseObjVar * getBaseObject(NodeID id) const
NodeID getBaseObjVar(NodeID id) const
Base and Offset methods for Value and Object node.
const MemObj * getBaseObj(NodeID id) const
static SVFIR * getPAG(bool buildFromFile=false)
Singleton design here to make sure we only have one instance during any analysis.
const ValVar * getBaseValVar(NodeID id) const
bool isFClose(const SVFFunction *fun) const
Return true if this call is a file close.
bool isMemDealloc(const SVFFunction *fun) const
Return true if this call is a memory deallocation.
static SaberCheckerAPI * getCheckerAPI()
Return a static reference.
SVFGNodeToSVFGNodeSetMap & getRemovedSUVFEdges()
bool isStrongUpdate(const SVFGNode *node, NodeID &singleton, BVDataPTAImpl *pta)
Return TRUE if this is a strong update STORE statement.
void collectGlobals(BVDataPTAImpl *pta)
PointsTo & CollectPtsChain(BVDataPTAImpl *pta, NodeID id, NodeToPTSSMap &cachedPtsMap)
Collect objects along points-to chains.
bool accessGlobal(BVDataPTAImpl *pta, const PAGNode *pagNode)
Whether points-to of a PAGNode points-to global variable.
Map< NodeID, PointsTo > NodeToPTSSMap
virtual void buildSVFG()
Re-write create SVFG method.
SVFGNodeSet globSVFGNodes
Store all global SVFG nodes.
virtual void AddExtActualParmSVFGNodes(PTACallGraph *callgraph)
Add actual parameter SVFGNode for 1st argument of a deallocation like external function.
void addActualParmVFGNode(const PAGNode *pagNode, const CallICFGNode *cs)
Add ActualParmVFGNode.
SaberCondAllocator * saberCondAllocator
void rmDerefDirSVFGEdges(BVDataPTAImpl *pta)
virtual void rmIncomingEdgeForSUStore(BVDataPTAImpl *pta)
VFGEdge::VFGEdgeSetTy::const_iterator const_iterator
bool isExtCall(const SVFFunction *fun)
std::string pasMsg(const std::string &msg)
Print each pass/phase message by converting a string into blue string output.
std::ostream & outs()
Overwrite llvm::outs()
std::vector< NodeID > NodeVector
llvm::IRBuilder IRBuilder