1 /* PR tree-optimization/84526 - ICE in generic_overlap
2 Unrelated to the ICE but rather to PR 84095 that introduced it, verify
3 that calls to strncpy involving multidimensional arrays of structs don't
4 trigger false positive -Wrestrict warnings.
6 { dg-options "-O2 -Wrestrict -ftrack-macro-expansion=0" } */
8 typedef __SIZE_TYPE__
size_t;
10 extern char* strcpy (char*, const char*);
17 } ma1
[4], ma2
[4][4], ma3
[4][4][4];
19 #define T(dst, src) do { \
20 strcpy (src, "123"); \
25 void test_ma1_cst (const char *s
)
27 T (ma1
[0].a1
, ma1
[0].a1
); /* { dg-warning "\\\[-Wrestrict]" } */
28 T (ma1
[0].a1
, ma1
[1].a1
);
29 T (ma1
[0].a1
, ma1
[2].a1
);
30 T (ma1
[0].a1
, ma1
[3].a1
);
32 T (ma1
[0].a1
, ma1
[0].a1
); /* { dg-warning "\\\[-Wrestrict]" } */
33 T (ma1
[1].a1
, ma1
[0].a1
);
34 T (ma1
[2].a1
, ma1
[0].a1
);
35 T (ma1
[3].a1
, ma1
[0].a1
);
39 void test_ma1_var_cst (const char *s
, int i
)
41 T (ma1
[i
].a1
, ma1
[0].a1
);
42 T (ma1
[i
].a1
, ma1
[1].a1
);
43 T (ma1
[i
].a1
, ma1
[2].a1
);
44 T (ma1
[i
].a1
, ma1
[3].a1
);
46 T (ma1
[0].a1
, ma1
[i
].a1
);
47 T (ma1
[1].a1
, ma1
[i
].a1
);
48 T (ma1
[2].a1
, ma1
[i
].a1
);
49 T (ma1
[3].a1
, ma1
[i
].a1
);
53 void test_ma1_var_var (const char *s
, int i
, int j
)
55 T (ma1
[i
].a1
, ma1
[j
].a1
);
56 T (ma1
[i
].a1
, ma1
[j
].a1
);
57 T (ma1
[i
].a1
, ma1
[j
].a1
);
58 T (ma1
[i
].a1
, ma1
[j
].a1
);
60 T (ma1
[i
].a1
, ma1
[j
].a1
);
61 T (ma1
[i
].a1
, ma1
[j
].a1
);
62 T (ma1
[i
].a1
, ma1
[j
].a1
);
63 T (ma1
[i
].a1
, ma1
[j
].a1
);
67 void test_ma2_cst (const char *s
)
69 T (ma2
[0][0].a1
, ma2
[0][0].a1
); /* { dg-warning "\\\[-Wrestrict]" } */
70 T (ma2
[0][0].a1
, ma2
[0][1].a1
);
71 T (ma2
[0][0].a1
, ma2
[0][2].a1
);
72 T (ma2
[0][0].a1
, ma2
[0][3].a1
);
74 T (ma2
[0][0].a1
, ma2
[1][0].a1
);
75 T (ma2
[0][0].a1
, ma2
[1][1].a1
);
76 T (ma2
[0][0].a1
, ma2
[1][2].a1
);
77 T (ma2
[0][0].a1
, ma2
[1][3].a1
);
79 T (ma2
[0][0].a1
, ma2
[2][0].a1
);
80 T (ma2
[0][0].a1
, ma2
[2][1].a1
);
81 T (ma2
[0][0].a1
, ma2
[2][2].a1
);
82 T (ma2
[0][0].a1
, ma2
[2][3].a1
);
84 T (ma2
[0][0].a1
, ma2
[3][0].a1
);
85 T (ma2
[0][0].a1
, ma2
[3][1].a1
);
86 T (ma2
[0][0].a1
, ma2
[3][2].a1
);
87 T (ma2
[0][0].a1
, ma2
[3][3].a1
);
90 T (ma2
[0][1].a1
, ma2
[0][0].a1
);
91 T (ma2
[0][1].a1
, ma2
[0][1].a1
); /* { dg-warning "\\\[-Wrestrict]" } */
92 T (ma2
[0][1].a1
, ma2
[0][2].a1
);
93 T (ma2
[0][1].a1
, ma2
[0][3].a1
);
95 T (ma2
[0][1].a1
, ma2
[1][0].a1
);
96 T (ma2
[0][1].a1
, ma2
[1][1].a1
);
97 T (ma2
[0][1].a1
, ma2
[1][2].a1
);
98 T (ma2
[0][1].a1
, ma2
[1][3].a1
);
100 T (ma2
[0][1].a1
, ma2
[2][0].a1
);
101 T (ma2
[0][1].a1
, ma2
[2][1].a1
);
102 T (ma2
[0][1].a1
, ma2
[2][2].a1
);
103 T (ma2
[0][1].a1
, ma2
[2][3].a1
);
105 T (ma2
[0][1].a1
, ma2
[3][0].a1
);
106 T (ma2
[0][1].a1
, ma2
[3][1].a1
);
107 T (ma2
[0][1].a1
, ma2
[3][2].a1
);
108 T (ma2
[0][1].a1
, ma2
[3][3].a1
);
111 T (ma2
[0][2].a1
, ma2
[0][0].a1
);
112 T (ma2
[0][2].a1
, ma2
[0][1].a1
);
113 T (ma2
[0][2].a1
, ma2
[0][2].a1
); /* { dg-warning "\\\[-Wrestrict]" } */
114 T (ma2
[0][2].a1
, ma2
[0][3].a1
);
116 T (ma2
[0][2].a1
, ma2
[1][0].a1
);
117 T (ma2
[0][2].a1
, ma2
[1][1].a1
);
118 T (ma2
[0][2].a1
, ma2
[1][2].a1
);
119 T (ma2
[0][2].a1
, ma2
[1][3].a1
);
121 T (ma2
[0][2].a1
, ma2
[2][0].a1
);
122 T (ma2
[0][2].a1
, ma2
[2][1].a1
);
123 T (ma2
[0][2].a1
, ma2
[2][2].a1
);
124 T (ma2
[0][2].a1
, ma2
[2][3].a1
);
126 T (ma2
[0][2].a1
, ma2
[3][0].a1
);
127 T (ma2
[0][2].a1
, ma2
[3][1].a1
);
128 T (ma2
[0][2].a1
, ma2
[3][2].a1
);
129 T (ma2
[0][2].a1
, ma2
[3][3].a1
);
132 T (ma2
[0][3].a1
, ma2
[0][0].a1
);
133 T (ma2
[0][3].a1
, ma2
[0][1].a1
);
134 T (ma2
[0][3].a1
, ma2
[0][2].a1
);
135 T (ma2
[0][3].a1
, ma2
[0][3].a1
); /* { dg-warning "\\\[-Wrestrict]" } */
137 T (ma2
[0][3].a1
, ma2
[1][0].a1
);
138 T (ma2
[0][3].a1
, ma2
[1][1].a1
);
139 T (ma2
[0][3].a1
, ma2
[1][2].a1
);
140 T (ma2
[0][3].a1
, ma2
[1][3].a1
);
142 T (ma2
[0][3].a1
, ma2
[2][0].a1
);
143 T (ma2
[0][3].a1
, ma2
[2][1].a1
);
144 T (ma2
[0][3].a1
, ma2
[2][2].a1
);
145 T (ma2
[0][3].a1
, ma2
[2][3].a1
);
147 T (ma2
[0][3].a1
, ma2
[3][0].a1
);
148 T (ma2
[0][3].a1
, ma2
[3][1].a1
);
149 T (ma2
[0][3].a1
, ma2
[3][2].a1
);
150 T (ma2
[0][3].a1
, ma2
[3][3].a1
);
154 void test_ma2_var (int i0
, int j0
, int i1
, int j1
)
156 T (ma2
[i0
][j0
].a1
, ma2
[i0
][j0
].a1
); /* { dg-warning "\\\[-Wrestrict]" } */
158 T (ma2
[i0
][j0
].a1
, ma2
[i0
][j1
].a1
); /* { dg-bogus "\\\[-Wrestrict]" } */
159 T (ma2
[i0
][j0
].a1
, ma2
[i1
][j1
].a1
); /* { dg-bogus "\\\[-Wrestrict]" } */
161 T (ma2
[0][0].a2
[i0
], ma2
[0][0].a2
[j0
]); /* { dg-bogus "\\\[-Wrestrict]" } */
162 T (ma2
[0][i0
].a2
[0], ma2
[0][i1
].a2
[0]); /* { dg-bogus "\\\[-Wrestrict]" } */
163 T (ma2
[i0
][0].a2
[0], ma2
[i1
][0].a2
[0]); /* { dg-bogus "\\\[-Wrestrict]" } */
164 T (ma2
[i0
][j0
].a2
[0], ma2
[i1
][j1
].a2
[0]); /* { dg-bogus "\\\[-Wrestrict]" } */
168 void test_p2_var (struct MemArrays
**p2
, int i0
, int j0
, int i1
, int j1
)
170 T (p2
[i0
][j0
].a1
, p2
[i0
][j0
].a1
); /* { dg-warning "\\\[-Wrestrict]" } */
172 T (p2
[i0
][j0
].a1
, p2
[i0
][j1
].a1
);
173 T (p2
[i0
][j0
].a1
, p2
[i1
][j1
].a1
);
175 T (p2
[0][0].a2
[i0
], p2
[0][0].a2
[j0
]);
176 T (p2
[0][i0
].a2
[0], p2
[0][i1
].a2
[0]);
177 T (p2
[i0
][0].a2
[0], p2
[i1
][0].a2
[0]);
178 T (p2
[i0
][j0
].a2
[0], p2
[i1
][j1
].a2
[0]);
182 void test_ma3_cst (const char *s
)
184 T (ma3
[0][0][0].a1
, ma3
[0][0][0].a1
); /* { dg-warning "\\\[-Wrestrict]" } */
185 T (ma3
[0][0][0].a1
, ma3
[0][0][3].a1
);
187 T (ma3
[0][0][0].a1
, ma3
[0][1][0].a1
);
188 T (ma3
[0][0][0].a1
, ma3
[0][1][3].a1
);
189 T (ma3
[0][0][0].a1
, ma3
[1][0][0].a1
);
190 T (ma3
[0][0][0].a1
, ma3
[1][0][3].a1
);
191 T (ma3
[0][0][0].a1
, ma3
[3][0][3].a1
);
192 T (ma3
[0][0][0].a1
, ma3
[3][3][3].a1
);
196 void test_ma3_var (const char *s
,
197 int i0
, int j0
, int k0
,
198 int i1
, int j1
, int k1
)
200 T (ma3
[i0
][j0
][k0
].a1
, ma3
[i0
][j0
][k0
].a1
); /* { dg-warning "\\\[-Wrestrict]" } */
202 T (ma3
[i0
][j0
][k0
].a1
, ma3
[i0
][j0
][k1
].a1
); /* { dg-bogus "\\\[-Wrestrict]" } */
203 T (ma3
[i0
][j0
][k0
].a1
, ma3
[i0
][j1
][k1
].a1
); /* { dg-bogus "\\\[-Wrestrict]" } */
204 T (ma3
[i0
][j0
][k0
].a1
, ma3
[i1
][j1
][k1
].a1
); /* { dg-bogus "\\\[-Wrestrict]" } */