// PR middle-end/59737
// { dg-do compile }
// { dg-options "-O2" }
struct A
{
  virtual void foo (int &x);
  friend void
  operator>> (int &x, A &y)
  {
    y.foo (x);
  }
};
struct B : public A
{
  void foo (int &x);
};
struct F : public B
{
  void foo (int &x);
};
struct G : public F
{
  void foo (int &);
};
struct C : A
{
  void foo (int &);
  struct H : public G
  {
    void foo (int &);
  };
  struct D : A
  {
    H d;
  };
};
void
C::foo (int &x)
{
  D a;
  x >> a.d;
}