martong added a comment.

I don't have anymore immediate concerns, but I will need more time to comb 
through the rest of the patch in more details... hopefully I can do that in the 
following days.



================
Comment at: clang/lib/StaticAnalyzer/Core/ProgramState.cpp:327
+using ObjCForLctxPair =
+    std::pair<const ObjCForCollectionStmt *, const LocationContext *>;
+
----------------
Szelethus wrote:
> martong wrote:
> > Why it is not enough to simply have ObjCForCollectionStmt* as a key?
> `Environment` is the data structure we use to bind **values** to 
> **statements** (which would ideally be expressions only). The problem is that 
> a statement on its own isn't enough to identify where we are in the analysis:
> 
> ```lang=c++
> void traverse(Graph &G) {
>  // SubG may need to be modeled in different stackframes, but has the same 
> Stmt*
>  for (Graph &SubG : G->successors()) {
>     traverse(SubG);
>   }
> }
> ```
> 
> `LocationContext` can be thought of as a stack function calls (or anything 
> with a distinct stack frame). Indeed, if two `(Stmt *, LocationContext *)` 
> pairs are equal, we're rebinding the same expression (another loop iteration, 
> goto), if only the statements are the same, we're not in the same function 
> call (//stack frame//).
> 
> Of course `ObjCForCollectionStmt` can not have a value, that is the whole 
> point of the patch, but we still need a `LocationContext` to correctly 
> identify precisely which loop we're talking about.
Yeah, I did not think about stack frames, it makes perfect sense what you 
write, thanks for the explanation!


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D86736/new/

https://reviews.llvm.org/D86736

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to