NoQ accepted this revision.
NoQ added a comment.

LGTM, thanks!!



================
Comment at: clang/lib/Analysis/UnsafeBufferUsage.cpp:1095-1102
   // Gadgets "claim" variables they're responsible for. Once this loop 
finishes,
   // the tracker will only track DREs that weren't claimed by any gadgets,
   // i.e. not understood by the analysis.
   for (const auto &G : CB.FixableGadgets) {
     for (const auto *DRE : G->getClaimedVarUseSites()) {
       CB.Tracker.claimUse(DRE);
     }
----------------
ziqingluo-90 wrote:
> NoQ wrote:
> > Let's also skip this part when there are no warning gadgets? Your initial 
> > patch was clearing the `FixableGadgets` list so it was naturally skipped, 
> > but now it's active again.
> Oh, I intentionally chose not to skip it:
>  - 1. To keep the `Tracker` consistent with `CB.FixableGadgets` in case in 
> the future we want to use these two objects even if there is no 
> `WarningGadget`; 
>  - 2. The `findGadgets` function can stay as straightforward as its name 
> suggests.  It doesn't have to know the specific optimization for empty 
> `WarningGadget`s.
> 
> But the two thoughts above probably aren't important enough.  I will change 
> it back to skipping the loop when there is no warnings.
> 
> 
Hmm, I agree that this turns into a confusing contract. Maybe move this loop 
out of the function, to the call site, so that it was more obvious that we skip 
it? This would leave the tracker in a mildly inconsistent state at return, so 
the caller will have to make it consistent by doing the claiming, but that's 
arguably less confusing because we clearly communicate that this is an optional 
step. So the function will do exactly what it says it'll do: find gadgets and 
that's it.

Separately, we can probably consider not searching for fixable gadgets at all 
when no warning gadgets are found. This could be a performance improvement, but 
definitely a story for another time.


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

https://reviews.llvm.org/D155524

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

Reply via email to