fixes for slicing of graphs built with the field-based builder

This commit is contained in:
Julian Dolby 2016-02-11 11:51:39 -05:00
parent 46a483f320
commit eb7748a745
2 changed files with 14 additions and 2 deletions

View File

@ -933,7 +933,19 @@ public class PDG implements NumberedGraph<Statement> {
private void createCalleeParams() {
if (paramCalleeStatements == null) {
ArrayList<Statement> list = new ArrayList<Statement>();
for (int i = 1; i <= node.getMethod().getNumberOfParameters(); i++) {
int paramCount = node.getMethod().getNumberOfParameters();
for (Iterator<CGNode> callers = cg.getPredNodes(node); callers.hasNext(); ) {
CGNode caller = callers.next();
IR callerIR = caller.getIR();
for (Iterator<CallSiteReference> sites = cg.getPossibleSites(caller, node); sites.hasNext(); ) {
for (SSAAbstractInvokeInstruction inst : callerIR.getCalls(sites.next())) {
paramCount = Math.max(paramCount, inst.getNumberOfParameters()-1);
}
}
}
for (int i = 1; i <= paramCount; i++) {
ParamCallee s = new ParamCallee(node, i);
delegate.addNode(s);
list.add(s);

View File

@ -700,7 +700,7 @@ public class SDG extends AbstractNumberedGraph<Statement> implements ISDG {
// don't track reflection into reflective invokes
return false;
}
for (int i = 0; i < calleeNode.getMethod().getNumberOfParameters(); i++) {
for (int i = 0; i < call.getNumberOfParameters(); i++) {
if (call.getUse(i) == caller.getValueNumber()) {
if (callee.getValueNumber() == i + 1) {
return true;