[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