// { dg-do assemble } // { dg-options "-O2" } struct X {}; struct Y { Y(); virtual ~Y(); }; struct Z { int f (const int *x); int g; }; inline int operator<< (Z &os, int x) { os.f (&x); return os.g; } void foo (Z &a, X *b, X &c) { X *d = b; int e = 0; Z &f = a; if (!(f << e)) do { do { } while (&c == 0); throw Y(); } while (0); do { } while (&d == 0); do { } while (&c == 0); }