1#include <stdlib.h> 2 3int main (int argc, char **argv, char **envp) 4{ 5 extern void dummy(); 6 dummy(); 7 return 0; 8} 9 10/* We put main() right up front so its line number doesn't keep changing. */ 11 12/* 13 * Test file with lots of different types, for testing the 14 * "whatis" command. 15 */ 16 17/* 18 * First the basic C types. 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 41float v_float; 42double v_double; 43 44/* 45 * Now some derived types, which are arrays, functions-returning, 46 * pointers, structures, unions, and enumerations. 47 */ 48 49/**** arrays *******/ 50 51char v_char_array[2]; 52signed char v_signed_char_array[2]; 53unsigned char v_unsigned_char_array[2]; 54 55short v_short_array[2]; 56signed short v_signed_short_array[2]; 57unsigned short v_unsigned_short_array[2]; 58 59int v_int_array[2]; 60signed int v_signed_int_array[2]; 61unsigned int v_unsigned_int_array[2]; 62 63long v_long_array[2]; 64signed long v_signed_long_array[2]; 65unsigned long v_unsigned_long_array[2]; 66 67float v_float_array[2]; 68double v_double_array[2]; 69 70/**** pointers *******/ 71 72char *v_char_pointer; 73signed char *v_signed_char_pointer; 74unsigned char *v_unsigned_char_pointer; 75 76short *v_short_pointer; 77signed short *v_signed_short_pointer; 78unsigned short *v_unsigned_short_pointer; 79 80int *v_int_pointer; 81signed int *v_signed_int_pointer; 82unsigned int *v_unsigned_int_pointer; 83 84long *v_long_pointer; 85signed long *v_signed_long_pointer; 86unsigned long *v_unsigned_long_pointer; 87 88float *v_float_pointer; 89double *v_double_pointer; 90 91/**** structs *******/ 92 93struct t_struct { 94 char v_char_member; 95 short v_short_member; 96 int v_int_member; 97 long v_long_member; 98 float v_float_member; 99 double v_double_member; 100} v_struct1; 101 102struct { 103 char v_char_member; 104 short v_short_member; 105 int v_int_member; 106 long v_long_member; 107 float v_float_member; 108 double v_double_member; 109} v_struct2; 110 111struct 112{ 113 long v_long_member; 114 struct t_struct t; 115 char v_char_member; 116} v_struct3; 117 118/**** unions *******/ 119 120union t_union { 121 char v_char_member; 122 short v_short_member; 123 int v_int_member; 124 long v_long_member; 125 float v_float_member; 126 double v_double_member; 127} v_union; 128 129union { 130 char v_char_member; 131 short v_short_member; 132 int v_int_member; 133 long v_long_member; 134 float v_float_member; 135 double v_double_member; 136} v_union2; 137 138/*** Functions returning type ********/ 139 140char v_char_func () { return(0); } 141signed char v_signed_char_func () { return (0); } 142unsigned char v_unsigned_char_func () { return (0); } 143 144short v_short_func () { return (0); } 145signed short v_signed_short_func () { return (0); } 146unsigned short v_unsigned_short_func () { return (0); } 147 148int v_int_func () { return (0); } 149signed int v_signed_int_func () { return (0); } 150unsigned int v_unsigned_int_func () { return (0); } 151 152long v_long_func () { return (0); } 153signed long v_signed_long_func () { return (0); } 154unsigned long v_unsigned_long_func () { return (0); } 155 156float v_float_func () { return (0.0); } 157double v_double_func () { return (0.0); } 158 159/**** Some misc more complicated things *******/ 160 161struct link { 162 struct link *next; 163#ifdef __STDC__ 164 struct link *(*linkfunc) (struct link *self, int flags); 165#else 166 struct link *(*linkfunc) (); 167#endif 168 struct t_struct stuff[1][2][3]; 169} *s_link; 170 171union tu_link { 172 struct link *next; 173#ifdef __STDC__ 174 struct link *(*linkfunc) (struct link *self, int flags); 175#else 176 struct link *(*linkfunc) (); 177#endif 178 struct t_struct stuff[1][2][3]; 179} u_link; 180 181/**** Enumerations *******/ 182 183enum colors {red, green, blue} color; 184enum cars {chevy, ford, porsche} clunker; 185 186/**** Enumeration bitfields, supported by GNU C *******/ 187 188#ifdef __GNUC__ 189enum senum {sm1 = -1, s1 = 1}; 190struct senum_field {enum senum field:2; } sef; 191enum uenum {u1 = 1, u2 = 2}; 192struct uenum_field {enum uenum field:2; } uef; 193#endif 194 195void 196dummy () 197{ 198 /* setvar.exp wants to allocate memory for constants. So make sure malloc 199 gets linked into the program. */ 200 void *p = malloc (1); 201 202 /* Some linkers (e.g. on AIX) remove unreferenced variables, 203 so make sure to reference them. */ 204 v_char = 0; 205 v_signed_char = 1; 206 v_unsigned_char = 2; 207 208 v_short = 3; 209 v_signed_short = 4; 210 v_unsigned_short = 5; 211 212 v_int = 6; 213 v_signed_int = 7; 214 v_unsigned_int = 8; 215 216 v_long = 9; 217 v_signed_long = 10; 218 v_unsigned_long = 11; 219 220 v_float = 100.0; 221 v_double = 200.0; 222 223 224 v_char_array[0] = v_char; 225 v_signed_char_array[0] = v_signed_char; 226 v_unsigned_char_array[0] = v_unsigned_char; 227 228 v_short_array[0] = v_short; 229 v_signed_short_array[0] = v_signed_short; 230 v_unsigned_short_array[0] = v_unsigned_short; 231 232 v_int_array[0] = v_int; 233 v_signed_int_array[0] = v_signed_int; 234 v_unsigned_int_array[0] = v_unsigned_int; 235 236 v_long_array[0] = v_long; 237 v_signed_long_array[0] = v_signed_long; 238 v_unsigned_long_array[0] = v_unsigned_long; 239 240 v_float_array[0] = v_float; 241 v_double_array[0] = v_double; 242 243 v_char_pointer = &v_char; 244 v_signed_char_pointer = &v_signed_char; 245 v_unsigned_char_pointer = &v_unsigned_char; 246 247 v_short_pointer = &v_short; 248 v_signed_short_pointer = &v_signed_short; 249 v_unsigned_short_pointer = &v_unsigned_short; 250 251 v_int_pointer = &v_int; 252 v_signed_int_pointer = &v_signed_int; 253 v_unsigned_int_pointer = &v_unsigned_int; 254 255 v_long_pointer = &v_long; 256 v_signed_long_pointer = &v_signed_long; 257 v_unsigned_long_pointer = &v_unsigned_long; 258 259 v_float_pointer = &v_float; 260 v_double_pointer = &v_double; 261 262 color = red; 263 clunker = porsche; 264 265 u_link.next = s_link; 266 267 v_struct2.v_int_member = v_struct1.v_int_member; 268 v_union2.v_short_member = v_union.v_short_member; 269 270#ifdef __GNUC__ 271 sef.field = s1; 272 uef.field = u1; 273#endif 274 free (p); 275} 276