xref: /openbsd-src/gnu/usr.bin/binutils/gdb/testsuite/gdb.base/whatis.c (revision 63addd46c1e40ca0f49488ddcdc4ab598023b0c1)
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