public class JoinHandlingNodesIFDSSolver<N,D extends JoinHandlingNode<D>,M,I extends InterproceduralCFG<N,M>> extends IFDSSolver<N,D,M,I>
IFDSSolver that tracks paths for reporting. To do so, it requires that data-flow abstractions implement the LinkedNode interface.
The solver implements a cache of data-flow facts for each statement and source value. If for the same statement and source value the same
target value is seen again (as determined through a cache hit), then the solver propagates the cached value but at the same time links
both target values with one another.IFDSSolver.BinaryDomain| Modifier and Type | Field and Description |
|---|---|
protected java.util.Map<heros.solver.JoinHandlingNodesIFDSSolver.CacheEntry,JoinHandlingNode<D>> |
cache |
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 |
|---|
JoinHandlingNodesIFDSSolver(IFDSTabulationProblem<N,D,M,I> ifdsProblem) |
| Modifier and Type | Method and Description |
|---|---|
protected void |
propagate(D sourceVal,
N target,
D targetVal,
EdgeFunction<IFDSSolver.BinaryDomain> f,
N relatedCallSite,
boolean isUnbalancedReturn)
Propagates the flow further down the exploded super graph, merging any edge function that might
already have been computed for targetVal at target.
|
ifdsResultsAtaddIncoming, awaitCompletionComputeValuesAndShutdown, computeCallFlowFunction, computeCallToReturnFlowFunction, computeNormalFlowFunction, computeReturnFlowFunction, endSummary, getDebugName, getExecutor, incoming, joinValueAt, printStats, processExit, propagateUnbalancedReturnFlow, restoreContextOnReturnedFact, resultAt, resultsAt, scheduleEdgeProcessing, solve, submitInitialSeedsprotected final java.util.Map<heros.solver.JoinHandlingNodesIFDSSolver.CacheEntry,JoinHandlingNode<D extends JoinHandlingNode<D>>> cache
public JoinHandlingNodesIFDSSolver(IFDSTabulationProblem<N,D,M,I> ifdsProblem)
protected void propagate(D sourceVal, N target, D targetVal, EdgeFunction<IFDSSolver.BinaryDomain> f, N relatedCallSite, boolean isUnbalancedReturn)
IDESolverpropagate in class IDESolver<N,D extends JoinHandlingNode<D>,M,IFDSSolver.BinaryDomain,I extends InterproceduralCFG<N,M>>sourceVal - the source value of the propagated summary edgetarget - the target statementtargetVal - the target value at the target statementf - the new edge function computed from (s0,sourceVal) to (target,targetVal)relatedCallSite - for call and return flows the related call statement, null otherwise
(this value is not used within this implementation but may be useful for subclasses of IDESolver)isUnbalancedReturn - true if this edge is propagating an unbalanced return
(this value is not used within this implementation but may be useful for subclasses of IDESolver)