1*11efff7fSkettenis /* Copyright 1999, 2004 Free Software Foundation, Inc.
2*11efff7fSkettenis
3*11efff7fSkettenis This file is part of GDB.
4*11efff7fSkettenis
5*11efff7fSkettenis This program is free software; you can redistribute it and/or modify
6*11efff7fSkettenis it under the terms of the GNU General Public License as published by
7*11efff7fSkettenis the Free Software Foundation; either version 2 of the License, or (at
8*11efff7fSkettenis your option) any later version.
9*11efff7fSkettenis
10*11efff7fSkettenis This program is distributed in the hope that it will be useful, but
11*11efff7fSkettenis WITHOUT ANY WARRANTY; without even the implied warranty of
12*11efff7fSkettenis MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13*11efff7fSkettenis General Public License for more details.
14*11efff7fSkettenis
15*11efff7fSkettenis You should have received a copy of the GNU General Public License
16*11efff7fSkettenis along with this program; if not, write to the Free Software
17*11efff7fSkettenis Foundation, Inc., 59 Temple Place - Suite 330,
18*11efff7fSkettenis Boston, MA 02111-1307, USA. */
19*11efff7fSkettenis
20*11efff7fSkettenis #include <stdlib.h>
21*11efff7fSkettenis
22b725ae77Skettenis struct _simple_struct {
23b725ae77Skettenis int integer;
24b725ae77Skettenis unsigned int unsigned_integer;
25b725ae77Skettenis char character;
26b725ae77Skettenis signed char signed_character;
27b725ae77Skettenis char *char_ptr;
28b725ae77Skettenis int array_of_10[10];
29b725ae77Skettenis };
30b725ae77Skettenis
31b725ae77Skettenis typedef struct _simple_struct simpleton;
32b725ae77Skettenis
33b725ae77Skettenis simpleton global_simple;
34b725ae77Skettenis
35b725ae77Skettenis enum foo {
36b725ae77Skettenis bar = 1,
37b725ae77Skettenis baz
38b725ae77Skettenis };
39b725ae77Skettenis
40b725ae77Skettenis typedef enum foo efoo;
41b725ae77Skettenis
42b725ae77Skettenis union named_union
43b725ae77Skettenis {
44b725ae77Skettenis int integer;
45b725ae77Skettenis char *char_ptr;
46b725ae77Skettenis };
47b725ae77Skettenis
48b725ae77Skettenis typedef struct _struct_decl {
49b725ae77Skettenis int integer;
50b725ae77Skettenis char character;
51b725ae77Skettenis char *char_ptr;
52b725ae77Skettenis long long_int;
53b725ae77Skettenis int **int_ptr_ptr;
54b725ae77Skettenis long long_array[10];
55b725ae77Skettenis
56b725ae77Skettenis void (*func_ptr) (void);
57b725ae77Skettenis struct _struct_decl (*func_ptr_struct) (int, char *, long);
58b725ae77Skettenis struct _struct_decl *(*func_ptr_ptr) (int, char *, long);
59b725ae77Skettenis union {
60b725ae77Skettenis int a;
61b725ae77Skettenis char *b;
62b725ae77Skettenis long c;
63b725ae77Skettenis enum foo d;
64b725ae77Skettenis } u1;
65b725ae77Skettenis
66b725ae77Skettenis struct {
67b725ae77Skettenis union {
68b725ae77Skettenis struct {
69b725ae77Skettenis int d;
70b725ae77Skettenis char e[10];
71b725ae77Skettenis int *(*func) (void);
72b725ae77Skettenis efoo foo;
73b725ae77Skettenis } u1s1;
74b725ae77Skettenis
75b725ae77Skettenis long f;
76b725ae77Skettenis struct {
77b725ae77Skettenis char array_ptr[2];
78b725ae77Skettenis int (*func) (int, char *);
79b725ae77Skettenis } u1s2;
80b725ae77Skettenis } u2;
81b725ae77Skettenis
82b725ae77Skettenis int g;
83b725ae77Skettenis char h;
84b725ae77Skettenis long i[10];
85b725ae77Skettenis } s2;
86b725ae77Skettenis } weird_struct;
87b725ae77Skettenis
88b725ae77Skettenis struct _struct_n_pointer {
89b725ae77Skettenis char ****char_ptr;
90b725ae77Skettenis long ****long_ptr;
91b725ae77Skettenis struct _struct_n_pointer *ptrs[3];
92b725ae77Skettenis struct _struct_n_pointer *next;
93b725ae77Skettenis };
94b725ae77Skettenis
95b725ae77Skettenis void do_locals_tests (void);
96b725ae77Skettenis void do_block_tests (void);
97b725ae77Skettenis void subroutine1 (int, long *);
98b725ae77Skettenis void nothing (void);
99b725ae77Skettenis void do_children_tests (void);
100b725ae77Skettenis void do_special_tests (void);
101b725ae77Skettenis void incr_a (char);
102b725ae77Skettenis
incr_a(char a)103b725ae77Skettenis void incr_a (char a)
104b725ae77Skettenis {
105b725ae77Skettenis int b;
106b725ae77Skettenis b = a;
107b725ae77Skettenis }
108b725ae77Skettenis
109b725ae77Skettenis void
do_locals_tests()110b725ae77Skettenis do_locals_tests ()
111b725ae77Skettenis {
112b725ae77Skettenis int linteger;
113b725ae77Skettenis int *lpinteger;
114b725ae77Skettenis char lcharacter;
115b725ae77Skettenis char *lpcharacter;
116b725ae77Skettenis long llong;
117b725ae77Skettenis long *lplong;
118b725ae77Skettenis float lfloat;
119b725ae77Skettenis float *lpfloat;
120b725ae77Skettenis double ldouble;
121b725ae77Skettenis double *lpdouble;
122b725ae77Skettenis struct _simple_struct lsimple;
123b725ae77Skettenis struct _simple_struct *lpsimple;
124b725ae77Skettenis void (*func) (void);
125b725ae77Skettenis
126b725ae77Skettenis /* Simple assignments */
127b725ae77Skettenis linteger = 1234;
128b725ae77Skettenis lpinteger = &linteger;
129b725ae77Skettenis lcharacter = 'a';
130b725ae77Skettenis lpcharacter = &lcharacter;
131b725ae77Skettenis llong = 2121L;
132b725ae77Skettenis lplong = &llong;
133b725ae77Skettenis lfloat = 2.1;
134b725ae77Skettenis lpfloat = &lfloat;
135b725ae77Skettenis ldouble = 2.718281828459045;
136b725ae77Skettenis lpdouble = &ldouble;
137b725ae77Skettenis lsimple.integer = 1234;
138b725ae77Skettenis lsimple.unsigned_integer = 255;
139b725ae77Skettenis lsimple.character = 'a';
140b725ae77Skettenis lsimple.signed_character = 21;
141b725ae77Skettenis lsimple.char_ptr = &lcharacter;
142b725ae77Skettenis lpsimple = &lsimple;
143b725ae77Skettenis func = nothing;
144b725ae77Skettenis
145b725ae77Skettenis /* Check pointers */
146b725ae77Skettenis linteger = 4321;
147b725ae77Skettenis lcharacter = 'b';
148b725ae77Skettenis llong = 1212L;
149b725ae77Skettenis lfloat = 1.2;
150b725ae77Skettenis ldouble = 5.498548281828172;
151b725ae77Skettenis lsimple.integer = 255;
152b725ae77Skettenis lsimple.unsigned_integer = 4321;
153b725ae77Skettenis lsimple.character = 'b';
154b725ae77Skettenis lsimple.signed_character = 0;
155b725ae77Skettenis
156b725ae77Skettenis subroutine1 (linteger, &llong);
157b725ae77Skettenis }
158b725ae77Skettenis
159b725ae77Skettenis void
nothing()160b725ae77Skettenis nothing ()
161b725ae77Skettenis {
162b725ae77Skettenis }
163b725ae77Skettenis
164b725ae77Skettenis void
subroutine1(int i,long * l)165b725ae77Skettenis subroutine1 (int i, long *l)
166b725ae77Skettenis {
167b725ae77Skettenis global_simple.integer = i + 3;
168b725ae77Skettenis i = 212;
169b725ae77Skettenis *l = 12;
170b725ae77Skettenis }
171b725ae77Skettenis
172b725ae77Skettenis void
do_block_tests()173b725ae77Skettenis do_block_tests ()
174b725ae77Skettenis {
175b725ae77Skettenis int cb = 12;
176b725ae77Skettenis
177b725ae77Skettenis {
178b725ae77Skettenis int foo;
179b725ae77Skettenis foo = 123;
180b725ae77Skettenis {
181b725ae77Skettenis int foo2;
182b725ae77Skettenis foo2 = 123;
183b725ae77Skettenis {
184b725ae77Skettenis int foo;
185b725ae77Skettenis foo = 321;
186b725ae77Skettenis }
187b725ae77Skettenis foo2 = 0;
188b725ae77Skettenis }
189b725ae77Skettenis foo = 0;
190b725ae77Skettenis }
191b725ae77Skettenis
192b725ae77Skettenis cb = 21;
193b725ae77Skettenis }
194b725ae77Skettenis
195b725ae77Skettenis void
do_children_tests(void)196b725ae77Skettenis do_children_tests (void)
197b725ae77Skettenis {
198b725ae77Skettenis weird_struct *weird;
199b725ae77Skettenis struct _struct_n_pointer *psnp;
200b725ae77Skettenis struct _struct_n_pointer snp0, snp1, snp2;
201b725ae77Skettenis char a0, *a1, **a2, ***a3;
202b725ae77Skettenis char b0, *b1, **b2, ***b3;
203b725ae77Skettenis char c0, *c1, **c2, ***c3;
204b725ae77Skettenis long z0, *z1, **z2, ***z3;
205b725ae77Skettenis long y0, *y1, **y2, ***y3;
206b725ae77Skettenis long x0, *x1, **x2, ***x3;
207b725ae77Skettenis int *foo;
208b725ae77Skettenis int bar;
209b725ae77Skettenis
210b725ae77Skettenis struct _struct_decl struct_declarations;
211b725ae77Skettenis weird = &struct_declarations;
212b725ae77Skettenis
213b725ae77Skettenis struct_declarations.integer = 123;
214b725ae77Skettenis weird->char_ptr = "hello";
215b725ae77Skettenis bar = 2121;
216b725ae77Skettenis foo = &bar;
217b725ae77Skettenis struct_declarations.int_ptr_ptr = &foo;
218b725ae77Skettenis weird->long_array[0] = 1234;
219b725ae77Skettenis struct_declarations.long_array[1] = 2345;
220b725ae77Skettenis weird->long_array[2] = 3456;
221b725ae77Skettenis struct_declarations.long_array[3] = 4567;
222b725ae77Skettenis weird->long_array[4] = 5678;
223b725ae77Skettenis struct_declarations.long_array[5] = 6789;
224b725ae77Skettenis weird->long_array[6] = 7890;
225b725ae77Skettenis struct_declarations.long_array[7] = 8901;
226b725ae77Skettenis weird->long_array[8] = 9012;
227b725ae77Skettenis struct_declarations.long_array[9] = 1234;
228b725ae77Skettenis
229b725ae77Skettenis weird->func_ptr = nothing;
230b725ae77Skettenis
231b725ae77Skettenis /* Struct/pointer/array tests */
232b725ae77Skettenis a0 = '0';
233b725ae77Skettenis a1 = &a0;
234b725ae77Skettenis a2 = &a1;
235b725ae77Skettenis a3 = &a2;
236b725ae77Skettenis b0 = '1';
237b725ae77Skettenis b1 = &b0;
238b725ae77Skettenis b2 = &b1;
239b725ae77Skettenis b3 = &b2;
240b725ae77Skettenis c0 = '2';
241b725ae77Skettenis c1 = &c0;
242b725ae77Skettenis c2 = &c1;
243b725ae77Skettenis c3 = &c2;
244b725ae77Skettenis z0 = 0xdead + 0;
245b725ae77Skettenis z1 = &z0;
246b725ae77Skettenis z2 = &z1;
247b725ae77Skettenis z3 = &z2;
248b725ae77Skettenis y0 = 0xdead + 1;
249b725ae77Skettenis y1 = &y0;
250b725ae77Skettenis y2 = &y1;
251b725ae77Skettenis y3 = &y2;
252b725ae77Skettenis x0 = 0xdead + 2;
253b725ae77Skettenis x1 = &x0;
254b725ae77Skettenis x2 = &x1;
255b725ae77Skettenis x3 = &x2;
256b725ae77Skettenis snp0.char_ptr = &a3;
257b725ae77Skettenis snp0.long_ptr = &z3;
258b725ae77Skettenis snp0.ptrs[0] = &snp0;
259b725ae77Skettenis snp0.ptrs[1] = &snp1;
260b725ae77Skettenis snp0.ptrs[2] = &snp2;
261b725ae77Skettenis snp0.next = &snp1;
262b725ae77Skettenis snp1.char_ptr = &b3;
263b725ae77Skettenis snp1.long_ptr = &y3;
264b725ae77Skettenis snp1.ptrs[0] = &snp0;
265b725ae77Skettenis snp1.ptrs[1] = &snp1;
266b725ae77Skettenis snp1.ptrs[2] = &snp2;
267b725ae77Skettenis snp1.next = &snp2;
268b725ae77Skettenis snp2.char_ptr = &c3;
269b725ae77Skettenis snp2.long_ptr = &x3;
270b725ae77Skettenis snp2.ptrs[0] = &snp0;
271b725ae77Skettenis snp2.ptrs[1] = &snp1;
272b725ae77Skettenis snp2.ptrs[2] = &snp2;
273b725ae77Skettenis snp2.next = 0x0;
274b725ae77Skettenis psnp = &snp0;
275b725ae77Skettenis snp0.char_ptr = &b3;
276b725ae77Skettenis snp1.char_ptr = &c3;
277b725ae77Skettenis snp2.char_ptr = &a3;
278b725ae77Skettenis snp0.long_ptr = &y3;
279b725ae77Skettenis snp1.long_ptr = &x3;
280b725ae77Skettenis snp2.long_ptr = &z3;
281b725ae77Skettenis }
282b725ae77Skettenis
283b725ae77Skettenis void
do_special_tests(void)284b725ae77Skettenis do_special_tests (void)
285b725ae77Skettenis {
286b725ae77Skettenis union named_union u;
287b725ae77Skettenis union {
288b725ae77Skettenis int a;
289b725ae77Skettenis char b;
290b725ae77Skettenis long c;
291b725ae77Skettenis } anonu;
292b725ae77Skettenis struct _simple_struct s;
293b725ae77Skettenis struct {
294b725ae77Skettenis int a;
295b725ae77Skettenis char b;
296b725ae77Skettenis long c;
297b725ae77Skettenis } anons;
298b725ae77Skettenis enum foo e;
299b725ae77Skettenis enum { A, B, C } anone;
300b725ae77Skettenis int array[21];
301b725ae77Skettenis int a;
302b725ae77Skettenis
303b725ae77Skettenis a = 1;
304b725ae77Skettenis incr_a(2);
305b725ae77Skettenis }
306b725ae77Skettenis
307b725ae77Skettenis int
main(int argc,char * argv[])308b725ae77Skettenis main (int argc, char *argv [])
309b725ae77Skettenis {
310b725ae77Skettenis do_locals_tests ();
311b725ae77Skettenis do_block_tests ();
312b725ae77Skettenis do_children_tests ();
313b725ae77Skettenis do_special_tests ();
314b725ae77Skettenis exit (0);
315b725ae77Skettenis }
316b725ae77Skettenis
317b725ae77Skettenis
318