[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