131
|
1 /* { dg-do run } */
|
|
2 /* { dg-options "-O2 -fdump-tree-strlen" } */
|
|
3
|
|
4 char s[100] = {'a','b','c','d'};
|
|
5 typedef struct { char s[8]; int x; } S;
|
|
6
|
|
7 __attribute__ ((noinline)) int
|
|
8 f1 (S *s)
|
|
9 {
|
|
10 return __builtin_strcmp (s->s, "abc") != 0;
|
|
11 }
|
|
12
|
|
13 __attribute__ ((noinline)) int
|
|
14 f2 (void)
|
|
15 {
|
|
16 return __builtin_strcmp (s, "abc") != 0;
|
|
17 }
|
|
18
|
|
19 __attribute__ ((noinline)) int
|
|
20 f3 (S *s)
|
|
21 {
|
|
22 return __builtin_strcmp ("abc", s->s) != 0;
|
|
23 }
|
|
24
|
|
25 __attribute__ ((noinline)) int
|
|
26 f4 (void)
|
|
27 {
|
|
28 return __builtin_strcmp ("abc", s) != 0;
|
|
29 }
|
|
30
|
|
31 __attribute__ ((noinline)) int
|
|
32 f5 (S *s)
|
|
33 {
|
|
34 return __builtin_strncmp (s->s, "abc", 3) != 0;
|
|
35 }
|
|
36
|
|
37 __attribute__ ((noinline)) int
|
|
38 f6 (void)
|
|
39 {
|
|
40 return __builtin_strncmp (s, "abc", 2) != 0;
|
|
41 }
|
|
42
|
|
43 __attribute__ ((noinline)) int
|
|
44 f7 (S *s)
|
|
45 {
|
|
46 return __builtin_strncmp ("abc", s->s, 3) != 0;
|
|
47 }
|
|
48
|
|
49 __attribute__ ((noinline)) int
|
|
50 f8 (void)
|
|
51 {
|
|
52 return __builtin_strncmp ("abc", s, 2) != 0;
|
|
53 }
|
|
54
|
|
55 int main (void)
|
|
56 {
|
|
57 S ss = {{'a','b','c'}, 2};
|
|
58
|
|
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 ();
|
|
63
|
|
64 return 0;
|
|
65 }
|
|
66
|
|
67 /* { dg-final { scan-tree-dump-times "cmp_eq \\(" 8 "strlen" } } */
|