Skip analyzer strndup test on hppa*-*-hpux*
[official-gcc.git] / gcc / testsuite / gcc.dg / Wrestrict-11.c
blob07b9cddad4bf52cc3bd593661407799cb05ddae6
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.
5 { dg-do compile }
6 { dg-options "-O2 -Wrestrict -ftrack-macro-expansion=0" }
7 { dg-skip-if "too many arguments in function call" { bpf-*-* } } */
9 typedef __SIZE_TYPE__ size_t;
11 extern char* strcpy (char*, const char*);
13 struct MemArrays
15 char a1[4];
16 char a2[4][4];
17 char a3[4][4][4];
18 } ma1[4], ma2[4][4], ma3[4][4][4];
20 #define T(dst, src) do { \
21 strcpy (src, "123"); \
22 strcpy (dst, src); \
23 } while (0)
26 void test_ma1_cst (const char *s)
28 T (ma1[0].a1, ma1[0].a1); /* { dg-warning "\\\[-Wrestrict]" } */
29 T (ma1[0].a1, ma1[1].a1);
30 T (ma1[0].a1, ma1[2].a1);
31 T (ma1[0].a1, ma1[3].a1);
33 T (ma1[0].a1, ma1[0].a1); /* { dg-warning "\\\[-Wrestrict]" } */
34 T (ma1[1].a1, ma1[0].a1);
35 T (ma1[2].a1, ma1[0].a1);
36 T (ma1[3].a1, ma1[0].a1);
40 void test_ma1_var_cst (const char *s, int i)
42 T (ma1[i].a1, ma1[0].a1);
43 T (ma1[i].a1, ma1[1].a1);
44 T (ma1[i].a1, ma1[2].a1);
45 T (ma1[i].a1, ma1[3].a1);
47 T (ma1[0].a1, ma1[i].a1);
48 T (ma1[1].a1, ma1[i].a1);
49 T (ma1[2].a1, ma1[i].a1);
50 T (ma1[3].a1, ma1[i].a1);
54 void test_ma1_var_var (const char *s, int i, int j)
56 T (ma1[i].a1, ma1[j].a1);
57 T (ma1[i].a1, ma1[j].a1);
58 T (ma1[i].a1, ma1[j].a1);
59 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);
64 T (ma1[i].a1, ma1[j].a1);
68 void test_ma2_cst (const char *s)
70 T (ma2[0][0].a1, ma2[0][0].a1); /* { dg-warning "\\\[-Wrestrict]" } */
71 T (ma2[0][0].a1, ma2[0][1].a1);
72 T (ma2[0][0].a1, ma2[0][2].a1);
73 T (ma2[0][0].a1, ma2[0][3].a1);
75 T (ma2[0][0].a1, ma2[1][0].a1);
76 T (ma2[0][0].a1, ma2[1][1].a1);
77 T (ma2[0][0].a1, ma2[1][2].a1);
78 T (ma2[0][0].a1, ma2[1][3].a1);
80 T (ma2[0][0].a1, ma2[2][0].a1);
81 T (ma2[0][0].a1, ma2[2][1].a1);
82 T (ma2[0][0].a1, ma2[2][2].a1);
83 T (ma2[0][0].a1, ma2[2][3].a1);
85 T (ma2[0][0].a1, ma2[3][0].a1);
86 T (ma2[0][0].a1, ma2[3][1].a1);
87 T (ma2[0][0].a1, ma2[3][2].a1);
88 T (ma2[0][0].a1, ma2[3][3].a1);
91 T (ma2[0][1].a1, ma2[0][0].a1);
92 T (ma2[0][1].a1, ma2[0][1].a1); /* { dg-warning "\\\[-Wrestrict]" } */
93 T (ma2[0][1].a1, ma2[0][2].a1);
94 T (ma2[0][1].a1, ma2[0][3].a1);
96 T (ma2[0][1].a1, ma2[1][0].a1);
97 T (ma2[0][1].a1, ma2[1][1].a1);
98 T (ma2[0][1].a1, ma2[1][2].a1);
99 T (ma2[0][1].a1, ma2[1][3].a1);
101 T (ma2[0][1].a1, ma2[2][0].a1);
102 T (ma2[0][1].a1, ma2[2][1].a1);
103 T (ma2[0][1].a1, ma2[2][2].a1);
104 T (ma2[0][1].a1, ma2[2][3].a1);
106 T (ma2[0][1].a1, ma2[3][0].a1);
107 T (ma2[0][1].a1, ma2[3][1].a1);
108 T (ma2[0][1].a1, ma2[3][2].a1);
109 T (ma2[0][1].a1, ma2[3][3].a1);
112 T (ma2[0][2].a1, ma2[0][0].a1);
113 T (ma2[0][2].a1, ma2[0][1].a1);
114 T (ma2[0][2].a1, ma2[0][2].a1); /* { dg-warning "\\\[-Wrestrict]" } */
115 T (ma2[0][2].a1, ma2[0][3].a1);
117 T (ma2[0][2].a1, ma2[1][0].a1);
118 T (ma2[0][2].a1, ma2[1][1].a1);
119 T (ma2[0][2].a1, ma2[1][2].a1);
120 T (ma2[0][2].a1, ma2[1][3].a1);
122 T (ma2[0][2].a1, ma2[2][0].a1);
123 T (ma2[0][2].a1, ma2[2][1].a1);
124 T (ma2[0][2].a1, ma2[2][2].a1);
125 T (ma2[0][2].a1, ma2[2][3].a1);
127 T (ma2[0][2].a1, ma2[3][0].a1);
128 T (ma2[0][2].a1, ma2[3][1].a1);
129 T (ma2[0][2].a1, ma2[3][2].a1);
130 T (ma2[0][2].a1, ma2[3][3].a1);
133 T (ma2[0][3].a1, ma2[0][0].a1);
134 T (ma2[0][3].a1, ma2[0][1].a1);
135 T (ma2[0][3].a1, ma2[0][2].a1);
136 T (ma2[0][3].a1, ma2[0][3].a1); /* { dg-warning "\\\[-Wrestrict]" } */
138 T (ma2[0][3].a1, ma2[1][0].a1);
139 T (ma2[0][3].a1, ma2[1][1].a1);
140 T (ma2[0][3].a1, ma2[1][2].a1);
141 T (ma2[0][3].a1, ma2[1][3].a1);
143 T (ma2[0][3].a1, ma2[2][0].a1);
144 T (ma2[0][3].a1, ma2[2][1].a1);
145 T (ma2[0][3].a1, ma2[2][2].a1);
146 T (ma2[0][3].a1, ma2[2][3].a1);
148 T (ma2[0][3].a1, ma2[3][0].a1);
149 T (ma2[0][3].a1, ma2[3][1].a1);
150 T (ma2[0][3].a1, ma2[3][2].a1);
151 T (ma2[0][3].a1, ma2[3][3].a1);
155 void test_ma2_var (int i0, int j0, int i1, int j1)
157 T (ma2[i0][j0].a1, ma2[i0][j0].a1); /* { dg-warning "\\\[-Wrestrict]" } */
159 T (ma2[i0][j0].a1, ma2[i0][j1].a1); /* { dg-bogus "\\\[-Wrestrict]" } */
160 T (ma2[i0][j0].a1, ma2[i1][j1].a1); /* { dg-bogus "\\\[-Wrestrict]" } */
162 T (ma2[0][0].a2[i0], ma2[0][0].a2[j0]); /* { dg-bogus "\\\[-Wrestrict]" } */
163 T (ma2[0][i0].a2[0], ma2[0][i1].a2[0]); /* { dg-bogus "\\\[-Wrestrict]" } */
164 T (ma2[i0][0].a2[0], ma2[i1][0].a2[0]); /* { dg-bogus "\\\[-Wrestrict]" } */
165 T (ma2[i0][j0].a2[0], ma2[i1][j1].a2[0]); /* { dg-bogus "\\\[-Wrestrict]" } */
169 void test_p2_var (struct MemArrays **p2, int i0, int j0, int i1, int j1)
171 T (p2[i0][j0].a1, p2[i0][j0].a1); /* { dg-warning "\\\[-Wrestrict]" } */
173 T (p2[i0][j0].a1, p2[i0][j1].a1);
174 T (p2[i0][j0].a1, p2[i1][j1].a1);
176 T (p2[0][0].a2[i0], p2[0][0].a2[j0]);
177 T (p2[0][i0].a2[0], p2[0][i1].a2[0]);
178 T (p2[i0][0].a2[0], p2[i1][0].a2[0]);
179 T (p2[i0][j0].a2[0], p2[i1][j1].a2[0]);
183 void test_ma3_cst (const char *s)
185 T (ma3[0][0][0].a1, ma3[0][0][0].a1); /* { dg-warning "\\\[-Wrestrict]" } */
186 T (ma3[0][0][0].a1, ma3[0][0][3].a1);
188 T (ma3[0][0][0].a1, ma3[0][1][0].a1);
189 T (ma3[0][0][0].a1, ma3[0][1][3].a1);
190 T (ma3[0][0][0].a1, ma3[1][0][0].a1);
191 T (ma3[0][0][0].a1, ma3[1][0][3].a1);
192 T (ma3[0][0][0].a1, ma3[3][0][3].a1);
193 T (ma3[0][0][0].a1, ma3[3][3][3].a1);
197 void test_ma3_var (const char *s,
198 int i0, int j0, int k0,
199 int i1, int j1, int k1)
201 T (ma3[i0][j0][k0].a1, ma3[i0][j0][k0].a1); /* { dg-warning "\\\[-Wrestrict]" } */
203 T (ma3[i0][j0][k0].a1, ma3[i0][j0][k1].a1); /* { dg-bogus "\\\[-Wrestrict]" } */
204 T (ma3[i0][j0][k0].a1, ma3[i0][j1][k1].a1); /* { dg-bogus "\\\[-Wrestrict]" } */
205 T (ma3[i0][j0][k0].a1, ma3[i1][j1][k1].a1); /* { dg-bogus "\\\[-Wrestrict]" } */