/*! * Print this PAG graph including its nodes and edges */ void PAG::print() { for (iterator I = begin(), E = end(); I != E; ++I) { PAGNode* node = I->second; if (!isa<DummyValPN>(node) && !isa<DummyObjPN>(node)) { outs() << "node " << node->getId() << " " << *(node->getValue()) << "\n"; outs() << "\t InEdge: { "; for (PAGNode::iterator iter = node->getInEdges().begin(); iter != node->getInEdges().end(); ++iter) { outs() << (*iter)->getSrcID() << " "; if (NormalGepPE* edge = dyn_cast<NormalGepPE>(*iter)) outs() << " offset=" << edge->getOffset() << " "; else if (isa<VariantGepPE>(*iter)) outs() << " offset=variant"; } outs() << "}\t"; outs() << "\t OutEdge: { "; for (PAGNode::iterator iter = node->getOutEdges().begin(); iter != node->getOutEdges().end(); ++iter) { outs() << (*iter)->getDstID() << " "; if (NormalGepPE* edge = dyn_cast<NormalGepPE>(*iter)) outs() << " offset=" << edge->getOffset() << " "; else if (isa<VariantGepPE>(*iter)) outs() << " offset=variant"; } outs() << "}\n"; } outs() << "\n"; } }
/* * If this is a dummy node or node does not have incoming edges we assume it is not a pointer here */ bool PAG::isValidPointer(NodeID nodeId) const { PAGNode* node = pag->getPAGNode(nodeId); if ((node->getInEdges().empty() && node->getOutEdges().empty())) return false; return node->isPointer(); }