Szelethus added inline comments.

================
Comment at: lib/StaticAnalyzer/Checkers/CtorUninitializedMemberChecker.cpp:187
+
+  if (isCalledByConstructor(Context))
+    return;
----------------
xazax.hun wrote:
> Szelethus wrote:
> > whisperity wrote:
> > > I think somewhere there should be a bit of reasoning why exactly these 
> > > cases are ignored by the checker.
> > At this function's declaration I have some comments describing what this 
> > does and why it does it. Did you find it insufficient?
> I am a bit surprised why these errors are not deduplicated by the analyzer. 
> Maybe it would worth some investigation?
Copied from `BugReport`s constructor documentation  for uniqueing:
>The reports that have the same report location, description, bug type, and 
>ranges are uniqued - only one of the equivalent reports will be presented to 
>the user. [...]
For this code snippet:
```
struct A {
   struct B {
      int x, y;
      
      B() {}
   } b;
   int w;

   A() {
      b = B();
   }
};
```
the warning message after a call to `A::A()` would be "3 uninitialized 
fields[...]", and for `B::B()` inside `A`s constructor would be "2 
uninitialized fields[...]", so it wouldn't be filtered out.


================
Comment at: lib/StaticAnalyzer/Checkers/CtorUninitializedMemberChecker.cpp:292
+      if (LocalChain)
+        LocalChain->push_back(FR);
+      if (isNonUnionUninit(FR, LocalChain))
----------------
xazax.hun wrote:
> Don't you need to pop somewhere?
Nice catch! This isn't covered by tests, and would most probably cause an 
incorrect note message. I'll be sure to fix it.


https://reviews.llvm.org/D45532



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

Reply via email to