brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · b0b9381 Raw
105 lines · cpp
1// RUN: %clang_cc1 -std=c++1y -triple x86_64-linux-gnu -fexceptions -fcxx-exceptions -emit-llvm %s -o - | FileCheck %s2 3struct S {4  S();5  ~S();6};7 8struct T {9  T() noexcept;10  ~T();11  int n;12};13 14// CHECK-LABEL: define{{.*}} void @_Z1fv(15void f() {16  // CHECK: call void @_ZN1SC1Ev(17  // CHECK: invoke void @__cxa_throw18  //19  // Ensure we call the lambda destructor here, and do not call the destructor20  // for the capture.21  // CHECK: landingpad22  // CHECK-NOT: _ZN1SD23  // CHECK: call void @"_ZZ1fvEN3$_0D1Ev"(24  // CHECK-NOT: _ZN1SD25  // CHECK: resume26  [s = S()] {}, throw 0;27 28  // CHECK: }29}30 31// CHECK-LABEL: define{{.*}} void @_Z1gv(32void g() {33  // CHECK: call void @_ZN1SC1Ev(34  // CHECK: invoke void @__cxa_throw35  //36  // Ensure we call the lambda destructor here, and do not call the destructor37  // for the capture.38  // CHECK: landingpad39  // CHECK-NOT: @"_ZZ1gvEN3$_0D1Ev"(40  // CHECK: call void @_ZN1SD1Ev(41  // CHECK-NOT: @"_ZZ1gvEN3$_0D1Ev"(42  // CHECK: resume43  [s = S(), t = (throw 0, 1)] {};44 45  // CHECK: }46}47 48void x() noexcept;49void y() noexcept;50 51// CHECK-LABEL: define{{.*}} void @_Z1hbb(52void h(bool b1, bool b2) {53  // CHECK: {{.*}} = alloca i1,54  // CHECK: %[[S_ISACTIVE:.*]] = alloca i1,55  // CHECK: {{.*}} = alloca i1,56 57  // lambda init: s and t, branch on b158  // CHECK: call void @_ZN1SC1Ev(59  // CHECK: store i1 true, ptr %[[S_ISACTIVE]], align 160  // CHECK: call void @_ZN1TC1Ev(61  // CHECK: br i162 63  // throw 164  // CHECK: invoke void @__cxa_throw65 66  // completion of lambda init, branch on b267  // CHECK: store i32 42,68  // CHECK: store i1 false, ptr %[[S_ISACTIVE]], align 169  // CHECK: br i170 71  // throw 272  // CHECK: invoke void @__cxa_throw73 74  // end of full-expression75  // CHECK: call void @_Z1xv(76  // CHECK: call void @"_ZZ1hbbEN3$_0D1Ev"(77  // CHECK: call void @_ZN1TD1Ev(78  // CHECK: call void @_Z1yv(79  // CHECK: ret void80 81  // cleanups for throw 182  // CHECK: landingpad83  // CHECK-NOT: @"_ZZ1hbbEN3$_0D1Ev"(84  // CHECK: br85 86  // cleanups for throw 287  // CHECK: landingpad88  // CHECK: call void @"_ZZ1hbbEN3$_0D1Ev"(89  // CHECK: br90 91  // common cleanup code92  // CHECK: call void @_ZN1TD1Ev(93  // CHECK: load i1, ptr %[[S_ISACTIVE]],94  // CHECK: br i195 96  // CHECK: call void @_ZN1SD1Ev(97  // CHECK: br98 99  // CHECK: resume100  [s = S(), t = T().n, u = (b1 ? throw 1 : 42)] {}, (b2 ? throw 2 : 0), x();101  y();102 103  // CHECK: }104}105