// RUN: %clang_cc1 -std=c++2a -triple %itanium_abi_triple -emit-llvm %s -o - | FileCheck %s

#include "Inputs/std-compare.h"

// CHECK: @_ZTV1A =
struct A;
struct X {
  // CHECK-SAME: @_ZN1X1xEv
  virtual void x();
  friend auto operator<=>(X, X) = default;
};
struct Y {
  virtual ~Y();
  virtual A &operator=(const A &);
  friend auto operator<=>(Y, Y) = default;
};
struct A : X, Y {
  // CHECK-SAME: @_ZN1A1fEv
  virtual void f();
  // CHECK-SAME: @_ZNKR1AssERKS_
  virtual std::strong_ordering operator<=>(const A &) const & = default;
  // CHECK-SAME: @_ZN1A1gEv
  virtual void g();
  // CHECK-SAME: @_ZNKO1AssERKS_
  virtual std::strong_ordering operator<=>(const A &) const && = default;
  // CHECK-SAME: @_ZN1A1hEv
  virtual void h();

  // CHECK-SAME: @_ZN1AaSERKS_
  // implicit virtual A &operator=(const A&) = default;

  // CHECK-SAME: @_ZN1AD1Ev
  // CHECK-SAME: @_ZN1AD0Ev
  // implicit virtual ~A();

  // CHECK-SAME: @_ZNKR1AeqERKS_
  // implicit virtual A &operator==(const A&) const & = default;

  // CHECK-SAME: @_ZNKO1AeqERKS_
  // implicit virtual A &operator==(const A&) const && = default;
};

// For Y:
// CHECK-SAME: @_ZTI1A

// CHECK-SAME: @_ZThn{{[0-9]*}}_N1AD1Ev
// CHECK-SAME: @_ZThn{{[0-9]*}}_N1AD0Ev
// virtual ~Y();

// CHECK-SAME: @_ZThn{{[0-9]*}}_N1AaSERKS_
// virtual A &operator=(const A &);

void A::f() {}
