baloghadamsoftware marked an inline comment as done.
baloghadamsoftware added inline comments.

Comment at: clang/lib/StaticAnalyzer/Checkers/IteratorModeling.cpp:256
+  SVal SubVal = State->getSVal(UO->getSubExpr(), C.getLocationContext());
+  SVal Result = State->getSVal(UO, C.getLocationContext());
baloghadamsoftware wrote:
> baloghadamsoftware wrote:
> > This is the problematic point which is not working. I left the comments 
> > intentionally in the code.
> > 
> > The problem is that in `postStmt` we are //after//  the operation. Thus the 
> > value of the operand (`SubExpr`) is not `i` anymore, but the //former 
> > value// of `i` (a pointer to a symbolic region initially). Instead, the 
> > result is `i` in case of prefix operators, but also the former value in 
> > case of postfix operators. This is correct, of course, because here, after 
> > the call the value of `i` was changed, thus it is not equal to the 
> > parameter. However, we need the region of `i` here and/or the new value 
> > bound to it (e.g. the pointer to an element region which is usually the 
> > result of a `++` or `--` on a pointer to a symbolic region). How to reach 
> > that? Of course, in `preStmt` the operand is `i` as it should be. The same 
> > is true for binary operators `+=` and `-=`. 
> Of course, I know it is all wrong to increment the //former// value. This is 
> also not the goal, probably I cannot reuse `handleIncrement()` and the like 
> here. The question is how to get the region of the variable or even better 
> the //new// region (e.g. the pointer to element region) bound to it? In the 
> prefix case I have the variable, but is there a generic way to get the region 
> bound to it? By generic I mean that I hope that I do not have to branch on 
> all possible lvalue expressions.
Wait! I know the solution! I will try it tomorrow.

  rG LLVM Github Monorepo


cfe-commits mailing list

Reply via email to