1 /* Test strcmp builtin expansion for compilation and proper execution. */
2 /* { dg-do run } */
3 /* { dg-options "-O2" } */
4 /* { dg-require-effective-target ptr32plus } */
5
6 #include <stdio.h>
7 #include <stdlib.h>
8 #include <string.h>
9
10 #define RUN_TEST(SZ, ALIGN) test_strcmp_ ## SZ ## _ ## ALIGN ()
11
12 #define DEF_TEST(SZ, ALIGN) \
13 static void test_strcmp_ ## SZ ## _ ## ALIGN (void) { \
14 char one[3 * (SZ > 10 ? SZ : 10)]; \
15 char two[3 * (SZ > 10 ? SZ : 10)]; \
16 char three[8192] __attribute__ ((aligned (4096))); \
17 char four[8192] __attribute__ ((aligned (4096))); \
18 int i,j; \
19 memset(one,0,sizeof(one)); \
20 memset(two,0,sizeof(two)); \
21 memset(three,0,sizeof(three)); \
22 memset(four,0,sizeof(four)); \
23 for (i = 0 ; i < SZ ; i++) \
24 { \
25 int r1; \
26 char *a = one + (i & 1) * ALIGN; \
27 char *b = two + (i & 1) * ALIGN; \
28 memset(a, '-', SZ); \
29 memset(b, '-', SZ); \
30 a[i] = '1'; \
31 b[i] = '2'; \
32 a[SZ] = 0; \
33 b[SZ] = 0; \
34 if (!((r1 = strcmp (b, a)) > 0)) \
35 abort (); \
36 if (!((r1 = strcmp (a, b)) < 0)) \
37 abort (); \
38 b[i] = '1'; \
39 if (!((r1 = strcmp (a, b)) == 0)) \
40 abort (); \
41 for(j = i; j < SZ ; j++) \
42 { \
43 a[j] = '1'; \
44 b[j] = '2'; \
45 } \
46 if (!((r1 = strcmp (b, a)) > 0)) \
47 abort (); \
48 if (!((r1 = strcmp (a, b)) < 0)) \
49 abort (); \
50 for(j = 0; j < i ; j++) \
51 { \
52 memset(a, '-', SZ); \
53 memset(b, '-', SZ); \
54 a[j] = '\0'; \
55 a[j+1] = '1'; \
56 b[j] = '\0'; \
57 b[j+1] = '2'; \
58 if ((r1 = strcmp (b, a)) != 0) \
59 abort (); \
60 } \
61 a = three + 4096 - (SZ / 2 + (i & 1) * ALIGN); \
62 b = four + 4096 - (SZ / 2 + (i & 1) * ALIGN); \
63 memset(a, '-', SZ); \
64 memset(b, '-', SZ); \
65 a[i] = '1'; \
66 b[i] = '2'; \
67 a[SZ] = 0; \
68 b[SZ] = 0; \
69 if (!((r1 = strcmp(b, a)) > 0)) \
70 abort (); \
71 if (!((r1 = strcmp(a, b)) < 0)) \
72 abort (); \
73 b[i] = '1'; \
74 if (!((r1 = strcmp(a, b)) == 0)) \
75 abort (); \
76 } \
77 }
78
79 #ifdef TEST_ALL
80 DEF_TEST(1,1)
81 DEF_TEST(1,2)
82 DEF_TEST(1,4)
83 DEF_TEST(1,8)
84 DEF_TEST(1,16)
85 DEF_TEST(2,1)
86 DEF_TEST(2,2)
87 DEF_TEST(2,4)
88 DEF_TEST(2,8)
89 DEF_TEST(2,16)
90 DEF_TEST(3,1)
91 DEF_TEST(3,2)
92 DEF_TEST(3,4)
93 DEF_TEST(3,8)
94 DEF_TEST(3,16)
95 DEF_TEST(4,1)
96 DEF_TEST(4,2)
97 DEF_TEST(4,4)
98 DEF_TEST(4,8)
99 DEF_TEST(4,16)
100 DEF_TEST(5,1)
101 DEF_TEST(5,2)
102 DEF_TEST(5,4)
103 DEF_TEST(5,8)
104 DEF_TEST(5,16)
105 DEF_TEST(6,1)
106 DEF_TEST(6,2)
107 DEF_TEST(6,4)
108 DEF_TEST(6,8)
109 DEF_TEST(6,16)
110 DEF_TEST(7,1)
111 DEF_TEST(7,2)
112 DEF_TEST(7,4)
113 DEF_TEST(7,8)
114 DEF_TEST(7,16)
115 DEF_TEST(8,1)
116 DEF_TEST(8,2)
117 DEF_TEST(8,4)
118 DEF_TEST(8,8)
119 DEF_TEST(8,16)
120 DEF_TEST(9,1)
121 DEF_TEST(9,2)
122 DEF_TEST(9,4)
123 DEF_TEST(9,8)
124 DEF_TEST(9,16)
125 DEF_TEST(10,1)
126 DEF_TEST(10,2)
127 DEF_TEST(10,4)
128 DEF_TEST(10,8)
129 DEF_TEST(10,16)
130 DEF_TEST(11,1)
131 DEF_TEST(11,2)
132 DEF_TEST(11,4)
133 DEF_TEST(11,8)
134 DEF_TEST(11,16)
135 DEF_TEST(12,1)
136 DEF_TEST(12,2)
137 DEF_TEST(12,4)
138 DEF_TEST(12,8)
139 DEF_TEST(12,16)
140 DEF_TEST(13,1)
141 DEF_TEST(13,2)
142 DEF_TEST(13,4)
143 DEF_TEST(13,8)
144 DEF_TEST(13,16)
145 DEF_TEST(14,1)
146 DEF_TEST(14,2)
147 DEF_TEST(14,4)
148 DEF_TEST(14,8)
149 DEF_TEST(14,16)
150 DEF_TEST(15,1)
151 DEF_TEST(15,2)
152 DEF_TEST(15,4)
153 DEF_TEST(15,8)
154 DEF_TEST(15,16)
155 DEF_TEST(16,1)
156 DEF_TEST(16,2)
157 DEF_TEST(16,4)
158 DEF_TEST(16,8)
159 DEF_TEST(16,16)
160 DEF_TEST(17,1)
161 DEF_TEST(17,2)
162 DEF_TEST(17,4)
163 DEF_TEST(17,8)
164 DEF_TEST(17,16)
165 DEF_TEST(18,1)
166 DEF_TEST(18,2)
167 DEF_TEST(18,4)
168 DEF_TEST(18,8)
169 DEF_TEST(18,16)
170 DEF_TEST(19,1)
171 DEF_TEST(19,2)
172 DEF_TEST(19,4)
173 DEF_TEST(19,8)
174 DEF_TEST(19,16)
175 DEF_TEST(20,1)
176 DEF_TEST(20,2)
177 DEF_TEST(20,4)
178 DEF_TEST(20,8)
179 DEF_TEST(20,16)
180 DEF_TEST(21,1)
181 DEF_TEST(21,2)
182 DEF_TEST(21,4)
183 DEF_TEST(21,8)
184 DEF_TEST(21,16)
185 DEF_TEST(22,1)
186 DEF_TEST(22,2)
187 DEF_TEST(22,4)
188 DEF_TEST(22,8)
189 DEF_TEST(22,16)
190 DEF_TEST(23,1)
191 DEF_TEST(23,2)
192 DEF_TEST(23,4)
193 DEF_TEST(23,8)
194 DEF_TEST(23,16)
195 DEF_TEST(24,1)
196 DEF_TEST(24,2)
197 DEF_TEST(24,4)
198 DEF_TEST(24,8)
199 DEF_TEST(24,16)
200 DEF_TEST(25,1)
201 DEF_TEST(25,2)
202 DEF_TEST(25,4)
203 DEF_TEST(25,8)
204 DEF_TEST(25,16)
205 DEF_TEST(26,1)
206 DEF_TEST(26,2)
207 DEF_TEST(26,4)
208 DEF_TEST(26,8)
209 DEF_TEST(26,16)
210 DEF_TEST(27,1)
211 DEF_TEST(27,2)
212 DEF_TEST(27,4)
213 DEF_TEST(27,8)
214 DEF_TEST(27,16)
215 DEF_TEST(28,1)
216 DEF_TEST(28,2)
217 DEF_TEST(28,4)
218 DEF_TEST(28,8)
219 DEF_TEST(28,16)
220 DEF_TEST(29,1)
221 DEF_TEST(29,2)
222 DEF_TEST(29,4)
223 DEF_TEST(29,8)
224 DEF_TEST(29,16)
225 DEF_TEST(30,1)
226 DEF_TEST(30,2)
227 DEF_TEST(30,4)
228 DEF_TEST(30,8)
229 DEF_TEST(30,16)
230 DEF_TEST(31,1)
231 DEF_TEST(31,2)
232 DEF_TEST(31,4)
233 DEF_TEST(31,8)
234 DEF_TEST(31,16)
235 DEF_TEST(32,1)
236 DEF_TEST(32,2)
237 DEF_TEST(32,4)
238 DEF_TEST(32,8)
239 DEF_TEST(32,16)
240 DEF_TEST(33,1)
241 DEF_TEST(33,2)
242 DEF_TEST(33,4)
243 DEF_TEST(33,8)
244 DEF_TEST(33,16)
245 DEF_TEST(34,1)
246 DEF_TEST(34,2)
247 DEF_TEST(34,4)
248 DEF_TEST(34,8)
249 DEF_TEST(34,16)
250 DEF_TEST(35,1)
251 DEF_TEST(35,2)
252 DEF_TEST(35,4)
253 DEF_TEST(35,8)
254 DEF_TEST(35,16)
255 DEF_TEST(36,1)
256 DEF_TEST(36,2)
257 DEF_TEST(36,4)
258 DEF_TEST(36,8)
259 DEF_TEST(36,16)
260 DEF_TEST(37,1)
261 DEF_TEST(37,2)
262 DEF_TEST(37,4)
263 DEF_TEST(37,8)
264 DEF_TEST(37,16)
265 DEF_TEST(38,1)
266 DEF_TEST(38,2)
267 DEF_TEST(38,4)
268 DEF_TEST(38,8)
269 DEF_TEST(38,16)
270 DEF_TEST(39,1)
271 DEF_TEST(39,2)
272 DEF_TEST(39,4)
273 DEF_TEST(39,8)
274 DEF_TEST(39,16)
275 DEF_TEST(40,1)
276 DEF_TEST(40,2)
277 DEF_TEST(40,4)
278 DEF_TEST(40,8)
279 DEF_TEST(40,16)
280 DEF_TEST(41,1)
281 DEF_TEST(41,2)
282 DEF_TEST(41,4)
283 DEF_TEST(41,8)
284 DEF_TEST(41,16)
285 DEF_TEST(42,1)
286 DEF_TEST(42,2)
287 DEF_TEST(42,4)
288 DEF_TEST(42,8)
289 DEF_TEST(42,16)
290 DEF_TEST(43,1)
291 DEF_TEST(43,2)
292 DEF_TEST(43,4)
293 DEF_TEST(43,8)
294 DEF_TEST(43,16)
295 DEF_TEST(44,1)
296 DEF_TEST(44,2)
297 DEF_TEST(44,4)
298 DEF_TEST(44,8)
299 DEF_TEST(44,16)
300 DEF_TEST(45,1)
301 DEF_TEST(45,2)
302 DEF_TEST(45,4)
303 DEF_TEST(45,8)
304 DEF_TEST(45,16)
305 DEF_TEST(46,1)
306 DEF_TEST(46,2)
307 DEF_TEST(46,4)
308 DEF_TEST(46,8)
309 DEF_TEST(46,16)
310 DEF_TEST(47,1)
311 DEF_TEST(47,2)
312 DEF_TEST(47,4)
313 DEF_TEST(47,8)
314 DEF_TEST(47,16)
315 DEF_TEST(48,1)
316 DEF_TEST(48,2)
317 DEF_TEST(48,4)
318 DEF_TEST(48,8)
319 DEF_TEST(48,16)
320 DEF_TEST(49,1)
321 DEF_TEST(49,2)
322 DEF_TEST(49,4)
323 DEF_TEST(49,8)
324 DEF_TEST(49,16)
325 DEF_TEST(100,1)
326 DEF_TEST(100,2)
327 DEF_TEST(100,4)
328 DEF_TEST(100,8)
329 DEF_TEST(100,16)
330 #else
331 DEF_TEST(3,1)
332 DEF_TEST(4,1)
333 DEF_TEST(4,2)
334 DEF_TEST(4,4)
335 DEF_TEST(5,1)
336 DEF_TEST(6,1)
337 DEF_TEST(7,1)
338 DEF_TEST(8,1)
339 DEF_TEST(8,2)
340 DEF_TEST(8,4)
341 DEF_TEST(8,8)
342 DEF_TEST(9,1)
343 DEF_TEST(16,1)
344 DEF_TEST(16,2)
345 DEF_TEST(16,4)
346 DEF_TEST(16,8)
347 DEF_TEST(16,16)
348 DEF_TEST(32,1)
349 DEF_TEST(32,2)
350 DEF_TEST(32,4)
351 DEF_TEST(32,8)
352 DEF_TEST(32,16)
353 DEF_TEST(100,1)
354 DEF_TEST(100,2)
355 DEF_TEST(100,4)
356 DEF_TEST(100,8)
357 DEF_TEST(100,16)
358 #endif
359
360 int
main(int argc,char ** argv)361 main(int argc, char **argv)
362 {
363
364 #ifdef TEST_ALL
365 RUN_TEST(1,1);
366 RUN_TEST(1,2);
367 RUN_TEST(1,4);
368 RUN_TEST(1,8);
369 RUN_TEST(1,16);
370 RUN_TEST(2,1);
371 RUN_TEST(2,2);
372 RUN_TEST(2,4);
373 RUN_TEST(2,8);
374 RUN_TEST(2,16);
375 RUN_TEST(3,1);
376 RUN_TEST(3,2);
377 RUN_TEST(3,4);
378 RUN_TEST(3,8);
379 RUN_TEST(3,16);
380 RUN_TEST(4,1);
381 RUN_TEST(4,2);
382 RUN_TEST(4,4);
383 RUN_TEST(4,8);
384 RUN_TEST(4,16);
385 RUN_TEST(5,1);
386 RUN_TEST(5,2);
387 RUN_TEST(5,4);
388 RUN_TEST(5,8);
389 RUN_TEST(5,16);
390 RUN_TEST(6,1);
391 RUN_TEST(6,2);
392 RUN_TEST(6,4);
393 RUN_TEST(6,8);
394 RUN_TEST(6,16);
395 RUN_TEST(7,1);
396 RUN_TEST(7,2);
397 RUN_TEST(7,4);
398 RUN_TEST(7,8);
399 RUN_TEST(7,16);
400 RUN_TEST(8,1);
401 RUN_TEST(8,2);
402 RUN_TEST(8,4);
403 RUN_TEST(8,8);
404 RUN_TEST(8,16);
405 RUN_TEST(9,1);
406 RUN_TEST(9,2);
407 RUN_TEST(9,4);
408 RUN_TEST(9,8);
409 RUN_TEST(9,16);
410 RUN_TEST(10,1);
411 RUN_TEST(10,2);
412 RUN_TEST(10,4);
413 RUN_TEST(10,8);
414 RUN_TEST(10,16);
415 RUN_TEST(11,1);
416 RUN_TEST(11,2);
417 RUN_TEST(11,4);
418 RUN_TEST(11,8);
419 RUN_TEST(11,16);
420 RUN_TEST(12,1);
421 RUN_TEST(12,2);
422 RUN_TEST(12,4);
423 RUN_TEST(12,8);
424 RUN_TEST(12,16);
425 RUN_TEST(13,1);
426 RUN_TEST(13,2);
427 RUN_TEST(13,4);
428 RUN_TEST(13,8);
429 RUN_TEST(13,16);
430 RUN_TEST(14,1);
431 RUN_TEST(14,2);
432 RUN_TEST(14,4);
433 RUN_TEST(14,8);
434 RUN_TEST(14,16);
435 RUN_TEST(15,1);
436 RUN_TEST(15,2);
437 RUN_TEST(15,4);
438 RUN_TEST(15,8);
439 RUN_TEST(15,16);
440 RUN_TEST(16,1);
441 RUN_TEST(16,2);
442 RUN_TEST(16,4);
443 RUN_TEST(16,8);
444 RUN_TEST(16,16);
445 RUN_TEST(17,1);
446 RUN_TEST(17,2);
447 RUN_TEST(17,4);
448 RUN_TEST(17,8);
449 RUN_TEST(17,16);
450 RUN_TEST(18,1);
451 RUN_TEST(18,2);
452 RUN_TEST(18,4);
453 RUN_TEST(18,8);
454 RUN_TEST(18,16);
455 RUN_TEST(19,1);
456 RUN_TEST(19,2);
457 RUN_TEST(19,4);
458 RUN_TEST(19,8);
459 RUN_TEST(19,16);
460 RUN_TEST(20,1);
461 RUN_TEST(20,2);
462 RUN_TEST(20,4);
463 RUN_TEST(20,8);
464 RUN_TEST(20,16);
465 RUN_TEST(21,1);
466 RUN_TEST(21,2);
467 RUN_TEST(21,4);
468 RUN_TEST(21,8);
469 RUN_TEST(21,16);
470 RUN_TEST(22,1);
471 RUN_TEST(22,2);
472 RUN_TEST(22,4);
473 RUN_TEST(22,8);
474 RUN_TEST(22,16);
475 RUN_TEST(23,1);
476 RUN_TEST(23,2);
477 RUN_TEST(23,4);
478 RUN_TEST(23,8);
479 RUN_TEST(23,16);
480 RUN_TEST(24,1);
481 RUN_TEST(24,2);
482 RUN_TEST(24,4);
483 RUN_TEST(24,8);
484 RUN_TEST(24,16);
485 RUN_TEST(25,1);
486 RUN_TEST(25,2);
487 RUN_TEST(25,4);
488 RUN_TEST(25,8);
489 RUN_TEST(25,16);
490 RUN_TEST(26,1);
491 RUN_TEST(26,2);
492 RUN_TEST(26,4);
493 RUN_TEST(26,8);
494 RUN_TEST(26,16);
495 RUN_TEST(27,1);
496 RUN_TEST(27,2);
497 RUN_TEST(27,4);
498 RUN_TEST(27,8);
499 RUN_TEST(27,16);
500 RUN_TEST(28,1);
501 RUN_TEST(28,2);
502 RUN_TEST(28,4);
503 RUN_TEST(28,8);
504 RUN_TEST(28,16);
505 RUN_TEST(29,1);
506 RUN_TEST(29,2);
507 RUN_TEST(29,4);
508 RUN_TEST(29,8);
509 RUN_TEST(29,16);
510 RUN_TEST(30,1);
511 RUN_TEST(30,2);
512 RUN_TEST(30,4);
513 RUN_TEST(30,8);
514 RUN_TEST(30,16);
515 RUN_TEST(31,1);
516 RUN_TEST(31,2);
517 RUN_TEST(31,4);
518 RUN_TEST(31,8);
519 RUN_TEST(31,16);
520 RUN_TEST(32,1);
521 RUN_TEST(32,2);
522 RUN_TEST(32,4);
523 RUN_TEST(32,8);
524 RUN_TEST(32,16);
525 RUN_TEST(33,1);
526 RUN_TEST(33,2);
527 RUN_TEST(33,4);
528 RUN_TEST(33,8);
529 RUN_TEST(33,16);
530 RUN_TEST(34,1);
531 RUN_TEST(34,2);
532 RUN_TEST(34,4);
533 RUN_TEST(34,8);
534 RUN_TEST(34,16);
535 RUN_TEST(35,1);
536 RUN_TEST(35,2);
537 RUN_TEST(35,4);
538 RUN_TEST(35,8);
539 RUN_TEST(35,16);
540 RUN_TEST(36,1);
541 RUN_TEST(36,2);
542 RUN_TEST(36,4);
543 RUN_TEST(36,8);
544 RUN_TEST(36,16);
545 RUN_TEST(37,1);
546 RUN_TEST(37,2);
547 RUN_TEST(37,4);
548 RUN_TEST(37,8);
549 RUN_TEST(37,16);
550 RUN_TEST(38,1);
551 RUN_TEST(38,2);
552 RUN_TEST(38,4);
553 RUN_TEST(38,8);
554 RUN_TEST(38,16);
555 RUN_TEST(39,1);
556 RUN_TEST(39,2);
557 RUN_TEST(39,4);
558 RUN_TEST(39,8);
559 RUN_TEST(39,16);
560 RUN_TEST(40,1);
561 RUN_TEST(40,2);
562 RUN_TEST(40,4);
563 RUN_TEST(40,8);
564 RUN_TEST(40,16);
565 RUN_TEST(41,1);
566 RUN_TEST(41,2);
567 RUN_TEST(41,4);
568 RUN_TEST(41,8);
569 RUN_TEST(41,16);
570 RUN_TEST(42,1);
571 RUN_TEST(42,2);
572 RUN_TEST(42,4);
573 RUN_TEST(42,8);
574 RUN_TEST(42,16);
575 RUN_TEST(43,1);
576 RUN_TEST(43,2);
577 RUN_TEST(43,4);
578 RUN_TEST(43,8);
579 RUN_TEST(43,16);
580 RUN_TEST(44,1);
581 RUN_TEST(44,2);
582 RUN_TEST(44,4);
583 RUN_TEST(44,8);
584 RUN_TEST(44,16);
585 RUN_TEST(45,1);
586 RUN_TEST(45,2);
587 RUN_TEST(45,4);
588 RUN_TEST(45,8);
589 RUN_TEST(45,16);
590 RUN_TEST(46,1);
591 RUN_TEST(46,2);
592 RUN_TEST(46,4);
593 RUN_TEST(46,8);
594 RUN_TEST(46,16);
595 RUN_TEST(47,1);
596 RUN_TEST(47,2);
597 RUN_TEST(47,4);
598 RUN_TEST(47,8);
599 RUN_TEST(47,16);
600 RUN_TEST(48,1);
601 RUN_TEST(48,2);
602 RUN_TEST(48,4);
603 RUN_TEST(48,8);
604 RUN_TEST(48,16);
605 RUN_TEST(49,1);
606 RUN_TEST(49,2);
607 RUN_TEST(49,4);
608 RUN_TEST(49,8);
609 RUN_TEST(49,16);
610 #else
611 RUN_TEST(3,1);
612 RUN_TEST(4,1);
613 RUN_TEST(4,2);
614 RUN_TEST(4,4);
615 RUN_TEST(5,1);
616 RUN_TEST(6,1);
617 RUN_TEST(7,1);
618 RUN_TEST(8,1);
619 RUN_TEST(8,2);
620 RUN_TEST(8,4);
621 RUN_TEST(8,8);
622 RUN_TEST(9,1);
623 RUN_TEST(16,1);
624 RUN_TEST(16,2);
625 RUN_TEST(16,4);
626 RUN_TEST(16,8);
627 RUN_TEST(16,16);
628 RUN_TEST(32,1);
629 RUN_TEST(32,2);
630 RUN_TEST(32,4);
631 RUN_TEST(32,8);
632 RUN_TEST(32,16);
633 #endif
634 return 0;
635 }
636