Open
Description
I believe I've run across a bug in the implementation of Phase II(i) in IDESolver. The problem seems arise when a fact besides the zero fact is used for an initial seeds.
The problem occurs in propagateValueAtStart
:
private void propagateValueAtStart(Pair<N, D> nAndD, N n) {
D d = nAndD.getO2();
M p = icfg.getMethodOf(n);
for(N c: icfg.getCallsFromWithin(p)) {
Set<Entry<D, EdgeFunction<V>>> entries;
synchronized (jumpFn) {
entries = jumpFn.forwardLookup(d,c).entrySet();
for(Map.Entry<D,EdgeFunction<V>> dPAndFP: entries) {
D dPrime = dPAndFP.getKey();
EdgeFunction<V> fPrime = dPAndFP.getValue();
N sP = n;
propagateValue(c,dPrime,fPrime.computeTarget(val(sP,d)));
}
}
}
}
In this case, d
is a non-zero fact that was an initial seed. The forwardLookup call returns that there are no destination (fact,function) pairs for the source fact d
. This is because most (all?) jump functions have the zero fact as their source fact. The analysis seems to work if I explicitly replace the second element of the tuple passed to propagateValueAtStart
with the zero fact, but this fix is a hack at best and I'm not sure if it is correct in general.
Metadata
Metadata
Assignees
Labels
No labels