[PATCH] D132236: [analyzer] Fix liveness of LazyCompoundVals
Tomasz KamiĆski via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Sep 30 04:27:19 PDT 2022
tomasz-kaminski-sonarsource added a comment.
> What looks fishy about getInterestingValues() is that it assumes that the amount of interesting values is finite. This sounds incredibly wrong to me. If a lazy compound value contains any pointer symbol `$p`, then all values in the following infinite series are interesting:
>
> $p, *$p, **$p, ***$p, ...
We have also looked into this, and indeed the `getInterestingValues()` produces the first level of indirection for storage. However, the code in `RemoveDeadBindingsWorker` is recursively visiting each of the bindings found, so, at least per our understanding, we should visit all regions that are reachable through indirection:
const RegionStoreManager::SValListTy &Vals = RM.getInterestingValues(*LCS);
for (RegionStoreManager::SValListTy::const_iterator I = Vals.begin(),
E = Vals.end();
I != E; ++I)
VisitBinding(*I);
Also, from the temporal perspective, visiting these regions in a current snapshot of the storage seems correct from the temporal perspective - we can reach current state in region, via the pointer to it, that was present at the time of copy.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D132236/new/
https://reviews.llvm.org/D132236
More information about the cfe-commits
mailing list