Szelethus added inline comments.

================
Comment at: 
clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.cpp:945-947
+    ExprEngine &Eng = C.getStateManager().getOwningEngine();
+    // Let's mark this place with a special tag.
+    Tag = Eng.getDataTags().make<IdentityTag>(CE, BindReturnTo);
----------------
vsavchenko wrote:
> Szelethus wrote:
> > I don't know ObjC at all, but is this identity obvious? Do you not need a 
> > `NoteTag` to say that "Foo is an identity function, its return value equals 
> > the parameter"? Or, in the possession of the actual 
> > `PathSensitiveBugReport` that you can retrieve in the handler, you could 
> > drop a note there, maybe?
> These are usually some type of casts.  And we already provide notes when this 
> value gets into some other region (like `'newPtr' initialized to the value of 
> 'originalPtr'`).  I think that they are enough.  And if we want something 
> better, I think we need to tweak that messaging (`StoreHandler` now allows 
> that) instead of crowding user with even more notes.
Fair enough!


================
Comment at: 
clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountDiagnostics.cpp:953-957
+      // Let's traverse...
+      for (const ExplodedNode *N = ExprNode;
+           // ...all the nodes corresponding to the given expression...
+           N != nullptr && N->getStmtForDiagnostics() == E;
+           N = N->getFirstPred()) {
----------------
vsavchenko wrote:
> NoQ wrote:
> > I guess this part should ultimately be written in one place, eg. 
> > `ExplodedNode::findTag()` or something like that.
> > 
> > I'd also really like to explore the possibility to further limit the 
> > variety of nodes traversed here. What nodes are typically traversed here? 
> > Is it checker-tagged nodes or is it purge dead symbol nodes or something 
> > else?
> Yes, `ExplodedNode::findTag()` sounds like a great idea!
> 
> I mean it is hard to tell without calculating statistics right here and 
> running it on a bunch of projects.  However, it is always possible to write 
> the code that will have it the other way.  My take on it is that it is 
> probably a mix of things.
> 
> I'd also prefer to traverse less, do you have any specific ideas here?
> I'd also really like to explore the possibility to further limit the variety 
> of nodes traversed here. What nodes are typically traversed here? Is it 
> checker-tagged nodes or is it purge dead symbol nodes or something else?

Is there something I'm not seeing here? Trackers basically ascend //a// path 
from the error node to at most the root of the ExplodedGraph (not the trimmed 
version, as `Tracker::track()` is called before any of that process happens), 
so its not much slower than `trackExpressionValue`, right?

Or does this, and likely many other future handlers run such a loop more often 
then what I imagine?




Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D104136

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

Reply via email to