gcc/
[official-gcc.git] / gcc / testsuite / gcc.dg / debug / redecl-1.c
blob14a453e042bf69904925884ee86e14b14195e966
1 /* Test for multiple declarations and composite types. As in bug
2 13801. Test no problems in debug information generation. */
3 /* Origin: Joseph Myers <jsm@polyomino.org.uk> */
4 /* { dg-do compile } */
5 /* { dg-options "" } */
7 typedef int IA[];
8 typedef int A10[10];
10 /* Test all combinations of: a variable declared at file scope (no
11 type specifiers, or extern, or static), or just inside a function
12 (with extern), redeclared in an inner scope (with extern), and
13 redeclared in an inner scope when the previous declaration is
14 hidden (with extern, and not if the original declaration was
15 static). Test three times: incomplete variable types; pointers to
16 incomplete types; functions returning such pointers.
18 This test only includes the valid code cases, to test debug info
19 generation. (Incomplete static at file scope is not permitted by
20 ISO C, but is accepted by GCC as an extension without
21 -pedantic.) */
23 A10 a5;
24 void
25 f5 (void)
27 sizeof(a5);
29 extern IA a5;
30 sizeof(a5);
32 int a5;
34 extern A10 a5;
35 sizeof(a5);
38 sizeof(a5);
40 sizeof(a5);
42 extern A10 a5;
44 A10 a7;
45 void
46 f7 (void)
48 sizeof(a7);
50 extern A10 a7;
51 sizeof(a7);
53 int a7;
55 extern A10 a7;
56 sizeof(a7);
59 sizeof(a7);
61 sizeof(a7);
63 extern A10 a7;
65 extern A10 a13;
66 void
67 f13 (void)
69 sizeof(a13);
71 extern IA a13;
72 sizeof(a13);
74 int a13;
76 extern A10 a13;
77 sizeof(a13);
80 sizeof(a13);
82 sizeof(a13);
84 extern A10 a13;
86 extern A10 a15;
87 void
88 f15 (void)
90 sizeof(a15);
92 extern A10 a15;
93 sizeof(a15);
95 int a15;
97 extern A10 a15;
98 sizeof(a15);
101 sizeof(a15);
103 sizeof(a15);
105 extern A10 a15;
108 static A10 a18;
109 void
110 f18 (void)
112 sizeof(a18);
114 extern IA a18;
115 sizeof(a18);
117 sizeof(a18);
119 extern A10 a18;
121 static A10 a19;
122 void
123 f19 (void)
125 sizeof(a19);
127 extern A10 a19;
128 sizeof(a19);
130 sizeof(a19);
132 extern A10 a19;
134 A10 *b5;
135 void
136 g5 (void)
138 sizeof(*b5);
140 extern IA *b5;
141 sizeof(*b5);
143 int b5;
145 extern A10 *b5;
146 sizeof(*b5);
149 sizeof(*b5);
151 sizeof(*b5);
153 extern A10 *b5;
155 A10 *b7;
156 void
157 g7 (void)
159 sizeof(*b7);
161 extern A10 *b7;
162 sizeof(*b7);
164 int b7;
166 extern A10 *b7;
167 sizeof(*b7);
170 sizeof(*b7);
172 sizeof(*b7);
174 extern A10 *b7;
176 extern A10 *b13;
177 void
178 g13 (void)
180 sizeof(*b13);
182 extern IA *b13;
183 sizeof(*b13);
185 int b13;
187 extern A10 *b13;
188 sizeof(*b13);
191 sizeof(*b13);
193 sizeof(*b13);
195 extern A10 *b13;
197 extern A10 *b15;
198 void
199 g15 (void)
201 sizeof(*b15);
203 extern A10 *b15;
204 sizeof(*b15);
206 int b15;
208 extern A10 *b15;
209 sizeof(*b15);
212 sizeof(*b15);
214 sizeof(*b15);
216 extern A10 *b15;
218 static A10 *b18;
219 void
220 g18 (void)
222 sizeof(*b18);
224 extern IA *b18;
225 sizeof(*b18);
227 sizeof(*b18);
229 extern A10 *b18;
231 static A10 *b19;
232 void
233 g19 (void)
235 sizeof(*b19);
237 extern A10 *b19;
238 sizeof(*b19);
240 sizeof(*b19);
242 extern A10 *b19;
244 A10 *c5 (void);
245 void
246 h5 (void)
248 sizeof(*c5());
250 extern IA *c5 (void);
251 sizeof(*c5());
253 int c5;
255 extern A10 *c5 (void);
256 sizeof(*c5());
259 sizeof(*c5());
261 sizeof(*c5());
263 A10 *c5 (void) { return 0; }
265 A10 *c7 (void);
266 void
267 h7 (void)
269 sizeof(*c7());
271 extern A10 *c7 (void);
272 sizeof(*c7());
274 int c7;
276 extern A10 *c7 (void);
277 sizeof(*c7());
280 sizeof(*c7());
282 sizeof(*c7());
284 A10 *c7 (void) { return 0; }
286 extern A10 *c13 (void);
287 void
288 h13 (void)
290 sizeof(*c13());
292 extern IA *c13 (void);
293 sizeof(*c13());
295 int c13;
297 extern A10 *c13 (void);
298 sizeof(*c13());
301 sizeof(*c13());
303 sizeof(*c13());
305 extern A10 *c13 (void) { return 0; }
307 extern A10 *c15 (void);
308 void
309 h15 (void)
311 sizeof(*c15());
313 extern A10 *c15 (void);
314 sizeof(*c15());
316 int c15;
318 extern A10 *c15 (void);
319 sizeof(*c15());
322 sizeof(*c15());
324 sizeof(*c15());
326 extern A10 *c15 (void) { return 0; }
328 static A10 *c18 (void);
329 void
330 h18 (void)
332 sizeof(*c18());
334 extern IA *c18 (void);
335 sizeof(*c18());
337 sizeof(*c18());
339 static A10 *c18 (void) { return 0; }
341 static A10 *c19 (void);
342 void
343 h19 (void)
345 sizeof(*c19());
347 extern A10 *c19 (void);
348 sizeof(*c19());
350 sizeof(*c19());
352 static A10 *c19 (void) { return 0; }