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 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits