[PATCH] D136603: [analyzer] Model cast after LValueToRValueBitCasts
Gabor Marton via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Oct 28 04:37:25 PDT 2022
martong added a comment.
In D136603#3888065 <https://reviews.llvm.org/D136603#3888065>, @steakhal wrote:
> Previously, even in the `RegionStoreManager::getBinding()` even if `T` was non-null, we replaced it with `TVR->getValueType()` in case the `MR` was `TypedValueRegion`.
Yeah, that means, we actually evaded a cast, am I right?
> IMO we shouldn't overwrite the type unless we actually need to auto-detect the binding type.
I agree.
> This was particularly wrong when we reinterpret-cast some typed memory region (such as a stack-local variable's address) to something else while operating on the store.
You mean like when we loaded a value of reinterprec-cast<T1>(t2) with `evalLoad`?
> I haven't done any measurements yet, but I'm still curious about what you think about this.
I think this is a good approach and the change is at the right place. But, any change that relates to casts are very fragile unfortunately. So, I agree, it would be great to see measurements and that we don't have new assertion failures.
================
Comment at: clang/test/Analysis/svalbuilder-float-cast.c:18-19
*p += 1;
// This should NOT be (float)$x + 1. Symbol $x was never casted to float.
- // FIXME: Ideally, this should be $x + 1.
- clang_analyzer_express(*p); // expected-warning{{Not a symbol}}
+ clang_analyzer_express(*p); // expected-warning{{$x + 1}}
}
----------------
I think it would make sense to have another RUN line with `support-symbolic-integer-casts`. In that case I guess we should see `(int)(float)x` (?).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D136603/new/
https://reviews.llvm.org/D136603
More information about the cfe-commits
mailing list