48 lines · cpp
1// RUN: %clang_cc1 -emit-llvm -triple thumbv7-windows-itanium -fexceptions -fcxx-exceptions %s -o - | FileCheck %s2// RUN: %clang_cc1 -emit-llvm -triple i686-windows-itanium -fexceptions -fcxx-exceptions %s -o - | FileCheck %s3// REQUIRES: asserts4 5void except() {6 throw 32;7}8 9void attempt() {10 try { except(); } catch (...) { }11}12 13// CHECK: @_ZTIi = external dso_local constant ptr14 15// CHECK: define {{.*}}void @_Z6exceptv() {{.*}} {16// CHECK: %exception = call {{.*}}ptr @__cxa_allocate_exception(i32 4)17// CHECK: store i32 32, ptr %exception18// CHECK: call {{.*}}void @__cxa_throw(ptr %exception, ptr @_ZTIi, ptr null)19// CHECK: unreachable20// CHECK: }21 22// CHECK: define {{.*}}void @_Z7attemptv()23// CHECK-SAME: personality ptr @__gxx_personality_v024// CHECK: %exn.slot = alloca ptr25// CHECK: %ehselector.slot = alloca i3226// CHECK: invoke {{.*}}void @_Z6exceptv()27// CHECK: to label %invoke.cont unwind label %lpad28// CHECK: invoke.cont:29// CHECK: br label %try.cont30// CHECK: lpad:31// CHECK: %0 = landingpad { ptr, i32 }32// CHECK: catch ptr null33// CHECK: %1 = extractvalue { ptr, i32 } %0, 034// CHECK: store ptr %1, ptr %exn.slot35// CHECK: %2 = extractvalue { ptr, i32 } %0, 136// CHECK: store i32 %2, ptr %ehselector.slot37// CHECK: br label %catch38// CHECK: catch:39// CHECK: %exn = load ptr, ptr %exn.slot40// CHECK: %3 = call {{.*}}ptr @__cxa_begin_catch(ptr %{{2|exn}})41// CHECK: call {{.*}}void @__cxa_end_catch()42// CHECK: br label %try.cont43// CHECK: try.cont:44// CHECK: ret void45// CHECK: }46 47 48