1 /* Copyright (C) 2002 Free Software Foundation.
3 Test memset with various combinations of constant pointer alignments and
4 lengths to make sure any optimizations in the compiler are correct.
6 Written by Roger Sayle, July 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 (len
= 0; len
< MAX_COPY
; len
++)
67 p
= memset (u
.buf
, '\0', len
);
68 if (p
!= u
.buf
) abort ();
71 p
= memset (u
.buf
, A
, len
);
72 if (p
!= u
.buf
) abort ();
75 p
= memset (u
.buf
, 'B', len
);
76 if (p
!= u
.buf
) abort ();
81 for (len
= 0; len
< MAX_COPY
; len
++)
85 p
= memset (u
.buf
+1, '\0', len
);
86 if (p
!= u
.buf
+1) abort ();
89 p
= memset (u
.buf
+1, A
, len
);
90 if (p
!= u
.buf
+1) abort ();
93 p
= memset (u
.buf
+1, 'B', len
);
94 if (p
!= u
.buf
+1) abort ();
99 for (len
= 0; len
< MAX_COPY
; len
++)
103 p
= memset (u
.buf
+2, '\0', len
);
104 if (p
!= u
.buf
+2) abort ();
105 check (2, len
, '\0');
107 p
= memset (u
.buf
+2, A
, len
);
108 if (p
!= u
.buf
+2) abort ();
111 p
= memset (u
.buf
+2, 'B', len
);
112 if (p
!= u
.buf
+2) abort ();
117 for (len
= 0; len
< MAX_COPY
; len
++)
121 p
= memset (u
.buf
+3, '\0', len
);
122 if (p
!= u
.buf
+3) abort ();
123 check (3, len
, '\0');
125 p
= memset (u
.buf
+3, A
, len
);
126 if (p
!= u
.buf
+3) abort ();
129 p
= memset (u
.buf
+3, 'B', len
);
130 if (p
!= u
.buf
+3) abort ();
135 for (len
= 0; len
< MAX_COPY
; len
++)
139 p
= memset (u
.buf
+4, '\0', len
);
140 if (p
!= u
.buf
+4) abort ();
141 check (4, len
, '\0');
143 p
= memset (u
.buf
+4, A
, len
);
144 if (p
!= u
.buf
+4) abort ();
147 p
= memset (u
.buf
+4, 'B', len
);
148 if (p
!= u
.buf
+4) abort ();
153 for (len
= 0; len
< MAX_COPY
; len
++)
157 p
= memset (u
.buf
+5, '\0', len
);
158 if (p
!= u
.buf
+5) abort ();
159 check (5, len
, '\0');
161 p
= memset (u
.buf
+5, A
, len
);
162 if (p
!= u
.buf
+5) abort ();
165 p
= memset (u
.buf
+5, 'B', len
);
166 if (p
!= u
.buf
+5) abort ();
171 for (len
= 0; len
< MAX_COPY
; len
++)
175 p
= memset (u
.buf
+6, '\0', len
);
176 if (p
!= u
.buf
+6) abort ();
177 check (6, len
, '\0');
179 p
= memset (u
.buf
+6, A
, len
);
180 if (p
!= u
.buf
+6) abort ();
183 p
= memset (u
.buf
+6, 'B', len
);
184 if (p
!= u
.buf
+6) abort ();
189 for (len
= 0; len
< MAX_COPY
; len
++)
193 p
= memset (u
.buf
+7, '\0', len
);
194 if (p
!= u
.buf
+7) abort ();
195 check (7, len
, '\0');
197 p
= memset (u
.buf
+7, A
, len
);
198 if (p
!= u
.buf
+7) abort ();
201 p
= memset (u
.buf
+7, 'B', len
);
202 if (p
!= u
.buf
+7) abort ();