Szelethus added inline comments.

================
Comment at: 
lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedPointee.cpp:187-191
   // If FR is a pointer pointing to a non-primitive type.
   if (Optional<nonloc::LazyCompoundVal> RecordV =
           DerefdV.getAs<nonloc::LazyCompoundVal>()) {
 
     const TypedValueRegion *R = RecordV->getRegion();
----------------
NoQ wrote:
> This looks like one more situation where we dereference a location to get a 
> value and then struggle to get back to the location that we've dereferenced 
> by looking at the value. Can we just use `V`?
I've struggled with derefencing for months now -- I'm afraid I just don't 
really get what you'd like to see here.

Here's what I attempted to implement:
I'd like to obtain the pointee's region of a `Loc` region, even if it has to be 
casted to another type, like through void pointers and `nonloc::LocAsInteger`, 
and continue analysis on said region as usual.

The trickiest part I can't seem to get right is the acquisition of the pointee 
region. For the problem this patch attempts to solve, even though `DynT` 
correctly says that the dynamic type is `DynTDerived2 *`, `DerefdV` contains a 
region for `DynTBase`.

I uploaded a new patch, D51057, which hopefully settles derefence related 
issues. Please note that it **does not **replace this diff, as the acquired 
region is still of type `DynTBase`.

I find understanding these intricate details of the analyzer very difficult, as 
I found very little documentation about how this works, which often left me 
guessing what the proper way to do this is. Can you recommend some literature 
for me on this field?


Repository:
  rC Clang

https://reviews.llvm.org/D50892



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

Reply via email to