111
|
1 /* PR c/70093 */
|
|
2 /* { dg-do compile } */
|
|
3 /* { dg-options "" } */
|
|
4 /* { dg-require-effective-target alloca } */
|
|
5
|
|
6 void __attribute__((noinline, noclone))
|
|
7 foo (int n)
|
|
8 {
|
|
9 struct S { int a[n]; };
|
|
10
|
|
11 struct S __attribute__((noreturn))
|
|
12 fn (void)
|
|
13 {
|
|
14 __builtin_abort ();
|
|
15 }
|
|
16
|
|
17 auto struct S __attribute__((noreturn))
|
|
18 fn2 (void)
|
|
19 {
|
|
20 __builtin_abort ();
|
|
21 }
|
|
22
|
|
23 struct S x;
|
|
24 __typeof__ (fn ()) *p = &x;
|
|
25 switch (n)
|
|
26 {
|
|
27 case 1:
|
|
28 fn ();
|
|
29 break;
|
|
30 case 2:
|
|
31 fn2 ();
|
|
32 break;
|
|
33 case 3:
|
|
34 x = fn ();
|
|
35 if (x.a[0] != 42)
|
|
36 __builtin_abort ();
|
|
37 break;
|
|
38 case 4:
|
|
39 if (fn ().a[0] != 42)
|
|
40 __builtin_abort ();
|
|
41 break;
|
|
42 case 5:
|
|
43 if (p->a[0] != 42)
|
|
44 __builtin_abort ();
|
|
45 break;
|
|
46 case 6:
|
|
47 if (fn2 ().a[0] != 42)
|
|
48 __builtin_abort ();
|
|
49 break;
|
|
50 }
|
|
51 }
|
|
52
|
|
53 int
|
|
54 main (void)
|
|
55 {
|
|
56 foo (1);
|
|
57 }
|