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