AaronBallman wrote:

> I am not sure this is the right approach.
> 
>     * There are many more qualifiers (`_Atomic` for example, but look at 
> `isTypeSpecifierQualifier` for more of the complexity)
> 
> 
> I would like @AaronBallman to help us clarify the C23 rules. In particular as 
> @Fznamznon mention, it is odd that `long auto long` would be allowed, 
> although GCC accepts it. Is that a defect?
> 
> The tests should probably check if the behavior is consistent with 
> static/extern

It depends on whether `auto` is being used as a storage class specifier or not. 
If it's being used as a storage class specifier, then the way the grammar falls 
out you can do crazy things like [`const long auto long unsigned volatile 
_Atomic i =12;`](https://godbolt.org/z/TKscPjfhq)
```
long auto long i = 12; // Diagnosed as an invalid use of a storage class 
specifier
void func() {
  long auto long l1 = 12; // Okay, should be accepted
  static long auto long l2 = 12; // Diagnosed as a duplicate storage class 
specifier
}
```

https://github.com/llvm/llvm-project/pull/177865
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to