// { 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); | |
} |