N
- see IFDSSolver
D
- A data-flow abstraction that must implement the LinkedNode
interface such that data-flow values can be linked to form
reportable paths.M
- see IFDSSolver
I
- see IFDSSolver
public class BiDiIDESolver<N,D,M,V,I extends InterproceduralCFG<N,M>>
extends java.lang.Object
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.Modifier and Type | Class and Description |
---|---|
class |
BiDiIDESolver.AbstractionWithSourceStmt
This is an augmented abstraction propagated by the
BiDiIDESolver.SingleDirectionSolver . |
protected class |
BiDiIDESolver.SingleDirectionSolver
This is a modified IFDS solver that is capable of pausing and unpausing return-flow edges.
|
Modifier and Type | Field and Description |
---|---|
protected BiDiIDESolver.SingleDirectionSolver |
bwSolver |
protected BiDiIDESolver.SingleDirectionSolver |
fwSolver |
Constructor and Description |
---|
BiDiIDESolver(IDETabulationProblem<N,D,M,V,I> forwardProblem,
IDETabulationProblem<N,D,M,V,I> backwardProblem)
Instantiates a
BiDiIDESolver with the associated forward and backward problem. |
Modifier and Type | Method and Description |
---|---|
protected BiDiIDESolver.SingleDirectionSolver |
createSingleDirectionSolver(IDETabulationProblem<N,BiDiIDESolver.AbstractionWithSourceStmt,M,V,I> problem,
java.lang.String debugName)
Creates a solver to be used for each single analysis direction.
|
void |
solve() |
protected BiDiIDESolver.SingleDirectionSolver fwSolver
protected BiDiIDESolver.SingleDirectionSolver bwSolver
public BiDiIDESolver(IDETabulationProblem<N,D,M,V,I> forwardProblem, IDETabulationProblem<N,D,M,V,I> backwardProblem)
BiDiIDESolver
with the associated forward and backward problem.public void solve()
protected BiDiIDESolver.SingleDirectionSolver createSingleDirectionSolver(IDETabulationProblem<N,BiDiIDESolver.AbstractionWithSourceStmt,M,V,I> problem, java.lang.String debugName)