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
8auto 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
13auto 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
18register 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
23register void rf(); // expected-error {{illegal storage class on function}}
24
25struct 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
39void 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