1 /* PR c/70093 */ 2 /* { dg-do compile } */ 3 /* { dg-options "" } */ 4 /* { dg-require-effective-target alloca } */ 5 6 void __attribute__((noinline, noclone)) foo(int n)7foo (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 main(void)54main (void) 55 { 56 foo (1); 57 } 58