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