1 /* Copyright (C) 2002 Free Software Foundation.
3 Test memset with various combinations of pointer alignments and constant
4 lengths to make sure any optimizations in the compiler are correct.
6 Written by Roger Sayle, April 22, 2002. */
14 #define MAX_OFFSET (sizeof (long long))
22 #define MAX_EXTRA (sizeof (long long))
25 #define MAX_LENGTH (MAX_OFFSET + MAX_COPY + MAX_EXTRA)
39 for (i
= 0; i
< MAX_LENGTH
; i
++)
43 void check (int off
, int len
, int ch
)
49 for (i
= 0; i
< off
; i
++, q
++)
53 for (i
= 0; i
< len
; i
++, q
++)
57 for (i
= 0; i
< MAX_EXTRA
; i
++, q
++)
68 for (off
= 0; off
< MAX_OFFSET
; off
++)
72 p
= memset (u
.buf
+ off
, '\0', 1);
73 if (p
!= u
.buf
+ off
) abort ();
76 p
= memset (u
.buf
+ off
, A
, 1);
77 if (p
!= u
.buf
+ off
) abort ();
80 p
= memset (u
.buf
+ off
, 'B', 1);
81 if (p
!= u
.buf
+ off
) abort ();
86 for (off
= 0; off
< MAX_OFFSET
; off
++)
90 p
= memset (u
.buf
+ off
, '\0', 2);
91 if (p
!= u
.buf
+ off
) abort ();
94 p
= memset (u
.buf
+ off
, A
, 2);
95 if (p
!= u
.buf
+ off
) abort ();
98 p
= memset (u
.buf
+ off
, 'B', 2);
99 if (p
!= u
.buf
+ off
) abort ();
104 for (off
= 0; off
< MAX_OFFSET
; off
++)
108 p
= memset (u
.buf
+ off
, '\0', 3);
109 if (p
!= u
.buf
+ off
) abort ();
110 check (off
, 3, '\0');
112 p
= memset (u
.buf
+ off
, A
, 3);
113 if (p
!= u
.buf
+ off
) abort ();
116 p
= memset (u
.buf
+ off
, 'B', 3);
117 if (p
!= u
.buf
+ off
) abort ();
122 for (off
= 0; off
< MAX_OFFSET
; off
++)
126 p
= memset (u
.buf
+ off
, '\0', 4);
127 if (p
!= u
.buf
+ off
) abort ();
128 check (off
, 4, '\0');
130 p
= memset (u
.buf
+ off
, A
, 4);
131 if (p
!= u
.buf
+ off
) abort ();
134 p
= memset (u
.buf
+ off
, 'B', 4);
135 if (p
!= u
.buf
+ off
) abort ();
140 for (off
= 0; off
< MAX_OFFSET
; off
++)
144 p
= memset (u
.buf
+ off
, '\0', 5);
145 if (p
!= u
.buf
+ off
) abort ();
146 check (off
, 5, '\0');
148 p
= memset (u
.buf
+ off
, A
, 5);
149 if (p
!= u
.buf
+ off
) abort ();
152 p
= memset (u
.buf
+ off
, 'B', 5);
153 if (p
!= u
.buf
+ off
) abort ();
158 for (off
= 0; off
< MAX_OFFSET
; off
++)
162 p
= memset (u
.buf
+ off
, '\0', 6);
163 if (p
!= u
.buf
+ off
) abort ();
164 check (off
, 6, '\0');
166 p
= memset (u
.buf
+ off
, A
, 6);
167 if (p
!= u
.buf
+ off
) abort ();
170 p
= memset (u
.buf
+ off
, 'B', 6);
171 if (p
!= u
.buf
+ off
) abort ();
176 for (off
= 0; off
< MAX_OFFSET
; off
++)
180 p
= memset (u
.buf
+ off
, '\0', 7);
181 if (p
!= u
.buf
+ off
) abort ();
182 check (off
, 7, '\0');
184 p
= memset (u
.buf
+ off
, A
, 7);
185 if (p
!= u
.buf
+ off
) abort ();
188 p
= memset (u
.buf
+ off
, 'B', 7);
189 if (p
!= u
.buf
+ off
) abort ();
194 for (off
= 0; off
< MAX_OFFSET
; off
++)
198 p
= memset (u
.buf
+ off
, '\0', 8);
199 if (p
!= u
.buf
+ off
) abort ();
200 check (off
, 8, '\0');
202 p
= memset (u
.buf
+ off
, A
, 8);
203 if (p
!= u
.buf
+ off
) abort ();
206 p
= memset (u
.buf
+ off
, 'B', 8);
207 if (p
!= u
.buf
+ off
) abort ();
212 for (off
= 0; off
< MAX_OFFSET
; off
++)
216 p
= memset (u
.buf
+ off
, '\0', 9);
217 if (p
!= u
.buf
+ off
) abort ();
218 check (off
, 9, '\0');
220 p
= memset (u
.buf
+ off
, A
, 9);
221 if (p
!= u
.buf
+ off
) abort ();
224 p
= memset (u
.buf
+ off
, 'B', 9);
225 if (p
!= u
.buf
+ off
) abort ();
230 for (off
= 0; off
< MAX_OFFSET
; off
++)
234 p
= memset (u
.buf
+ off
, '\0', 10);
235 if (p
!= u
.buf
+ off
) abort ();
236 check (off
, 10, '\0');
238 p
= memset (u
.buf
+ off
, A
, 10);
239 if (p
!= u
.buf
+ off
) abort ();
240 check (off
, 10, 'A');
242 p
= memset (u
.buf
+ off
, 'B', 10);
243 if (p
!= u
.buf
+ off
) abort ();
244 check (off
, 10, 'B');
248 for (off
= 0; off
< MAX_OFFSET
; off
++)
252 p
= memset (u
.buf
+ off
, '\0', 11);
253 if (p
!= u
.buf
+ off
) abort ();
254 check (off
, 11, '\0');
256 p
= memset (u
.buf
+ off
, A
, 11);
257 if (p
!= u
.buf
+ off
) abort ();
258 check (off
, 11, 'A');
260 p
= memset (u
.buf
+ off
, 'B', 11);
261 if (p
!= u
.buf
+ off
) abort ();
262 check (off
, 11, 'B');
266 for (off
= 0; off
< MAX_OFFSET
; off
++)
270 p
= memset (u
.buf
+ off
, '\0', 12);
271 if (p
!= u
.buf
+ off
) abort ();
272 check (off
, 12, '\0');
274 p
= memset (u
.buf
+ off
, A
, 12);
275 if (p
!= u
.buf
+ off
) abort ();
276 check (off
, 12, 'A');
278 p
= memset (u
.buf
+ off
, 'B', 12);
279 if (p
!= u
.buf
+ off
) abort ();
280 check (off
, 12, 'B');
284 for (off
= 0; off
< MAX_OFFSET
; off
++)
288 p
= memset (u
.buf
+ off
, '\0', 13);
289 if (p
!= u
.buf
+ off
) abort ();
290 check (off
, 13, '\0');
292 p
= memset (u
.buf
+ off
, A
, 13);
293 if (p
!= u
.buf
+ off
) abort ();
294 check (off
, 13, 'A');
296 p
= memset (u
.buf
+ off
, 'B', 13);
297 if (p
!= u
.buf
+ off
) abort ();
298 check (off
, 13, 'B');
302 for (off
= 0; off
< MAX_OFFSET
; off
++)
306 p
= memset (u
.buf
+ off
, '\0', 14);
307 if (p
!= u
.buf
+ off
) abort ();
308 check (off
, 14, '\0');
310 p
= memset (u
.buf
+ off
, A
, 14);
311 if (p
!= u
.buf
+ off
) abort ();
312 check (off
, 14, 'A');
314 p
= memset (u
.buf
+ off
, 'B', 14);
315 if (p
!= u
.buf
+ off
) abort ();
316 check (off
, 14, 'B');
320 for (off
= 0; off
< MAX_OFFSET
; off
++)
324 p
= memset (u
.buf
+ off
, '\0', 15);
325 if (p
!= u
.buf
+ off
) abort ();
326 check (off
, 15, '\0');
328 p
= memset (u
.buf
+ off
, A
, 15);
329 if (p
!= u
.buf
+ off
) abort ();
330 check (off
, 15, 'A');
332 p
= memset (u
.buf
+ off
, 'B', 15);
333 if (p
!= u
.buf
+ off
) abort ();
334 check (off
, 15, 'B');