DenisGZM wrote:

> At a glance this _does_ seem like the right place to do this, but this is 
> still missing a release note.
> 
> It seems like GCC allows e.g. `__attribute__(()) alignas(16) int x` in any 
> case, so I don’t see why we shouldn’t allow this too. Can you also add some 
> tests that use `__attribute__(())` directly and which aren’t CUDA-specific?
> 
> Oh, and can you add solmething like this as a test as well:
> 
> ```c++
> struct S { __attribute__((deprecated)) alignas(16) int x; };
> ```

Actually this test doesn't work with this patch...

In this case all attributes are processed in `ParseDeclarationSpecifiers`, 
which in my first view was the right place to fix, but has way more complicated 
logic and easy to break diagnostics.

In `ParseDeclarationSpecifiers` we parse kw__attributes and other CXX11 
Attributes and set bool AttrsLastTime = true to check that last parsed piece 
was attr. Later this block prohibit attributes with AttrsLastTime = false,
```
    DoneWithDeclSpec:
      if (!AttrsLastTime)
        ProhibitAttributes(attrs);
```
And AttrsLastTime is always false in declarations of the form: <attributes> 
<type> <identifier>

Another approach i tried is to add processing alignas-cxx11 just like it is 
done for C: kw__Alignas and kw_alignas (c23).
Well, it do the parsing but later it skips CXX11 attributes when correcting 
declaration type (assumed that attributes must have been processed before)






https://github.com/llvm/llvm-project/pull/133107
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to