xref: /aosp_15_r20/external/clang/test/CodeGenObjC/metadata-symbols-64.m (revision 67e74705e28f6214e480b399dd47ea732279e315)
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