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