[gdb/testsuite] Factor out lib/valgrind.exp
[external/binutils.git] / gdb / testsuite / gdb.base / exprs.c
1 int main (int argc, char **argv, char **envp)
2 {
3     extern void dummy();
4     dummy();
5     return 0;
6     
7 }
8
9 /* We put main() right up front so its line number doesn't keep changing.  */
10
11 /*
12  *      Test file with lots of different types, for testing the
13  *      "whatis" command.
14  */
15
16 /*
17  *      First the basic C types.
18  */
19
20 #if !defined (__STDC__) && !defined (_AIX)
21 #define signed  /**/
22 #endif
23
24 char            v_char;
25 signed char     v_signed_char;
26 unsigned char   v_unsigned_char;
27
28 short           v_short;
29 signed short    v_signed_short;
30 unsigned short  v_unsigned_short;
31
32 int             v_int;
33 signed int      v_signed_int;
34 unsigned int    v_unsigned_int;
35
36 long            v_long;
37 signed long     v_signed_long;
38 unsigned long   v_unsigned_long;
39
40 float           v_float;
41 double          v_double;
42 /*
43  *      Now some derived types, which are arrays, functions-returning,
44  *      pointers, structures, unions, and enumerations.
45  */
46
47 /**** arrays *******/
48
49 char            v_char_array[2];
50 signed char     v_signed_char_array[2];
51 unsigned char   v_unsigned_char_array[2];
52
53 short           v_short_array[2];
54 signed short    v_signed_short_array[2];
55 unsigned short  v_unsigned_short_array[2];
56
57 int             v_int_array[2];
58 signed int      v_signed_int_array[2];
59 unsigned int    v_unsigned_int_array[2];
60
61 long            v_long_array[2];
62 signed long     v_signed_long_array[2];
63 unsigned long   v_unsigned_long_array[2];
64
65 float           v_float_array[2];
66 double          v_double_array[2];
67
68 /**** initialized array *******/
69
70 int             v_int_array_init[2] = { 10, 20 };
71
72 /**** pointers *******/
73
74 char            *v_char_pointer;
75 signed char     *v_signed_char_pointer;
76 unsigned char   *v_unsigned_char_pointer;
77
78 short           *v_short_pointer;
79 signed short    *v_signed_short_pointer;
80 unsigned short  *v_unsigned_short_pointer;
81
82 int             *v_int_pointer;
83 signed int      *v_signed_int_pointer;
84 unsigned int    *v_unsigned_int_pointer;
85
86 long            *v_long_pointer;
87 signed long     *v_signed_long_pointer;
88 unsigned long   *v_unsigned_long_pointer;
89
90 float           *v_float_pointer;
91 double          *v_double_pointer;
92
93 /**** structs *******/
94
95 struct t_struct {
96     char        v_char_member;
97     short       v_short_member;
98     int         v_int_member;
99     long        v_long_member;
100     float       v_float_member;
101     double      v_double_member;
102 } v_struct1;
103
104 struct {
105     char        v_char_member;
106     short       v_short_member;
107     int         v_int_member;
108     long        v_long_member;
109     float       v_float_member;
110     double      v_double_member;
111 } v_struct2;
112
113 /**** unions *******/
114
115 union t_union {
116     char        v_char_member;
117     short       v_short_member;
118     int         v_int_member;
119     long        v_long_member;
120     float       v_float_member;
121     double      v_double_member;
122 } v_union;
123
124 union {
125     char        v_char_member;
126     short       v_short_member;
127     int         v_int_member;
128     long        v_long_member;
129     float       v_float_member;
130     double      v_double_member;
131 } v_union2;
132
133 /*** Functions returning type ********/
134
135 char            v_char_func () { return(0); }
136 signed char     v_signed_char_func () { return (0); }
137 unsigned char   v_unsigned_char_func () { return (0); }
138
139 short           v_short_func () { return (0); }
140 signed short    v_signed_short_func () { return (0); }
141 unsigned short  v_unsigned_short_func () { return (0); }
142
143 int             v_int_func () { return (0); }
144 signed int      v_signed_int_func () { return (0); }
145 unsigned int    v_unsigned_int_func () { return (0); }
146
147 long            v_long_func () { return (0); }
148 signed long     v_signed_long_func () { return (0); }
149 unsigned long   v_unsigned_long_func () { return (0); }
150
151 float           v_float_func () { return (0.0); }
152 double          v_double_func () { return (0.0); }
153
154 /**** Some misc more complicated things *******/
155
156 struct link {
157         struct link *next;
158 #ifdef __STDC__
159         struct link *(*linkfunc) (struct link *this, int flags);
160 #else
161         struct link *(*linkfunc) ();
162 #endif
163         struct t_struct stuff[1][2][3];
164 } *s_link;
165
166 union tu_link {
167         struct link *next;
168 #ifdef __STDC__
169         struct link *(*linkfunc) (struct link *this, int flags);
170 #else
171         struct link *(*linkfunc) ();
172 #endif
173         struct t_struct stuff[1][2][3];
174 } u_link;
175
176 /**** Enumerations *******/
177
178 enum colors {red, green, blue} color;
179 enum cars {chevy, ford, porsche} clunker;
180
181 struct t_struct *null_t_struct;
182
183 void dummy()
184 {
185   /* Some linkers (e.g. on AIX) remove unreferenced variables,
186      so make sure to reference them. */
187   v_char = 0;
188   v_signed_char = 1;
189   v_unsigned_char = 2;
190
191   v_short = 3;
192   v_signed_short = 4;
193   v_unsigned_short = 5;    
194
195   v_int = 6;
196   v_signed_int = 7;
197   v_unsigned_int = 8;    
198
199   v_long = 9;
200   v_signed_long = 10;
201   v_unsigned_long = 11;    
202   
203   v_float = 100.0;
204   v_double = 200.0;
205   v_char_array[0] = v_char;
206   v_signed_char_array[0] = v_signed_char;
207   v_unsigned_char_array[0] = v_unsigned_char;
208
209   v_short_array[0] = v_short;
210   v_signed_short_array[0] = v_signed_short;
211   v_unsigned_short_array[0] = v_unsigned_short;
212
213   v_int_array[0] = v_int;
214   v_signed_int_array[0] = v_signed_int;
215   v_unsigned_int_array[0] = v_unsigned_int;
216
217   v_long_array[0] = v_long;
218   v_signed_long_array[0] = v_signed_long;
219   v_unsigned_long_array[0] = v_unsigned_long;
220
221   v_float_array[0] = v_float;
222   v_double_array[0] = v_double;
223   v_char_pointer = &v_char;
224   v_signed_char_pointer = &v_signed_char;
225   v_unsigned_char_pointer = &v_unsigned_char;
226
227   v_short_pointer = &v_short;
228   v_signed_short_pointer = &v_signed_short;
229   v_unsigned_short_pointer = &v_unsigned_short;
230
231   v_int_pointer = &v_int;
232   v_signed_int_pointer = &v_signed_int;
233   v_unsigned_int_pointer = &v_unsigned_int;
234
235   v_long_pointer = &v_long;
236   v_signed_long_pointer = &v_signed_long;
237   v_unsigned_long_pointer = &v_unsigned_long;
238
239   v_float_pointer = &v_float;
240   v_double_pointer = &v_double;
241
242   color = red;
243   clunker = porsche;
244
245   u_link.next = s_link;
246
247   v_struct2.v_int_member = v_struct1.v_int_member;
248   v_union2.v_short_member = v_union.v_short_member;
249 }