]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/testsuite/gcc.dg/strncmp-3.c
Update copyright years.
[thirdparty/gcc.git] / gcc / testsuite / gcc.dg / strncmp-3.c
1 /* PR middle-end/95189 - memcmp being wrongly stripped like strcmp
2 { dg-do run }
3 { dg-options "-O2 -Wall" } */
4
5 #define AB_D "ab\0d"
6 #define ABCDEF_H "abcdef\0h"
7 #define ABCDEFGHIJKLMN_P "abcdefghijklmn\0p"
8
9 char ab_d[] = AB_D;
10 char abcdef_h[] = ABCDEF_H;
11
12 extern int strncmp (const char*, const char*, __SIZE_TYPE__);
13
14 __attribute__((noipa)) void sink (const void *p, ...) { (void)&p; }
15
16 #define strncmp(a, b, n) (sink (a, b), strncmp (a, b, n))
17
18 int main (void)
19 {
20 int zero = 0;
21
22 zero += strncmp (ab_d, AB_D, 1);
23 zero += strncmp (ab_d, AB_D, 2);
24 zero += strncmp (ab_d, AB_D, 3);
25 zero += strncmp (ab_d, AB_D, 4);
26 zero += strncmp (ab_d, AB_D, 5);
27
28 zero += strncmp (ab_d, ABCDEF_H, 1);
29 zero += strncmp (ab_d, ABCDEF_H, 2);
30
31 zero += strncmp (abcdef_h, AB_D, 2);
32
33 zero += strncmp (abcdef_h, ABCDEF_H, 2);
34 zero += strncmp (abcdef_h, ABCDEF_H, 3);
35 zero += strncmp (abcdef_h, ABCDEF_H, 4);
36 zero += strncmp (abcdef_h, ABCDEF_H, 5);
37 zero += strncmp (abcdef_h, ABCDEF_H, 6);
38 zero += strncmp (abcdef_h, ABCDEF_H, 7);
39 zero += strncmp (abcdef_h, ABCDEF_H, 8);
40 zero += strncmp (abcdef_h, ABCDEF_H, 9);
41
42 if (zero != 0)
43 __builtin_abort ();
44
45 int neg = 0;
46
47 neg -= strncmp (ab_d, ABCDEF_H, 3) < 0;
48 neg -= strncmp (ab_d, ABCDEF_H, 4) < 0;
49 neg -= strncmp (ab_d, ABCDEF_H, 5) < 0;
50 neg -= strncmp (ab_d, ABCDEF_H, 6) < 0;
51 neg -= strncmp (ab_d, ABCDEF_H, 7) < 0;
52 neg -= strncmp (ab_d, ABCDEF_H, 8) < 0;
53 neg -= strncmp (ab_d, ABCDEF_H, 9) < 0;
54
55 if (neg != -7)
56 __builtin_abort ();
57 }