// Assert that the ABI switch uses the proper codegen. Fuchsia uses the
// "return this" ABI on constructors and destructors by default, but if we
// explicitly choose the generic itanium C++ ABI, we should not return "this" on
// ctors/dtors.
//
// RUN: %clang_cc1 %s -emit-llvm -o - -triple=x86_64-unknown-fuchsia -fc++-abi=itanium | FileCheck %s
// RUN: %clang_cc1 %s -emit-llvm -o - -triple=aarch64-unknown-fuchsia -fc++-abi=itanium | FileCheck %s

class A {
public:
  virtual ~A();
  int x_;
};

class B : public A {
public:
  B(int *i);
  virtual ~B();
  int *i_;
};

B::B(int *i) : i_(i) {}
B::~B() {}

// CHECK: define{{.*}} void @_ZN1BC2EPi(%class.B* {{[^,]*}} %this, i32* %i)
// CHECK: define{{.*}} void @_ZN1BC1EPi(%class.B* {{[^,]*}} %this, i32* %i)
// CHECK: define{{.*}} void @_ZN1BD2Ev(%class.B* {{[^,]*}} %this)
// CHECK: define{{.*}} void @_ZN1BD1Ev(%class.B* {{[^,]*}} %this)
