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
  • [PATCH] D132236: [analyze... Balázs Benics via Phabricator via cfe-commits
    • [PATCH] D132236: [an... Tomasz Kamiński via Phabricator via cfe-commits

Reply via email to