/* Copyright (C) 2001-2013 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* * Initial set of typed variables borrowed from ptype.c */ #if !defined (__STDC__) && !defined (_AIX) #define signed /**/ #endif char v_char; signed char v_signed_char; unsigned char v_unsigned_char; short v_short; signed short v_signed_short; unsigned short v_unsigned_short; int v_int; signed int v_signed_int; unsigned int v_unsigned_int; long v_long; signed long v_signed_long; unsigned long v_unsigned_long; long long v_long_long; signed long long v_signed_long_long; unsigned long long v_unsigned_long_long; float v_float; double v_double; /* * Now some derived types, which are arrays, functions-returning, * pointers, structures, unions, and enumerations. */ /**** arrays *******/ char v_char_array[2]; signed char v_signed_char_array[2]; unsigned char v_unsigned_char_array[2]; short v_short_array[2]; signed short v_signed_short_array[2]; unsigned short v_unsigned_short_array[2]; int v_int_array[2]; signed int v_signed_int_array[2]; unsigned int v_unsigned_int_array[2]; long v_long_array[2]; signed long v_signed_long_array[2]; unsigned long v_unsigned_long_array[2]; float v_float_array[2]; double v_double_array[2]; /* PR 3742 */ typedef char t_char_array[]; /**** pointers *******/ char *v_char_pointer; signed char *v_signed_char_pointer; unsigned char *v_unsigned_char_pointer; short *v_short_pointer; signed short *v_signed_short_pointer; unsigned short *v_unsigned_short_pointer; int *v_int_pointer; signed int *v_signed_int_pointer; unsigned int *v_unsigned_int_pointer; long *v_long_pointer; signed long *v_signed_long_pointer; unsigned long *v_unsigned_long_pointer; float *v_float_pointer; double *v_double_pointer; char **v_char_pointer_pointer; signed char **v_signed_char_pointer_pointer; unsigned char **v_unsigned_char_pointer_pointer; short **v_short_pointer_pointer; signed short **v_signed_short_pointer_pointer; unsigned short **v_unsigned_short_pointer_pointer; int **v_int_pointer_pointer; signed int **v_signed_int_pointer_pointer; unsigned int **v_unsigned_int_pointer_pointer; long **v_long_pointer_pointer; signed long **v_signed_long_pointer_pointer; unsigned long **v_unsigned_long_pointer_pointer; float **v_float_pointer_pointer; double **v_double_pointer_pointer; /**** pointers to arrays, arrays of pointers *******/ char *v_char_array_pointer[2]; signed char *v_signed_char_array_pointer[2]; unsigned char *v_unsigned_char_array_pointer[2]; short *v_short_array_pointer[2]; signed short *v_signed_short_array_pointer[2]; unsigned short *v_unsigned_short_array_pointer[2]; int *v_int_array_pointer[2]; signed int *v_signed_int_array_pointer[2]; unsigned int *v_unsigned_int_array_pointer[2]; long *v_long_array_pointer[2]; signed long *v_signed_long_array_pointer[2]; unsigned long *v_unsigned_long_array_pointer[2]; float *v_float_array_pointer[2]; double *v_double_array_pointer[2]; char (*v_char_pointer_array)[2]; signed char (*v_signed_char_pointer_array)[2]; unsigned char (*v_unsigned_char_pointer_array)[2]; short (*v_short_pointer_array)[2]; signed short (*v_signed_short_pointer_array)[2]; unsigned short (*v_unsigned_short_pointer_array)[2]; int (*v_int_pointer_array)[2]; signed int (*v_signed_int_pointer_array)[2]; unsigned int (*v_unsigned_int_pointer_array)[2]; long (*v_long_pointer_array)[2]; signed long (*v_signed_long_pointer_array)[2]; unsigned long (*v_unsigned_long_pointer_array)[2]; float (*v_float_pointer_array)[2]; double (*v_double_pointer_array)[2]; /**** structs *******/ struct t_struct { char v_char_member; short v_short_member; int v_int_member; long v_long_member; float v_float_member; double v_double_member; } v_struct1; struct t_struct *v_t_struct_p; struct { char v_char_member; short v_short_member; int v_int_member; long v_long_member; float v_float_member; double v_double_member; } v_struct2; /* typedef'd struct without a tag. */ typedef struct { double v_double_member; int v_int_member; } t_struct3; /* GCC seems to want a variable of this type, or else it won't put out a symbol. */ t_struct3 v_struct3; /**** unions *******/ union t_union { char v_char_member; short v_short_member; int v_int_member; long v_long_member; float v_float_member; double v_double_member; } v_union; union { char v_char_member; short v_short_member; int v_int_member; long v_long_member; float v_float_member; double v_double_member; } v_union2; /* typedef'd union without a tag. */ typedef union { double v_double_member; int v_int_member; } t_union3; /* GCC seems to want a variable of this type, or else it won't put out a symbol. */ t_union3 v_union3; /**** Enumerations *******/ enum /* Work around the bug for compilers which don't put out the right stabs. */ #if __GNUC__ < 2 && !defined (_AIX) primary1_tag #endif {red1, green1, blue1} primary1; enum {red, green, blue} primary; enum colors {yellow, purple, pink} nonprimary; enum {chevy, ford} clunker; enum cars {bmw, porsche} sportscar; #undef FALSE #undef TRUE typedef enum {FALSE, TRUE} boolean; boolean v_boolean; /*note: aCC has bool type predefined with 'false' and 'true'*/ typedef enum bvals {my_false, my_true} boolean2; boolean2 v_boolean2; enum misordered {two = 2, one = 1, zero = 0, three = 3}; /* Seems like we need a variable of this type to get the type to be put in the executable, at least for AIX xlc. */ enum misordered v_misordered = three; /**** Function pointers *******/ char (*v_char_func) (int, int*); signed char (*v_signed_char_func) (int, int*); unsigned char (*v_unsigned_char_func) (int, int*); short (*v_short_func) (int, int*); signed short (*v_signed_short_func) (int, int*); unsigned short (*v_unsigned_short_func) (int, int*); int (*v_int_func) (int, int*); signed int (*v_signed_int_func) (int, int*); unsigned int (*v_unsigned_int_func) (int, int*); long (*v_long_func) (int, int*); signed long (*v_signed_long_func) (int, int*); unsigned long (*v_unsigned_long_func) (int, int*); long long (*v_long_long_func) (int, int*); signed long long (*v_signed_long_long_func) (int, int*); unsigned long long (*v_unsigned_long_long_func) (int, int*); float (*v_float_func) (int, int*); double (*v_double_func) (int, int*); void use (void *p) { } int main () { use (&v_char); use (&v_signed_char); use (&v_unsigned_char); use (&v_short); use (&v_signed_short); use (&v_unsigned_short); use (&v_int); use (&v_signed_int); use (&v_unsigned_int); use (&v_long); use (&v_signed_long); use (&v_unsigned_long); use (&v_long_long); use (&v_signed_long_long); use (&v_unsigned_long_long); use (&v_float); use (&v_double); use (v_char_array); use (v_signed_char_array); use (v_unsigned_char_array); use (v_short_array); use (v_signed_short_array); use (v_unsigned_short_array); use (v_int_array); use (v_signed_int_array); use (v_unsigned_int_array); use (v_long_array); use (v_signed_long_array); use (v_unsigned_long_array); use (v_float_array); use (v_double_array); use (v_char_pointer); use (v_signed_char_pointer); use (v_unsigned_char_pointer); use (v_short_pointer); use (v_signed_short_pointer); use (v_unsigned_short_pointer); use (v_int_pointer); use (v_signed_int_pointer); use (v_unsigned_int_pointer); use (v_long_pointer); use (v_signed_long_pointer); use (v_unsigned_long_pointer); use (v_float_pointer); use (v_double_pointer); use (v_char_pointer_pointer); use (v_signed_char_pointer_pointer); use (v_unsigned_char_pointer_pointer); use (v_short_pointer_pointer); use (v_signed_short_pointer_pointer); use (v_unsigned_short_pointer_pointer); use (v_int_pointer_pointer); use (v_signed_int_pointer_pointer); use (v_unsigned_int_pointer_pointer); use (v_long_pointer_pointer); use (v_signed_long_pointer_pointer); use (v_unsigned_long_pointer_pointer); use (v_float_pointer_pointer); use (v_double_pointer_pointer); use (v_char_array_pointer); use (v_signed_char_array_pointer); use (v_unsigned_char_array_pointer); use (v_short_array_pointer); use (v_signed_short_array_pointer); use (v_unsigned_short_array_pointer); use (v_int_array_pointer); use (v_signed_int_array_pointer); use (v_unsigned_int_array_pointer); use (v_long_array_pointer); use (v_signed_long_array_pointer); use (v_unsigned_long_array_pointer); use (v_float_array_pointer); use (v_double_array_pointer); use (v_char_pointer_array); use (v_signed_char_pointer_array); use (v_unsigned_char_pointer_array); use (v_short_pointer_array); use (v_signed_short_pointer_array); use (v_unsigned_short_pointer_array); use (v_int_pointer_array); use (v_signed_int_pointer_array); use (v_unsigned_int_pointer_array); use (v_long_pointer_array); use (v_signed_long_pointer_array); use (v_unsigned_long_pointer_array); use (v_float_pointer_array); use (v_double_pointer_array); use (&v_struct1); use (&v_struct2); use (&v_struct3); use (&v_union); use (&v_union2); use (&v_union3); use (&v_boolean); use (&v_boolean2); use (&v_misordered); use (&v_char_func); use (&v_signed_char_func); use (&v_unsigned_char_func); use (&v_short_func); use (&v_signed_short_func); use (&v_unsigned_short_func); use (&v_int_func); use (&v_signed_int_func); use (&v_unsigned_int_func); use (&v_long_func); use (&v_signed_long_func); use (&v_unsigned_long_func); use (&v_long_long_func); use (&v_signed_long_long_func); use (&v_unsigned_long_long_func); use (&v_float_func); use (&v_double_func); }