Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/gcc.dg/strlenopt-18g.c @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | |
children | 1830386684a0 |
comparison
equal
deleted
inserted
replaced
68:561a7518be6b | 111:04ced10e8804 |
---|---|
1 /* This test needs runtime that provides stpcpy function. */ | |
2 /* { dg-do run { target *-*-linux* *-*-gnu* } } */ | |
3 /* { dg-options "-O2 -fdump-tree-strlen" } */ | |
4 | |
5 #define USE_GNU | |
6 #include "strlenopt.h" | |
7 | |
8 __attribute__((noinline, noclone)) char * | |
9 fn1 (int x, int y, int z) | |
10 { | |
11 static char buf[40]; | |
12 const char *p; | |
13 switch (x) | |
14 { | |
15 case 0: | |
16 p = "abcd"; | |
17 break; | |
18 case 1: | |
19 p = "efgh"; | |
20 break; | |
21 case 2: | |
22 p = "ijkl"; | |
23 break; | |
24 default: | |
25 p = "mnopq"; | |
26 break; | |
27 } | |
28 if (y) | |
29 { | |
30 strcpy (buf, p); | |
31 if (z) | |
32 strcat (buf, "ABCDEFG"); | |
33 else | |
34 strcat (buf, "HIJKLMN"); | |
35 } | |
36 else | |
37 { | |
38 strcpy (buf, p + 1); | |
39 if (z) | |
40 strcat (buf, "OPQ"); | |
41 else | |
42 strcat (buf, "RST"); | |
43 } | |
44 return buf; | |
45 } | |
46 | |
47 int | |
48 main () | |
49 { | |
50 int i; | |
51 for (i = 0; i < 5; i++) | |
52 { | |
53 const char *p = "abcdefghijklmnopq" + (i < 3 ? i : 3) * 4; | |
54 const char *q; | |
55 int j = i >= 3; | |
56 fn1 (i ? 0 : 1, 1, 1); | |
57 q = fn1 (i, 0, 0); | |
58 if (memcmp (q, p + 1, 3 + j) != 0 || memcmp (q + 3 + j, "RST", 4) != 0) | |
59 abort (); | |
60 fn1 (i ? 0 : 1, 0, 1); | |
61 q = fn1 (i, 1, 0); | |
62 if (memcmp (q, p, 4 + j) != 0 || memcmp (q + 4 + j, "HIJKLMN", 8) != 0) | |
63 abort (); | |
64 fn1 (i ? 0 : 1, 1, 0); | |
65 q = fn1 (i, 0, 1); | |
66 if (memcmp (q, p + 1, 3 + j) != 0 || memcmp (q + 3 + j, "OPQ", 4) != 0) | |
67 abort (); | |
68 fn1 (i ? 0 : 1, 0, 0); | |
69 q = fn1 (i, 1, 1); | |
70 if (memcmp (q, p, 4 + j) != 0 || memcmp (q + 4 + j, "ABCDEFG", 8) != 0) | |
71 abort (); | |
72 } | |
73 return 0; | |
74 } | |
75 | |
76 /* { dg-final { scan-tree-dump-times "strlen \\(" 0 "strlen" } } */ | |
77 /* { dg-final { scan-tree-dump-times "memcpy \\(" 4 "strlen" } } */ | |
78 /* { dg-final { scan-tree-dump-times "strcpy \\(" 0 "strlen" } } */ | |
79 /* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen" } } */ | |
80 /* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen" } } */ | |
81 /* { dg-final { scan-tree-dump-times "stpcpy \\(" 2 "strlen" } } */ |