1 // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fobjc-dispatch-method=mixed -emit-llvm -o - %s | FileCheck %s 2 3 // CHECK: @"OBJC_IVAR_$_A._ivar" = global {{.*}} section "__DATA, __objc_ivar", align 8 4 // CHECK: @_objc_empty_cache = external global 5 // CHECK: @_objc_empty_vtable = external global 6 // CHECK: @"OBJC_CLASS_$_A" = global 7 // CHECK: @"OBJC_METACLASS_$_A" = global {{.*}} section "__DATA, __objc_data", align 8 8 // CHECK: @OBJC_CLASS_NAME_{{[0-9]*}} = private global {{.*}} section "__TEXT,__objc_classname,cstring_literals", align 1 9 // CHECK: @OBJC_METH_VAR_NAME_{{[0-9]*}} = private global {{.*}} section "__TEXT,__objc_methname,cstring_literals", align 1 10 // CHECK: @OBJC_METH_VAR_TYPE_{{[0-9]*}} = private global {{.*}} section "__TEXT,__objc_methtype,cstring_literals", align 1 11 // CHECK: @"\01l_OBJC_$_CLASS_METHODS_A" = private global {{.*}} section "__DATA, __objc_const", align 8 12 // CHECK: @"\01l_OBJC_$_PROTOCOL_INSTANCE_METHODS_P" = private global {{.*}} section "__DATA, __objc_const", align 8 13 // CHECK: @"\01l_OBJC_$_PROTOCOL_CLASS_METHODS_P" = private global {{.*}} section "__DATA, __objc_const", align 8 14 // CHECK: @"\01l_OBJC_PROTOCOL_$_P" = weak hidden global {{.*}}, align 8 15 // CHECK: @"\01l_OBJC_LABEL_PROTOCOL_$_P" = weak hidden global {{.*}} section "__DATA, __objc_protolist, coalesced, no_dead_strip", align 8 16 // CHECK: @"\01l_OBJC_CLASS_PROTOCOLS_$_A" = private global {{.*}} section "__DATA, __objc_const", align 8 17 // CHECK: @"\01l_OBJC_METACLASS_RO_$_A" = private global {{.*}} section "__DATA, __objc_const", align 8 18 // CHECK: @"\01l_OBJC_$_INSTANCE_METHODS_A" = private global {{.*}} section "__DATA, __objc_const", align 8 19 // CHECK: @"\01l_OBJC_$_INSTANCE_VARIABLES_A" = private global {{.*}} section "__DATA, __objc_const", align 8 20 // CHECK: @OBJC_PROP_NAME_ATTR_{{[0-9]*}} = private global {{.*}} section "__TEXT,__cstring,cstring_literals", align 1 21 // CHECK: @"\01l_OBJC_$_PROP_LIST_A" = private global {{.*}} section "__DATA, __objc_const", align 8 22 // CHECK: @"\01l_OBJC_CLASS_RO_$_A" = private global {{.*}} section "__DATA, __objc_const", align 8 23 // CHECK: @"\01l_OBJC_$_CATEGORY_INSTANCE_METHODS_A_$_Cat" = private global {{.*}} section "__DATA, __objc_const", align 8 24 // CHECK: @"\01l_OBJC_$_CATEGORY_CLASS_METHODS_A_$_Cat" = private global {{.*}} section "__DATA, __objc_const", align 8 25 // CHECK: @"\01l_OBJC_$_CATEGORY_A_$_Cat" = private global {{.*}} section "__DATA, __objc_const", align 8 26 // CHECK: @"OBJC_CLASSLIST_SUP_REFS_$_{{[0-9]*}}" = private global {{.*}} section "__DATA, __objc_superrefs, regular, no_dead_strip", align 8 27 // CHECK: @OBJC_SELECTOR_REFERENCES_ = private externally_initialized global {{.*}} section "__DATA, __objc_selrefs, literal_pointers, no_dead_strip" 28 // CHECK: @"OBJC_CLASSLIST_SUP_REFS_$_{{[\.0-9]*}}" = private global {{.*}} section "__DATA, __objc_superrefs, regular, no_dead_strip", align 8 29 // CHECK: @"OBJC_CLASS_$_B" = external global 30 // CHECK: @"OBJC_CLASSLIST_REFERENCES_$_{{[0-9]*}}" = private global {{.*}} section "__DATA, __objc_classrefs, regular, no_dead_strip", align 8 31 // CHECK: @"\01l_objc_msgSend_fixup_alloc" = weak hidden global {{.*}} section "__DATA, __objc_msgrefs, coalesced", align 16 32 // CHECK: @"OBJC_LABEL_CLASS_$" = private global {{.*}} section "__DATA, __objc_classlist, regular, no_dead_strip", align 8 33 // CHECK: @"OBJC_LABEL_CATEGORY_$" = private global {{.*}} section "__DATA, __objc_catlist, regular, no_dead_strip", align 8 34 // CHECK: @objc_msgSend_fpret( 35 // CHECK: @objc_msgSend_fixup( 36 37 38 /* 39 40 Here is a handy command for looking at llvm-gcc's output: 41 llvm-gcc -m64 -emit-llvm -S -o - metadata-symbols-64.m | \ 42 grep '=.*global' | \ 43 sed -e 's#global.*, section#global ... section#' | \ 44 sort 45 46 */ 47 48 @interface B 49 @end 50 @interface C 51 @end 52 53 @protocol P 54 +(void) fm0; 55 -(void) im0; 56 @end 57 58 @interface A<P> { 59 int _ivar; 60 } 61 62 @property (assign) int ivar; 63 64 +(void) fm0; 65 -(void) im0; 66 @end 67 68 @implementation A 69 @synthesize ivar = _ivar; 70 +(void) fm0 { 71 } 72 -(void) im0 { 73 } 74 @end 75 76 @implementation A (Cat) 77 +(void) fm1 { 78 } 79 -(void) im1 { 80 } 81 @end 82 83 @interface D : A 84 @end 85 86 @implementation D 87 +(void) fm2 { 88 [super fm1]; 89 } 90 -(void) im2 { 91 [super im1]; 92 } 93 @end 94 95 // Test for FP dispatch method APIs 96 @interface Example 97 @end 98 99 float FLOAT; 100 double DOUBLE; 101 long double LONGDOUBLE; 102 id ID; 103 104 @implementation Example 105 - (double) RET_DOUBLE 106 { 107 return DOUBLE; 108 } 109 - (float) RET_FLOAT 110 { 111 return FLOAT; 112 } 113 - (long double) RET_LONGDOUBLE 114 { 115 return LONGDOUBLE; 116 } 117 @end 118 119 void *f0(id x) { 120 Example* pe; 121 double dd = [pe RET_DOUBLE]; 122 dd = [pe RET_FLOAT]; 123 dd = [pe RET_LONGDOUBLE]; 124 125 [B im0]; 126 [C im1]; 127 [D alloc]; 128 } 129 130