1 // RUN: %clang_cc1 -fsyntax-only -verify %s
2 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s
3 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
4
5 // The auto or register specifiers can be applied only to names of objects
6 // declared in a block (6.3) or to function parameters (8.4).
7
8 auto int ao; // expected-error {{illegal storage class on file-scoped variable}}
9 #if __cplusplus >= 201103L // C++11 or later
10 // expected-warning@-2 {{'auto' storage class specifier is not permitted in C++11, and will not be supported in future releases}}
11 #endif
12
13 auto void af(); // expected-error {{illegal storage class on function}}
14 #if __cplusplus >= 201103L // C++11 or later
15 // expected-warning@-2 {{'auto' storage class specifier is not permitted in C++11, and will not be supported in future releases}}
16 #endif
17
18 register int ro; // expected-error {{illegal storage class on file-scoped variable}}
19 #if __cplusplus >= 201103L // C++11 or later
20 // expected-warning@-2 {{'register' storage class specifier is deprecated}}
21 #endif
22
23 register void rf(); // expected-error {{illegal storage class on function}}
24
25 struct S {
26 auto int ao; // expected-error {{storage class specified for a member declaration}}
27 #if __cplusplus >= 201103L // C++11 or later
28 // expected-warning@-2 {{'auto' storage class specifier is not permitted in C++11, and will not be supported in future releases}}
29 #endif
30 auto void af(); // expected-error {{storage class specified for a member declaration}}
31 #if __cplusplus >= 201103L // C++11 or later
32 // expected-warning@-2 {{'auto' storage class specifier is not permitted in C++11, and will not be supported in future releases}}
33 #endif
34
35 register int ro; // expected-error {{storage class specified for a member declaration}}
36 register void rf(); // expected-error {{storage class specified for a member declaration}}
37 };
38
foo(auto int ap,register int rp)39 void foo(auto int ap, register int rp) {
40 #if __cplusplus >= 201103L // C++11 or later
41 // expected-warning@-2 {{'auto' storage class specifier is not permitted in C++11, and will not be supported in future releases}}
42 #endif
43 auto int abo;
44 #if __cplusplus >= 201103L // C++11 or later
45 // expected-warning@-2 {{'auto' storage class specifier is not permitted in C++11, and will not be supported in future releases}}
46 #endif
47 auto void abf(); // expected-error {{illegal storage class on function}}
48 #if __cplusplus >= 201103L // C++11 or later
49 // expected-warning@-2 {{'auto' storage class specifier is not permitted in C++11, and will not be supported in future releases}}
50 #endif
51
52 register int rbo;
53 #if __cplusplus >= 201103L // C++11 or later
54 // expected-warning@-2 {{'register' storage class specifier is deprecated}}
55 #endif
56
57 register void rbf(); // expected-error {{illegal storage class on function}}
58 }
59