NoQ added inline comments.

================
Comment at: clang/lib/StaticAnalyzer/Checkers/StreamChecker.cpp:406
 
+const ExplodedNode *StreamChecker::getAcquisitionSite(const ExplodedNode *N,
+                                                      SymbolRef StreamSym,
----------------
balazske wrote:
> balazske wrote:
> > NoQ wrote:
> > > NoQ wrote:
> > > > Ok, so this is a tiny auxiliary visitor.
> > > > 
> > > > I wish we could set uniqueing location post-factum from within the note 
> > > > tag. Unfortunately we can't because notes are generated after uniqueing 
> > > > :(
> > > > 
> > > > I'd like you to experiment with tracking this information as part of 
> > > > the state instead so that you didn't need to perform an additional 
> > > > scan. I'd be happy if it helps you avoid performing this additional 
> > > > pass.
> > > > 
> > > > I.e., when you're opening the file, add all the information you need 
> > > > for building your uniqueing location into the stream state (not the 
> > > > node though, just the program point or something like that). Then 
> > > > retrieve it in O(1) when you're emitting the report.
> > > Another thing we could try is to implement such post-processing pass 
> > > globally for all checkers. I.e., instead of an optional uniqueing 
> > > location accept an optional lambda that looks at a node and answers 
> > > whether this node should be used as a uniqueing location. Then before 
> > > report deduplication scan each report that supplies such lambda and 
> > > update its uniqueing location. That'll probably require some work on 
> > > BugReporter but that sounds like a nice way to avoid all the boilerplate.
> > Storing the "acquisition site" in the state is the natural way of doing 
> > this. Probably I should not think that existing checkers do things the best 
> > way, this function is taken from  `FuchsiaHandleChecker` (or here it has a 
> > specific reason?). And not storing the data in the state is a bit less 
> > memory consumption if this matters.
> We should check how many checkers can benefit from such a "uniqueing location 
> callback". Normally the checker should know what the uniqueing location is, 
> at least when the bug report is created. The location is naturally obtained 
> from the state that the checker maintains, at least if we want to avoid scans 
> like `getAcquisitionSite`.
> Probably I should not think that existing checkers do things the best way

Well, if you ever find yourself copy-pasting a large chunk of code from a 
different checker and using it almost unchanged, it's a good indication that 
the checker API needs to be improved. You can't do things "the best way" in a 
single checker in isolation, it's a collective effort. You're a programmer, you 
can change everything, no need to be confined in your checker.

> We should check how many checkers can benefit from such a "uniqueing location 
> callback". Normally the checker should know what the uniqueing location is, 
> at least when the bug report is created.

No, i don't think it ever happens automagically. It's either tracked in the 
state specifically for that purpose or scanned backwards. So i'd rather believe 
that every checker that has non-default uniqueing locations will benefit from 
such facility.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D81407



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

Reply via email to