1c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// RUN: %clang_cc1 -emit-llvm -triple thumbv7-windows-itanium -fexceptions -fcxx-exceptions %s -o - | FileCheck %s 2c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// RUN: %clang_cc1 -emit-llvm -triple i686-windows-itanium -fexceptions -fcxx-exceptions %s -o - | FileCheck %s 3c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// REQUIRES: asserts 4c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 5c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesvoid except() { 6c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines throw 32; 7c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines} 8c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 9c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesvoid attempt() { 10c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines try { except(); } catch (...) { } 11c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines} 12c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 13c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK: @_ZTIi = external constant i8* 14c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 15c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK: define {{.*}}void @_Z6exceptv() {{.*}} { 16c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK: %exception = call {{.*}}i8* @__cxa_allocate_exception(i32 4) 17c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK: %0 = bitcast i8* %exception to i32* 18c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK: store i32 32, i32* %0 19c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK: call {{.*}}void @__cxa_throw(i8* %exception, i8* bitcast (i8** @_ZTIi to i8*), i8* null) 20c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK: unreachable 21c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK: } 22c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 2387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK: define {{.*}}void @_Z7attemptv() 2487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK-SAME: personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) 25c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK: %exn.slot = alloca i8* 26c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK: %ehselector.slot = alloca i32 27c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK: invoke {{.*}}void @_Z6exceptv() 28c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK: to label %invoke.cont unwind label %lpad 29c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK: invoke.cont: 30c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK: br label %try.cont 31c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK: lpad: 3287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK: %0 = landingpad { i8*, i32 } 33c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK: catch i8* null 34c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK: %1 = extractvalue { i8*, i32 } %0, 0 35c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK: store i8* %1, i8** %exn.slot 36c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK: %2 = extractvalue { i8*, i32 } %0, 1 37c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK: store i32 %2, i32* %ehselector.slot 38c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK: br label %catch 39c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK: catch: 403ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: %exn = load i8*, i8** %exn.slot 41c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK: %3 = call {{.*}}i8* @__cxa_begin_catch(i8* %{{2|exn}}) 42c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK: call {{.*}}void @__cxa_end_catch() 43c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK: br label %try.cont 44c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK: try.cont: 45c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK: ret void 46c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK: } 47c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 48c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 49