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