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