Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/gcc.dg/Warray-bounds-61.c @ 152:2b5abeee2509
update gcc11
author | anatofuz |
---|---|
date | Mon, 25 May 2020 07:50:57 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
145:1830386684a0 | 152:2b5abeee2509 |
---|---|
1 /* PR middle-end/94940 - spurious -Warray-bounds for a zero length array | |
2 member of union | |
3 { dg-do compile } | |
4 { dg-options "-O2 -Wall" } */ | |
5 | |
6 extern int n; | |
7 | |
8 extern union Ua3_a0 { | |
9 int a3[3]; | |
10 int a2[2]; // can only alias a3[0 - 2] | |
11 int a1[1]; // can alias all of the union | |
12 int a0[0]; // ditto | |
13 } ua3_a0; | |
14 | |
15 void test_ua3_ua0_a0 (int i) | |
16 { | |
17 ua3_a0.a0[0] = 0; // { dg-bogus "\\\[-Warray-bounds" } | |
18 ua3_a0.a0[1] = 0; // { dg-bogus "\\\[-Warray-bounds" } | |
19 ua3_a0.a0[2] = 0; // { dg-bogus "\\\[-Warray-bounds" } | |
20 ua3_a0.a0[3] = 0; // { dg-warning "\\\[-Warray-bounds" } | |
21 ua3_a0.a0[4] = 0; // { dg-warning "\\\[-Warray-bounds" } | |
22 ua3_a0.a0[i] = 0; // { dg-bogus "\\\[-Warray-bounds" } | |
23 | |
24 if (i < __LINE__) | |
25 i = 5; | |
26 ua3_a0.a0[i] = 0; // { dg-warning "\\\[-Warray-bounds" } | |
27 | |
28 if (i > -1) | |
29 i = -1; | |
30 ua3_a0.a0[i] = 0; // { dg-warning "\\\[-Warray-bounds" } | |
31 } | |
32 | |
33 void test_ua3_ua0_a1 (int i) | |
34 { | |
35 /* Abusing one-element array members the same way as those of | |
36 length zero is discouraged but so far acceted without warnings. | |
37 This should change at some point. */ | |
38 | |
39 ua3_a0.a1[0] = 0; | |
40 ua3_a0.a1[1] = 0; | |
41 ua3_a0.a1[2] = 0; | |
42 ua3_a0.a1[3] = 0; // { dg-warning "\\\[-Warray-bounds" } | |
43 ua3_a0.a1[i] = 0; | |
44 | |
45 if (i > -1) | |
46 i = -1; | |
47 ua3_a0.a1[i] = 0; // { dg-warning "\\\[-Warray-bounds" } | |
48 | |
49 if (i < 7) | |
50 i = 7; | |
51 ua3_a0.a1[i] = 0; // { dg-warning "\\\[-Warray-bounds" } | |
52 } | |
53 | |
54 void test_ua3_ua0_a2 (int i) | |
55 { | |
56 ua3_a0.a2[0] = 0; | |
57 ua3_a0.a2[1] = 0; | |
58 ua3_a0.a2[2] = 0; // { dg-warning "\\\[-Warray-bounds" } | |
59 ua3_a0.a2[i] = 0; | |
60 | |
61 if (i < __LINE__) | |
62 i = __LINE__; | |
63 ua3_a0.a2[i] = 0; // { dg-warning "\\\[-Warray-bounds" } | |
64 | |
65 if (i > -1) | |
66 i = -1; | |
67 ua3_a0.a2[i] = 0; // { dg-warning "\\\[-Warray-bounds" } | |
68 } | |
69 | |
70 | |
71 extern union Ua2_a3 { | |
72 int a2[2]; // can only alias a3[0 - 1] | |
73 int a3[3]; | |
74 } ua2_a3; | |
75 | |
76 void test_ua2_ua3 (int i) | |
77 { | |
78 ua2_a3.a2[0] = 0; // { dg-bogus "\\\[-Warray-bounds" } | |
79 ua2_a3.a2[1] = 0; // { dg-bogus "\\\[-Warray-bounds" } | |
80 ua2_a3.a2[2] = 0; // { dg-warning "\\\[-Warray-bounds" } | |
81 ua2_a3.a2[i] = 0; | |
82 | |
83 if (i < __LINE__) | |
84 i = __LINE__; | |
85 ua2_a3.a2[i] = 0; // { dg-warning "\\\[-Warray-bounds" } | |
86 } | |
87 | |
88 | |
89 extern struct SUa2_a0 { | |
90 union Ua2_a0 { | |
91 int a2[2]; | |
92 int a0[0]; | |
93 } u; | |
94 } sua2_a0; | |
95 | |
96 void test_sua2_sua0 (int i) | |
97 { | |
98 n += sua2_a0.u.a0[0]; | |
99 n += sua2_a0.u.a0[1]; | |
100 n += sua2_a0.u.a0[2]; // { dg-warning "\\\[-Warray-bounds" } | |
101 n += sua2_a0.u.a0[i]; | |
102 | |
103 if (i < __LINE__) | |
104 i = __LINE__; | |
105 n += sua2_a0.u.a0[i]; // { dg-warning "\\\[-Warray-bounds" } | |
106 } | |
107 | |
108 void test_sua2_sua0_ptr (int i) | |
109 { | |
110 union Ua2_a0 *p = &sua2_a0.u; | |
111 | |
112 n += p->a0[0]; | |
113 n += p->a0[1]; | |
114 n += p->a0[2]; // { dg-warning "\\\[-Warray-bounds" } | |
115 n += p->a0[i]; | |
116 } | |
117 | |
118 | |
119 extern struct SUSa3_a0 { | |
120 union USa3_a0 { | |
121 struct { | |
122 int a3[3]; | |
123 } s; | |
124 int a2[2]; // can alias s.a3[0 - 2] | |
125 int a1[1]; // can alias s.a3[0 - 2] | |
126 int a0[0]; // can alias s.a3[0] | |
127 } u; | |
128 } susa3_ua0; | |
129 | |
130 void test_susa3_sua0 (int i, int j) | |
131 { | |
132 n += susa3_ua0.u.a0[0]; | |
133 n += susa3_ua0.u.a0[1]; | |
134 n += susa3_ua0.u.a0[2]; | |
135 n += susa3_ua0.u.a0[3]; // { dg-warning "\\\[-Warray-bounds" } | |
136 } | |
137 | |
138 void test_susa3_sua0_ptr (int i, int j) | |
139 { | |
140 union USa3_a0 *p = &susa3_ua0.u; | |
141 n += p->a0[0]; | |
142 n += p->a0[1]; | |
143 n += p->a0[2]; | |
144 n += p->a0[3]; // { dg-warning "\\\[-Warray-bounds" } | |
145 } | |
146 | |
147 void test_susa3_sua1 (int i) | |
148 { | |
149 n += susa3_ua0.u.a1[0]; | |
150 n += susa3_ua0.u.a1[1]; | |
151 n += susa3_ua0.u.a1[2]; | |
152 n += susa3_ua0.u.a1[3]; // { dg-warning "\\\[-Warray-bounds" } | |
153 | |
154 if (i < __LINE__) | |
155 i = __LINE__; | |
156 n += susa3_ua0.u.a1[i]; // { dg-warning "\\\[-Warray-bounds" } | |
157 } | |
158 | |
159 void test_susa3_sua2 (void) | |
160 { | |
161 n += susa3_ua0.u.a2[0]; | |
162 n += susa3_ua0.u.a2[1]; | |
163 n += susa3_ua0.u.a2[2]; // { dg-warning "\\\[-Warray-bounds" } | |
164 n += susa3_ua0.u.a2[3]; // { dg-warning "\\\[-Warray-bounds" } | |
165 } | |
166 | |
167 | |
168 extern struct { | |
169 union { | |
170 struct { | |
171 int a3[3]; | |
172 } s1; | |
173 struct { | |
174 int a0[0]; | |
175 } s2; | |
176 } u; | |
177 } susa3_usa0; | |
178 | |
179 void test_susi3_susi0 (int i) | |
180 { | |
181 n += susa3_usa0.u.s2.a0[0]; | |
182 n += susa3_usa0.u.s2.a0[1]; | |
183 n += susa3_usa0.u.s2.a0[2]; | |
184 n += susa3_usa0.u.s2.a0[3]; // { dg-warning "\\\[-Warray-bounds" } | |
185 n += susa3_usa0.u.s2.a0[i]; | |
186 | |
187 if (i < __LINE__) | |
188 i = __LINE__; | |
189 n += susa3_usa0.u.s2.a0[i]; // { dg-warning "\\\[-Warray-bounds" } | |
190 } |