[PATCH] D51057: [analyzer][UninitializedObjectChecker] Fixed dereferencing
Umann Kristóf via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 5 02:53:59 PDT 2018
Szelethus added inline comments.
================
Comment at: lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedPointee.cpp:126-127
if (V.isUndef()) {
+ assert(!FR->getDecl()->getType()->isReferenceType() &&
+ "References must be initialized!");
return addFieldToUninits(
----------------
NoQ wrote:
> Good catch.
>
> It might still be possible to initialize a reference with an already-undefined pointer if core checkers are turned off, but we don't support turning them off, so i guess it's fine.
I removed it, because it did crash couple times on LLVM. Note that the assert checked whether the reference for undefined, not uninitialized :/.
It's no longer in the code, but this was it:
```
assert(!FR->getDecl()->getType()->isReferenceType() &&
"References must be initialized!");
```
================
Comment at: test/Analysis/cxx-uninitialized-object.cpp:879-902
+struct LambdaWrapper {
+ void *func; // no-crash
+ int dontGetFilteredByNonPedanticMode = 0;
+
+ LambdaWrapper(void *ptr) : func(ptr) {} // expected-warning{{1 uninitialized field}}
+};
+
----------------
I'm 99% sure this is a FP, but it doesn't originate from the checker. Shouldn't `*ptr` be undef after the end of the code block as `lambda`'s lifetime ends?
Nevertheless, it did cause a crash, so here's a quick fix for it.
https://reviews.llvm.org/D51057
More information about the cfe-commits
mailing list