1f4a2713aSLionel Sambuc// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -fexceptions -fobjc-exceptions -o %t %s 2f4a2713aSLionel Sambuc// RUN: FileCheck -check-prefix=CHECK-X86_64 < %t %s 3f4a2713aSLionel Sambuc// RUN: FileCheck -check-prefix=CHECK-EHTYPE < %t %s 4f4a2713aSLionel Sambuc 5f4a2713aSLionel Sambuc// We need exactly 3 of these. 6f4a2713aSLionel Sambuc// CHECK-EHTYPE: @"OBJC_EHTYPE_$_EH3" 7f4a2713aSLionel Sambuc// CHECK-EHTYPE: @"OBJC_EHTYPE_$_EH3" 8f4a2713aSLionel Sambuc// CHECK-EHTYPE: @"OBJC_EHTYPE_$_EH3" 9f4a2713aSLionel Sambuc// CHECK-EHTYPE-NOT: @"OBJC_EHTYPE_$_EH3" 10f4a2713aSLionel Sambuc 11f4a2713aSLionel Sambuc// CHECK-X86_64: @"OBJC_CLASS_$_A" = global {{.*}}, section "__DATA, __objc_data", align 8 12f4a2713aSLionel Sambuc// CHECK-X86_64: @"OBJC_METACLASS_$_A" = global {{.*}}, section "__DATA, __objc_data", align 8 13*0a6a1f1dSLionel Sambuc// CHECK-X86_64: @OBJC_CLASS_NAME_ = {{.*}}, section "__TEXT,__objc_classname,cstring_literals", align 1 14f4a2713aSLionel Sambuc// CHECK-X86_64: @"OBJC_EHTYPE_$_EH1" = weak global {{.*}}, section "__DATA,__datacoal_nt,coalesced", align 8 15f4a2713aSLionel Sambuc// CHECK-X86_64: @"OBJC_EHTYPE_$_EH2" = external global 16f4a2713aSLionel Sambuc// CHECK-X86_64: @"OBJC_EHTYPE_$_EH3" = global {{.*}}, section "__DATA,__objc_const", align 8 17*0a6a1f1dSLionel Sambuc// CHECK-X86_64: @"OBJC_LABEL_CLASS_$" = private global {{.*}}, section "__DATA, __objc_classlist, regular, no_dead_strip", align 8 18f4a2713aSLionel Sambuc// CHECK-X86_64: define internal void @"\01-[A im0]" 19f4a2713aSLionel Sambuc// CHECK-X86_64: define internal void @"\01-[A(Cat) im1]" 20f4a2713aSLionel Sambuc 21f4a2713aSLionel Sambuc// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fobjc-exceptions -fvisibility hidden -emit-llvm -o %t %s 22f4a2713aSLionel Sambuc// RUN: FileCheck -check-prefix=CHECK-X86_64-HIDDEN < %t %s 23f4a2713aSLionel Sambuc 24f4a2713aSLionel Sambuc// CHECK-X86_64-HIDDEN: @"OBJC_CLASS_$_A" = hidden global {{.*}}, section "__DATA, __objc_data", align 8 25f4a2713aSLionel Sambuc// CHECK-X86_64-HIDDEN: @"OBJC_METACLASS_$_A" = hidden global {{.*}}, section "__DATA, __objc_data", align 8 26f4a2713aSLionel Sambuc// CHECK-X86_64-HIDDEN: @"OBJC_EHTYPE_$_EH1" = weak hidden global {{.*}}, section "__DATA,__datacoal_nt,coalesced" 27f4a2713aSLionel Sambuc// CHECK-X86_64-HIDDEN: @"OBJC_EHTYPE_$_EH2" = external global 28f4a2713aSLionel Sambuc// CHECK-X86_64-HIDDEN: @"OBJC_EHTYPE_$_EH3" = hidden global {{.*}}, section "__DATA,__objc_const", align 8 29f4a2713aSLionel Sambuc// CHECK-X86_64-HIDDEN: define internal void @"\01-[A im0]" 30f4a2713aSLionel Sambuc// CHECK-X86_64-HIDDEN: define internal void @"\01-[A(Cat) im1]" 31f4a2713aSLionel Sambuc 32f4a2713aSLionel Sambuc// RUN: %clang_cc1 -triple armv6-apple-darwin10 -target-abi apcs-gnu -fobjc-exceptions -emit-llvm -o %t %s 33f4a2713aSLionel Sambuc// RUN: FileCheck -check-prefix=CHECK-ARMV6 < %t %s 34f4a2713aSLionel Sambuc 35f4a2713aSLionel Sambuc// CHECK-ARMV6: @"OBJC_CLASS_$_A" = global {{.*}}, section "__DATA, __objc_data", align 4 36f4a2713aSLionel Sambuc// CHECK-ARMV6: @"OBJC_METACLASS_$_A" = global {{.*}}, section "__DATA, __objc_data", align 4 37*0a6a1f1dSLionel Sambuc// CHECK-ARMV6: @OBJC_CLASS_NAME_ = {{.*}}, section "__TEXT,__objc_classname,cstring_literals", align 1 38f4a2713aSLionel Sambuc// CHECK-ARMV6: @"OBJC_EHTYPE_$_EH1" = weak global {{.*}}, section "__DATA,__datacoal_nt,coalesced", align 4 39f4a2713aSLionel Sambuc// CHECK-ARMV6: @"OBJC_EHTYPE_$_EH2" = external global 40f4a2713aSLionel Sambuc// CHECK-ARMV6: @"OBJC_EHTYPE_$_EH3" = global {{.*}}, section "__DATA,__objc_const", align 4 41*0a6a1f1dSLionel Sambuc// CHECK-ARMV6: @"OBJC_LABEL_CLASS_$" = private global {{.*}}, section "__DATA, __objc_classlist, regular, no_dead_strip", align 4 42f4a2713aSLionel Sambuc// CHECK-ARMV6: define internal void @"\01-[A im0]" 43f4a2713aSLionel Sambuc// CHECK-ARMV6: define internal void @"\01-[A(Cat) im1]" 44f4a2713aSLionel Sambuc 45f4a2713aSLionel Sambuc@interface A 46f4a2713aSLionel Sambuc@end 47f4a2713aSLionel Sambuc 48f4a2713aSLionel Sambuc@implementation A 49f4a2713aSLionel Sambuc-(void) im0 { 50f4a2713aSLionel Sambuc} 51f4a2713aSLionel Sambuc@end 52f4a2713aSLionel Sambuc 53f4a2713aSLionel Sambuc@implementation A (Cat) 54f4a2713aSLionel Sambuc-(void) im1 { 55f4a2713aSLionel Sambuc} 56f4a2713aSLionel Sambuc@end 57f4a2713aSLionel Sambuc 58f4a2713aSLionel Sambuc@interface EH1 59f4a2713aSLionel Sambuc@end 60f4a2713aSLionel Sambuc 61f4a2713aSLionel Sambuc__attribute__((__objc_exception__)) 62f4a2713aSLionel Sambuc@interface EH2 63f4a2713aSLionel Sambuc@end 64f4a2713aSLionel Sambuc 65f4a2713aSLionel Sambuc__attribute__((__objc_exception__)) 66f4a2713aSLionel Sambuc@interface EH3 67f4a2713aSLionel Sambuc@end 68f4a2713aSLionel Sambuc 69f4a2713aSLionel Sambucvoid f1(); 70f4a2713aSLionel Sambuc 71f4a2713aSLionel Sambucvoid f0(id x) { 72f4a2713aSLionel Sambuc @try { 73f4a2713aSLionel Sambuc f1(); 74f4a2713aSLionel Sambuc } @catch (EH1 *x) { 75f4a2713aSLionel Sambuc } @catch (EH2 *x) { 76f4a2713aSLionel Sambuc } @catch (EH3 *x) { 77f4a2713aSLionel Sambuc } 78f4a2713aSLionel Sambuc} 79f4a2713aSLionel Sambuc 80f4a2713aSLionel Sambuc@implementation EH3 81f4a2713aSLionel Sambuc@end 82