Exemple #1
0
/*!
 * 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";
    }

}
Exemple #2
0
/*
 * 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();
}