1 /* Test DWARF namespace support.
2    This test case is based on GDB testsuite test case.  */
3 /* { dg-do compile } */
4 
5 namespace AAA {
6   char c;
7   int i;
8   int A_xyzq (int);
9   char xyzq (char);
10   class inA {
11   public:
12     int xx;
13     int fum (int);
14   };
15 };
16 
fum(int i)17 int AAA::inA::fum (int i)
18 {
19   return 10 + i;
20 }
21 
22 namespace BBB {
23   char c;
24   int i;
25   int B_xyzq (int);
26   char xyzq (char);
27 
28   namespace CCC {
29     char xyzq (char);
30   };
31 
32   class Klasse {
33   public:
34     char xyzq (char);
35     int dummy;
36   };
37 };
38 
A_xyzq(int x)39 int AAA::A_xyzq (int x)
40 {
41   return 2 * x;
42 }
43 
xyzq(char c)44 char AAA::xyzq (char c)
45 {
46   return 'a';
47 }
48 
49 
B_xyzq(int x)50 int BBB::B_xyzq (int x)
51 {
52   return 3 * x;
53 }
54 
xyzq(char c)55 char BBB::xyzq (char c)
56 {
57   return 'b';
58 }
59 
xyzq(char c)60 char BBB::CCC::xyzq (char c)
61 {
62   return 'z';
63 }
64 
xyzq(char c)65 char BBB::Klasse::xyzq (char c)
66 {
67   return 'o';
68 }
69 
marker1(void)70 void marker1(void)
71 {
72   return;
73 }
74 
75 namespace
76 {
77   int X = 9;
78 
79   namespace G
80   {
81     int Xg = 10;
82 
83     namespace
84     {
85       int XgX = 11;
86     }
87   }
88 }
89 
90 namespace H
91 {
92   int h = 14;
93 }
94 
95 namespace I = H;
96 
97 namespace J
98 {
99   int j = 15;
100 }
101 
102 using namespace J;
103 
104 namespace K
105 {
106   int k = 16;
107 }
108 
109 namespace L
110 {
111   using namespace K;
112 }
113 
114 namespace O
115 {
116   int o = 18;
117 }
118 
119 namespace P
120 {
121   using namespace O;
122 }
123 
124 namespace Q
125 {
126   using namespace P;
127 }
128 
129 namespace R
130 {
131   int r1 = 19;
132   int r2 = 20;
133 }
134 
135 using R::r1;
136 
137 namespace C
138 {
139   int c = 1;
140   int shadow = 12;
141 
142   class CClass {
143   public:
144     int x;
145     class NestedClass {
146     public:
147       int y;
148     };
149   };
150 
151   namespace
152   {
153     int cX = 6;
154 
155     namespace F
156     {
157       int cXf = 7;
158 
159       namespace
160       {
161 	int cXfX = 8;
162       }
163     }
164   }
165 
166   namespace C
167   {
168     int cc = 2;
169   }
170 
171   namespace E
172   {
173     int ce = 4;
174   }
175 
176   namespace D
177   {
178     int cd = 3;
179     int shadow = 13;
180 
181     namespace E
182     {
183       int cde = 5;
184     }
185 
186     namespace M
187     {
188       int cdm = 17;
189     }
190 
191     using namespace M;
192 
marker2(void)193     void marker2 (void)
194     {
195       // NOTE: carlton/2003-04-23: I'm listing the expressions that I
196       // plan to have GDB try to print out, just to make sure that the
197       // compiler and I agree which ones should be legal!  It's easy
198       // to screw up when testing the boundaries of namespace stuff.
199       c;
200       //cc;
201       C::cc;
202       cd;
203       //C::D::cd;
204       E::cde;
205       shadow;
206       //E::ce;
207       cX;
208       F::cXf;
209       F::cXfX;
210       X;
211       G::Xg;
212       //cXOtherFile;
213       //XOtherFile;
214       G::XgX;
215       I::h;
216       j;
217       L::k;
218       //k;
219       cdm;
220       Q::o;
221       //o;
222       r1;
223       //r2;
224 
225       return;
226     }
227 
228   }
229 }
230 
main()231 int main ()
232 {
233   using AAA::inA;
234   char c1;
235 
236   using namespace BBB;
237 
238   c1 = xyzq ('x');
239   c1 = AAA::xyzq ('x');
240   c1 = BBB::CCC::xyzq ('m');
241 
242   inA ina;
243 
244   ina.xx = 33;
245 
246   int y;
247 
248   y = AAA::A_xyzq (33);
249   y += B_xyzq (44);
250 
251   BBB::Klasse cl;
252 
253   c1 = cl.xyzq('e');
254 
255   marker1();
256 
257   C::D::marker2 ();
258 }
259