1 // RUN: %clang_cc1 -fsyntax-only -verify -Wno-c++0x-extensions %s 2 3 namespace fizbin { class Foobar; } // expected-note{{'fizbin::Foobar' declared here}} 4 Foobar *my_bar // expected-error{{unknown type name 'Foobar'; did you mean 'fizbin::Foobar'?}} 5 = new Foobar; // expected-error{{expected a type}} 6 7 namespace barstool { int toFoobar() { return 1; } } // expected-note 3 {{'barstool::toFoobar' declared here}} 8 int Double(int x) { return x + x; } 9 void empty() { 10 Double(toFoobar()); // expected-error{{{use of undeclared identifier 'toFoobar'; did you mean 'barstool::toFoobar'?}} 11 } 12 13 namespace fizbin { 14 namespace baztool { bool toFoobar() { return true; } } // expected-note{{'fizbin::baztool' declared here}} 15 namespace nested { bool moreFoobar() { return true; } } // expected-note{{'fizbin::nested::moreFoobar' declared here}} 16 namespace nested { bool lessFoobar() { return true; } } // expected-note{{'fizbin::nested' declared here}} \ 17 // expected-note{{'fizbin::nested::lessFoobar' declared here}} 18 class dummy { // expected-note 2 {{'fizbin::dummy' declared here}} 19 public: 20 static bool moreFoobar() { return false; } // expected-note{{'moreFoobar' declared here}} 21 }; 22 } 23 void Check() { // expected-note{{'Check' declared here}} 24 if (toFoobar()) Double(7); // expected-error{{use of undeclared identifier 'toFoobar'; did you mean 'barstool::toFoobar'?}} 25 if (noFoobar()) Double(7); // expected-error{{use of undeclared identifier 'noFoobar'; did you mean 'barstool::toFoobar'?}} 26 if (moreFoobar()) Double(7); // expected-error{{use of undeclared identifier 'moreFoobar'; did you mean 'fizbin::nested::moreFoobar'}} 27 if (lessFoobar()) Double(7); // expected-error{{use of undeclared identifier 'lessFoobar'; did you mean 'fizbin::nested::lessFoobar'?}} 28 if (baztool::toFoobar()) Double(7); // expected-error{{use of undeclared identifier 'baztool'; did you mean 'fizbin::baztool'?}} 29 if (nested::moreFoobar()) Double(7); // expected-error{{use of undeclared identifier 'nested'; did you mean 'fizbin::nested'?}} 30 if (dummy::moreFoobar()) Double(7); // expected-error{{use of undeclared identifier 'dummy'; did you mean 'fizbin::dummy'?}} 31 if (dummy::mreFoobar()) Double(7); // expected-error{{use of undeclared identifier 'dummy'; did you mean 'fizbin::dummy'?}} \ 32 // expected-error{{no member named 'mreFoobar' in 'fizbin::dummy'; did you mean 'moreFoobar'?}} 33 if (moFoobin()) Double(7); // expected-error{{use of undeclared identifier 'moFoobin'}} 34 } 35 36 void Alt() { 37 Cleck(); // expected-error{{{use of undeclared identifier 'Cleck'; did you mean 'Check'?}} 38 } 39 40 namespace N { 41 namespace inner { 42 class myvector { /* ... */ }; // expected-note{{'inner::myvector' declared here}} 43 } 44 45 void f() { 46 myvector v; // expected-error{{unknown type name 'myvector'; did you mean 'inner::myvector'?}} 47 } 48 } 49 50 namespace realstd { 51 inline namespace __1 { 52 class mylinkedlist { /* ... */ }; // expected-note 2 {{'realstd::mylinkedlist' declared here}} 53 } 54 55 class linkedlist { /* ... */ }; 56 } 57 58 void f() { 59 mylinkedlist v; // expected-error{{unknown type name 'mylinkedlist'; did you mean 'realstd::mylinkedlist'?}} 60 nylinkedlist w; // expected-error{{unknown type name 'nylinkedlist'; did you mean 'realstd::mylinkedlist'?}} 61 } 62 63 // Test case from http://llvm.org/bugs/show_bug.cgi?id=10318 64 namespace llvm { 65 template <typename T> class GraphWriter {}; // expected-note{{'llvm::GraphWriter' declared here}} 66 } 67 68 struct S {}; 69 void bar() { 70 GraphWriter<S> x; //expected-error{{no template named 'GraphWriter'; did you mean 'llvm::GraphWriter'?}} 71 72 } 73