1/* Copyright (C) 2001, 2004, 2007 Free Software Foundation, Inc.
2
3   This program is free software; you can redistribute it and/or modify
4   it under the terms of the GNU General Public License as published by
5   the Free Software Foundation; either version 3 of the License, or
6   (at your option) any later version.
7
8   This program is distributed in the hope that it will be useful,
9   but WITHOUT ANY WARRANTY; without even the implied warranty of
10   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11   GNU General Public License for more details.
12
13   You should have received a copy of the GNU General Public License
14   along with this program.  If not, see <http://www.gnu.org/licenses/>.
15
16   Please email any bugs, comments, and/or additions to this file to:
17   bug-gdb@prep.ai.mit.edu  */
18
19
20/*
21 * Initial set of typed variables borrowed from ptype.c
22 */
23
24#if !defined (__STDC__) && !defined (_AIX)
25#define signed  /**/
26#endif
27
28char		v_char;
29signed char	v_signed_char;
30unsigned char	v_unsigned_char;
31
32short		v_short;
33signed short	v_signed_short;
34unsigned short	v_unsigned_short;
35
36int		v_int;
37signed int	v_signed_int;
38unsigned int	v_unsigned_int;
39
40long		v_long;
41signed long	v_signed_long;
42unsigned long	v_unsigned_long;
43
44long long	   v_long_long;
45signed long long   v_signed_long_long;
46unsigned long long v_unsigned_long_long;
47
48float		v_float;
49double		v_double;
50
51/*
52 *	Now some derived types, which are arrays, functions-returning,
53 *	pointers, structures, unions, and enumerations.
54 */
55
56/**** arrays *******/
57
58char		v_char_array[2];
59signed char	v_signed_char_array[2];
60unsigned char	v_unsigned_char_array[2];
61
62short		v_short_array[2];
63signed short	v_signed_short_array[2];
64unsigned short	v_unsigned_short_array[2];
65
66int		v_int_array[2];
67signed int	v_signed_int_array[2];
68unsigned int	v_unsigned_int_array[2];
69
70long		v_long_array[2];
71signed long	v_signed_long_array[2];
72unsigned long	v_unsigned_long_array[2];
73
74float		v_float_array[2];
75double		v_double_array[2];
76
77/* PR 3742 */
78typedef char t_char_array[];
79
80/**** pointers *******/
81
82char		*v_char_pointer;
83signed char	*v_signed_char_pointer;
84unsigned char	*v_unsigned_char_pointer;
85
86short		*v_short_pointer;
87signed short	*v_signed_short_pointer;
88unsigned short	*v_unsigned_short_pointer;
89
90int		*v_int_pointer;
91signed int	*v_signed_int_pointer;
92unsigned int	*v_unsigned_int_pointer;
93
94long		*v_long_pointer;
95signed long	*v_signed_long_pointer;
96unsigned long	*v_unsigned_long_pointer;
97
98float		*v_float_pointer;
99double		*v_double_pointer;
100
101char		**v_char_pointer_pointer;
102signed char	**v_signed_char_pointer_pointer;
103unsigned char	**v_unsigned_char_pointer_pointer;
104
105short		**v_short_pointer_pointer;
106signed short	**v_signed_short_pointer_pointer;
107unsigned short	**v_unsigned_short_pointer_pointer;
108
109int		**v_int_pointer_pointer;
110signed int	**v_signed_int_pointer_pointer;
111unsigned int	**v_unsigned_int_pointer_pointer;
112
113long		**v_long_pointer_pointer;
114signed long	**v_signed_long_pointer_pointer;
115unsigned long	**v_unsigned_long_pointer_pointer;
116
117float		**v_float_pointer_pointer;
118double		**v_double_pointer_pointer;
119
120/**** pointers to arrays, arrays of pointers *******/
121
122char		*v_char_array_pointer[2];
123signed char	*v_signed_char_array_pointer[2];
124unsigned char	*v_unsigned_char_array_pointer[2];
125
126short		*v_short_array_pointer[2];
127signed short	*v_signed_short_array_pointer[2];
128unsigned short	*v_unsigned_short_array_pointer[2];
129
130int		*v_int_array_pointer[2];
131signed int	*v_signed_int_array_pointer[2];
132unsigned int	*v_unsigned_int_array_pointer[2];
133
134long		*v_long_array_pointer[2];
135signed long	*v_signed_long_array_pointer[2];
136unsigned long	*v_unsigned_long_array_pointer[2];
137
138float		*v_float_array_pointer[2];
139double		*v_double_array_pointer[2];
140
141char		(*v_char_pointer_array)[2];
142signed char	(*v_signed_char_pointer_array)[2];
143unsigned char	(*v_unsigned_char_pointer_array)[2];
144
145short		(*v_short_pointer_array)[2];
146signed short	(*v_signed_short_pointer_array)[2];
147unsigned short	(*v_unsigned_short_pointer_array)[2];
148
149int		(*v_int_pointer_array)[2];
150signed int	(*v_signed_int_pointer_array)[2];
151unsigned int	(*v_unsigned_int_pointer_array)[2];
152
153long		(*v_long_pointer_array)[2];
154signed long	(*v_signed_long_pointer_array)[2];
155unsigned long	(*v_unsigned_long_pointer_array)[2];
156
157float		(*v_float_pointer_array)[2];
158double		(*v_double_pointer_array)[2];
159
160
161/**** structs *******/
162
163struct t_struct {
164    char	v_char_member;
165    short	v_short_member;
166    int		v_int_member;
167    long	v_long_member;
168    float	v_float_member;
169    double	v_double_member;
170} v_struct1;
171
172struct t_struct *v_t_struct_p;
173
174struct {
175    char	v_char_member;
176    short	v_short_member;
177    int		v_int_member;
178    long	v_long_member;
179    float	v_float_member;
180    double	v_double_member;
181} v_struct2;
182
183/* typedef'd struct without a tag.  */
184typedef struct {
185  double v_double_member;
186  int v_int_member;
187} t_struct3;
188/* GCC seems to want a variable of this type, or else it won't put out
189   a symbol.  */
190t_struct3 v_struct3;
191
192/**** unions *******/
193
194union t_union {
195    char	v_char_member;
196    short	v_short_member;
197    int		v_int_member;
198    long	v_long_member;
199    float	v_float_member;
200    double	v_double_member;
201} v_union;
202
203union {
204    char	v_char_member;
205    short	v_short_member;
206    int		v_int_member;
207    long	v_long_member;
208    float	v_float_member;
209    double	v_double_member;
210} v_union2;
211
212/* typedef'd union without a tag.  */
213typedef union {
214  double v_double_member;
215  int v_int_member;
216} t_union3;
217/* GCC seems to want a variable of this type, or else it won't put out
218   a symbol.  */
219t_union3 v_union3;
220
221/**** Enumerations *******/
222
223enum
224/* Work around the bug for compilers which don't put out the right stabs.  */
225#if __GNUC__ < 2 && !defined (_AIX)
226primary1_tag
227#endif
228{red1, green1, blue1} primary1;
229
230enum {red, green, blue} primary;
231enum colors {yellow, purple, pink} nonprimary;
232
233enum {chevy, ford} clunker;
234enum cars {bmw, porsche} sportscar;
235
236#undef FALSE
237#undef TRUE
238typedef enum {FALSE, TRUE} boolean;
239boolean v_boolean;
240/*note: aCC has bool type predefined with 'false' and 'true'*/
241typedef enum bvals {my_false, my_true} boolean2;
242boolean2 v_boolean2;
243
244enum misordered {two = 2, one = 1, zero = 0, three = 3};
245
246/* Seems like we need a variable of this type to get the type to be put
247   in the executable, at least for AIX xlc.  */
248enum misordered v_misordered = three;
249
250/**** Function pointers *******/
251
252char		(*v_char_func) (int, int*);
253signed char	(*v_signed_char_func) (int, int*);
254unsigned char	(*v_unsigned_char_func) (int, int*);
255
256short		(*v_short_func) (int, int*);
257signed short	(*v_signed_short_func) (int, int*);
258unsigned short	(*v_unsigned_short_func) (int, int*);
259
260int		(*v_int_func) (int, int*);
261signed int	(*v_signed_int_func) (int, int*);
262unsigned int	(*v_unsigned_int_func) (int, int*);
263
264long		(*v_long_func) (int, int*);
265signed long	(*v_signed_long_func) (int, int*);
266unsigned long	(*v_unsigned_long_func) (int, int*);
267
268long long		(*v_long_long_func) (int, int*);
269signed long long	(*v_signed_long_long_func) (int, int*);
270unsigned long long	(*v_unsigned_long_long_func) (int, int*);
271
272float		(*v_float_func) (int, int*);
273double		(*v_double_func) (int, int*);
274
275void use (void *p)
276{
277}
278
279int main ()
280{
281  use (&v_char);
282  use (&v_signed_char);
283  use (&v_unsigned_char);
284
285  use (&v_short);
286  use (&v_signed_short);
287  use (&v_unsigned_short);
288
289  use (&v_int);
290  use (&v_signed_int);
291  use (&v_unsigned_int);
292
293  use (&v_long);
294  use (&v_signed_long);
295  use (&v_unsigned_long);
296
297  use (&v_long_long);
298  use (&v_signed_long_long);
299  use (&v_unsigned_long_long);
300
301  use (&v_float);
302  use (&v_double);
303
304  use (v_char_array);
305  use (v_signed_char_array);
306  use (v_unsigned_char_array);
307
308  use (v_short_array);
309  use (v_signed_short_array);
310  use (v_unsigned_short_array);
311
312  use (v_int_array);
313  use (v_signed_int_array);
314  use (v_unsigned_int_array);
315
316  use (v_long_array);
317  use (v_signed_long_array);
318  use (v_unsigned_long_array);
319
320  use (v_float_array);
321  use (v_double_array);
322
323  use (v_char_pointer);
324  use (v_signed_char_pointer);
325  use (v_unsigned_char_pointer);
326
327  use (v_short_pointer);
328  use (v_signed_short_pointer);
329  use (v_unsigned_short_pointer);
330
331  use (v_int_pointer);
332  use (v_signed_int_pointer);
333  use (v_unsigned_int_pointer);
334
335  use (v_long_pointer);
336  use (v_signed_long_pointer);
337  use (v_unsigned_long_pointer);
338
339  use (v_float_pointer);
340  use (v_double_pointer);
341
342  use (v_char_pointer_pointer);
343  use (v_signed_char_pointer_pointer);
344  use (v_unsigned_char_pointer_pointer);
345
346  use (v_short_pointer_pointer);
347  use (v_signed_short_pointer_pointer);
348  use (v_unsigned_short_pointer_pointer);
349
350  use (v_int_pointer_pointer);
351  use (v_signed_int_pointer_pointer);
352  use (v_unsigned_int_pointer_pointer);
353
354  use (v_long_pointer_pointer);
355  use (v_signed_long_pointer_pointer);
356  use (v_unsigned_long_pointer_pointer);
357
358  use (v_float_pointer_pointer);
359  use (v_double_pointer_pointer);
360
361  use (v_char_array_pointer);
362  use (v_signed_char_array_pointer);
363  use (v_unsigned_char_array_pointer);
364
365  use (v_short_array_pointer);
366  use (v_signed_short_array_pointer);
367  use (v_unsigned_short_array_pointer);
368
369  use (v_int_array_pointer);
370  use (v_signed_int_array_pointer);
371  use (v_unsigned_int_array_pointer);
372
373  use (v_long_array_pointer);
374  use (v_signed_long_array_pointer);
375  use (v_unsigned_long_array_pointer);
376
377  use (v_float_array_pointer);
378  use (v_double_array_pointer);
379
380  use (v_char_pointer_array);
381  use (v_signed_char_pointer_array);
382  use (v_unsigned_char_pointer_array);
383
384  use (v_short_pointer_array);
385  use (v_signed_short_pointer_array);
386  use (v_unsigned_short_pointer_array);
387
388  use (v_int_pointer_array);
389  use (v_signed_int_pointer_array);
390  use (v_unsigned_int_pointer_array);
391
392  use (v_long_pointer_array);
393  use (v_signed_long_pointer_array);
394  use (v_unsigned_long_pointer_array);
395
396  use (v_float_pointer_array);
397  use (v_double_pointer_array);
398
399  use (&v_struct1);
400  use (&v_struct2);
401  use (&v_struct3);
402
403  use (&v_union);
404  use (&v_union2);
405  use (&v_union3);
406
407  use (&v_boolean);
408  use (&v_boolean2);
409  use (&v_misordered);
410
411  use (&v_char_func);
412  use (&v_signed_char_func);
413  use (&v_unsigned_char_func);
414
415  use (&v_short_func);
416  use (&v_signed_short_func);
417  use (&v_unsigned_short_func);
418
419  use (&v_int_func);
420  use (&v_signed_int_func);
421  use (&v_unsigned_int_func);
422
423  use (&v_long_func);
424  use (&v_signed_long_func);
425  use (&v_unsigned_long_func);
426
427  use (&v_long_long_func);
428  use (&v_signed_long_long_func);
429  use (&v_unsigned_long_long_func);
430
431  use (&v_float_func);
432  use (&v_double_func);
433}
434