annotate gcc/testsuite/gcc.dg/strlenopt-40.c @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents 84e7813d76e9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 /* PR tree-optimization/83671 - fix for false positive reported by
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2 -Wstringop-overflow does not work with inlining
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3 { dg-do compile }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4 { dg-options "-O1 -fdump-tree-optimized" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 #include "strlenopt.h"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 #define DIFF_MAX __PTRDIFF_MAX__
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10 #define CAT(x, y) x ## y
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 #define CONCAT(x, y) CAT (x, y)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 #define FAILNAME(name) CONCAT (call_ ## name ##_on_line_, __LINE__)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 #define FAIL(name) do { \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 extern void FAILNAME (name) (void); \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 FAILNAME (name)(); \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 } while (0)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19 /* Macros to emit a call to funcation named
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 call_in_{true,false}_branch_not_eliminated_on_line_NNN()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 for each call that's expected to be eliminated. The dg-final
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22 scan-tree-dump-time directive at the bottom of the test verifies
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 that no such call appears in output. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 #define ELIM_TRUE(expr) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25 if (!(expr)) FAIL (in_true_branch_not_eliminated); else (void)0
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 #define ELIM_FALSE(expr) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 if (!!(expr)) FAIL (in_false_branch_not_eliminated); else (void)0
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 /* Macro to emit a call to a function named
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 call_made_in_{true,false}_branch_on_line_NNN()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 for each call that's expected to be retained. The dg-final
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 scan-tree-dump-time directive at the bottom of the test verifies
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 that the expected number of both kinds of calls appears in output
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 (a pair for each line with the invocation of the KEEP() macro. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 #define KEEP(expr) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 if (expr) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38 FAIL (made_in_true_branch); \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 else \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 FAIL (made_in_false_branch)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 typedef char A3[3], A5[5], A7[7], AX[];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44 typedef A3 A7_3[7];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45 typedef A3 AX_3[];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46 typedef A5 A7_5[7];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47 typedef A7 A5_7[5];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49 extern A7_3 a7_3;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50 extern A5_7 a5_7;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51 extern AX_3 ax_3;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
52
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
53 extern A3 a3;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
54 extern A7 a5;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55 extern A7 a7;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
56 extern AX ax;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
57
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
58 extern A3 *pa3;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
59 extern A5 *pa5;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
60 extern A7 *pa7;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
61
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
62 extern A7_3 *pa7_3;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
63 extern AX_3 *pax_3;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
64 extern A5_7 *pa5_7;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
65 extern A7_5 *pa7_5;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
66
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
67 extern char *ptr;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
68
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
69 struct MemArrays0 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
70 A7_3 a7_3;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
71 A5_7 a5_7;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
72 char a3[3], a5[5], a0[0];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
73 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
74 struct MemArraysX { char a3[3], a5[5], ax[]; };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
75 struct MemArrays7 { char a3[3], a5[5], a7[7]; };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
76
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
77 struct MemArrays0 ma0_3_5_7[3][5][7];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
78
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
79 void elim_strings (int i)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
80 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
81 ELIM_TRUE (strlen (i < 0 ? "123" : "321") == 3);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
82 ELIM_FALSE (strlen (i < 0 ? "123" : "321") > 3);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
83 ELIM_FALSE (strlen (i < 0 ? "123" : "321") < 3);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
84
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
85 ELIM_TRUE (strlen (i < 0 ? "123" : "4321") >= 3);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
86 ELIM_FALSE (strlen (i < 0 ? "123" : "4321") > 4);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
87 ELIM_FALSE (strlen (i < 0 ? "123" : "4321") < 3);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
88
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
89 ELIM_TRUE (strlen (i < 0 ? "1234" : "321") >= 3);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
90 ELIM_FALSE (strlen (i < 0 ? "1234" : "321") < 3);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
91 ELIM_FALSE (strlen (i < 0 ? "1234" : "321") > 4);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
92
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
93 ELIM_TRUE (strlen (i < 0 ? "123" : "4321") <= 4);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
94 ELIM_TRUE (strlen (i < 0 ? "1234" : "321") <= 4);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
95
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
96 ELIM_TRUE (strlen (i < 0 ? "1" : "123456789") <= 9);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
97 ELIM_TRUE (strlen (i < 0 ? "1" : "123456789") >= 1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
98 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
99
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
100 /* Verify that strlen calls involving uninitialized global arrays
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
101 of known size are eliminated when they appear in expressions
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
102 that test for results that must be true. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
103 void elim_global_arrays (int i)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
104 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
105 /* Verify that the expression involving the strlen call as well
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
106 as whatever depends on it is eliminated from the test output.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
107 All these expressions must be trivially true. */
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
108 ELIM_TRUE (strlen (a7_3[0]) < sizeof a7_3);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
109 ELIM_TRUE (strlen (a7_3[1]) < sizeof a7_3 - sizeof *a7_3);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
110 ELIM_TRUE (strlen (a7_3[6]) < sizeof a7_3 - 5 * sizeof *a7_3);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
111 ELIM_TRUE (strlen (a7_3[i]) < sizeof a7_3);
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
112
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
113 ELIM_TRUE (strlen (a5_7[0]) < sizeof a5_7);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
114 ELIM_TRUE (strlen (a5_7[1]) < sizeof a5_7 - sizeof *a5_7);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
115 ELIM_TRUE (strlen (a5_7[4]) < sizeof a5_7 - 3 * sizeof *a5_7);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
116 ELIM_TRUE (strlen (a5_7[i]) < sizeof a5_7);
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
117
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
118 /* Even when treating a multi-dimensional array as a single string
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
119 the length must be less DIFF_MAX - (ax_3[i] - ax_3[0]) but GCC
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
120 doesn't do that computation yet so avoid testing it. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
121 ELIM_TRUE (strlen (ax_3[0]) < DIFF_MAX);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
122 ELIM_TRUE (strlen (ax_3[1]) < DIFF_MAX);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
123 ELIM_TRUE (strlen (ax_3[9]) < DIFF_MAX);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
124 ELIM_TRUE (strlen (ax_3[i]) < DIFF_MAX);
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
125
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
126 ELIM_TRUE (strlen (a3) < sizeof a3);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
127 ELIM_TRUE (strlen (a7) < sizeof a7);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
128
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
129 ELIM_TRUE (strlen (ax) != DIFF_MAX);
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
130 /* ELIM_TRUE (strlen (ax) != DIFF_MAX - 1); */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
131 /* ELIM_TRUE (strlen (ax) < DIFF_MAX - 1); */
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
132 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
133
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
134 void elim_pointer_to_arrays (void)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
135 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
136 /* Unfortunately, GCC cannot be trusted not to misuse a pointer
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
137 to a smaller array to point to an object of a bigger type so
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
138 the strlen range optimization must assume each array pointer
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
139 points effectively to an array of an unknown bound. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
140 ELIM_TRUE (strlen (*pa7) < DIFF_MAX);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
141 ELIM_TRUE (strlen (*pa5) < DIFF_MAX);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
142 ELIM_TRUE (strlen (*pa3) < DIFF_MAX);
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
143
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
144 ELIM_TRUE (strlen ((*pa7_3)[0]) < DIFF_MAX);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
145 ELIM_TRUE (strlen ((*pa7_3)[1]) < DIFF_MAX);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
146 ELIM_TRUE (strlen ((*pa7_3)[6]) < DIFF_MAX);
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
147
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
148 ELIM_TRUE (strlen ((*pax_3)[0]) < DIFF_MAX);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
149 ELIM_TRUE (strlen ((*pax_3)[1]) < DIFF_MAX);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
150 ELIM_TRUE (strlen ((*pax_3)[9]) < DIFF_MAX);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
151
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
152 ELIM_TRUE (strlen ((*pa5_7)[0]) < DIFF_MAX);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
153 ELIM_TRUE (strlen ((*pa5_7)[1]) < DIFF_MAX);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
154 ELIM_TRUE (strlen ((*pa5_7)[4]) < DIFF_MAX);
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
155 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
156
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
157 void elim_global_arrays_and_strings (int i)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
158 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
159 ELIM_TRUE (strlen (i < 0 ? a3 : "") < 3);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
160 ELIM_TRUE (strlen (i < 0 ? a3 : "1") < 3);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
161 ELIM_TRUE (strlen (i < 0 ? a3 : "12") < 3);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
162 ELIM_TRUE (strlen (i < 0 ? a3 : "123") < 4);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
163
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
164 ELIM_FALSE (strlen (i < 0 ? a3 : "") > 3);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
165 ELIM_FALSE (strlen (i < 0 ? a3 : "1") > 3);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
166 ELIM_FALSE (strlen (i < 0 ? a3 : "12") > 3);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
167 ELIM_FALSE (strlen (i < 0 ? a3 : "123") > 4);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
168
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
169 ELIM_TRUE (strlen (i < 0 ? a7 : "") < 7);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
170 ELIM_TRUE (strlen (i < 0 ? a7 : "1") < 7);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
171 ELIM_TRUE (strlen (i < 0 ? a7 : "12") < 7);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
172 ELIM_TRUE (strlen (i < 0 ? a7 : "123") < 7);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
173 ELIM_TRUE (strlen (i < 0 ? a7 : "123456") < 7);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
174 ELIM_TRUE (strlen (i < 0 ? a7 : "1234567") < 8);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
175
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
176 ELIM_FALSE (strlen (i < 0 ? a7 : "") > 6);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
177 ELIM_FALSE (strlen (i < 0 ? a7 : "1") > 6);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
178 ELIM_FALSE (strlen (i < 0 ? a7 : "12") > 6);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
179 ELIM_FALSE (strlen (i < 0 ? a7 : "123") > 6);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
180 ELIM_FALSE (strlen (i < 0 ? a7 : "123456") > 7);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
181 ELIM_FALSE (strlen (i < 0 ? a7 : "1234567") > 8);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
182 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
183
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
184 void elim_member_arrays_obj (int i)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
185 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
186 ELIM_TRUE (strlen (ma0_3_5_7[0][0][0].a3) < sizeof ma0_3_5_7);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
187 ELIM_TRUE (strlen (ma0_3_5_7[0][0][1].a3) < sizeof ma0_3_5_7);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
188 ELIM_TRUE (strlen (ma0_3_5_7[0][0][2].a3) < sizeof ma0_3_5_7);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
189 ELIM_TRUE (strlen (ma0_3_5_7[0][0][6].a3) < sizeof ma0_3_5_7);
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
190
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
191 ELIM_TRUE (strlen (ma0_3_5_7[1][0][0].a3) < sizeof ma0_3_5_7);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
192 ELIM_TRUE (strlen (ma0_3_5_7[2][0][1].a3) < sizeof ma0_3_5_7);
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
193
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
194 ELIM_TRUE (strlen (ma0_3_5_7[1][1][0].a3) < sizeof ma0_3_5_7);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
195 ELIM_TRUE (strlen (ma0_3_5_7[2][4][6].a3) < sizeof ma0_3_5_7);
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
196
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
197 ELIM_TRUE (strlen (ma0_3_5_7[0][0][0].a5) < sizeof ma0_3_5_7);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
198 ELIM_TRUE (strlen (ma0_3_5_7[0][0][1].a5) < sizeof ma0_3_5_7);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
199 ELIM_TRUE (strlen (ma0_3_5_7[0][0][2].a5) < sizeof ma0_3_5_7);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
200 ELIM_TRUE (strlen (ma0_3_5_7[0][0][6].a5) < sizeof ma0_3_5_7);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
201
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
202 ELIM_TRUE (strlen (ma0_3_5_7[1][0][0].a5) < sizeof ma0_3_5_7);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
203 ELIM_TRUE (strlen (ma0_3_5_7[2][0][1].a5) < sizeof ma0_3_5_7);
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
204
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
205 ELIM_TRUE (strlen (ma0_3_5_7[1][1][0].a5) < sizeof ma0_3_5_7);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
206 ELIM_TRUE (strlen (ma0_3_5_7[2][4][6].a5) < sizeof ma0_3_5_7);
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
207
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
208 ELIM_TRUE (strlen (ma0_3_5_7[0][0][0].a7_3[0]) < sizeof ma0_3_5_7);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
209 ELIM_TRUE (strlen (ma0_3_5_7[2][4][6].a7_3[2]) < sizeof ma0_3_5_7);
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
210
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
211 ELIM_TRUE (strlen (ma0_3_5_7[0][0][0].a5_7[0]) < sizeof ma0_3_5_7);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
212 ELIM_TRUE (strlen (ma0_3_5_7[2][4][6].a5_7[4]) < sizeof ma0_3_5_7);
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
213 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
214
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
215
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
216 #line 1000
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
217
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
218 /* Verify that strlen calls involving uninitialized global arrays
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
219 of unknown size are not eliminated when they appear in expressions
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
220 that test for results that need not be true. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
221 void keep_global_arrays (int i)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
222 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
223 KEEP (strlen (a7_3[0]) < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
224 KEEP (strlen (a7_3[1]) < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
225 KEEP (strlen (a7_3[6]) < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
226 KEEP (strlen (a7_3[i]) < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
227
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
228 KEEP (strlen (a5_7[0]) < 6);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
229 KEEP (strlen (a5_7[1]) < 6);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
230 KEEP (strlen (a5_7[4]) < 6);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
231 KEEP (strlen (a5_7[i]) < 6);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
232
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
233 /* Verify also that tests (and strlen calls) are not eliminated
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
234 for results greater than what would the size of the innermost
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
235 array suggest might be possible (in case the element array is
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
236 not nul-terminated), even though such calls are undefined. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
237 KEEP (strlen (a5_7[0]) > sizeof a5_7 - 2);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
238 KEEP (strlen (a5_7[1]) > sizeof a5_7 - sizeof a5_7[1] - 2);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
239 KEEP (strlen (a5_7[i]) > sizeof a5_7 - 2);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
240
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
241 KEEP (strlen (ax_3[0]) < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
242 KEEP (strlen (ax_3[1]) < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
243 KEEP (strlen (ax_3[2]) < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
244 KEEP (strlen (ax_3[i]) < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
245
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
246 /* Here again, verify that the ax_3 matrix is treated essentially
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
247 as a flat array of unknown bound for the benefit of all the
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
248 undefined code out there that might rely on it. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
249 KEEP (strlen (ax_3[0]) > 3);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
250 KEEP (strlen (ax_3[1]) > 9);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
251 KEEP (strlen (ax_3[2]) > 99);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
252 KEEP (strlen (ax_3[i]) > 999);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
253
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
254 KEEP (strlen (a3) < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
255 KEEP (strlen (a7) < 6);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
256
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
257 KEEP (strlen (a3 + i) < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
258 KEEP (strlen (a7 + i) < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
259
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
260 /* The length of an array of unknown size may be as large as
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
261 DIFF_MAX - 2. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
262 KEEP (strlen (ax) != DIFF_MAX - 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
263 KEEP (strlen (ax) < DIFF_MAX - 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
264 KEEP (strlen (ax) < 999);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
265 KEEP (strlen (ax) < 1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
266 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
267
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
268 void keep_pointer_to_arrays (int i)
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
269 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
270 KEEP (strlen (*pa7) < 6);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
271 KEEP (strlen (*pa5) < 4);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
272 KEEP (strlen (*pa3) < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
273
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
274 /* Since GCC cannot be trusted not to misuse a pointer to a smaller
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
275 array to point to an object of a larger type verify that the bound
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
276 in a pointer to an array of a known bound isn't relied on for
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
277 the strlen range optimization. If GCC is fixed to avoid these
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
278 misuses these tests can be removed. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
279 KEEP (strlen (*pa7) > sizeof *pa7);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
280 KEEP (strlen (*pa5) > sizeof *pa5);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
281 KEEP (strlen (*pa3) > sizeof *pa3);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
282
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
283 KEEP (strlen ((*pa7_3)[0]) < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
284 KEEP (strlen ((*pa7_3)[1]) < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
285 KEEP (strlen ((*pa7_3)[6]) < 2);
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
286 KEEP (strlen ((*pa7_3)[i]) < 2);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
287
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
288 /* Same as above. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
289 KEEP (strlen ((*pa7_3)[0]) > sizeof *pa7_3);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
290 KEEP (strlen ((*pa7_3)[i]) > sizeof *pa7_3);
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
291
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
292 KEEP (strlen ((*pax_3)[0]) < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
293 KEEP (strlen ((*pax_3)[1]) < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
294 KEEP (strlen ((*pax_3)[9]) < 2);
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
295 KEEP (strlen ((*pax_3)[i]) < 2);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
296
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
297 /* Same as above. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
298 KEEP (strlen ((*pax_3)[0]) > 3);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
299 KEEP (strlen ((*pax_3)[i]) > 333);
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
300
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
301 KEEP (strlen ((*pa5_7)[0]) < 6);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
302 KEEP (strlen ((*pa5_7)[1]) < 6);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
303 KEEP (strlen ((*pa5_7)[4]) < 6);
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
304 KEEP (strlen ((*pa5_7)[i]) < 6);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
305
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
306 /* Same as above. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
307 KEEP (strlen ((*pa5_7)[0]) > sizeof *pa5_7);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
308 KEEP (strlen ((*pa5_7)[i]) > sizeof *pa5_7);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
309 }
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
310
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
311 void keep_global_arrays_and_strings (int i)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
312 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
313 KEEP (strlen (i < 0 ? a3 : "") < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
314 KEEP (strlen (i < 0 ? a3 : "1") < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
315 KEEP (strlen (i < 0 ? a3 : "12") < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
316 KEEP (strlen (i < 0 ? a3 : "123") < 3);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
317
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
318 KEEP (strlen (i < 0 ? a7 : "") < 5);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
319 KEEP (strlen (i < 0 ? a7 : "1") < 5);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
320 KEEP (strlen (i < 0 ? a7 : "12") < 5);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
321 KEEP (strlen (i < 0 ? a7 : "123") < 5);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
322 KEEP (strlen (i < 0 ? a7 : "123456") < 6);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
323 KEEP (strlen (i < 0 ? a7 : "1234567") < 6);
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
324
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
325 /* Verify that a matrix is treated as a flat array even in a conditional
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
326 expression (i.e., don't assume that a7_3[0] is nul-terminated, even
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
327 though calling strlen() on such an array is undefined). */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
328 KEEP (strlen (i < 0 ? a7_3[0] : "") > 7);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
329 KEEP (strlen (i < 0 ? a7_3[i] : "") > 7);
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
330 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
331
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
332 void keep_member_arrays_obj (int i)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
333 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
334 KEEP (strlen (ma0_3_5_7[0][0][0].a3) < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
335 KEEP (strlen (ma0_3_5_7[0][0][1].a3) < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
336 KEEP (strlen (ma0_3_5_7[0][0][2].a3) < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
337 KEEP (strlen (ma0_3_5_7[0][0][6].a3) < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
338
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
339 KEEP (strlen (ma0_3_5_7[1][0][0].a3) < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
340 KEEP (strlen (ma0_3_5_7[2][0][1].a3) < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
341
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
342 KEEP (strlen (ma0_3_5_7[1][1][0].a3) < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
343 KEEP (strlen (ma0_3_5_7[2][4][6].a3) < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
344
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
345 KEEP (strlen (ma0_3_5_7[0][0][0].a5) < 4);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
346 KEEP (strlen (ma0_3_5_7[0][0][1].a5) < 4);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
347 KEEP (strlen (ma0_3_5_7[0][0][2].a5) < 4);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
348 KEEP (strlen (ma0_3_5_7[0][0][6].a5) < 4);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
349
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
350 KEEP (strlen (ma0_3_5_7[1][0][0].a5) < 4);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
351 KEEP (strlen (ma0_3_5_7[2][0][1].a5) < 4);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
352
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
353 KEEP (strlen (ma0_3_5_7[1][1][0].a5) < 4);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
354 KEEP (strlen (ma0_3_5_7[2][4][6].a5) < 4);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
355
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
356 KEEP (strlen (ma0_3_5_7[0][0][0].a7_3[0]) < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
357 KEEP (strlen (ma0_3_5_7[2][4][6].a7_3[2]) < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
358
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
359 KEEP (strlen (ma0_3_5_7[0][0][0].a5_7[0]) < 6);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
360 KEEP (strlen (ma0_3_5_7[2][4][6].a5_7[4]) < 6);
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
361
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
362 /* Again, verify that the .a3 array isn't assumed to necessarily
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
363 be nul-terminated. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
364 KEEP (strlen (ma0_3_5_7[0][0][0].a3) > 2);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
365 KEEP (strlen (ma0_3_5_7[0][0][6].a3) > 2);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
366 KEEP (strlen (ma0_3_5_7[0][0][i].a3) > 2);
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
367 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
368
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
369 void keep_member_arrays_ptr (struct MemArrays0 *ma0,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
370 struct MemArraysX *max,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
371 struct MemArrays7 *ma7,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
372 int i)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
373 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
374 KEEP (strlen (ma0->a7_3[0]) > 0);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
375 KEEP (strlen (ma0->a7_3[0]) < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
376 KEEP (strlen (ma0->a7_3[1]) < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
377 KEEP (strlen (ma0->a7_3[6]) < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
378 KEEP (strlen (ma0->a7_3[6]) < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
379 KEEP (strlen (ma0->a7_3[i]) > 0);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
380 KEEP (strlen (ma0->a7_3[i]) < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
381 KEEP (strlen (ma0->a7_3[i]) < 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
382
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
383 /* Again, verify that the member array isn't assumed to necessarily
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
384 be nul-terminated. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
385 KEEP (strlen (ma0->a7_3[0]) > sizeof ma0->a7_3);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
386 KEEP (strlen (ma0->a7_3[i]) > sizeof ma0->a7_3);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
387
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
388 KEEP (strlen (ma0->a5_7[0]) < 5);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
389 KEEP (strlen (ma0[0].a5_7[0]) < 5);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
390 KEEP (strlen (ma0[1].a5_7[0]) < 5);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
391 KEEP (strlen (ma0[9].a5_7[0]) < 5);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
392 KEEP (strlen (ma0[9].a5_7[4]) < 5);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
393 KEEP (strlen (ma0[i].a5_7[4]) < 5);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
394 KEEP (strlen (ma0[i].a5_7[i]) < 5);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
395
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
396 /* Same as above. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
397 KEEP (strlen (ma0[i].a5_7[i]) > sizeof ma0[i].a5_7);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
398
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
399 KEEP (strlen (ma0->a0) < DIFF_MAX - 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
400 KEEP (strlen (ma0->a0) < 999);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
401 KEEP (strlen (ma0->a0) < 1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
402
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
403 KEEP (strlen (max->ax) < DIFF_MAX - 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
404 KEEP (strlen (max->ax) < 999);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
405 KEEP (strlen (max->ax) < 1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
406
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
407 KEEP (strlen (ma7->a7) < DIFF_MAX - 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
408 KEEP (strlen (ma7->a7) < 999);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
409 KEEP (strlen (ma7->a7) < 1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
410 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
411
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
412 void keep_pointers (const char *s)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
413 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
414 KEEP (strlen (ptr) < DIFF_MAX - 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
415 KEEP (strlen (ptr) < 999);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
416 KEEP (strlen (ptr) < 1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
417
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
418 KEEP (strlen (s) < DIFF_MAX - 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
419 KEEP (strlen (s) < 999);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
420 KEEP (strlen (s) < 1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
421 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
422
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
423
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
424 /* { dg-final { scan-tree-dump-times "call_in_true_branch_not_eliminated_" 0 "optimized" } }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
425 { dg-final { scan-tree-dump-times "call_in_false_branch_not_eliminated_" 0 "optimized" } }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
426
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
427 { dg-final { scan-tree-dump-times "call_made_in_true_branch_on_line_1\[0-9\]\[0-9\]\[0-9\]" 119 "optimized" } }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
428 { dg-final { scan-tree-dump-times "call_made_in_false_branch_on_line_1\[0-9\]\[0-9\]\[0-9\]" 119 "optimized" } } */