// RUN: %clang_cc1 -std=c++11 -triple i386-linux -emit-llvm -o - %s | FileCheck %s --check-prefix=ITANIUM
// RUN: %clang_cc1 -std=c++11 -triple x86_64-darwin -emit-llvm -o - %s | FileCheck %s --check-prefix=ITANIUM
// RUN: %clang_cc1 -std=c++11 -triple arm64-ehabi -emit-llvm -o - %s | FileCheck %s --check-prefix=ITANIUM
// RUN: %clang_cc1 -std=c++11 -triple i386-windows -emit-llvm -o - %s | FileCheck %s --check-prefix=MSABI --check-prefix=WIN32
// RUN: %clang_cc1 -std=c++11 -triple x86_64-windows -emit-llvm -o - %s | FileCheck %s --check-prefix=MSABI --check-prefix=WIN64

// PR12219
struct A { A(int); virtual ~A(); };
struct B : A { using A::A; ~B(); };
B::~B() {}

B b(123);

struct C { template<typename T> C(T); };
struct D : C { using C::C; };
D d(123);

// ITANIUM-LABEL: define{{.*}} void @_ZN1BD2Ev
// ITANIUM-LABEL: define{{.*}} void @_ZN1BD1Ev
// ITANIUM-LABEL: define{{.*}} void @_ZN1BD0Ev
// WIN32-LABEL: define {{.*}}void @"??1B@@UAE@XZ"
// WIN64-LABEL: define {{.*}}void @"??1B@@UEAA@XZ"

// ITANIUM-LABEL: define linkonce_odr void @_ZN1BCI11AEi(
// ITANIUM: call void @_ZN1BCI21AEi(

// ITANIUM-LABEL: define linkonce_odr void @_ZN1DCI11CIiEET_(
// ITANIUM: call void @_ZN1DCI21CIiEET_(

// WIN32-LABEL: define internal {{.*}} @"??0B@@QAE@H@Z"(
// WIN32: call {{.*}} @"??0A@@QAE@H@Z"(
// WIN64-LABEL: define internal {{.*}} @"??0B@@QEAA@H@Z"(
// WIN64: call {{.*}} @"??0A@@QEAA@H@Z"(

// WIN32-LABEL: define internal {{.*}} @"??0D@@QAE@H@Z"(
// WIN32: call {{.*}} @"??$?0H@C@@QAE@H@Z"
// WIN64-LABEL: define internal {{.*}} @"??0D@@QEAA@H@Z"(
// WIN64: call {{.*}} @"??$?0H@C@@QEAA@H@Z"

struct Q { Q(int); Q(const Q&); ~Q(); };
struct Z { Z(); Z(int); ~Z(); int n; };

namespace noninline_nonvirt {
  struct A { A(int, Q&&, void *__attribute__((pass_object_size(0)))); int n; };
  struct B : Z, A { Z z; using A::A; };
  B b(1, 2, &b);
  // ITANIUM-LABEL: define {{.*}} @__cxx_global_var_init
  // ITANIUM: call void @_ZN1QC1Ei({{.*}} %[[TMP:.*]], i32 2)
  // ITANIUM: call void @_ZN17noninline_nonvirt1BCI1NS_1AEEiO1QPvU17pass_object_size0({{.*}} @_ZN17noninline_nonvirt1bE, i32 1, {{.*}} %[[TMP]], i8* {{.*}} @_ZN17noninline_nonvirt1bE{{.*}}, i{{32|64}} 12)
  // ITANIUM: call void @_ZN1QD1Ev({{.*}} %[[TMP]])
  // ITANIUM: call i32 @__cxa_atexit(

  // Complete object ctor for B delegates to base object ctor.
  // ITANIUM-LABEL: define linkonce_odr void @_ZN17noninline_nonvirt1BCI1NS_1AEEiO1QPvU17pass_object_size0(
  // ITANIUM: call void @_ZN17noninline_nonvirt1BCI2NS_1AEEiO1QPvU17pass_object_size0({{.*}}, i32 {{.*}}, %{{.*}}* {{.*}}, i8* {{.*}}, i{{32|64}} {{.*}})

  // In MSABI, we don't have ctor variants. B ctor forwards to A ctor.
  // MSABI-LABEL: define internal {{.*}} @"??0B@noninline_nonvirt@@Q{{AE|EAA}}@H$$Q{{E?}}AUQ@@P{{E?}}AXW4__pass_object_size0@__clang@@@Z"(%{{.*}}, i32{{.*}}, %{{.*}}, i8*{{.*}}, i{{32|64}}{{.*}})
  // MSABI: call {{.*}} @"??0Z@@Q{{AE|EAA}}@XZ"(
  // MSABI: call {{.*}} @"??0A@noninline_nonvirt@@Q{{AE|EAA}}@H$$Q{{E?}}AUQ@@P{{E?}}AXW4__pass_object_size0@__clang@@@Z"(%{{.*}}, i32{{.*}}, %{{.*}}, i8*{{.*}}, i{{32|64}}{{.*}})
  // MSABI: call {{.*}} @"??0Z@@Q{{AE|EAA}}@XZ"(

  struct C : B { using B::B; };
  C c(1, 2, &c);
  // Complete object ctor for C delegates.
  // ITANIUM-LABEL: define linkonce_odr void @_ZN17noninline_nonvirt1CCI1NS_1AEEiO1QPvU17pass_object_size0(
  // ITANIUM: call void @_ZN17noninline_nonvirt1CCI2NS_1AEEiO1QPvU17pass_object_size0({{.*}}, i32 {{.*}}, %{{.*}}* {{.*}}, i8* {{.*}}, i{{32|64}} {{.*}})

  // MSABI-LABEL: define internal {{.*}} @"??0C@noninline_nonvirt@@Q{{AE|EAA}}@H$$Q{{E?}}AUQ@@P{{E?}}AXW4__pass_object_size0@__clang@@@Z"(%{{.*}}, i32{{.*}}, %{{.*}}, i8*{{.*}}, i{{32|64}}{{.*}})
  // MSABI: call {{.*}} @"??0B@noninline_nonvirt@@Q{{AE|EAA}}@H$$Q{{E?}}AUQ@@P{{E?}}AXW4__pass_object_size0@__clang@@@Z"(%{{.*}}, i32{{.*}}, %{{.*}}, i8*{{.*}}, i{{32|64}}{{.*}})
}

namespace noninline_virt {
  struct A { A(int, Q&&, void *__attribute__((pass_object_size(0)))); int n; };
  struct B : Z, virtual A { Z z; using A::A; };
  B b(1, 2, &b);
  // Complete object ctor forwards to A ctor then constructs Zs.
  // ITANIUM-LABEL: define linkonce_odr void @_ZN14noninline_virt1BCI1NS_1AEEiO1QPvU17pass_object_size0(
  // ITANIUM: call void @_ZN14noninline_virt1AC2EiO1QPvU17pass_object_size0({{.*}} %{{.*}}, i32 %{{.*}}, %{{.*}}* {{.*}}, i8* {{.*}}, i{{32|64}} %{{.*}}
  // ITANIUM: call void @_ZN1ZC2Ev(
  // ITANIUM: store {{.*}} @_ZTVN14noninline_virt1BE
  // ITANIUM: call void @_ZN1ZC1Ev(

  // MSABI-LABEL: define internal {{.*}} @"??0B@noninline_virt@@Q{{AE|EAA}}@H$$Q{{E?}}AUQ@@P{{E?}}AXW4__pass_object_size0@__clang@@@Z"(%{{.*}}, i32{{.*}}, %{{.*}}, i8*{{.*}}, i{{32|64}}{{.*}}, i32 %{{.*}})
  // MSABI: %[[COMPLETE:.*]] = icmp ne
  // MSABI: br i1 %[[COMPLETE]],
  // MSABI: call {{.*}} @"??0A@noninline_virt@@Q{{AE|EAA}}@H$$Q{{E?}}AUQ@@P{{E?}}AXW4__pass_object_size0@__clang@@@Z"(%{{.*}}, i32{{.*}}, %{{.*}}, i8*{{.*}}, i{{32|64}}{{.*}})
  // MSABI: br
  // MSABI: call {{.*}} @"??0Z@@Q{{AE|EAA}}@XZ"(
  // MSABI: call {{.*}} @"??0Z@@Q{{AE|EAA}}@XZ"(

  struct C : B { using B::B; };
  C c(1, 2, &c);
  // Complete object ctor forwards to A ctor, then calls B's base inheriting
  // constructor, which takes no arguments other than the this pointer and VTT.
  // ITANIUM_LABEL: define linkonce_odr void @_ZN14noninline_virt1CCI1NS_1AEEiO1QPvU17pass_object_size0(
  // ITANIUM: call void @_ZN14noninline_virt1AC2EiO1QPvU17pass_object_size0({{.*}} %{{.*}}, i32 %{{.*}}, %{{.*}}* {{.*}}, i8* %{{.*}}, i{{32|64}} %{{.*}})
  // ITANIUM: call void @_ZN14noninline_virt1BCI2NS_1AEEiO1QPvU17pass_object_size0(%{{.*}}* {{[^,]*}} %{{.*}}, i8** getelementptr inbounds ([2 x i8*], [2 x i8*]* @_ZTTN14noninline_virt1CE, i64 0, i64 1))
  // ITANIUM: store {{.*}} @_ZTVN14noninline_virt1CE

  // C constructor forwards to B constructor and A constructor. We pass the args
  // to both. FIXME: Can we pass undef here instead, for the base object
  // constructor call?
  // MSABI-LABEL: define internal {{.*}} @"??0C@noninline_virt@@Q{{AE|EAA}}@H$$Q{{E?}}AUQ@@P{{E?}}AXW4__pass_object_size0@__clang@@@Z"(%{{.*}}, i32{{.*}}, %{{.*}}, i8*{{.*}}, i{{32|64}}{{.*}}, i32 %{{.*}})
  // MSABI: %[[COMPLETE:.*]] = icmp ne
  // MSABI: br i1 %[[COMPLETE]],
  // MSABI: call {{.*}} @"??0A@noninline_virt@@Q{{AE|EAA}}@H$$Q{{E?}}AUQ@@P{{E?}}AXW4__pass_object_size0@__clang@@@Z"(%{{.*}}, i32{{.*}}, %{{.*}}, i8*{{.*}}, i{{32|64}}{{.*}})
  // MSABI: br
  // MSABI: call {{.*}} @"??0B@noninline_virt@@Q{{AE|EAA}}@H$$Q{{E?}}AUQ@@P{{E?}}AXW4__pass_object_size0@__clang@@@Z"(%{{.*}}, i32{{.*}}, %{{.*}}, i8*{{.*}}, i{{32|64}}{{.*}}, i32 0)
}

// For MSABI only, check that inalloca arguments result in inlining.
namespace inalloca_nonvirt {
  struct A { A(Q, int, Q, Q&&); int n; };
  struct B : Z, A { Z z; using A::A; };
  B b(1, 2, 3, 4);
  // No inlining implied for Itanium.
  // ITANIUM-LABEL: define linkonce_odr void @_ZN16inalloca_nonvirt1BCI1NS_1AEE1QiS1_OS1_(
  // ITANIUM: call void @_ZN16inalloca_nonvirt1BCI2NS_1AEE1QiS1_OS1_(

  // MSABI-LABEL: define internal void @"??__Eb@inalloca_nonvirt@@YAXXZ"(

  // On Win32, the inalloca call can't be forwarded so we force inlining.
  // WIN32: %[[TMP:.*]] = alloca
  // WIN32: call i8* @llvm.stacksave()
  // WIN32: %[[ARGMEM:.*]] = alloca inalloca
  // WIN32: call {{.*}} @"??0Q@@QAE@H@Z"(%{{.*}}* {{[^,]*}} %[[TMP]], i32 4)
  // WIN32: %[[ARG3:.*]] = getelementptr {{.*}} %[[ARGMEM]]
  // WIN32: call {{.*}} @"??0Q@@QAE@H@Z"({{.*}}* {{[^,]*}} %[[ARG3]], i32 3)
  // WIN32: %[[ARG1:.*]] = getelementptr {{.*}} %[[ARGMEM]]
  // WIN32: call {{.*}} @"??0Q@@QAE@H@Z"({{.*}}* {{[^,]*}} %[[ARG1]], i32 1)
  // WIN32: call {{.*}} @"??0Z@@QAE@XZ"(
  // WIN32: %[[ARG2:.*]] = getelementptr {{.*}} %[[ARGMEM]]
  // WIN32: store i32 2, i32* %[[ARG2]]
  // WIN32: %[[ARG4:.*]] = getelementptr {{.*}} %[[ARGMEM]]
  // WIN32: store {{.*}}* %[[TMP]], {{.*}}** %[[ARG4]]
  // WIN32: call {{.*}} @"??0A@inalloca_nonvirt@@QAE@UQ@@H0$$QAU2@@Z"(%{{[^,]*}}, <{{.*}}>* inalloca %[[ARGMEM]])
  // WIN32: call void @llvm.stackrestore(
  // WIN32: call {{.*}} @"??0Z@@QAE@XZ"(
  // WIN32: call {{.*}} @"??1Q@@QAE@XZ"(

  // On Win64, the Q arguments would be destroyed in the callee. We don't yet
  // support that in the non-inlined case, so we force inlining.
  // WIN64: %[[TMP:.*]] = alloca
  // WIN64: %[[ARG3:.*]] = alloca
  // WIN64: %[[ARG1:.*]] = alloca
  // WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* {{[^,]*}} %[[TMP]], i32 4)
  // WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* {{[^,]*}} %[[ARG3]], i32 3)
  // WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* {{[^,]*}} %[[ARG1]], i32 1)
  // WIN64: call {{.*}} @"??0Z@@QEAA@XZ"(
  // WIN64: call {{.*}} @"??0A@inalloca_nonvirt@@QEAA@UQ@@H0$$QEAU2@@Z"(%{{.*}}, %{{.*}}* %[[ARG1]], i32 2, %{{.*}}* %[[ARG3]], %{{.*}} %[[TMP]])
  // WIN64: call {{.*}} @"??0Z@@QEAA@XZ"(
  // WIN64: call void @"??1Q@@QEAA@XZ"({{.*}}* {{[^,]*}} %[[TMP]])

  struct C : B { using B::B; };
  C c(1, 2, 3, 4);
  // MSABI-LABEL: define internal void @"??__Ec@inalloca_nonvirt@@YAXXZ"(

  // On Win32, the inalloca call can't be forwarded so we force inlining.
  // WIN32: %[[TMP:.*]] = alloca
  // WIN32: call i8* @llvm.stacksave()
  // WIN32: %[[ARGMEM:.*]] = alloca inalloca
  // WIN32: call {{.*}} @"??0Q@@QAE@H@Z"(%{{.*}}* {{[^,]*}} %[[TMP]], i32 4)
  // WIN32: %[[ARG3:.*]] = getelementptr {{.*}} %[[ARGMEM]]
  // WIN32: call {{.*}} @"??0Q@@QAE@H@Z"({{.*}}* {{[^,]*}} %[[ARG3]], i32 3)
  // WIN32: %[[ARG1:.*]] = getelementptr {{.*}} %[[ARGMEM]]
  // WIN32: call {{.*}} @"??0Q@@QAE@H@Z"({{.*}}* {{[^,]*}} %[[ARG1]], i32 1)
  // WIN32: call {{.*}} @"??0Z@@QAE@XZ"(
  // WIN32: %[[ARG2:.*]] = getelementptr {{.*}} %[[ARGMEM]]
  // WIN32: store i32 2, i32* %[[ARG2]]
  // WIN32: %[[ARG4:.*]] = getelementptr {{.*}} %[[ARGMEM]]
  // WIN32: store {{.*}}* %[[TMP]], {{.*}}** %[[ARG4]]
  // WIN32: call {{.*}} @"??0A@inalloca_nonvirt@@QAE@UQ@@H0$$QAU2@@Z"(%{{[^,]*}}, <{{.*}}>* inalloca %[[ARGMEM]])
  // WIN32: call void @llvm.stackrestore(
  // WIN32: call {{.*}} @"??0Z@@QAE@XZ"(
  // WIN32: call {{.*}} @"??1Q@@QAE@XZ"(

  // On Win64, the Q arguments would be destroyed in the callee. We don't yet
  // support that in the non-inlined case, so we force inlining.
  // WIN64: %[[TMP:.*]] = alloca
  // WIN64: %[[ARG3:.*]] = alloca
  // WIN64: %[[ARG1:.*]] = alloca
  // WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* {{[^,]*}} %[[TMP]], i32 4)
  // WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* {{[^,]*}} %[[ARG3]], i32 3)
  // WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* {{[^,]*}} %[[ARG1]], i32 1)
  // WIN64: call {{.*}} @"??0Z@@QEAA@XZ"(
  // WIN64: call {{.*}} @"??0A@inalloca_nonvirt@@QEAA@UQ@@H0$$QEAU2@@Z"(%{{.*}}, %{{.*}}* %[[ARG1]], i32 2, %{{.*}}* %[[ARG3]], %{{.*}} %[[TMP]])
  // WIN64: call {{.*}} @"??0Z@@QEAA@XZ"(
  // WIN64: call void @"??1Q@@QEAA@XZ"({{.*}}* {{[^,]*}} %[[TMP]])
}

namespace inalloca_virt {
  struct A { A(Q, int, Q, Q&&); int n; };
  struct B : Z, virtual A { Z z; using A::A; };
  B b(1, 2, 3, 4);

  // MSABI-LABEL: define internal void @"??__Eb@inalloca_virt@@YAXXZ"(

  // On Win32, the inalloca call can't be forwarded so we force inlining.
  // WIN32: %[[TMP:.*]] = alloca
  // WIN32: call i8* @llvm.stacksave()
  // WIN32: %[[ARGMEM:.*]] = alloca inalloca
  // WIN32: call {{.*}} @"??0Q@@QAE@H@Z"(%{{.*}}* {{[^,]*}} %[[TMP]], i32 4)
  // WIN32: %[[ARG3:.*]] = getelementptr {{.*}} %[[ARGMEM]]
  // WIN32: call {{.*}} @"??0Q@@QAE@H@Z"({{.*}}* {{[^,]*}} %[[ARG3]], i32 3)
  // WIN32: %[[ARG1:.*]] = getelementptr {{.*}} %[[ARGMEM]]
  // WIN32: call {{.*}} @"??0Q@@QAE@H@Z"({{.*}}* {{[^,]*}} %[[ARG1]], i32 1)
  // FIXME: It's dumb to round-trip this though memory and generate a branch.
  // WIN32: store i32 1, i32* %[[IS_MOST_DERIVED_ADDR:.*]]
  // WIN32: %[[IS_MOST_DERIVED:.*]] = load i32, i32* %[[IS_MOST_DERIVED_ADDR]]
  // WIN32: %[[IS_MOST_DERIVED_i1:.*]] = icmp ne i32 %[[IS_MOST_DERIVED]], 0
  // WIN32: br i1 %[[IS_MOST_DERIVED_i1]]
  //
  // WIN32: store {{.*}} @"??_8B@inalloca_virt@@7B@"
  // WIN32: %[[ARG2:.*]] = getelementptr {{.*}} %[[ARGMEM]]
  // WIN32: store i32 2, i32* %[[ARG2]]
  // WIN32: %[[ARG4:.*]] = getelementptr {{.*}} %[[ARGMEM]]
  // WIN32: store {{.*}}* %[[TMP]], {{.*}}** %[[ARG4]]
  // WIN32: call {{.*}} @"??0A@inalloca_virt@@QAE@UQ@@H0$$QAU2@@Z"(%{{[^,]*}}, <{{.*}}>* inalloca %[[ARGMEM]])
  // WIN32: call void @llvm.stackrestore(
  // WIN32: br
  //
  // Note that if we jumped directly to here we would fail to stackrestore and
  // destroy the parameters, but that's not actually possible.
  // WIN32: call {{.*}} @"??0Z@@QAE@XZ"(
  // WIN32: call {{.*}} @"??0Z@@QAE@XZ"(
  // WIN32: call {{.*}} @"??1Q@@QAE@XZ"(

  // On Win64, the Q arguments would be destroyed in the callee. We don't yet
  // support that in the non-inlined case, so we force inlining.
  // WIN64: %[[TMP:.*]] = alloca
  // WIN64: %[[ARG3:.*]] = alloca
  // WIN64: %[[ARG1:.*]] = alloca
  // WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* {{[^,]*}} %[[TMP]], i32 4)
  // WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* {{[^,]*}} %[[ARG3]], i32 3)
  // WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* {{[^,]*}} %[[ARG1]], i32 1)
  // WIN64: br i1
  // WIN64: call {{.*}} @"??0A@inalloca_virt@@QEAA@UQ@@H0$$QEAU2@@Z"(%{{.*}}, %{{.*}}* %[[ARG1]], i32 2, %{{.*}}* %[[ARG3]], %{{.*}} %[[TMP]])
  // WIN64: br
  // WIN64: call {{.*}} @"??0Z@@QEAA@XZ"(
  // WIN64: call {{.*}} @"??0Z@@QEAA@XZ"(
  // WIN64: call void @"??1Q@@QEAA@XZ"({{.*}}* {{[^,]*}} %[[TMP]])

  struct C : B { using B::B; };
  C c(1, 2, 3, 4);
  // ITANIUM-LABEL: define linkonce_odr void @_ZN13inalloca_virt1CD1Ev(

  // MSABI-LABEL: define internal void @"??__Ec@inalloca_virt@@YAXXZ"(

  // On Win32, the inalloca call can't be forwarded so we force inlining.
  // WIN32: %[[TMP:.*]] = alloca
  // WIN32: call i8* @llvm.stacksave()
  // WIN32: %[[ARGMEM:.*]] = alloca inalloca
  // WIN32: call {{.*}} @"??0Q@@QAE@H@Z"(%{{.*}}* {{[^,]*}} %[[TMP]], i32 4)
  // WIN32: %[[ARG3:.*]] = getelementptr {{.*}} %[[ARGMEM]]
  // WIN32: call {{.*}} @"??0Q@@QAE@H@Z"({{.*}}* {{[^,]*}} %[[ARG3]], i32 3)
  // WIN32: %[[ARG1:.*]] = getelementptr {{.*}} %[[ARGMEM]]
  // WIN32: call {{.*}} @"??0Q@@QAE@H@Z"({{.*}}* {{[^,]*}} %[[ARG1]], i32 1)
  // WIN32: store i32 1, i32* %[[IS_MOST_DERIVED_ADDR:.*]]
  // WIN32: %[[IS_MOST_DERIVED:.*]] = load i32, i32* %[[IS_MOST_DERIVED_ADDR]]
  // WIN32: %[[IS_MOST_DERIVED_i1:.*]] = icmp ne i32 %[[IS_MOST_DERIVED]], 0
  // WIN32: br i1 %[[IS_MOST_DERIVED_i1]]
  //
  // WIN32: store {{.*}} @"??_8C@inalloca_virt@@7B@"
  // WIN32: %[[ARG2:.*]] = getelementptr {{.*}} %[[ARGMEM]]
  // WIN32: store i32 2, i32* %[[ARG2]]
  // WIN32: %[[ARG4:.*]] = getelementptr {{.*}} %[[ARGMEM]]
  // WIN32: store {{.*}}* %[[TMP]], {{.*}}** %[[ARG4]]
  // WIN32: call {{.*}} @"??0A@inalloca_virt@@QAE@UQ@@H0$$QAU2@@Z"(%{{[^,]*}}, <{{.*}}>* inalloca %[[ARGMEM]])
  // WIN32: call void @llvm.stackrestore(
  // WIN32: br
  //
  // WIN32: call {{.*}} @"??0Z@@QAE@XZ"(
  // WIN32: call {{.*}} @"??0Z@@QAE@XZ"(
  // WIN32: call {{.*}} @"??1Q@@QAE@XZ"(

  // On Win64, the Q arguments would be destroyed in the callee. We don't yet
  // support that in the non-inlined case, so we force inlining.
  // WIN64: %[[TMP:.*]] = alloca
  // WIN64: %[[ARG3:.*]] = alloca
  // WIN64: %[[ARG1:.*]] = alloca
  // WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* {{[^,]*}} %[[TMP]], i32 4)
  // WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* {{[^,]*}} %[[ARG3]], i32 3)
  // WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* {{[^,]*}} %[[ARG1]], i32 1)
  // WIN64: br i1
  // WIN64: store {{.*}} @"??_8C@inalloca_virt@@7B@"
  // WIN64: call {{.*}} @"??0A@inalloca_virt@@QEAA@UQ@@H0$$QEAU2@@Z"(%{{.*}}, %{{.*}}* %[[ARG1]], i32 2, %{{.*}}* %[[ARG3]], %{{.*}} %[[TMP]])
  // WIN64: call {{.*}} @"??0Z@@QEAA@XZ"(
  // WIN64: call {{.*}} @"??0Z@@QEAA@XZ"(
  // WIN64: call void @"??1Q@@QEAA@XZ"({{.*}}* {{[^,]*}} %[[TMP]])
}

namespace inline_nonvirt {
  struct A { A(Q, int, Q, Q&&, ...); int n; };
  struct B : Z, A { Z z; using A::A; };
  B b(1, 2, 3, 4, 5, 6);
  // Inlined all the way down to the A ctor.
  // ITANIUM-LABEL: define {{.*}} @__cxx_global_var_init
  // ITANIUM: call void @_ZN1QC1Ei({{.*}}, i32 1)
  // ITANIUM: call void @_ZN1QC1Ei({{.*}}, i32 3)
  // ITANIUM: call void @_ZN1QC1Ei({{.*}}, i32 4)
  // ITANIUM: %[[Z_BASE:.*]] = bitcast %{{.*}}* %[[THIS:.*]] to
  // ITANIUM: call void @_ZN1ZC2Ev(
  // ITANIUM: %[[B_CAST:.*]] = bitcast {{.*}} %[[THIS]]
  // ITANIUM: %[[A_CAST:.*]] = getelementptr {{.*}} %[[B_CAST]], i{{32|64}} 4
  // ITANIUM: %[[A:.*]] = bitcast {{.*}} %[[A_CAST]]
  // ITANIUM: call void ({{.*}}, ...) @_ZN14inline_nonvirt1AC2E1QiS1_OS1_z(%{{.*}}* {{[^,]*}} %[[A]], {{.*}}, i32 2, {{.*}}, {{.*}}, i32 5, i32 6)
  // ITANIUM: %[[Z_MEMBER:.*]] = getelementptr {{.*}} %[[THIS]], i32 0, i32 2
  // ITANIUM: call void @_ZN1ZC1Ev({{.*}} %[[Z_MEMBER]])
  // ITANIUM: call void @_ZN1QD1Ev(
  // ITANIUM: call void @_ZN1QD1Ev(
  // ITANIUM: call void @_ZN1QD1Ev(

  struct C : B { using B::B; };
  C c(1, 2, 3, 4, 5, 6);
  // Inlined all the way down to the A ctor.
  // ITANIUM-LABEL: define {{.*}} @__cxx_global_var_init
  // ITANIUM: call void @_ZN1QC1Ei({{.*}}, i32 1)
  // ITANIUM: call void @_ZN1QC1Ei({{.*}}, i32 3)
  // ITANIUM: call void @_ZN1QC1Ei({{.*}}, i32 4)
  // ITANIUM: %[[Z_BASE:.*]] = bitcast %{{.*}}* %[[THIS:.*]] to
  // ITANIUM: call void @_ZN1ZC2Ev(
  // ITANIUM: %[[B_CAST:.*]] = bitcast {{.*}} %[[THIS]]
  // ITANIUM: %[[A_CAST:.*]] = getelementptr {{.*}} %[[B_CAST]], i{{32|64}} 4
  // ITANIUM: %[[A:.*]] = bitcast {{.*}} %[[A_CAST]]
  // ITANIUM: call void ({{.*}}, ...) @_ZN14inline_nonvirt1AC2E1QiS1_OS1_z(%{{.*}}* {{[^,]*}} %[[A]], {{.*}}, i32 2, {{.*}}, {{.*}}, i32 5, i32 6)
  // ITANIUM: %[[Z_MEMBER:.*]] = getelementptr {{.*}} %{{.*}}, i32 0, i32 2
  // ITANIUM: call void @_ZN1ZC1Ev({{.*}} %[[Z_MEMBER]])
  // ITANIUM: call void @_ZN1QD1Ev(
  // ITANIUM: call void @_ZN1QD1Ev(
  // ITANIUM: call void @_ZN1QD1Ev(
}

namespace inline_virt {
  struct A { A(Q, int, Q, Q&&, ...); int n; };
  struct B : Z, virtual A { Z z; using A::A; };
  B b(1, 2, 3, 4, 5, 6);
  // Inlined all the way down to the A ctor.
  // ITANIUM-LABEL: define {{.*}} @__cxx_global_var_init
  // ITANIUM: call void @_ZN1QC1Ei({{.*}}, i32 1)
  // ITANIUM: call void @_ZN1QC1Ei({{.*}}, i32 3)
  // ITANIUM: call void @_ZN1QC1Ei({{.*}}, i32 4)
  // ITANIUM: %[[B_CAST:.*]] = bitcast {{.*}} %[[THIS:.*]]
  // ITANIUM: %[[A_CAST:.*]] = getelementptr {{.*}} %[[B_CAST]], i{{32|64}} {{12|16}}
  // ITANIUM: %[[A:.*]] = bitcast {{.*}} %[[A_CAST]]
  // ITANIUM: call void ({{.*}}, ...) @_ZN11inline_virt1AC2E1QiS1_OS1_z(%{{.*}}* {{[^,]*}} %[[A]], {{.*}}, i32 2, {{.*}}, {{.*}}, i32 5, i32 6)
  // ITANIUM: call void @_ZN1ZC2Ev(
  // ITANIUM: call void @_ZN1ZC1Ev(
  // ITANIUM: call void @_ZN1QD1Ev(
  // ITANIUM: call void @_ZN1QD1Ev(
  // ITANIUM: call void @_ZN1QD1Ev(

  struct C : B { using B::B; };
  C c(1, 2, 3, 4, 5, 6);
  // Inlined all the way down to the A ctor, except that we can just call the
  // B base inheriting constructor to construct that portion (it doesn't need
  // the forwarded arguments).
  // ITANIUM-LABEL: define {{.*}} @__cxx_global_var_init
  // ITANIUM: call void @_ZN1QC1Ei({{.*}}, i32 1)
  // ITANIUM: call void @_ZN1QC1Ei({{.*}}, i32 3)
  // ITANIUM: call void @_ZN1QC1Ei({{.*}}, i32 4)
  // ITANIUM: %[[B_CAST:.*]] = bitcast {{.*}} %[[THIS:.*]]
  // ITANIUM: %[[A_CAST:.*]] = getelementptr {{.*}} %[[B_CAST]], i{{32|64}} {{12|16}}
  // ITANIUM: %[[A:.*]] = bitcast {{.*}} %[[A_CAST]]
  // ITANIUM: call void ({{.*}}, ...) @_ZN11inline_virt1AC2E1QiS1_OS1_z(%{{.*}}* {{[^,]*}} %[[A]], {{.*}}, i32 2, {{.*}}, {{.*}}, i32 5, i32 6)
  // ITANIUM: call void @_ZN11inline_virt1BCI2NS_1AEE1QiS1_OS1_z({{[^,]*}}, i8** getelementptr inbounds ([2 x i8*], [2 x i8*]* @_ZTTN11inline_virt1CE, i64 0, i64 1))
  // ITANIUM: store {{.*}} @_ZTVN11inline_virt1CE
  // ITANIUM: call void @_ZN1QD1Ev(
  // ITANIUM: call void @_ZN1QD1Ev(
  // ITANIUM: call void @_ZN1QD1Ev(

  // B base object inheriting constructor does not get passed arguments.
  // ITANIUM-LABEL: define linkonce_odr void @_ZN11inline_virt1BCI2NS_1AEE1QiS1_OS1_z(
  // ITANIUM-NOT: call
  // ITANIUM: call void @_ZN1ZC2Ev(
  // ITANIUM-NOT: call
  // VTT -> vtable
  // ITANIUM: store
  // ITANIUM-NOT: call
  // ITANIUM: call void @_ZN1ZC1Ev(
  // ITANIUM-NOT: call
  // ITANIUM: }
}

// ITANIUM-LABEL: define linkonce_odr void @_ZN1BCI21AEi(
// ITANIUM: call void @_ZN1AC2Ei(

// ITANIUM-LABEL: define linkonce_odr void @_ZN1DCI21CIiEET_(
// ITANIUM: call void @_ZN1CC2IiEET_(

// ITANIUM-LABEL: define linkonce_odr void @_ZN17noninline_nonvirt1BCI2NS_1AEEiO1QPvU17pass_object_size0(
// ITANIUM: call void @_ZN1ZC2Ev(
// ITANIUM: call void @_ZN17noninline_nonvirt1AC2EiO1QPvU17pass_object_size0(

// ITANIUM-LABEL: define linkonce_odr void @_ZN17noninline_nonvirt1CCI2NS_1AEEiO1QPvU17pass_object_size0(
// ITANIUM: call void @_ZN17noninline_nonvirt1BCI2NS_1AEEiO1QPvU17pass_object_size0(
