------- Comment #5 from jakub at gcc dot gnu dot org 2007-08-28 15:16 ------- Even more simplified testcase:
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)); } if (a == 0) a = bar (); 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; } -- jakub at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu dot org Target Milestone|--- |4.2.2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32575