NoQ added a comment.

Aha, great, sounds like all casting can be made more correct, not just casting 
on store retrieve! Maybe it's worth celebrating through extra unittests on 
`evalCast()`. Thank you for looking into this.

The new code should obviously be restricted into `evalCastFromLoc()` because if 
it's a region it's a `Loc`.

You didn't need to move `castRegion()`: `StoreManager` is available in 
`SValBuilder` through `this->StateMgr`. I don't have a strong preference on 
where `castRegion()` should live; the original idea was that `StoreManager` 
should be allowed to have an opinion on this matter because different store 
managers would handle that differently; however, as of now there's only one 
store manager and there doesn't seem to be an interest in introducing more of 
them whereas the abstraction has already leaked all over the place anyway.

I still have questions about the extra if-statements that you've added. 
Shouldn't we do `castRegion()` unconditionally, given that we're trying to cast 
a region and that function presumably does exactly that? I just want to avoid 
these situations:

F13337846: photo_2020-10-16_14-19-19.jpg <https://reviews.llvm.org/F13337846>

In D89055#2320363 <https://reviews.llvm.org/D89055#2320363>, @NoQ wrote:

> `dispatchCast()` was supposed to be the ultimate method to do so

Ugh, sorry, no, that's `evalCast()`. Like `evalBinOp()` etc. My bad. Can we 
also use `evalCast()`?


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

https://reviews.llvm.org/D89055

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

Reply via email to