[PATCH] D50892: [analyzer][UninitializedObjectChecker] Correct dynamic type is acquired for record pointees
Artem Dergachev via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Aug 17 12:01:55 PDT 2018
NoQ 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();
----------------
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`?
================
Comment at: test/Analysis/cxx-uninitialized-object-inheritance.cpp:787
// TODO: we'd expect the note: {{uninitialized field 'this->x'}}
int x; // no-note
};
----------------
Szelethus wrote:
> The checker should be able to catch this one -- for some reason it is regarded as an unknown region. Odd, as the test case right after this one works perfectly.
There's a variety of problems we have with empty base classes, might be one of those, and they are usually easy to fix because, well, yes it's a special case, but it's also an extremely simple case.
I encourage you to open up the Exploded Graph and study it carefully to see what and where goes wrong (not for this revision).
Repository:
rC Clang
https://reviews.llvm.org/D50892
More information about the cfe-commits
mailing list