NoQ added a comment.

Ok I think this looks great and almost good to go. I love how the core change 
in the grouping algorithm is actually tiny and simple!



================
Comment at: clang/lib/Analysis/UnsafeBufferUsage.cpp:1891-1892
+  for (unsigned i = 0; i < NumParms; i++) {
+    if (!ParmsMask[i])
+      continue;
+
----------------
ziqingluo-90 wrote:
> NoQ wrote:
> > Speaking of [[ https://reviews.llvm.org/D156762#inline-1517322 |my comment 
> > on the other patch]].
> > 
> > Can we simply ask `Strategy` about the strategy for `FD->getParamDecl(i)` 
> > instead of passing a mask?
> > 
> > Eventually we'll have to do that anyway, given how different parameters can 
> > be assigned different strategies.
> Yes.  I think using `Strategy` is the correct way to do it.  
> 
> Can I make it a follow-up patch?  I noticed that this line needs to be fixed:
> ```
>   Strategy NaiveStrategy = getNaiveStrategy(UnsafeVars);
> ```
> The `UnsafeVars` is the set of variables associated to all matched 
> `FixableGadget`s.  There can be variables that is safe and do not need fix.  
> Their strategy is set to `std::span` currently which is not correct.  With 
> this line being fixed, we can have examples like
> ```
> void f(int * p) {
>   int * q;
>    q = p;
>    p[5] = 5;
> }
> ```
> where `q`'s strategy is `WONTFIX` and `p`'s strategy is `std::span`.  The 
> expression `q = p` can be fixed to `q = p.data()`.  It  currently has an 
> empty fix-it, which is incorrect.
Yes sure!


================
Comment at: clang/lib/Analysis/UnsafeBufferUsage.cpp:2364-2366
+    if (!VarGrpMap.count(Var))
+      return std::nullopt;
+    return Groups[VarGrpMap.at(Var)];
----------------
The usual idiom to avoid double lookup: use `find()` to extract an iterator, 
compare it to `end()` to see if the item was found, and if it was then 
dereference the iterator.

I wouldn't use `at()` given that the whole point of `.at()` is to throw 
exceptions, while LLVM is compiled with `-fno-exceptions`.


================
Comment at: clang/lib/Sema/AnalysisBasedWarnings.cpp:2281
       FD << listVariableGroupAsString(Variable, VarGroupForVD)
-         << (VarGroupForVD.size() > 1);
+         << (VarGroupForVD.size() > 1) << ND->getNameAsString();
       for (const auto &F : Fixes) {
----------------
IIRC we're supposed to stuff `ND` directly into the stream and it'll figure out 
on its own how to name it, or how to put quotes around it. See how there's no 
quotes around `%2`!


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

https://reviews.llvm.org/D153059

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

Reply via email to