http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59374
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- Testcase: extern void abort (void); static struct X { void *a; void *b; } a, b; void __attribute__((noinline)) foo (void) { void *tem = a.b; a.b = (void *)0; b.b = tem; b.a = a.a; } int main() { a.b = &a; foo (); if (b.b != &a) abort (); return 0; }