[PATCH] D97362: [clang][parser] Allow attributes in explicit template instantiations

Aaron Ballman via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Mar 2 07:51:09 PST 2021


aaron.ballman added inline comments.


================
Comment at: clang/lib/Parse/ParseDeclCXX.cpp:1828-1830
+      // Allow only GNU attributes here.
+      if (!attrs.hasOnlyGNUAttributes())
+        ProhibitAttributes(attrs);
----------------
tbaeder wrote:
> aaron.ballman wrote:
> > We really should be using `ProhibitCXX11Attributes()` here, but that doesn't currently handle the case where it's an empty attribute list. However, we could use the valid source range information in that case to look at the tokens used to decide whether to diagnose or not.
> Unfortunately, also diagnosing empty `[[]]` triggers a whole lot of the tests, e.g. because `int [[]] foo;` now starts warning.
Yeah, I would not be surprised that other parts of the system are accidentally relying on silently accepting `[[]]`. I would guess the warning about `int [[]] foo;` is because we don't *support* any attributes in that position currently rather than because the attribute list is prohibited from being in that position.

Typically, we use `DiagnoseAndSkipCXX11Attributes()` when we are not allowed to *parse* the attribute list in a given position and we use `ProhibitCXX11Attributes()` when we've already done the parsing work but don't support attributes in that position. However, I think this case would be difficult to implement at the parsing level (but maybe I'm wrong).

One possible way forward is to add a parameter to `ProhibitCXX11Attributes()` for whether to diagnose an empty list or not.


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

https://reviews.llvm.org/D97362



More information about the cfe-commits mailing list