blob: e017fba871e3159f841564e7e70b0f0ee6e15561 [file] [log] [blame]
/* PR c/70093 */
/* { dg-do compile } */
/* { dg-options "" } */
/* { dg-require-effective-target alloca } */
void __attribute__((noinline, noclone))
foo (int n)
{
struct S { int a[n]; };
struct S __attribute__((noreturn))
fn (void)
{
__builtin_abort ();
}
auto struct S __attribute__((noreturn))
fn2 (void)
{
__builtin_abort ();
}
struct S x;
__typeof__ (fn ()) *p = &x;
switch (n)
{
case 1:
fn ();
break;
case 2:
fn2 ();
break;
case 3:
x = fn ();
if (x.a[0] != 42)
__builtin_abort ();
break;
case 4:
if (fn ().a[0] != 42)
__builtin_abort ();
break;
case 5:
if (p->a[0] != 42)
__builtin_abort ();
break;
case 6:
if (fn2 ().a[0] != 42)
__builtin_abort ();
break;
}
}
int
main (void)
{
foo (1);
}