p3.cpp revision 12e3ecec906f65580059a9d8555849a272c2db81
14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++0x 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void f() { 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) auto a = a; // expected-error{{variable 'a' declared with 'auto' type cannot appear in its own initializer}} 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) auto *b = b; // expected-error{{variable 'b' declared with 'auto' type cannot appear in its own initializer}} 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const auto c = c; // expected-error{{variable 'c' declared with 'auto' type cannot appear in its own initializer}} 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (auto d = d) {} // expected-error {{variable 'd' declared with 'auto' type cannot appear in its own initializer}} 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) auto e = ({ auto f = e; 0; }); // expected-error {{variable 'e' declared with 'auto' type cannot appear in its own initializer}} 8ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 95e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) 10c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid g() { 115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu auto a; // expected-error{{declaration of variable 'a' with type 'auto' requires an initializer}} 124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci auto *b; // expected-error{{declaration of variable 'b' with type 'auto *' requires an initializer}} 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (auto b) {} // expected-error {{expected '='}} 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (;auto b;) {} // expected-error {{expected '='}} 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) while (auto b) {} // expected-error {{expected '='}} 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (auto b = true) { (void)b; } 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)auto n(1,2,3); // expected-error{{initializer for variable 'n' with type 'auto' contains multiple expressions}} 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace N 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) auto a = "const char [16]", *p = &a; 2603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 2703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 2803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void h() { 2903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) auto b = 42ULL; 3003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 3103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) for (auto c = 0; c < b; ++c) { 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)template<typename T, typename U> struct same; 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)template<typename T> struct same<T, T> {}; 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void p3example() { 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) auto x = 5; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const auto *v = &x, u = 6; 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static auto y = 0.0; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) auto int r; // expected-warning {{'auto' storage class specifier is redundant and will be removed in future releases}} 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) same<decltype(x), int> xHasTypeInt; 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) same<decltype(v), const int*> vHasTypeConstIntPtr; 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) same<decltype(u), const int> uHasTypeConstInt; 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) same<decltype(y), double> yHasTypeDouble; 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)