// 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;
}