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