[PATCH] D114439: [Annotation] Allow parameter pack expansions and initializer lists in annotate attribute

Steffen Larsen via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Jan 31 06:52:32 PST 2022


steffenlarsen marked 2 inline comments as done.
steffenlarsen added inline comments.


================
Comment at: clang/lib/Parse/ParseDecl.cpp:386
   ArgsVector ArgExprs;
   if (Tok.is(tok::identifier)) {
     // If this attribute wants an 'identifier' argument, make it so.
----------------
erichkeane wrote:
> So does this mean that our pack-parsing code is allowing identifiers?  I really expected this patch to enforce via the clang-attr-emitter that ONLY the 'expr' types were allowed.  So you'd have:
> 
> if (attributeAcceptsExprPack(AttrName)) {
> ... <where this ONLY accepts an expression pack>
> } else if (Tok.is(tok::identifier)) {
> ...
> }...
This will only consume the identifier if the argument is an identifier argument (variadic or non-variadic). As you say, clang-attr-emitter will make sure that no attribute with `AcceptsExprPack` has any identifier arguments, so if there is an identifier here it will not be able to consume it and then it will continue on to try and parse it as an expression and fail.

That said, the second part of the following parsing branches should probably also check `attributeHasIdentifierArg(*AttrName)`, so I will add that shortly.


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

https://reviews.llvm.org/D114439



More information about the cfe-commits mailing list