shafik added inline comments.

================
Comment at: clang/lib/Sema/SemaDeclAttr.cpp:3764-3767
   if (!checkFunctionOrMethodParameterIndex(S, D, AL, 1, IdxExpr, Idx))
     return;
-
+  if (Idx.getASTIndex() >= getFunctionOrMethodNumParams(D))
+    return;
----------------
tbaeder wrote:
> erichkeane wrote:
> > aaron.ballman wrote:
> > > Did you look into fixing this within 
> > > `checkFunctionOrMethodParameterIndex()` instead? That way, all callers of 
> > > the API get the correct behavior instead of having to find individual 
> > > attributes to check the logic (I believe there are other attributes with 
> > > the same underlying problem).
> > I would also expect any such issue to diagnose.  Also, isn't there an 
> > off-by-one error here in the case of variadic args?
> `handleFormatAttr()` has:
> ```
>   if (Idx < 1 || Idx > NumArgs) {
>     S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds)
>         << AL << 2 << IdxExpr->getSourceRange();
>     return;
>   }
> ```
> 
> which is also what I'd expect to see here.
> 
> 
I agree w/ @aaron.ballman here we should handle this in 
`checkFunctionOrMethodParameterIndex` it is used in many places and AFAICT they 
all have the same issue, none diagnose this case but paper it over.

There is definitely a bigger clean-up here but we can do a targeted fix now and 
remove a crash bug and leave the larger fixing for a follow-up.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D147037

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

Reply via email to