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