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