Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/gcc.dg/strlenopt-19.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 /* { dg-do run } */ | |
2 /* { dg-options "-O2 -fdump-tree-strlen" } */ | |
3 | |
4 #include "strlenopt.h" | |
5 | |
6 __attribute__((noinline, noclone)) char * | |
7 fn1 (int x, int y, int z) | |
8 { | |
9 static char buf[40]; | |
10 const char *p; | |
11 switch (x) | |
12 { | |
13 case 0: | |
14 p = "abcd"; | |
15 /* Prevent cswitch optimization. */ | |
16 asm volatile ("" : : : "memory"); | |
17 break; | |
18 case 1: | |
19 p = "efgh"; | |
20 break; | |
21 case 2: | |
22 p = "ijkl"; | |
23 break; | |
24 default: | |
25 p = "mnop"; | |
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 = "abcdefghijklmnop" + (i < 3 ? i : 3) * 4; | |
54 const char *q; | |
55 fn1 (i ? 0 : 1, 1, 1); | |
56 q = fn1 (i, 0, 0); | |
57 if (memcmp (q, p + 1, 3) != 0 || memcmp (q + 3, "RST", 4) != 0) | |
58 abort (); | |
59 fn1 (i ? 0 : 1, 0, 1); | |
60 q = fn1 (i, 1, 0); | |
61 if (memcmp (q, p, 4) != 0 || memcmp (q + 4, "HIJKLMN", 8) != 0) | |
62 abort (); | |
63 fn1 (i ? 0 : 1, 1, 0); | |
64 q = fn1 (i, 0, 1); | |
65 if (memcmp (q, p + 1, 3) != 0 || memcmp (q + 3, "OPQ", 4) != 0) | |
66 abort (); | |
67 fn1 (i ? 0 : 1, 0, 0); | |
68 q = fn1 (i, 1, 1); | |
69 if (memcmp (q, p, 4) != 0 || memcmp (q + 4, "ABCDEFG", 8) != 0) | |
70 abort (); | |
71 } | |
72 return 0; | |
73 } | |
74 | |
75 /* { dg-final { scan-tree-dump-times "strlen \\(" 0 "strlen" } } */ | |
76 /* { dg-final { scan-tree-dump-times "memcpy \\(" 6 "strlen" } } */ | |
77 /* { dg-final { scan-tree-dump-times "strcpy \\(" 0 "strlen" } } */ | |
78 /* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen" } } */ | |
79 /* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen" } } */ | |
80 /* { dg-final { scan-tree-dump-times "stpcpy \\(" 0 "strlen" } } */ |