rsandifo-arm added a comment.

Thanks @aaron.ballman and @erichkeane for the comments.  I'll split it into 
stages and use tablegen more, like you say.
In D139028#4150761 <https://reviews.llvm.org/D139028#4150761>, @aaron.ballman 
wrote:

> One thing that might also help is to split this into a few stages. 1) Add the 
> new general functionality, 2) Replacing the existing implementation of 
> keyword attributes with the new functionality where possible, 3) Add new 
> attributes using the new functionality. It seems to me that we should be able 
> to replace a bunch of our existing keyword attributes with the newer 
> generalized approach (I'm thinking about ones like the calling convention 
> attributes specifically, but we've got others as well), and that will help us 
> prove the design as well as simplify the compiler implementation. WDYT?

I've tried to go through the existing keyword attributes, but unfortunately, I 
don't think any of them match the new scheme exactly:

__declspec
----------

I don't think anyone was suggesting we try to convert this :-) but for 
completeness:

  int __declspec(align(16)) a1; // OK, but standard attribute rules would say 
this appertains to the type
  int a2 __declspec();          // Not valid, unlike for standard decl 
attributes



__forceinline
-------------

  int __forceinline a1() { return 1; } // OK, but standard attribute rules 
would say this appertains to the type
  int a2 __forceinline() { return 1; } // Not valid, but would be for standard 
decl attributes



Calling convention keywords
---------------------------

These are generally DeclOrType attributes, with attributes sliding from the 
decl to the type where necessary.

  __stdcall int a1();   // OK, but appertains to the decl and relies on sliding 
behaviour
  int a2 __stdcall();   // Not valid, but is another place to put standard decl 
attributes
  int a3() __stdcall;   // Not valid, but is another place to put standard type 
attributes
  int (__stdcall a4)(); // OK, but standard attributes aren't allowed in this 
position
  extern int (*const __stdcall volatile a5) (); // OK, but standard attributes 
wouldn't be allowed here



Nullability keywords
--------------------

Like the calling-convention keywords, the nullability keywords appertain to 
types but are allowed in some (but not all) positions that would normally 
appertain to decls:

  using ptr = int *;
  _Nullable ptr a1; // OK, but appertains to the decl and relies on sliding 
behaviour
  ptr a2 _Nullable; // Not valid, but is another place to put standard decl 
attributes
  extern int *const _Nullable volatile a3; // OK, but a standard attribute 
wouldn't be allowed here

The same distinction applies to Microsoft pointer attributes.

Would it be OK just to use the new scheme for new attributes?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D139028

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

Reply via email to