steakhal added a comment.

I'm getting lost :D

In D88477#2304230 <https://reviews.llvm.org/D88477#2304230>, @NoQ wrote:

> And I believe that this part is already incorrect. Like, regardless of how we 
> do the dereference (the implicit lvalue-to-rvalue cast), or *whether* we do 
> it at all (nobody guarantees we'll ever do that!), the part of the static 
> analyzer that computes the lvalue `**b` has to work correctly. As of now it 
> computes an lvalue of incorrect type (currently it's `unsigned char` but it 
> has to be `char *`).

Are you implying that when we evaluate the assignment to the lvalue (line 
`#1`), we should have cast the stored value to the static type before binding 
in the `RegionStore`?

Doesn't it contradict with your previous statement:

In D77062#2298748 <https://reviews.llvm.org/D77062#2298748>, @NoQ wrote:

> The contract of RegionStore with respect to type punning is that it stores 
> the value //as written//, even if its type doesn't match the storage type, 
> but then it casts the value to the correct type upon reading by invoking 
> `CastRetrievedVal()` on it. That's where the fix should probably be.



---

Or after evaluating the first dereference - but before evaluating the second - 
should we cast the lvalue to `char**` and only then do the LValueToRValue 
conversion?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D88477

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

Reply via email to