| // 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() {} |