xref: /openbsd-src/gnu/usr.bin/binutils/gdb/testsuite/gdb.cp/namespace.cc (revision b725ae7711052a2233e31a66fefb8a752c388d7a)
1*b725ae77Skettenis namespace AAA {
2*b725ae77Skettenis   char c;
3*b725ae77Skettenis   int i;
4*b725ae77Skettenis   int A_xyzq (int);
5*b725ae77Skettenis   char xyzq (char);
6*b725ae77Skettenis   class inA {
7*b725ae77Skettenis   public:
8*b725ae77Skettenis     int xx;
9*b725ae77Skettenis     int fum (int);
10*b725ae77Skettenis   };
11*b725ae77Skettenis };
12*b725ae77Skettenis 
fum(int i)13*b725ae77Skettenis int AAA::inA::fum (int i)
14*b725ae77Skettenis {
15*b725ae77Skettenis   return 10 + i;
16*b725ae77Skettenis }
17*b725ae77Skettenis 
18*b725ae77Skettenis namespace BBB {
19*b725ae77Skettenis   char c;
20*b725ae77Skettenis   int i;
21*b725ae77Skettenis   int B_xyzq (int);
22*b725ae77Skettenis   char xyzq (char);
23*b725ae77Skettenis 
24*b725ae77Skettenis   namespace CCC {
25*b725ae77Skettenis     char xyzq (char);
26*b725ae77Skettenis   };
27*b725ae77Skettenis 
28*b725ae77Skettenis   class Class {
29*b725ae77Skettenis   public:
30*b725ae77Skettenis     char xyzq (char);
31*b725ae77Skettenis     int dummy;
32*b725ae77Skettenis   };
33*b725ae77Skettenis };
34*b725ae77Skettenis 
A_xyzq(int x)35*b725ae77Skettenis int AAA::A_xyzq (int x)
36*b725ae77Skettenis {
37*b725ae77Skettenis   return 2 * x;
38*b725ae77Skettenis }
39*b725ae77Skettenis 
xyzq(char c)40*b725ae77Skettenis char AAA::xyzq (char c)
41*b725ae77Skettenis {
42*b725ae77Skettenis   return 'a';
43*b725ae77Skettenis }
44*b725ae77Skettenis 
45*b725ae77Skettenis 
B_xyzq(int x)46*b725ae77Skettenis int BBB::B_xyzq (int x)
47*b725ae77Skettenis {
48*b725ae77Skettenis   return 3 * x;
49*b725ae77Skettenis }
50*b725ae77Skettenis 
xyzq(char c)51*b725ae77Skettenis char BBB::xyzq (char c)
52*b725ae77Skettenis {
53*b725ae77Skettenis   return 'b';
54*b725ae77Skettenis }
55*b725ae77Skettenis 
xyzq(char c)56*b725ae77Skettenis char BBB::CCC::xyzq (char c)
57*b725ae77Skettenis {
58*b725ae77Skettenis   return 'z';
59*b725ae77Skettenis }
60*b725ae77Skettenis 
xyzq(char c)61*b725ae77Skettenis char BBB::Class::xyzq (char c)
62*b725ae77Skettenis {
63*b725ae77Skettenis   return 'o';
64*b725ae77Skettenis }
65*b725ae77Skettenis 
marker1(void)66*b725ae77Skettenis void marker1(void)
67*b725ae77Skettenis {
68*b725ae77Skettenis   return;
69*b725ae77Skettenis }
70*b725ae77Skettenis 
71*b725ae77Skettenis namespace
72*b725ae77Skettenis {
73*b725ae77Skettenis   int X = 9;
74*b725ae77Skettenis 
75*b725ae77Skettenis   namespace G
76*b725ae77Skettenis   {
77*b725ae77Skettenis     int Xg = 10;
78*b725ae77Skettenis 
79*b725ae77Skettenis     namespace
80*b725ae77Skettenis     {
81*b725ae77Skettenis       int XgX = 11;
82*b725ae77Skettenis     }
83*b725ae77Skettenis   }
84*b725ae77Skettenis }
85*b725ae77Skettenis 
86*b725ae77Skettenis namespace C
87*b725ae77Skettenis {
88*b725ae77Skettenis   int c = 1;
89*b725ae77Skettenis   int shadow = 12;
90*b725ae77Skettenis 
91*b725ae77Skettenis   class CClass {
92*b725ae77Skettenis   public:
93*b725ae77Skettenis     int x;
94*b725ae77Skettenis     class NestedClass {
95*b725ae77Skettenis     public:
96*b725ae77Skettenis       int y;
97*b725ae77Skettenis     };
98*b725ae77Skettenis   };
99*b725ae77Skettenis 
ensureRefs()100*b725ae77Skettenis   void ensureRefs () {
101*b725ae77Skettenis     // NOTE (2004-04-23, carlton): This function is here only to make
102*b725ae77Skettenis     // sure that GCC 3.4 outputs debug info for these classes.
103*b725ae77Skettenis     static CClass *c = new CClass();
104*b725ae77Skettenis     static CClass::NestedClass *n = new CClass::NestedClass();
105*b725ae77Skettenis   }
106*b725ae77Skettenis 
107*b725ae77Skettenis   namespace
108*b725ae77Skettenis   {
109*b725ae77Skettenis     int cX = 6;
110*b725ae77Skettenis 
111*b725ae77Skettenis     namespace F
112*b725ae77Skettenis     {
113*b725ae77Skettenis       int cXf = 7;
114*b725ae77Skettenis 
115*b725ae77Skettenis       namespace
116*b725ae77Skettenis       {
117*b725ae77Skettenis 	int cXfX = 8;
118*b725ae77Skettenis       }
119*b725ae77Skettenis     }
120*b725ae77Skettenis   }
121*b725ae77Skettenis 
122*b725ae77Skettenis   namespace C
123*b725ae77Skettenis   {
124*b725ae77Skettenis     int cc = 2;
125*b725ae77Skettenis   }
126*b725ae77Skettenis 
127*b725ae77Skettenis   namespace E
128*b725ae77Skettenis   {
129*b725ae77Skettenis     int ce = 4;
130*b725ae77Skettenis   }
131*b725ae77Skettenis 
132*b725ae77Skettenis   namespace D
133*b725ae77Skettenis   {
134*b725ae77Skettenis     int cd = 3;
135*b725ae77Skettenis     int shadow = 13;
136*b725ae77Skettenis 
137*b725ae77Skettenis     namespace E
138*b725ae77Skettenis     {
139*b725ae77Skettenis       int cde = 5;
140*b725ae77Skettenis     }
141*b725ae77Skettenis 
marker2(void)142*b725ae77Skettenis     void marker2 (void)
143*b725ae77Skettenis     {
144*b725ae77Skettenis       // NOTE: carlton/2003-04-23: I'm listing the expressions that I
145*b725ae77Skettenis       // plan to have GDB try to print out, just to make sure that the
146*b725ae77Skettenis       // compiler and I agree which ones should be legal!  It's easy
147*b725ae77Skettenis       // to screw up when testing the boundaries of namespace stuff.
148*b725ae77Skettenis       c;
149*b725ae77Skettenis       //cc;
150*b725ae77Skettenis       C::cc;
151*b725ae77Skettenis       cd;
152*b725ae77Skettenis       //C::D::cd;
153*b725ae77Skettenis       E::cde;
154*b725ae77Skettenis       shadow;
155*b725ae77Skettenis       //E::ce;
156*b725ae77Skettenis       cX;
157*b725ae77Skettenis       F::cXf;
158*b725ae77Skettenis       F::cXfX;
159*b725ae77Skettenis       X;
160*b725ae77Skettenis       G::Xg;
161*b725ae77Skettenis       //cXOtherFile;
162*b725ae77Skettenis       //XOtherFile;
163*b725ae77Skettenis       G::XgX;
164*b725ae77Skettenis 
165*b725ae77Skettenis       return;
166*b725ae77Skettenis     }
167*b725ae77Skettenis 
168*b725ae77Skettenis   }
169*b725ae77Skettenis }
170*b725ae77Skettenis 
main()171*b725ae77Skettenis int main ()
172*b725ae77Skettenis {
173*b725ae77Skettenis   using AAA::inA;
174*b725ae77Skettenis   char c1;
175*b725ae77Skettenis 
176*b725ae77Skettenis   using namespace BBB;
177*b725ae77Skettenis 
178*b725ae77Skettenis   c1 = xyzq ('x');
179*b725ae77Skettenis   c1 = AAA::xyzq ('x');
180*b725ae77Skettenis   c1 = BBB::CCC::xyzq ('m');
181*b725ae77Skettenis 
182*b725ae77Skettenis   inA ina;
183*b725ae77Skettenis 
184*b725ae77Skettenis   ina.xx = 33;
185*b725ae77Skettenis 
186*b725ae77Skettenis   int y;
187*b725ae77Skettenis 
188*b725ae77Skettenis   y = AAA::A_xyzq (33);
189*b725ae77Skettenis   y += B_xyzq (44);
190*b725ae77Skettenis 
191*b725ae77Skettenis   BBB::Class cl;
192*b725ae77Skettenis 
193*b725ae77Skettenis   c1 = cl.xyzq('e');
194*b725ae77Skettenis 
195*b725ae77Skettenis   marker1();
196*b725ae77Skettenis 
197*b725ae77Skettenis   C::D::marker2 ();
198*b725ae77Skettenis }
199