NoQ added inline comments.

================
Comment at: 
clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountDiagnostics.cpp:967-968
+
+  // While looking for the last var bindings, we can still find
+  // `AllocFirstBinding` to be one of them.  In situations like this,
+  // it would still be the easiest case to explain to our users.
----------------
vsavchenko wrote:
> NoQ wrote:
> > Given that the current state doesn't satisfy the requirement on line 945, 
> > this can happen for two reasons:
> > 1. The symbol was there when the variable died so we simply tracked it back 
> > to the last moment of time the variable was alive.
> > 2. The symbol was there but was overwritten later (and then the variable 
> > may have also, but haven't necessarily, died).
> > 
> > Case 2 is bad because we're back in business for reporting the wrong 
> > variable; it's still more rare than before the patch but i think the 
> > problem remains. Something like this should probably demonstrate it:
> > 
> > ```lang=c++
> > void foo() {
> >   Object *Original = allocate(...);
> >   Original = allocate();
> >   Original->release();
> > }
> > ```
> > 
> > A potential solution may be to add a check in `getAllVarBindingsForSymbol` 
> > that the first node in which we find our symbol corresponds to a 
> > `*PurgeDeadSymbols` program point. It's a straightforward way to find out 
> > whether we're in case 1 or in case 2.
> In this situation, we will report on line `Original = allocate();`, which 
> should probably be a good enough indicator of what analyzer tries to say.
> In your example, we have a choice of either not report variable name at all 
> or report `Original`
I had a look and it looks like all of our UIs are acting up quite a bit on this 
example. The user ends up completely convinced that it's the current value of 
`Original` that's getting leaked, not the original value.

Let's at least add a test and/or a comment? This definitely isn't a regression 
and the patch is still really good.


================
Comment at: 
clang/test/Analysis/Inputs/expected-plists/retain-release-path-notes.m.plist:5993
+     <key>message</key>
+     <string>Object leaked: object allocated and stored into &apos;New&apos; 
is not referenced later in this execution path and has a retain count of 
+1</string>
+    </dict>
----------------
vsavchenko wrote:
> NoQ wrote:
> > This patch seems to add 3 entirely new warnings here. Why do they suddenly 
> > start showing up? Are they good?
> Because I added 3 more test cases? 😅
Uh-oh ok fair enough :D


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D100839/new/

https://reviews.llvm.org/D100839

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

Reply via email to