PR middle-end/85602 - -Wsizeof-pointer-memaccess for strncat with size of source
[official-gcc.git] / gcc / testsuite / gcc.dg / strcmpopt_2.c
blob0131b8f7d69d644eb428a88d3162e95f6d826ee0
1 /* { dg-do run } */
2 /* { dg-options "-O2 -fdump-tree-strlen" } */
4 char s[100] = {'a','b','c','d'};
5 typedef struct { char s[8]; int x; } S;
7 __attribute__ ((noinline)) int
8 f1 (S *s)
9 {
10 return __builtin_strcmp (s->s, "abc") != 0;
13 __attribute__ ((noinline)) int
14 f2 (void)
16 return __builtin_strcmp (s, "abc") != 0;
19 __attribute__ ((noinline)) int
20 f3 (S *s)
22 return __builtin_strcmp ("abc", s->s) != 0;
25 __attribute__ ((noinline)) int
26 f4 (void)
28 return __builtin_strcmp ("abc", s) != 0;
31 __attribute__ ((noinline)) int
32 f5 (S *s)
34 return __builtin_strncmp (s->s, "abc", 3) != 0;
37 __attribute__ ((noinline)) int
38 f6 (void)
40 return __builtin_strncmp (s, "abc", 2) != 0;
43 __attribute__ ((noinline)) int
44 f7 (S *s)
46 return __builtin_strncmp ("abc", s->s, 3) != 0;
49 __attribute__ ((noinline)) int
50 f8 (void)
52 return __builtin_strncmp ("abc", s, 2) != 0;
55 int main (void)
57 S ss = {{'a','b','c'}, 2};
59 if (f1 (&ss) != 0 || f2 () != 1 || f3 (&ss) != 0 ||
60 f4 () != 1 || f5 (&ss) != 0 || f6 () != 0 ||
61 f7 (&ss) != 0 || f8 () != 0)
62 __builtin_abort ();
64 return 0;
67 /* { dg-final { scan-tree-dump-times "cmp_eq \\(" 8 "strlen" } } */