// Test that a synthesized op= can override one from a base.
// { dg-do run }

struct B;

struct A
{
  virtual B& operator=(const B&);
};

struct B: A
{
  B(int i): i(i) { }
  int i;
  // implicitly-declared op=
};

B& A::operator=(const B& b) { return static_cast<B&>(*this); }

int main()
{
  B b1 (123);
  B b2 (0);

  A& ar = b1;
  ar = b2;

  return b1.i;
}