1*63addd46Skettenis /* This test program is part of GDB, the GNU debugger.
2*63addd46Skettenis
3*63addd46Skettenis Copyright 1992, 1993, 1994, 1997, 1999, 2004
4*63addd46Skettenis Free Software Foundation, Inc.
5*63addd46Skettenis
6*63addd46Skettenis This program is free software; you can redistribute it and/or modify
7*63addd46Skettenis it under the terms of the GNU General Public License as published by
8*63addd46Skettenis the Free Software Foundation; either version 2 of the License, or
9*63addd46Skettenis (at your option) any later version.
10*63addd46Skettenis
11*63addd46Skettenis This program is distributed in the hope that it will be useful,
12*63addd46Skettenis but WITHOUT ANY WARRANTY; without even the implied warranty of
13*63addd46Skettenis MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14*63addd46Skettenis GNU General Public License for more details.
15*63addd46Skettenis
16*63addd46Skettenis You should have received a copy of the GNU General Public License
17*63addd46Skettenis along with this program; if not, write to the Free Software
18*63addd46Skettenis Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19*63addd46Skettenis */
20*63addd46Skettenis
21e93f7393Sniklas /*
22e93f7393Sniklas * Test file with lots of different types, for testing the
23e93f7393Sniklas * "whatis" command.
24e93f7393Sniklas */
25e93f7393Sniklas
26e93f7393Sniklas /*
27e93f7393Sniklas * First the basic C types.
28e93f7393Sniklas */
29e93f7393Sniklas
30e93f7393Sniklas char v_char;
31e93f7393Sniklas signed char v_signed_char;
32e93f7393Sniklas unsigned char v_unsigned_char;
33e93f7393Sniklas
34e93f7393Sniklas short v_short;
35e93f7393Sniklas signed short v_signed_short;
36e93f7393Sniklas unsigned short v_unsigned_short;
37e93f7393Sniklas
38e93f7393Sniklas int v_int;
39e93f7393Sniklas signed int v_signed_int;
40e93f7393Sniklas unsigned int v_unsigned_int;
41e93f7393Sniklas
42e93f7393Sniklas long v_long;
43e93f7393Sniklas signed long v_signed_long;
44e93f7393Sniklas unsigned long v_unsigned_long;
45e93f7393Sniklas
46e93f7393Sniklas float v_float;
47e93f7393Sniklas double v_double;
48e93f7393Sniklas
49e93f7393Sniklas /*
50e93f7393Sniklas * Now some derived types, which are arrays, functions-returning,
51e93f7393Sniklas * pointers, structures, unions, and enumerations.
52e93f7393Sniklas */
53e93f7393Sniklas
54e93f7393Sniklas /**** arrays *******/
55e93f7393Sniklas
56e93f7393Sniklas char v_char_array[2];
57e93f7393Sniklas signed char v_signed_char_array[2];
58e93f7393Sniklas unsigned char v_unsigned_char_array[2];
59e93f7393Sniklas
60e93f7393Sniklas short v_short_array[2];
61e93f7393Sniklas signed short v_signed_short_array[2];
62e93f7393Sniklas unsigned short v_unsigned_short_array[2];
63e93f7393Sniklas
64e93f7393Sniklas int v_int_array[2];
65e93f7393Sniklas signed int v_signed_int_array[2];
66e93f7393Sniklas unsigned int v_unsigned_int_array[2];
67e93f7393Sniklas
68e93f7393Sniklas long v_long_array[2];
69e93f7393Sniklas signed long v_signed_long_array[2];
70e93f7393Sniklas unsigned long v_unsigned_long_array[2];
71e93f7393Sniklas
72e93f7393Sniklas float v_float_array[2];
73e93f7393Sniklas double v_double_array[2];
74e93f7393Sniklas
75e93f7393Sniklas /**** pointers *******/
76e93f7393Sniklas
77e93f7393Sniklas /* Make sure they still print as pointer to foo even there is a typedef
78e93f7393Sniklas for that type. Test this not just for char *, which might be
79e93f7393Sniklas a special case kludge in GDB (Unix system include files like to define
80e93f7393Sniklas caddr_t), but for a variety of types. */
81e93f7393Sniklas typedef char *char_addr;
82e93f7393Sniklas typedef unsigned short *ushort_addr;
83e93f7393Sniklas typedef signed long *slong_addr;
84e93f7393Sniklas
85e93f7393Sniklas char *v_char_pointer;
86e93f7393Sniklas signed char *v_signed_char_pointer;
87e93f7393Sniklas unsigned char *v_unsigned_char_pointer;
88e93f7393Sniklas
89e93f7393Sniklas short *v_short_pointer;
90e93f7393Sniklas signed short *v_signed_short_pointer;
91e93f7393Sniklas unsigned short *v_unsigned_short_pointer;
92e93f7393Sniklas
93e93f7393Sniklas int *v_int_pointer;
94e93f7393Sniklas signed int *v_signed_int_pointer;
95e93f7393Sniklas unsigned int *v_unsigned_int_pointer;
96e93f7393Sniklas
97e93f7393Sniklas long *v_long_pointer;
98e93f7393Sniklas signed long *v_signed_long_pointer;
99e93f7393Sniklas unsigned long *v_unsigned_long_pointer;
100e93f7393Sniklas
101e93f7393Sniklas float *v_float_pointer;
102e93f7393Sniklas double *v_double_pointer;
103e93f7393Sniklas
104e93f7393Sniklas /**** structs *******/
105e93f7393Sniklas
106e93f7393Sniklas struct t_struct {
107e93f7393Sniklas char v_char_member;
108e93f7393Sniklas short v_short_member;
109e93f7393Sniklas int v_int_member;
110e93f7393Sniklas long v_long_member;
111e93f7393Sniklas float v_float_member;
112e93f7393Sniklas double v_double_member;
113e93f7393Sniklas } v_struct1;
114e93f7393Sniklas
115e93f7393Sniklas struct {
116e93f7393Sniklas char v_char_member;
117e93f7393Sniklas short v_short_member;
118e93f7393Sniklas int v_int_member;
119e93f7393Sniklas long v_long_member;
120e93f7393Sniklas float v_float_member;
121e93f7393Sniklas double v_double_member;
122e93f7393Sniklas } v_struct2;
123e93f7393Sniklas
124e93f7393Sniklas /**** unions *******/
125e93f7393Sniklas
126e93f7393Sniklas union t_union {
127e93f7393Sniklas char v_char_member;
128e93f7393Sniklas short v_short_member;
129e93f7393Sniklas int v_int_member;
130e93f7393Sniklas long v_long_member;
131e93f7393Sniklas float v_float_member;
132e93f7393Sniklas double v_double_member;
133e93f7393Sniklas } v_union;
134e93f7393Sniklas
135e93f7393Sniklas union {
136e93f7393Sniklas char v_char_member;
137e93f7393Sniklas short v_short_member;
138e93f7393Sniklas int v_int_member;
139e93f7393Sniklas long v_long_member;
140e93f7393Sniklas float v_float_member;
141e93f7393Sniklas double v_double_member;
142e93f7393Sniklas } v_union2;
143e93f7393Sniklas
144e93f7393Sniklas /*** Functions returning type ********/
145e93f7393Sniklas
v_char_func()146e93f7393Sniklas char v_char_func () { return(0); }
v_signed_char_func()147e93f7393Sniklas signed char v_signed_char_func () { return (0); }
v_unsigned_char_func()148e93f7393Sniklas unsigned char v_unsigned_char_func () { return (0); }
149e93f7393Sniklas
v_short_func()150e93f7393Sniklas short v_short_func () { return (0); }
v_signed_short_func()151e93f7393Sniklas signed short v_signed_short_func () { return (0); }
v_unsigned_short_func()152e93f7393Sniklas unsigned short v_unsigned_short_func () { return (0); }
153e93f7393Sniklas
v_int_func()154e93f7393Sniklas int v_int_func () { return (0); }
v_signed_int_func()155e93f7393Sniklas signed int v_signed_int_func () { return (0); }
v_unsigned_int_func()156e93f7393Sniklas unsigned int v_unsigned_int_func () { return (0); }
157e93f7393Sniklas
v_long_func()158e93f7393Sniklas long v_long_func () { return (0); }
v_signed_long_func()159e93f7393Sniklas signed long v_signed_long_func () { return (0); }
v_unsigned_long_func()160e93f7393Sniklas unsigned long v_unsigned_long_func () { return (0); }
161e93f7393Sniklas
v_float_func()162e93f7393Sniklas float v_float_func () { return (0.0); }
v_double_func()163e93f7393Sniklas double v_double_func () { return (0.0); }
164e93f7393Sniklas
165e93f7393Sniklas /**** Some misc more complicated things *******/
166e93f7393Sniklas
167e93f7393Sniklas struct link {
168e93f7393Sniklas struct link *next;
169e93f7393Sniklas #ifdef __STDC__
170e93f7393Sniklas struct link *(*linkfunc) (struct link *this, int flags);
171e93f7393Sniklas #else
172e93f7393Sniklas struct link *(*linkfunc) ();
173e93f7393Sniklas #endif
174e93f7393Sniklas struct t_struct stuff[1][2][3];
175e93f7393Sniklas } *s_link;
176e93f7393Sniklas
177e93f7393Sniklas union tu_link {
178e93f7393Sniklas struct link *next;
179e93f7393Sniklas #ifdef __STDC__
180e93f7393Sniklas struct link *(*linkfunc) (struct link *this, int flags);
181e93f7393Sniklas #else
182e93f7393Sniklas struct link *(*linkfunc) ();
183e93f7393Sniklas #endif
184e93f7393Sniklas struct t_struct stuff[1][2][3];
185e93f7393Sniklas } u_link;
186e93f7393Sniklas
187e93f7393Sniklas struct outer_struct {
188e93f7393Sniklas int outer_int;
189e93f7393Sniklas struct inner_struct {
190e93f7393Sniklas int inner_int;
191e93f7393Sniklas long inner_long;
192e93f7393Sniklas }inner_struct_instance;
193e93f7393Sniklas union inner_union {
194e93f7393Sniklas int inner_union_int;
195e93f7393Sniklas long inner_union_long;
196e93f7393Sniklas }inner_union_instance;
197e93f7393Sniklas long outer_long;
198e93f7393Sniklas } nested_su;
199e93f7393Sniklas
200e93f7393Sniklas /**** Enumerations *******/
201e93f7393Sniklas
202e93f7393Sniklas enum colors {red, green, blue} color;
203e93f7393Sniklas enum cars {chevy, ford, porsche} clunker;
204e93f7393Sniklas
205e93f7393Sniklas /***********/
206e93f7393Sniklas
main()207b725ae77Skettenis int main ()
208e93f7393Sniklas {
209b725ae77Skettenis #ifdef usestubs
210b725ae77Skettenis set_debug_traps();
211b725ae77Skettenis breakpoint();
212b725ae77Skettenis #endif
213e93f7393Sniklas /* Some linkers (e.g. on AIX) remove unreferenced variables,
214e93f7393Sniklas so make sure to reference them. */
215e93f7393Sniklas v_char = 0;
216e93f7393Sniklas v_signed_char = 1;
217e93f7393Sniklas v_unsigned_char = 2;
218e93f7393Sniklas
219e93f7393Sniklas v_short = 3;
220e93f7393Sniklas v_signed_short = 4;
221e93f7393Sniklas v_unsigned_short = 5;
222e93f7393Sniklas
223e93f7393Sniklas v_int = 6;
224e93f7393Sniklas v_signed_int = 7;
225e93f7393Sniklas v_unsigned_int = 8;
226e93f7393Sniklas
227e93f7393Sniklas v_long = 9;
228e93f7393Sniklas v_signed_long = 10;
229e93f7393Sniklas v_unsigned_long = 11;
230e93f7393Sniklas
231e93f7393Sniklas v_float = 100.0;
232e93f7393Sniklas v_double = 200.0;
233e93f7393Sniklas
234e93f7393Sniklas
235e93f7393Sniklas v_char_array[0] = v_char;
236e93f7393Sniklas v_signed_char_array[0] = v_signed_char;
237e93f7393Sniklas v_unsigned_char_array[0] = v_unsigned_char;
238e93f7393Sniklas
239e93f7393Sniklas v_short_array[0] = v_short;
240e93f7393Sniklas v_signed_short_array[0] = v_signed_short;
241e93f7393Sniklas v_unsigned_short_array[0] = v_unsigned_short;
242e93f7393Sniklas
243e93f7393Sniklas v_int_array[0] = v_int;
244e93f7393Sniklas v_signed_int_array[0] = v_signed_int;
245e93f7393Sniklas v_unsigned_int_array[0] = v_unsigned_int;
246e93f7393Sniklas
247e93f7393Sniklas v_long_array[0] = v_long;
248e93f7393Sniklas v_signed_long_array[0] = v_signed_long;
249e93f7393Sniklas v_unsigned_long_array[0] = v_unsigned_long;
250e93f7393Sniklas
251e93f7393Sniklas v_float_array[0] = v_float;
252e93f7393Sniklas v_double_array[0] = v_double;
253e93f7393Sniklas
254e93f7393Sniklas v_char_pointer = &v_char;
255e93f7393Sniklas v_signed_char_pointer = &v_signed_char;
256e93f7393Sniklas v_unsigned_char_pointer = &v_unsigned_char;
257e93f7393Sniklas
258e93f7393Sniklas v_short_pointer = &v_short;
259e93f7393Sniklas v_signed_short_pointer = &v_signed_short;
260e93f7393Sniklas v_unsigned_short_pointer = &v_unsigned_short;
261e93f7393Sniklas
262e93f7393Sniklas v_int_pointer = &v_int;
263e93f7393Sniklas v_signed_int_pointer = &v_signed_int;
264e93f7393Sniklas v_unsigned_int_pointer = &v_unsigned_int;
265e93f7393Sniklas
266e93f7393Sniklas v_long_pointer = &v_long;
267e93f7393Sniklas v_signed_long_pointer = &v_signed_long;
268e93f7393Sniklas v_unsigned_long_pointer = &v_unsigned_long;
269e93f7393Sniklas
270e93f7393Sniklas v_float_pointer = &v_float;
271e93f7393Sniklas v_double_pointer = &v_double;
272e93f7393Sniklas
273e93f7393Sniklas color = red;
274e93f7393Sniklas clunker = porsche;
275e93f7393Sniklas
276e93f7393Sniklas u_link.next = s_link;
277e93f7393Sniklas
278e93f7393Sniklas v_union2.v_short_member = v_union.v_short_member;
279e93f7393Sniklas
280e93f7393Sniklas v_struct1.v_char_member = 0;
281e93f7393Sniklas v_struct2.v_char_member = 0;
282e93f7393Sniklas
283e93f7393Sniklas nested_su.outer_int = 0;
284e93f7393Sniklas return 0;
285e93f7393Sniklas }
286