/* PR tree-optimization/32575 */ extern void abort (void); struct S { void *s1, *s2; unsigned char s3, s4, s5; }; __attribute__ ((noinline)) void * foo (void) { static struct S s; return &s; } __attribute__ ((noinline)) void * bar () { return (void *) 0; } __attribute__ ((noinline)) struct S * test (void *a, void *b) { struct S *p, q; p = foo (); if (p == 0) { p = &q; __builtin_memset (p, 0, sizeof (*p)); } p->s1 = a; p->s2 = b; if (p == &q) p = 0; return p; } int main (void) { int a; int b; struct S *z = test ((void *) &a, (void *) &b); if (z == 0 || z->s1 != (void *) &a || z->s2 != (void *) &b || z->s3 || z->s4) abort (); return 0; }