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)