// { dg-do run  }
struct B
{
  virtual int f() volatile
    { return 1; }
};
struct D : public B 
{
  int f() 
    { return 0; }
};
struct D2 : public D
{
  int f()
    { return 2; } 
};
int main()
{
  D2 d2;
  D& d = d2;
  return d.f();
}
// { dg-do run  }
struct B
{
  virtual int f() volatile
    { return 1; }
};
struct D : public B 
{
  int f() 
    { return 0; }
};
struct D2 : public D
{
  int f()
    { return 2; } 
};
int main()
{
  D2 d2;
  D& d = d2;
  return d.f();
}