// { dg-do assemble } struct A { int a, b, c, d; }; inline void foo (int, A &); struct D { }; struct E: public D { void f (A &y) { foo (1, y); } }; struct F: public D { void f (A &y) { foo (2, y); } }; E *d; F *e; inline int baz (int y) { A a; if (y) { d->f (a); } else { e->f (a); } return 0; } inline void foo (int y, A &z) { z.a = baz (y); z.b = baz (y); z.c = baz (y); z.d = baz (y); } struct G { E a; F b; void bar (A &); }; void G::bar(A &y) { a.f(y); b.f(y); }