/* PR target/88620 */ /* { dg-do run } */ /* { dg-options "-Ofast --param ipa-cp-eval-threshold=0 -fno-guess-branch-probability -fno-inline-small-functions" } */ /* { dg-require-effective-target alloca } */ void foo (int n) { struct S { int a[n]; }; struct S fn (void) { struct S s; s.a[0] = 42; return s; } auto struct S fn2 (void) { return fn (); } struct S x; fn (); fn2 (); x = fn (); if (x.a[0] != 42) __builtin_abort (); if (fn ().a[0] != 42) __builtin_abort (); __typeof__ (fn ()) *p = &x; if (p->a[0] != 42) __builtin_abort (); if (fn2 ().a[0] != 42) __builtin_abort (); } int main (void) { foo (1); }