p3.cpp revision 483b9f3bc05c5409e2c6643f1c9d91e21c8ff9d2
1c3aae25116e66c177579b0b79182b09340b19753Chris Lattner// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++0x
2ea61c358720aa6c7a159d51658b34276316aa841Misha Brukmanvoid f() {
36fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell  auto a = a; // expected-error{{variable 'a' declared with 'auto' type cannot appear in its own initializer}}
46fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell  auto *b = b; // expected-error{{variable 'b' declared with 'auto' type cannot appear in its own initializer}}
56fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell  const auto c = c; // expected-error{{variable 'c' declared with 'auto' type cannot appear in its own initializer}}
66fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell  if (auto d = d) {} // expected-error {{variable 'd' declared with 'auto' type cannot appear in its own initializer}}
7ea61c358720aa6c7a159d51658b34276316aa841Misha Brukman  auto e = ({ auto f = e; 0; }); // expected-error {{variable 'e' declared with 'auto' type cannot appear in its own initializer}}
86fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell}
9ea61c358720aa6c7a159d51658b34276316aa841Misha Brukman
10c3aae25116e66c177579b0b79182b09340b19753Chris Lattnervoid g() {
11c3aae25116e66c177579b0b79182b09340b19753Chris Lattner  auto a; // expected-error{{declaration of variable 'a' with type 'auto' requires an initializer}}
12ea61c358720aa6c7a159d51658b34276316aa841Misha Brukman
13cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner  auto *b; // expected-error{{declaration of variable 'b' with type 'auto *' requires an initializer}}
14cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner
15cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner  if (auto b) {} // expected-error {{expected '='}}
16cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner  for (;auto b;) {} // expected-error {{expected '='}}
17cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner  while (auto b) {} // expected-error {{expected '='}}
18c3aae25116e66c177579b0b79182b09340b19753Chris Lattner  if (auto b = true) { (void)b; }
19b80e2be8894db9f843f32ebaffb9b7fd6b57d206Chris Lattner}
20b80e2be8894db9f843f32ebaffb9b7fd6b57d206Chris Lattner
21cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattnerauto n(1,2,3); // expected-error{{initializer for variable 'n' with type 'auto' contains multiple expressions}}
22109654fae9c5b8b96bd3a829824cdbceb27ced06Chris Lattner
23c3aae25116e66c177579b0b79182b09340b19753Chris Lattnernamespace N
24d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke{
25d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke  auto a = "const char [16]", *p = &a;
26c3aae25116e66c177579b0b79182b09340b19753Chris Lattner}
27c3aae25116e66c177579b0b79182b09340b19753Chris Lattner
28c3aae25116e66c177579b0b79182b09340b19753Chris Lattnervoid h() {
29c3aae25116e66c177579b0b79182b09340b19753Chris Lattner  auto b = 42ULL;
30c3aae25116e66c177579b0b79182b09340b19753Chris Lattner
31c3aae25116e66c177579b0b79182b09340b19753Chris Lattner  for (auto c = 0; c < b; ++c) {
32c3aae25116e66c177579b0b79182b09340b19753Chris Lattner  }
33c3aae25116e66c177579b0b79182b09340b19753Chris Lattner}
34c3aae25116e66c177579b0b79182b09340b19753Chris Lattner
35c3aae25116e66c177579b0b79182b09340b19753Chris Lattnertemplate<typename T, typename U> struct same;
36c3aae25116e66c177579b0b79182b09340b19753Chris Lattnertemplate<typename T> struct same<T, T> {};
37c3aae25116e66c177579b0b79182b09340b19753Chris Lattner
38c3aae25116e66c177579b0b79182b09340b19753Chris Lattnervoid p3example() {
39c3aae25116e66c177579b0b79182b09340b19753Chris Lattner  auto x = 5;
40cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner  const auto *v = &x, u = 6;
41cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner  static auto y = 0.0;
42063287a76b5d1486f498fcf674a26d1155471a3fChris Lattner  auto int r; // expected-error{{cannot combine with previous}} expected-error{{requires an initializer}}
43c3aae25116e66c177579b0b79182b09340b19753Chris Lattner
44cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner  same<decltype(x), int> xHasTypeInt;
45c3aae25116e66c177579b0b79182b09340b19753Chris Lattner  same<decltype(v), const int*> vHasTypeConstIntPtr;
46c3aae25116e66c177579b0b79182b09340b19753Chris Lattner  same<decltype(u), const int> uHasTypeConstInt;
47cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner  same<decltype(y), double> yHasTypeDouble;
48b80e2be8894db9f843f32ebaffb9b7fd6b57d206Chris Lattner}
49b80e2be8894db9f843f32ebaffb9b7fd6b57d206Chris Lattner