1 /* { dg-require-effective-target alloca } */
2 /* PR target/78439.  */
3 
4 enum demangle_component_type
5 {
6   DEMANGLE_COMPONENT_THROW_SPEC
7 };
8 struct demangle_component
9 {
10   enum demangle_component_type type;
11   struct
12   {
13     struct
14     {
15       struct demangle_component *left;
16       struct demangle_component *right;
17     };
18   };
19 };
20 
21 int a, b;
22 
23 struct d_info
24 {
25   struct demangle_component *comps;
26   int next_comp;
27   int num_comps;
28   struct demangle_component *subs;
29   int num_subs;
30   int is_conversion;
31 };
32 
33 void
fn1(int p1,struct d_info * p2)34 fn1 (int p1, struct d_info *p2)
35 {
36   p2->num_comps = 2 * p1;
37   p2->next_comp = p2->num_subs = p1;
38   p2->is_conversion = 0;
39 }
40 
41 int fn3 (int *);
42 void fn4 (struct d_info *, int);
43 
44 void
fn2()45 fn2 ()
46 {
47   int c;
48   struct d_info d;
49   b = 0;
50   c = fn3 (&a);
51   fn1 (c, &d);
52   struct demangle_component e[d.num_comps];
53   struct demangle_component *f[d.num_subs];
54   d.comps = e;
55   d.subs = (struct demangle_component *) f;
56   fn4 (&d, 1);
57 }
58