1 // RUN: %clang_cc1 -fsyntax-only -verify %s
2 namespace A { // expected-note 2 {{previous definition is here}}
3   int A;
4   void f() { A = 0; }
5 }
6 
7 void f() { A = 0; } // expected-error {{unexpected namespace name 'A': expected expression}}
8 int A; // expected-error {{redefinition of 'A' as different kind of symbol}}
9 class A; // expected-error {{redefinition of 'A' as different kind of symbol}}
10 
11 class B {}; // expected-note {{previous definition is here}} \
12             // expected-note{{candidate function (the implicit copy assignment operator)}}
13 
14 void C(); // expected-note {{previous definition is here}}
15 namespace C {} // expected-error {{redefinition of 'C' as different kind of symbol}}
16 
17 namespace D {
18   class D {};
19 }
20 
21 namespace S1 {
22   int x;
23 
24   namespace S2 {
25 
26     namespace S3 {
27       B x;
28     }
29   }
30 }
31 
32 namespace S1 {
33   void f() {
34     x = 0;
35   }
36 
37   namespace S2 {
38 
39     namespace S3 {
40       void f() {
41         x = 0; // expected-error {{no viable overloaded '='}}
42       }
43     }
44 
45     int y;
46   }
47 }
48 
49 namespace S1 {
50   namespace S2 {
51     namespace S3 {
52       void f3() {
53         y = 0;
54       }
55     }
56   }
57 }
58 
59 namespace B {} // expected-error {{redefinition of 'B' as different kind of symbol}}
60 
61 
62 namespace foo {
63   enum x {
64     Y
65   };
66 }
67 
68 static foo::x  test1;  // ok
69 
70 static foo::X  test2;  // typo: expected-error {{no type named 'X' in}}
71 
72 namespace PR6620 {
73   namespace numeric {
74     namespace op {
75       struct greater {};
76     }
77     namespace {
78       extern op::greater const greater;
79     }
80   }
81 
82   namespace numeric {
83     namespace {
84       op::greater const greater = op::greater();
85     }
86 
87     template<typename T, typename U>
88     int f(T& l, U& r)
89     { numeric::greater(l, r); }
90 
91   }
92 }
93