// { dg-do link } // { dg-options "-O2" } class foo { }; typedef void *voidp; class vect : public foo { public: voidp& a(); int b(); }; class bar { public: bar *c(bool (*f)(bar *node), voidp g) { int i=0; bool j; while (i < d.b()){ j = (f == __null) || f((bar*)d.a()); if (j) ((bar*)d.a())->c(f, g); i++; } return this; } public: vect d; bar *e(foo *k); }; bar *bar::e(foo *k) { return c(__null, k); } voidp &vect::a() { static voidp x; return x; } int vect::b() { static int x; return x; } int main() { return 0; }