]>
Commit | Line | Data |
---|---|---|
223e47cc LB |
1 | // RUN: %clang_cc1 -fsyntax-only -verify %s |
2 | ||
3 | namespace N { struct X { }; }; | |
4 | ||
5 | namespace A = N; | |
6 | ||
7 | int B; // expected-note {{previous definition is here}} | |
8 | namespace B = N; // expected-error {{redefinition of 'B' as different kind of symbol}} | |
9 | ||
10 | namespace C { } // expected-note {{previous definition is here}} | |
11 | namespace C = N; // expected-error {{redefinition of 'C'}} | |
12 | ||
13 | int i; | |
14 | namespace D = | |
15 | i; // expected-error {{expected namespace name}} | |
16 | ||
17 | namespace E1 = N:: | |
18 | Foo; // expected-error {{expected namespace name}} | |
19 | namespace E2 = N:: | |
20 | X; // expected-error {{expected namespace name}} | |
21 | ||
22 | namespace F { | |
23 | namespace A { namespace B { } } // expected-note {{candidate found by name lookup is 'F::A::B'}} | |
24 | namespace B { } // expected-note {{candidate found by name lookup is 'F::B'}} | |
25 | using namespace A; | |
26 | namespace D = B; // expected-error {{reference to 'B' is ambiguous}} | |
27 | } | |
28 | ||
29 | namespace G { | |
30 | namespace B = N; | |
31 | } | |
32 | ||
33 | namespace H { | |
34 | namespace A1 { } | |
35 | namespace A2 { } | |
36 | ||
37 | // These all point to A1. | |
38 | namespace B = A1; // expected-note {{previous definition is here}} | |
39 | namespace B = A1; | |
40 | namespace C = B; | |
41 | namespace B = C; | |
42 | ||
43 | namespace B = A2; // expected-error {{redefinition of 'B' as different kind of symbol}} | |
44 | } | |
45 | ||
46 | namespace I { | |
47 | namespace A1 { int i; } | |
48 | ||
49 | namespace A2 = A1; | |
50 | } | |
51 | ||
52 | int f() { | |
53 | return I::A2::i; | |
54 | } | |
55 | ||
56 | namespace J { | |
57 | namespace A { | |
58 | namespace B { void func (); } | |
59 | } | |
60 | ||
61 | namespace C = A; | |
62 | ||
63 | using namespace C::B; | |
64 | ||
65 | void g() { | |
66 | func(); | |
67 | } | |
68 | } | |
69 | ||
70 | namespace K { | |
71 | namespace KA { void func(); } | |
72 | ||
73 | void f() { | |
74 | namespace KB = KA; | |
75 | KB::func(); | |
76 | } | |
77 | ||
78 | template <class T> void g() { | |
79 | namespace KC = KA; | |
80 | KC::func(); | |
81 | } | |
82 | template void g<int>(); | |
83 | template void g<long>(); | |
84 | ||
85 | void h() { | |
86 | KB::func(); // expected-error {{undeclared identifier 'KB'}} | |
87 | KC::func(); // expected-error {{undeclared identifier 'KC'}} | |
88 | } | |
89 | } | |
90 | ||
91 | namespace { | |
92 | class C1; | |
93 | } | |
94 | namespace { | |
95 | class C1; | |
96 | } | |
97 | C1 *pc1 = 0; | |
98 | ||
99 | namespace N { | |
100 | namespace { | |
101 | class C2; | |
102 | } | |
103 | } | |
104 | namespace N { | |
105 | namespace { | |
106 | class C2; | |
107 | } | |
108 | } | |
109 | N::C2 *pc2 = 0; | |
110 | ||
111 | // PR6341 | |
112 | namespace A = N; | |
113 | namespace N { } | |
114 | namespace A = N; | |
115 | ||
116 | A::X nx; | |
117 | ||
118 | namespace PR7014 { | |
119 | namespace X | |
120 | { | |
121 | namespace Y {} | |
122 | } | |
123 | ||
124 | using namespace X; | |
125 | ||
126 | namespace Y = X::Y; | |
127 | } |