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. */
9 #define MAX_OFFSET (sizeof (long long))
17 #define MAX_EXTRA (sizeof (long long))
20 #define MAX_LENGTH (MAX_OFFSET + MAX_COPY + MAX_EXTRA)
34 for (i
= 0; i
< MAX_LENGTH
; i
++)
38 void check (int off
, int len
, int ch
)
44 for (i
= 0; i
< off
; i
++, q
++)
48 for (i
= 0; i
< len
; i
++, q
++)
52 for (i
= 0; i
< MAX_EXTRA
; i
++, q
++)
63 for (off
= 0; off
< MAX_OFFSET
; off
++)
67 p
= memset (u
.buf
+ off
, '\0', 1);
68 if (p
!= u
.buf
+ off
) abort ();
71 p
= memset (u
.buf
+ off
, A
, 1);
72 if (p
!= u
.buf
+ off
) abort ();
75 p
= memset (u
.buf
+ off
, 'B', 1);
76 if (p
!= u
.buf
+ off
) abort ();
81 for (off
= 0; off
< MAX_OFFSET
; off
++)
85 p
= memset (u
.buf
+ off
, '\0', 2);
86 if (p
!= u
.buf
+ off
) abort ();
89 p
= memset (u
.buf
+ off
, A
, 2);
90 if (p
!= u
.buf
+ off
) abort ();
93 p
= memset (u
.buf
+ off
, 'B', 2);
94 if (p
!= u
.buf
+ off
) abort ();
99 for (off
= 0; off
< MAX_OFFSET
; off
++)
103 p
= memset (u
.buf
+ off
, '\0', 3);
104 if (p
!= u
.buf
+ off
) abort ();
105 check (off
, 3, '\0');
107 p
= memset (u
.buf
+ off
, A
, 3);
108 if (p
!= u
.buf
+ off
) abort ();
111 p
= memset (u
.buf
+ off
, 'B', 3);
112 if (p
!= u
.buf
+ off
) abort ();
117 for (off
= 0; off
< MAX_OFFSET
; off
++)
121 p
= memset (u
.buf
+ off
, '\0', 4);
122 if (p
!= u
.buf
+ off
) abort ();
123 check (off
, 4, '\0');
125 p
= memset (u
.buf
+ off
, A
, 4);
126 if (p
!= u
.buf
+ off
) abort ();
129 p
= memset (u
.buf
+ off
, 'B', 4);
130 if (p
!= u
.buf
+ off
) abort ();
135 for (off
= 0; off
< MAX_OFFSET
; off
++)
139 p
= memset (u
.buf
+ off
, '\0', 5);
140 if (p
!= u
.buf
+ off
) abort ();
141 check (off
, 5, '\0');
143 p
= memset (u
.buf
+ off
, A
, 5);
144 if (p
!= u
.buf
+ off
) abort ();
147 p
= memset (u
.buf
+ off
, 'B', 5);
148 if (p
!= u
.buf
+ off
) abort ();
153 for (off
= 0; off
< MAX_OFFSET
; off
++)
157 p
= memset (u
.buf
+ off
, '\0', 6);
158 if (p
!= u
.buf
+ off
) abort ();
159 check (off
, 6, '\0');
161 p
= memset (u
.buf
+ off
, A
, 6);
162 if (p
!= u
.buf
+ off
) abort ();
165 p
= memset (u
.buf
+ off
, 'B', 6);
166 if (p
!= u
.buf
+ off
) abort ();
171 for (off
= 0; off
< MAX_OFFSET
; off
++)
175 p
= memset (u
.buf
+ off
, '\0', 7);
176 if (p
!= u
.buf
+ off
) abort ();
177 check (off
, 7, '\0');
179 p
= memset (u
.buf
+ off
, A
, 7);
180 if (p
!= u
.buf
+ off
) abort ();
183 p
= memset (u
.buf
+ off
, 'B', 7);
184 if (p
!= u
.buf
+ off
) abort ();
189 for (off
= 0; off
< MAX_OFFSET
; off
++)
193 p
= memset (u
.buf
+ off
, '\0', 8);
194 if (p
!= u
.buf
+ off
) abort ();
195 check (off
, 8, '\0');
197 p
= memset (u
.buf
+ off
, A
, 8);
198 if (p
!= u
.buf
+ off
) abort ();
201 p
= memset (u
.buf
+ off
, 'B', 8);
202 if (p
!= u
.buf
+ off
) abort ();
207 for (off
= 0; off
< MAX_OFFSET
; off
++)
211 p
= memset (u
.buf
+ off
, '\0', 9);
212 if (p
!= u
.buf
+ off
) abort ();
213 check (off
, 9, '\0');
215 p
= memset (u
.buf
+ off
, A
, 9);
216 if (p
!= u
.buf
+ off
) abort ();
219 p
= memset (u
.buf
+ off
, 'B', 9);
220 if (p
!= u
.buf
+ off
) abort ();
225 for (off
= 0; off
< MAX_OFFSET
; off
++)
229 p
= memset (u
.buf
+ off
, '\0', 10);
230 if (p
!= u
.buf
+ off
) abort ();
231 check (off
, 10, '\0');
233 p
= memset (u
.buf
+ off
, A
, 10);
234 if (p
!= u
.buf
+ off
) abort ();
235 check (off
, 10, 'A');
237 p
= memset (u
.buf
+ off
, 'B', 10);
238 if (p
!= u
.buf
+ off
) abort ();
239 check (off
, 10, 'B');
243 for (off
= 0; off
< MAX_OFFSET
; off
++)
247 p
= memset (u
.buf
+ off
, '\0', 11);
248 if (p
!= u
.buf
+ off
) abort ();
249 check (off
, 11, '\0');
251 p
= memset (u
.buf
+ off
, A
, 11);
252 if (p
!= u
.buf
+ off
) abort ();
253 check (off
, 11, 'A');
255 p
= memset (u
.buf
+ off
, 'B', 11);
256 if (p
!= u
.buf
+ off
) abort ();
257 check (off
, 11, 'B');
261 for (off
= 0; off
< MAX_OFFSET
; off
++)
265 p
= memset (u
.buf
+ off
, '\0', 12);
266 if (p
!= u
.buf
+ off
) abort ();
267 check (off
, 12, '\0');
269 p
= memset (u
.buf
+ off
, A
, 12);
270 if (p
!= u
.buf
+ off
) abort ();
271 check (off
, 12, 'A');
273 p
= memset (u
.buf
+ off
, 'B', 12);
274 if (p
!= u
.buf
+ off
) abort ();
275 check (off
, 12, 'B');
279 for (off
= 0; off
< MAX_OFFSET
; off
++)
283 p
= memset (u
.buf
+ off
, '\0', 13);
284 if (p
!= u
.buf
+ off
) abort ();
285 check (off
, 13, '\0');
287 p
= memset (u
.buf
+ off
, A
, 13);
288 if (p
!= u
.buf
+ off
) abort ();
289 check (off
, 13, 'A');
291 p
= memset (u
.buf
+ off
, 'B', 13);
292 if (p
!= u
.buf
+ off
) abort ();
293 check (off
, 13, 'B');
297 for (off
= 0; off
< MAX_OFFSET
; off
++)
301 p
= memset (u
.buf
+ off
, '\0', 14);
302 if (p
!= u
.buf
+ off
) abort ();
303 check (off
, 14, '\0');
305 p
= memset (u
.buf
+ off
, A
, 14);
306 if (p
!= u
.buf
+ off
) abort ();
307 check (off
, 14, 'A');
309 p
= memset (u
.buf
+ off
, 'B', 14);
310 if (p
!= u
.buf
+ off
) abort ();
311 check (off
, 14, 'B');
315 for (off
= 0; off
< MAX_OFFSET
; off
++)
319 p
= memset (u
.buf
+ off
, '\0', 15);
320 if (p
!= u
.buf
+ off
) abort ();
321 check (off
, 15, '\0');
323 p
= memset (u
.buf
+ off
, A
, 15);
324 if (p
!= u
.buf
+ off
) abort ();
325 check (off
, 15, 'A');
327 p
= memset (u
.buf
+ off
, 'B', 15);
328 if (p
!= u
.buf
+ off
) abort ();
329 check (off
, 15, 'B');