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
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits