N
- The type of nodes in the interprocedural control-flow graph. Typically Unit
.D
- The type of data-flow facts to be computed by the tabulation problem.M
- The type of objects used to represent methods. Typically SootMethod
.I
- The type of inter-procedural control-flow graph being used.public class IFDSSolver<N,D,M,I extends InterproceduralCFG<N,M>> extends IDESolver<N,D,M,IFDSSolver.BinaryDomain,I>
IFDSTabulationProblem
. This solver in effect uses the IDESolver
to solve the problem, as any IFDS problem can be intepreted as a special case of an IDE problem.
See Section 5.4.1 of the SRH96 paper. In effect, the IFDS problem is solved by solving an IDE
problem in which the environments (D to N mappings) represent the set's characteristic function.IFDSTabulationProblem
Modifier and Type | Class and Description |
---|---|
protected static class |
IFDSSolver.BinaryDomain |
allTop, computedInterPEdges, computedIntraPEdges, computeValues, DEBUG, DEFAULT_CACHE_BUILDER, durationFlowFunctionApplication, durationFlowFunctionConstruction, edgeFunctions, efCache, endSummary, executor, ffCache, flowFunctionApplicationCount, flowFunctionConstructionCount, flowFunctions, followReturnsPastSeeds, icfg, incoming, initialSeeds, jumpFn, logger, numThreads, propagationCount, unbalancedRetSites, val, valueLattice, zeroValue
Constructor and Description |
---|
IFDSSolver(IFDSTabulationProblem<N,D,M,I> ifdsProblem)
Creates a solver for the given problem.
|
Modifier and Type | Method and Description |
---|---|
java.util.Set<D> |
ifdsResultsAt(N statement)
Returns the set of facts that hold at the given statement.
|
addIncoming, awaitCompletionComputeValuesAndShutdown, computeCallFlowFunction, computeCallToReturnFlowFunction, computeNormalFlowFunction, computeReturnFlowFunction, endSummary, getDebugName, getExecutor, incoming, joinValueAt, printStats, processExit, propagate, propagateUnbalancedReturnFlow, restoreContextOnReturnedFact, resultAt, resultsAt, scheduleEdgeProcessing, solve, submitInitialSeeds
public IFDSSolver(IFDSTabulationProblem<N,D,M,I> ifdsProblem)
IDESolver.solve()
.