// RUN: %clang_cc1 -std=c++1y -triple x86_64-linux-gnu -fexceptions -fcxx-exceptions -emit-llvm %s -o - | FileCheck %s

struct S {
  S();
  ~S();
};

struct T {
  T() noexcept;
  ~T();
  int n;
};

// CHECK-LABEL: define void @_Z1fv(
void f() {
  // CHECK: call void @_ZN1SC1Ev(
  // CHECK: invoke void @__cxa_throw
  //
  // Ensure we call the lambda destructor here, and do not call the destructor
  // for the capture.
  // CHECK: landingpad
  // CHECK-NOT: _ZN1SD
  // CHECK: call void @"_ZZ1fvEN3$_0D1Ev"(
  // CHECK-NOT: _ZN1SD
  // CHECK: resume
  [s = S()] {}, throw 0;

  // CHECK: }
}

// CHECK-LABEL: define void @_Z1gv(
void g() {
  // CHECK: call void @_ZN1SC1Ev(
  // CHECK: invoke void @__cxa_throw
  //
  // Ensure we call the lambda destructor here, and do not call the destructor
  // for the capture.
  // CHECK: landingpad
  // CHECK-NOT: @"_ZZ1gvEN3$_0D1Ev"(
  // CHECK: call void @_ZN1SD1Ev(
  // CHECK-NOT: @"_ZZ1gvEN3$_0D1Ev"(
  // CHECK: resume
  [s = S(), t = (throw 0, 1)] {};

  // CHECK: }
}

void x() noexcept;
void y() noexcept;

// CHECK-LABEL: define void @_Z1hbb(
void h(bool b1, bool b2) {
  // CHECK: {{.*}} = alloca i1,
  // CHECK: %[[S_ISACTIVE:.*]] = alloca i1,
  // CHECK: {{.*}} = alloca i1,

  // lambda init: s and t, branch on b1
  // CHECK: call void @_ZN1SC1Ev(
  // CHECK: store i1 true, i1* %[[S_ISACTIVE]], align 1
  // CHECK: call void @_ZN1TC1Ev(
  // CHECK: br i1

  // throw 1
  // CHECK: invoke void @__cxa_throw

  // completion of lambda init, branch on b2
  // CHECK: store i32 42,
  // CHECK: store i1 false, i1* %[[S_ISACTIVE]], align 1
  // CHECK: br i1

  // throw 2
  // CHECK: invoke void @__cxa_throw

  // end of full-expression
  // CHECK: call void @_Z1xv(
  // CHECK: call void @"_ZZ1hbbEN3$_2D1Ev"(
  // CHECK: call void @_ZN1TD1Ev(
  // CHECK: call void @_Z1yv(
  // CHECK: ret void

  // cleanups for throw 1
  // CHECK: landingpad
  // CHECK-NOT: @"_ZZ1hbbEN3$_2D1Ev"(
  // CHECK: br

  // cleanups for throw 2
  // CHECK: landingpad
  // CHECK: call void @"_ZZ1hbbEN3$_2D1Ev"(
  // CHECK: br

  // common cleanup code
  // CHECK: call void @_ZN1TD1Ev(
  // CHECK: load i1, i1* %[[S_ISACTIVE]],
  // CHECK: br i1

  // CHECK: call void @_ZN1SD1Ev(
  // CHECK: br

  // CHECK: resume
  [s = S(), t = T().n, u = (b1 ? throw 1 : 42)] {}, (b2 ? throw 2 : 0), x();
  y();

  // CHECK: }
}
