Shared: fix a bug in stateful outbarriers #15507
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes a bug in the handling of stateful out-barriers.
These were initially handled at the very last pruning step, since they aren't relevant for pruning in practice.
However,
subpaths
is computed in a way that isn't affected by the pruning, whereasedges
is affected. This can result in a tuplesubpaths(arg, par, ret, res)
whereedges*(par, ret)
does not hold.This means we get a spurious
arg -> res
edge, which can result in a spurious alert. And this alert is missing its data flow path, because no path can be materialised forpar -> ret
.The solution I've opted for is just to check the out-barrier when we generate the steps that feed into
pathStep
. I've verified (for one query) that when stateful out-barriers aren't in use, the DIL is unaffected.