xref: /llvm-project/clang/test/SemaCXX/missing-namespace-qualifier-typo-corrections.cpp (revision 858fb61d22a9a82704451eccddfb6baf275f8826)
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