[PATCH] D93595: [analyzer] Fix extraction of punned and known scalar SVals
Artem Dergachev via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Dec 22 23:10:46 PST 2020
NoQ added inline comments.
================
Comment at: clang/lib/StaticAnalyzer/Core/RegionStore.cpp:1648
+ else
+ bitPos = ORegionRawOffs.getOffset().getQuantity();
+ return bitPos * Ctx.getCharWidth();
----------------
NoQ wrote:
> This assignment can overflow. Both because the raw offset can be very large and because it can be negative.
>
> Say, the following code compiles just fine (and may even run) so we need to be able to analyze it but you dodge that by always checking that the base type is a scalar type (if you intend to keep it that way i'd rather assert that; the other reason to assert that would be because endianness logic is screwed without it):
> ```lang=c
> int main() {
> int x[5000000000]; // Over 2³² elements.
> x[0] = 1;
> char *y = &x;
> char c = y[19999999999];
> }
> ```
>
> The following code is valid but you seem to be protected from it because you dodge `SymbolicRegion`s by checking that **R** is a `TypedValueRegion`:
> ```lang=c
> void foo(int *x) {
> long *y = (long *)(x - 1);
> y = 1;
> char c = *(char *)y;
> }
> ```
>
> The following code has an obvious UB but it still compiles so you have to make sure the analyzer behaves sanely:
>
> ```lang=c
> void foo() {
> int x;
> long *y = (long *)(x - 1);
> y = 1;
> char c = *(char *)y;
> }
> ```
(I see that you brought this up and tested it but overflows are still scary. If you're consciously relying on an overflow you should probably at least comment that.)
================
Comment at: clang/test/Analysis/concrete-endian.cpp:56
+#endif
+ // Array out of bounds should yield UNKNOWN
+ clang_analyzer_eval(pps[4]); // expected-warning{{UNKNOWN}}
----------------
Ideally no they shouldn't, they should yield `Undefined`. I'd rather mark it as `FIXME:` because ultimately we could have a warning here. It's ok if we miss these cases for now though.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D93595/new/
https://reviews.llvm.org/D93595
More information about the cfe-commits
mailing list