aaron.ballman added a comment.

I still have some naming issues that need to be corrected, but functionally I 
think this is good to go. I presume you don't have commit privileges 
@steffenlarsen? If that's accurate, what name and email address would you like 
me to use for patch attribution after you've fixed the last few bits?



================
Comment at: clang/include/clang/Sema/ParsedAttr.h:113
   }
+  // Check if argument at index I is an expression argument
+  virtual bool isExprArg(size_t N) const { return false; }
----------------
steffenlarsen wrote:
> aaron.ballman wrote:
> > I don't think this API is needed. `isArgExpr()` already exists on the 
> > interface and I'm not certain how this differs. (If this API is needed, we 
> > need a far better name for it because I'd have no idea how to distinguish 
> > `isExprArg()` and `isArgExpr()`.)
> There is an important distinction between the two, specifically that 
> `isArgExpr` checks if the parsed argument at the index is an expression, 
> while `isExprArg` checks if the specified argument in the attribute is an 
> "ExprArgument", i.e. one checks post-parsing the other reflects on the 
> attribute's definition.
> 
> That said, I agree that with that naming there's little distinction between 
> the two. I have therefore removed `isExprArg` and replaced it with 
> `isArgMemberExprHolder` which is true if the "argument member" (referring to 
> the argument defined in Attr.td) is able to hold an expression (i.e. it is 
> either a `ExprArgument` or a `VaridicExprArgument`.) Functionally there is 
> little change to it, as the only place we use the check is after checking if 
> the expression is variadic, but it fit better with the actual intent of the 
> check.
Thanks for the clarification!

I think a better way to express this is by naming it `isParamExpr()` and adding 
comments along the lines of:

```
/// Returns true if the specified parameter index for this attribute in Attr.td 
is an ExprArgument
/// or VariadicExprArgument, or a subclass thereof; returns false otherwise.
```
(Note, the local style here is to use `///` instead of `//`, so I'm matching 
that as well. You probably need to flow the comments to 80 cols as well.)


================
Comment at: clang/include/clang/Sema/Sema.h:4383-4385
+  bool checkStringLiteralExpr(const AttributeCommonInfo &CI, const Expr *E,
+                              StringRef &Str,
+                              SourceLocation *ArgLocation = nullptr);
----------------
steffenlarsen wrote:
> aaron.ballman wrote:
> > This name makes it sound like far more general of an API than it is. This 
> > function is specific to checking string literal arguments for an attribute. 
> > But then why does `checkStringLiteralArgumentAttr()` not suffice? It does 
> > the same thing, but with more bells and whistles.
> The problem is that `checkStringLiteralArgumentAttr()` requires the arguments 
> to be extracted from the parsed attribute, which we do not have after 
> template instantiation, so the split was for generality. However, as you 
> mentioned in another comment, the generality is not that needed anymore so 
> `handleAnnotateAttr` has been reverted to the old version.
> 
> That said, this is still needed for doing post-initalization check if 
> arguments have been delayed, so I have renamed it to 
> `checkASCIIStringLiteralExpr` which hopefully conveys the intent a little 
> better?
The new name is still a problem -- it sounds like a generic interface, but the 
diagnostic it emits is specific to attributes. That's going to be a maintenance 
issue.

I would make this an overload of `checkStringLiteralArgumentAttr()` instead of 
giving it a new name.


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

https://reviews.llvm.org/D114439

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

Reply via email to