]> gcc.gnu.org Git - gcc.git/blame - gcc/testsuite/gcc.dg/strlenopt-8.c
builtins.c (c_getstr, [...]): Export.
[gcc.git] / gcc / testsuite / gcc.dg / strlenopt-8.c
CommitLineData
8b57bfeb
JJ
1/* { dg-do run } */
2/* { dg-options "-O2 -fdump-tree-strlen" } */
3
4#include "strlenopt.h"
5
6/* Yes, there are people who write code like this. */
7
8__attribute__((noinline, noclone)) char *
9foo (int r)
10{
11 char buf[10] = "";
12 strcat (buf, r ? "r" : "w");
13 strcat (buf, "b");
14 return strdup (buf);
15}
16
17__attribute__((noinline, noclone)) char *
18bar (int r)
19{
20 char buf[10] = {};
21 strcat (buf, r ? "r" : "w");
22 strcat (buf, "b");
23 return strdup (buf);
24}
25
26int
27main ()
28{
29 char *q = foo (1);
30 if (q != NULL)
31 {
32 if (strcmp (q, "rb"))
33 abort ();
34 free (q);
35 }
36 q = bar (0);
37 if (q != NULL)
38 {
39 if (strcmp (q, "wb"))
40 abort ();
41 free (q);
42 }
43 return 0;
44}
45
fef5a0d9
RB
46/* { dg-final { scan-tree-dump-times "strlen \\(" 0 "strlen" } } */
47/* { dg-final { scan-tree-dump-times "memcpy \\(" 4 "strlen" } } */
8b57bfeb
JJ
48/* { dg-final { scan-tree-dump-times "strcpy \\(" 0 "strlen" } } */
49/* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen" } } */
50/* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen" } } */
51/* { dg-final { scan-tree-dump-times "stpcpy \\(" 0 "strlen" } } */
52/* { dg-final { cleanup-tree-dump "strlen" } } */
This page took 2.037115 seconds and 5 git commands to generate.