aaron.ballman added inline comments.

================
Comment at: clang/include/clang/Basic/AttrDocs.td:5273
+  namespace empty_namespace {};
+  using empty_namespace::does_not_exist __attribute__((using_if_exists)); // 
no error!
+
----------------
Mordante wrote:
> erik.pilkington wrote:
> > aaron.ballman wrote:
> > > erik.pilkington wrote:
> > > > Mordante wrote:
> > > > > Mordante wrote:
> > > > > > Can you add an example using `[[clang::using_if_exists]]` or use 
> > > > > > that instead of this attribute?
> > > > > Why is the attribute placed here? I would expect the attribute before 
> > > > > the declaration `[[clang::using_if_exists]] using 
> > > > > empty_namespace::does_not_exist;`
> > > > The attribute is written like that because clang rejects C++ style 
> > > > attributes on using declarations, and only accepts attributes in that 
> > > > position. I think this is the first attribute we actually support on 
> > > > using-declarations, so maybe we should consider supporting it.
> > > > I think this is the first attribute we actually support on 
> > > > using-declarations, so maybe we should consider supporting it.
> > > 
> > > This isn't the first attribute we *should* be supporting on using 
> > > declarations. Any attribute that appertains to a `NamedDecl` should apply 
> > > as should the annotate attribute.
> > > 
> > > However:
> > > ```
> > > [[clang::whatever]] using foo::bar; // Correct to reject, #1
> > > using foo::bar [[clang::whatever]]; // Correct to reject, #2
> > > ```
> > > #1 is rejected because it's a declaration-statement and those cannot have 
> > > a leading attribute-specifier-seq 
> > > (http://eel.is/c++draft/stmt.stmt#stmt.pre-1). #2 is rejected because the 
> > > using-declaration cannot have a trailing attribute-specifier-seq 
> > > (http://eel.is/c++draft/namespace.udecl#nt:using-declaration).
> > > 
> > > This seems like a case where we may want to explore an extension to C++ 
> > > that we propose to WG21.
> > > This isn't the first attribute we *should* be supporting on using 
> > > declarations. Any attribute that appertains to a NamedDecl should apply 
> > > as should the annotate attribute.
> > 
> > Yeah, agreed. Its just that Sema was failing to call 
> > ProcessDeclAttributeList for UsingDecls, so no attributes were actually 
> > getting applied in practice.
> > 
> > Okay, if our policy is to only parse C++-style attributes in places that 
> > the C++ grammar allows them then I agree that this would be an issue for 
> > the standards committee. 
> I would be in favour to implement this as an extension and propose it to the 
> committee. I wonder whether it's not allowed because the committee objected 
> or nobody wrote a paper. (Attributes are already allowed on using namespace 
> directives http://eel.is/c++draft/namespace.udir.)
I wouldn't be opposed to adding an extension for parsing C++-style attributes 
on parts of a using declaration so long as we diagnosed them as an extension to 
alert people to portability issues. I would say that the attribute should be 
written as a prefix attribute (similar to the using-directive grammar) and 
after the using-declarator. This would allow you to do:
```
[[]] using foo::bar;
using foo::bar [[]];
using foo::bar [[]], baz::quux;
```


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

https://reviews.llvm.org/D90188

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

Reply via email to