/* { dg-do run } */ /* { dg-options "-O2" } */ extern void abort(void); struct Bar { int p; }; struct Foo { struct Bar *p; }; struct Bar p0 = { 0 }; struct Bar p1 = { 1 }; void bar(struct Foo *f) { f->p = &p0; } int foo(struct Foo *f) { f->p->p = 1; bar(f); return f->p->p; } int main() { struct Foo f; f.p = &p1; if (foo(&f) != 0) abort (); return 0; }