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