================
@@ -137,23 +137,74 @@ constexpr auto int a1 = 0; // c23-error {{illegal storage 
class on file-scoped v
                               c17-error {{illegal storage class on file-scoped 
variable}} \
                               c17-error {{unknown type name 'constexpr'}}
 
-constexpr int auto a2 = 0; // c23-error {{cannot combine with previous 'int' 
declaration specifier}} \
+constexpr int auto a2 = 0; // c23-error {{cannot combine with previous 'auto' 
declaration specifier}} \
+                              c23-error {{illegal storage class on file-scoped 
variable}} \
                               c17-error {{illegal storage class on file-scoped 
variable}} \
                               c17-error {{unknown type name 'constexpr'}}
 
 auto int b1 = 0; // c23-error {{illegal storage class on file-scoped 
variable}} \
                     c17-error {{illegal storage class on file-scoped variable}}
 
-int auto b2 = 0; // c23-error {{cannot combine with previous 'int' declaration 
specifier}} \
+int auto b2 = 0; // c23-error {{illegal storage class on file-scoped 
variable}} \
                     c17-error {{illegal storage class on file-scoped variable}}
 
-void f() {
+long auto long i = 0; // c23-error {{illegal storage class on file-scoped 
variable}} \
+                         c17-error {{illegal storage class on file-scoped 
variable}}
+
+void t1() {
   constexpr auto int c1 = 0; // c23-error {{cannot combine with previous 
'auto' declaration specifier}} \
                                 c17-error {{use of undeclared identifier 
'constexpr'}}
 
-  constexpr int auto c2 = 0; // c23-error {{cannot combine with previous 'int' 
declaration specifier}} \
+  constexpr int auto c2 = 0; // c23-error {{cannot combine with previous 
'auto' declaration specifier}} \
                                 c17-error {{use of undeclared identifier 
'constexpr'}}
 
   auto int d1 = 0;
-  int auto d2 = 0; // c23-error {{cannot combine with previous 'int' 
declaration specifier}}
+  int auto d2 = 0;
+}
+
+void t2() {
+  auto long long a1 = 0;
+  long auto long a2 = 0;
+  long long auto a3 = 0;
+
+  auto const long long b1 = 0;
+  long long const auto b2 = 0;
+  long long auto const b3 = 0;
+}
+
+void t3() {
+  const auto int a1 = 0;
+  auto const int a2 = 0;
+
+  volatile auto int a3 = 0;
+  auto volatile int a4 = 0;
+  auto volatile const int a5 = 0;
+  auto const volatile int a6 = 0;
+
+   auto restrict int a7 = 0; // expected-error {{restrict requires a pointer 
or reference ('int' is invalid)}}
+}
+
+void t4() {
+  static long auto long s1 = 0; // c23-error {{cannot combine with previous 
'static' declaration specifier}} \
+                                   c17-error {{cannot combine with previous 
'static' declaration specifier}}
+  extern long auto long e2;     // c23-error {{cannot combine with previous 
'extern' declaration specifier}} \
+                                   c17-error {{cannot combine with previous 
'extern' declaration specifier}}
+}
+
+void t5(void) {
+  const long auto long unsigned volatile _Atomic int x = 0;
----------------
AaronBallman wrote:

This would be a good test case for global scope to ensure that `auto` is still 
rejected as a storage class specifier there.

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