This is a special IFDS solver that solves the analysis problem inside out, i.e., from further down the call stack to
further up the call stack. This can be useful, for instance, for taint analysis problems that track flows in two directions.
The solver is instantiated with two analyses, one to be computed forward and one to be computed backward. Both analysis problems
must be unbalanced, i.e., must return
true
for
SolverConfiguration.followReturnsPastSeeds()
.
The solver then executes both analyses in lockstep, i.e., when one of the analyses reaches an unbalanced return edge (signified
by a ZERO source value) then the solver pauses this analysis until the other analysis reaches the same unbalanced return (if ever).
The result is that the analyses will never diverge, i.e., will ultimately always only propagate into contexts in which both their
computed paths are realizable at the same time.
This solver requires data-flow abstractions that implement the
LinkedNode
interface such that data-flow values can be linked to form
reportable paths.