Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/gcc.dg/strlenopt-91.c @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
131:84e7813d76e9 | 145:1830386684a0 |
---|---|
1 /* PR tree-optimization/92412 - excessive errno aliasing assumption defeats | |
2 optimization | |
3 { dg-do compile } | |
4 { dg-options "-O2 -Wall -fdump-tree-optimized" } */ | |
5 | |
6 typedef __SIZE_TYPE__ size_t; | |
7 | |
8 extern void* alloca (size_t); | |
9 extern void* calloc (size_t, size_t); | |
10 extern void* malloc (size_t); | |
11 | |
12 extern const char exta[4]; | |
13 static char stata[] = "123"; | |
14 | |
15 void sink (const void*, ...); | |
16 | |
17 #define T(ptr, alloc) do { \ | |
18 const char *p = ptr; \ | |
19 if (p[0] != '1' || p[1] != '2' || p[2] != '3' || p[3] != '\0' \ | |
20 || __builtin_strlen (p) != 3) \ | |
21 return; \ | |
22 \ | |
23 void *q = alloc; \ | |
24 __builtin_strcpy (q, p); \ | |
25 \ | |
26 if (p[0] != '1' || p[1] != '2' || p[2] != '3' || p[3] != '\0' \ | |
27 || __builtin_strlen (p) != 3 \ | |
28 || __builtin_strlen (q) != 3) \ | |
29 __builtin_abort (); \ | |
30 \ | |
31 sink (p, q); \ | |
32 } while (0) | |
33 | |
34 | |
35 void alloca_test_local (unsigned n) | |
36 { | |
37 char loca[] = "123"; | |
38 T (loca, alloca (n)); | |
39 } | |
40 | |
41 void alloca_test_extern_const (unsigned n) | |
42 { | |
43 T (exta, alloca (n)); | |
44 } | |
45 | |
46 void alloca_test_static (unsigned n) | |
47 { | |
48 T (stata, alloca (n)); | |
49 } | |
50 | |
51 | |
52 // Verify fix for PR tree-optimization/92412. | |
53 void calloc_test_local (unsigned m, unsigned n) | |
54 { | |
55 char loca[] = "123"; | |
56 T (loca, calloc (m, n)); | |
57 } | |
58 | |
59 void calloc_test_extern_const (unsigned m, unsigned n) | |
60 { | |
61 T (exta, calloc (m, n)); | |
62 } | |
63 | |
64 void calloc_test_static (unsigned m, unsigned n) | |
65 { | |
66 T (stata, calloc (m, n)); | |
67 } | |
68 | |
69 | |
70 // Verify fix for PR tree-optimization/92412. | |
71 void malloc_test_local (unsigned n) | |
72 { | |
73 char loca[] = "123"; | |
74 T (loca, malloc (n)); | |
75 } | |
76 | |
77 void malloc_test_extern_const (unsigned n) | |
78 { | |
79 T (exta, malloc (n)); | |
80 } | |
81 | |
82 void malloc_test_static (unsigned n) | |
83 { | |
84 T (stata, malloc (n)); | |
85 } | |
86 | |
87 | |
88 #undef T | |
89 #define T(ptr, n) do { \ | |
90 const char *p = ptr; \ | |
91 if (p[0] != '1' || p[1] != '2' || p[2] != '3' || p[3] != '\0' \ | |
92 || __builtin_strlen (p) != 3) \ | |
93 return; \ | |
94 \ | |
95 char vla[n]; \ | |
96 char *q = vla; \ | |
97 __builtin_strcpy (q, p); \ | |
98 \ | |
99 if (p[0] != '1' || p[1] != '2' || p[2] != '3' || p[3] != '\0' \ | |
100 || __builtin_strlen (p) != 3 \ | |
101 || __builtin_strlen (q) != 3) \ | |
102 __builtin_abort (); \ | |
103 \ | |
104 sink (p, vla); \ | |
105 } while (0) | |
106 | |
107 | |
108 void vla_test_local (unsigned n) | |
109 { | |
110 char loca[] = "123"; | |
111 T (loca, n); | |
112 } | |
113 | |
114 void vla_test_extern_const (unsigned n) | |
115 { | |
116 T (exta, n); | |
117 } | |
118 | |
119 void vla_test_static (unsigned n) | |
120 { | |
121 T (stata, n); | |
122 } | |
123 | |
124 /* { dg-final { scan-tree-dump-not "abort" "optimized" } } */ |