NoQ added inline comments.
================
Comment at:
lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedPointee.cpp:223
+ // int*).
+ while (auto Tmp = V.getAs<loc::MemRegionVal>()) {
+ // We can't reason about symbolic regions, assume its initialized.
----------------
Szelethus wrote:
> NoQ wrote:
> > Hmm, i still have concerns about things like `int *x = (int *)&x;`. Why not
> > just check the type to terminate the loop? Type hierarchy is guaranteed to
> > be finite.
> There actually is a testcase for that -- it would create a
> nonloc::LocAsInteger, not a loc::MemRegionVal.
>
> I'll add a TODO to revisit this loop condition (again :) ).
Ok, let's try with one more asterisk:
```
1 void test() {
2 int **x = (int **)&x;
3 int *y = *x;
4 int z = *y;
5 }
```
Here's what i get in the Store:
```
(x,0,direct) : &element{x,0 S64b,int *}
(y,0,direct) : &element{x,0 S64b,int *}
(z,0,direct) : &element{x,0 S64b,int *}
```
https://reviews.llvm.org/D50509
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits