1*67e74705SXin Li// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -emit-llvm -fexceptions -fobjc-exceptions -fobjc-runtime=gcc -o - %s | FileCheck %s 2*67e74705SXin Li// RUN: %clang_cc1 -triple x86_64-unknown-freebsd -emit-llvm -fexceptions -fobjc-exceptions -fobjc-runtime=gnustep-1.7 -o - %s | FileCheck -check-prefix=NEW-ABI %s 3*67e74705SXin Li 4*67e74705SXin Livoid opaque(void); 5*67e74705SXin Livoid log(int i); 6*67e74705SXin Li 7*67e74705SXin Li@class C; 8*67e74705SXin Li 9*67e74705SXin Li// CHECK: define void @test0() [[TF:#[0-9]+]] 10*67e74705SXin Li// CHECK-SAME: personality i8* bitcast (i32 (...)* @__gnu_objc_personality_v0 to i8*) 11*67e74705SXin Livoid test0() { 12*67e74705SXin Li @try { 13*67e74705SXin Li // CHECK: invoke void @opaque() 14*67e74705SXin Li opaque(); 15*67e74705SXin Li 16*67e74705SXin Li // CHECK: call void @log(i32 1) 17*67e74705SXin Li 18*67e74705SXin Li } @catch (C *c) { 19*67e74705SXin Li // CHECK: landingpad { i8*, i32 } 20*67e74705SXin Li // CHECK-NEXT: catch i8* getelementptr inbounds ([2 x i8], [2 x i8]* @0, i64 0, i64 0) 21*67e74705SXin Li // CHECK: br i1 22*67e74705SXin Li 23*67e74705SXin Li // CHECK: call void @log(i32 0) 24*67e74705SXin Li 25*67e74705SXin Li // CHECK: resume 26*67e74705SXin Li // NEW-ABI: objc_begin_catch 27*67e74705SXin Li // NEW-ABI: objc_end_catch 28*67e74705SXin Li 29*67e74705SXin Li log(0); 30*67e74705SXin Li } 31*67e74705SXin Li 32*67e74705SXin Li log(1); 33*67e74705SXin Li} 34*67e74705SXin Li 35*67e74705SXin Li// CHECK: attributes [[TF]] = { "{{.*}} } 36