1// { dg-do assemble } 2// { dg-options "-O2" } 3 4struct X {}; 5 6struct Y 7{ 8 Y(); 9 virtual ~Y(); 10}; 11 12struct Z 13{ 14 int f (const int *x); 15 int g; 16}; 17 18inline int 19operator<< (Z &os, int x) 20{ 21 os.f (&x); 22 return os.g; 23} 24 25void foo (Z &a, X *b, X &c) 26{ 27 X *d = b; 28 int e = 0; 29 Z &f = a; 30 if (!(f << e)) 31 do { do { } while (&c == 0); throw Y(); } while (0); 32 do { } while (&d == 0); 33 do { } while (&c == 0); 34} 35