46acc6a1c81f4848962aad9d27d3d687ec9e7428
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.base / store.c
1 /* Check that GDB can correctly update a value, living in a register,
2 in the target. This pretty much relies on the compiler taking heed
3 of requests for values to be stored in registers. */
4
5 /* NOTE: carlton/2002-12-05: These functions were all static, but for
6 whatever reason that caused GCC 3.1 to optimize away some of the
7 function calls within main even when no optimization flags were
8 passed. */
9
10 char
11 add_char (register char u, register char v)
12 {
13 return u + v;
14 }
15
16 short
17 add_short (register short u, register short v)
18 {
19 return u + v;
20 }
21
22 int
23 add_int (register int u, register int v)
24 {
25 return u + v;
26 }
27
28 long
29 add_long (register long u, register long v)
30 {
31 return u + v;
32 }
33
34 typedef long long longest;
35
36 longest
37 add_longest (register longest u, register longest v)
38 {
39 return u + v;
40 }
41
42 float
43 add_float (register float u, register float v)
44 {
45 return u + v;
46 }
47
48 double
49 add_double (register double u, register double v)
50 {
51 return u + v;
52 }
53
54 typedef long double doublest;
55
56 doublest
57 add_doublest (register doublest u, register doublest v)
58 {
59 return u + v;
60 }
61
62 /* */
63
64 char
65 wack_char (register char u, register char v)
66 {
67 register char l = u, r = v;
68 l = add_char (l, r);
69 return l;
70 }
71
72 short
73 wack_short (register short u, register short v)
74 {
75 register short l = u, r = v;
76 l = add_short (l, r);
77 return l;
78 }
79
80 int
81 wack_int (register int u, register int v)
82 {
83 register int l = u, r = v;
84 l = add_int (l, r);
85 return l;
86 }
87
88 long
89 wack_long (register long u, register long v)
90 {
91 register long l = u, r = v;
92 l = add_long (l, r);
93 return l;
94 }
95
96 long
97 wack_longest (register longest u, register longest v)
98 {
99 register longest l = u, r = v;
100 l = add_longest (l, r);
101 return l;
102 }
103
104 float
105 wack_float (register float u, register float v)
106 {
107 register float l = u, r = v;
108 l = add_float (l, r);
109 return l;
110 }
111
112 double
113 wack_double (register double u, register double v)
114 {
115 register double l = u, r = v;
116 l = add_double (l, r);
117 return l;
118 }
119
120 doublest
121 wack_doublest (register doublest u, register doublest v)
122 {
123 register doublest l = u, r = v;
124 l = add_doublest (l, r);
125 return l;
126 }
127
128 /* */
129
130 struct s_1 { short s[1]; } z_1, s_1;
131 struct s_2 { short s[2]; } z_2, s_2;
132 struct s_3 { short s[3]; } z_3, s_3;
133 struct s_4 { short s[4]; } z_4, s_4;
134
135 struct s_1
136 add_struct_1 (struct s_1 s)
137 {
138 int i;
139 for (i = 0; i < sizeof (s) / sizeof (s.s[0]); i++)
140 {
141 s.s[i] = s.s[i] + s.s[i];
142 }
143 return s;
144 }
145
146 struct s_2
147 add_struct_2 (struct s_2 s)
148 {
149 int i;
150 for (i = 0; i < sizeof (s) / sizeof (s.s[0]); i++)
151 {
152 s.s[i] = s.s[i] + s.s[i];
153 }
154 return s;
155 }
156
157 struct s_3
158 add_struct_3 (struct s_3 s)
159 {
160 int i;
161 for (i = 0; i < sizeof (s) / sizeof (s.s[0]); i++)
162 {
163 s.s[i] = s.s[i] + s.s[i];
164 }
165 return s;
166 }
167
168 struct s_4
169 add_struct_4 (struct s_4 s)
170 {
171 int i;
172 for (i = 0; i < sizeof (s) / sizeof (s.s[0]); i++)
173 {
174 s.s[i] = s.s[i] + s.s[i];
175 }
176 return s;
177 }
178
179 struct s_1
180 wack_struct_1 (void)
181 {
182 int i; register struct s_1 u = z_1;
183 for (i = 0; i < sizeof (s_1) / sizeof (s_1.s[0]); i++) { s_1.s[i] = i + 1; }
184 u = add_struct_1 (u);
185 return u;
186 }
187
188 struct s_2
189 wack_struct_2 (void)
190 {
191 int i; register struct s_2 u = z_2;
192 for (i = 0; i < sizeof (s_2) / sizeof (s_2.s[0]); i++) { s_2.s[i] = i + 1; }
193 u = add_struct_2 (u);
194 return u;
195 }
196
197 struct s_3
198 wack_struct_3 (void)
199 {
200 int i; register struct s_3 u = z_3;
201 for (i = 0; i < sizeof (s_3) / sizeof (s_3.s[0]); i++) { s_3.s[i] = i + 1; }
202 u = add_struct_3 (u);
203 return u;
204 }
205
206 struct s_4
207 wack_struct_4 (void)
208 {
209 int i; register struct s_4 u = z_4;
210 for (i = 0; i < sizeof (s_4) / sizeof (s_4.s[0]); i++) { s_4.s[i] = i + 1; }
211 u = add_struct_4 (u);
212 return u;
213 }
214
215 /* */
216
217 struct f_1 {unsigned i:1;unsigned j:1;unsigned k:1; } f_1 = {1,1,1}, F_1;
218 struct f_2 {unsigned i:2;unsigned j:2;unsigned k:2; } f_2 = {1,1,1}, F_2;
219 struct f_3 {unsigned i:3;unsigned j:3;unsigned k:3; } f_3 = {1,1,1}, F_3;
220 struct f_4 {unsigned i:4;unsigned j:4;unsigned k:4; } f_4 = {1,1,1}, F_4;
221
222 struct f_1
223 wack_field_1 (void)
224 {
225 register struct f_1 u = f_1;
226 return u;
227 }
228
229 struct f_2
230 wack_field_2 (void)
231 {
232 register struct f_2 u = f_2;
233 return u;
234 }
235
236 struct f_3
237 wack_field_3 (void)
238 {
239 register struct f_3 u = f_3;
240 return u;
241 }
242
243 struct f_4
244 wack_field_4 (void)
245 {
246 register struct f_4 u = f_4;
247 return u;
248 }
249
250 /* */
251
252 int
253 main ()
254 {
255 /* These calls are for current frame test. */
256 wack_char (-1, -2);
257 wack_short (-1, -2);
258 wack_int (-1, -2);
259 wack_long (-1, -2);
260 wack_longest (-1, -2);
261 wack_float (-1, -2);
262 wack_double (-1, -2);
263 wack_doublest (-1, -2);
264
265 /* These calls are for up frame. */
266 wack_char (-1, -2);
267 wack_short (-1, -2);
268 wack_int (-1, -2);
269 wack_long (-1, -2);
270 wack_longest (-1, -2);
271 wack_float (-1, -2);
272 wack_double (-1, -2);
273 wack_doublest (-1, -2);
274
275 /* These calls are for current frame test. */
276 wack_struct_1 ();
277 wack_struct_2 ();
278 wack_struct_3 ();
279 wack_struct_4 ();
280
281 /* These calls are for up frame. */
282 wack_struct_1 ();
283 wack_struct_2 ();
284 wack_struct_3 ();
285 wack_struct_4 ();
286
287 wack_field_1 ();
288 wack_field_2 ();
289 wack_field_3 ();
290 wack_field_4 ();
291
292 return 0;
293 }
This page took 0.035374 seconds and 4 git commands to generate.