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 "" } */
6
7typedef int IA[];
8typedef int A10[10];
9
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.
17
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.)  */
22
23A10 a5;
24void
25f5 (void)
26{
27  sizeof(a5);
28  {
29    extern IA a5;
30    sizeof(a5);
31    {
32      int a5;
33      {
34        extern A10 a5;
35        sizeof(a5);
36      }
37    }
38    sizeof(a5);
39  }
40  sizeof(a5);
41}
42extern A10 a5;
43
44A10 a7;
45void
46f7 (void)
47{
48  sizeof(a7);
49  {
50    extern A10 a7;
51    sizeof(a7);
52    {
53      int a7;
54      {
55        extern A10 a7;
56        sizeof(a7);
57      }
58    }
59    sizeof(a7);
60  }
61  sizeof(a7);
62}
63extern A10 a7;
64
65extern A10 a13;
66void
67f13 (void)
68{
69  sizeof(a13);
70  {
71    extern IA a13;
72    sizeof(a13);
73    {
74      int a13;
75      {
76        extern A10 a13;
77        sizeof(a13);
78      }
79    }
80    sizeof(a13);
81  }
82  sizeof(a13);
83}
84extern A10 a13;
85
86extern A10 a15;
87void
88f15 (void)
89{
90  sizeof(a15);
91  {
92    extern A10 a15;
93    sizeof(a15);
94    {
95      int a15;
96      {
97        extern A10 a15;
98        sizeof(a15);
99      }
100    }
101    sizeof(a15);
102  }
103  sizeof(a15);
104}
105extern A10 a15;
106
107
108static A10 a18;
109void
110f18 (void)
111{
112  sizeof(a18);
113  {
114    extern IA a18;
115    sizeof(a18);
116  }
117  sizeof(a18);
118}
119extern A10 a18;
120
121static A10 a19;
122void
123f19 (void)
124{
125  sizeof(a19);
126  {
127    extern A10 a19;
128    sizeof(a19);
129  }
130  sizeof(a19);
131}
132extern A10 a19;
133
134A10 *b5;
135void
136g5 (void)
137{
138  sizeof(*b5);
139  {
140    extern IA *b5;
141    sizeof(*b5);
142    {
143      int b5;
144      {
145        extern A10 *b5;
146        sizeof(*b5);
147      }
148    }
149    sizeof(*b5);
150  }
151  sizeof(*b5);
152}
153extern A10 *b5;
154
155A10 *b7;
156void
157g7 (void)
158{
159  sizeof(*b7);
160  {
161    extern A10 *b7;
162    sizeof(*b7);
163    {
164      int b7;
165      {
166        extern A10 *b7;
167        sizeof(*b7);
168      }
169    }
170    sizeof(*b7);
171  }
172  sizeof(*b7);
173}
174extern A10 *b7;
175
176extern A10 *b13;
177void
178g13 (void)
179{
180  sizeof(*b13);
181  {
182    extern IA *b13;
183    sizeof(*b13);
184    {
185      int b13;
186      {
187        extern A10 *b13;
188        sizeof(*b13);
189      }
190    }
191    sizeof(*b13);
192  }
193  sizeof(*b13);
194}
195extern A10 *b13;
196
197extern A10 *b15;
198void
199g15 (void)
200{
201  sizeof(*b15);
202  {
203    extern A10 *b15;
204    sizeof(*b15);
205    {
206      int b15;
207      {
208        extern A10 *b15;
209        sizeof(*b15);
210      }
211    }
212    sizeof(*b15);
213  }
214  sizeof(*b15);
215}
216extern A10 *b15;
217
218static A10 *b18;
219void
220g18 (void)
221{
222  sizeof(*b18);
223  {
224    extern IA *b18;
225    sizeof(*b18);
226  }
227  sizeof(*b18);
228}
229extern A10 *b18;
230
231static A10 *b19;
232void
233g19 (void)
234{
235  sizeof(*b19);
236  {
237    extern A10 *b19;
238    sizeof(*b19);
239  }
240  sizeof(*b19);
241}
242extern A10 *b19;
243
244A10 *c5 (void);
245void
246h5 (void)
247{
248  sizeof(*c5());
249  {
250    extern IA *c5 (void);
251    sizeof(*c5());
252    {
253      int c5;
254      {
255        extern A10 *c5 (void);
256        sizeof(*c5());
257      }
258    }
259    sizeof(*c5());
260  }
261  sizeof(*c5());
262}
263A10 *c5 (void) { return 0; }
264
265A10 *c7 (void);
266void
267h7 (void)
268{
269  sizeof(*c7());
270  {
271    extern A10 *c7 (void);
272    sizeof(*c7());
273    {
274      int c7;
275      {
276        extern A10 *c7 (void);
277        sizeof(*c7());
278      }
279    }
280    sizeof(*c7());
281  }
282  sizeof(*c7());
283}
284A10 *c7 (void) { return 0; }
285
286extern A10 *c13 (void);
287void
288h13 (void)
289{
290  sizeof(*c13());
291  {
292    extern IA *c13 (void);
293    sizeof(*c13());
294    {
295      int c13;
296      {
297        extern A10 *c13 (void);
298        sizeof(*c13());
299      }
300    }
301    sizeof(*c13());
302  }
303  sizeof(*c13());
304}
305extern A10 *c13 (void) { return 0; }
306
307extern A10 *c15 (void);
308void
309h15 (void)
310{
311  sizeof(*c15());
312  {
313    extern A10 *c15 (void);
314    sizeof(*c15());
315    {
316      int c15;
317      {
318        extern A10 *c15 (void);
319        sizeof(*c15());
320      }
321    }
322    sizeof(*c15());
323  }
324  sizeof(*c15());
325}
326extern A10 *c15 (void) { return 0; }
327
328static A10 *c18 (void);
329void
330h18 (void)
331{
332  sizeof(*c18());
333  {
334    extern IA *c18 (void);
335    sizeof(*c18());
336  }
337  sizeof(*c18());
338}
339static A10 *c18 (void) { return 0; }
340
341static A10 *c19 (void);
342void
343h19 (void)
344{
345  sizeof(*c19());
346  {
347    extern A10 *c19 (void);
348    sizeof(*c19());
349  }
350  sizeof(*c19());
351}
352static A10 *c19 (void) { return 0; }
353