xref: /aosp_15_r20/external/clang/test/CodeGenObjC/encode-test.m (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li// RUN: %clang_cc1 -triple i686-apple-darwin9 -fobjc-runtime=macosx-fragile-10.5 -emit-llvm -o %t %s
2*67e74705SXin Li// RUN: FileCheck < %t %s
3*67e74705SXin Li//
4*67e74705SXin Li// CHECK: @OBJC_METH_VAR_TYPE_.34 = private global [16 x i8] c"v12@0:4[3[4@]]8\00"
5*67e74705SXin Li
6*67e74705SXin Li@class Int1;
7*67e74705SXin Li
8*67e74705SXin Listruct Innermost {
9*67e74705SXin Li  unsigned char a, b;
10*67e74705SXin Li};
11*67e74705SXin Li
12*67e74705SXin Li@interface Int1 {
13*67e74705SXin Li  signed char a, b;
14*67e74705SXin Li  struct Innermost *innermost;
15*67e74705SXin Li}
16*67e74705SXin Li@end
17*67e74705SXin Li
18*67e74705SXin Li@implementation Int1
19*67e74705SXin Li@end
20*67e74705SXin Li
21*67e74705SXin Li@interface Base
22*67e74705SXin Li{
23*67e74705SXin Li    struct objc_class *isa;
24*67e74705SXin Li    int full;
25*67e74705SXin Li    int full2: 32;
26*67e74705SXin Li    int _refs: 8;
27*67e74705SXin Li    int field2: 3;
28*67e74705SXin Li    unsigned f3: 8;
29*67e74705SXin Li    short cc;
30*67e74705SXin Li    unsigned g: 16;
31*67e74705SXin Li    int r2: 8;
32*67e74705SXin Li    int r3: 8;
33*67e74705SXin Li    int r4: 2;
34*67e74705SXin Li    int r5: 8;
35*67e74705SXin Li    char c;
36*67e74705SXin Li}
37*67e74705SXin Li@end
38*67e74705SXin Li
39*67e74705SXin Li@interface Derived: Base
40*67e74705SXin Li{
41*67e74705SXin Li    char d;
42*67e74705SXin Li    int _field3: 6;
43*67e74705SXin Li}
44*67e74705SXin Li@end
45*67e74705SXin Li
46*67e74705SXin Li@implementation Base
47*67e74705SXin Li@end
48*67e74705SXin Li
49*67e74705SXin Li@implementation Derived
50*67e74705SXin Li@end
51*67e74705SXin Li
52*67e74705SXin Li@interface B1
53*67e74705SXin Li{
54*67e74705SXin Li    struct objc_class *isa;
55*67e74705SXin Li    Int1 *sBase;
56*67e74705SXin Li    char c;
57*67e74705SXin Li}
58*67e74705SXin Li@end
59*67e74705SXin Li
60*67e74705SXin Li@implementation B1
61*67e74705SXin Li@end
62*67e74705SXin Li
63*67e74705SXin Li@interface Test
64*67e74705SXin Li{
65*67e74705SXin Li	int ivar;
66*67e74705SXin Li         __attribute__((objc_gc(weak))) SEL selector;
67*67e74705SXin Li}
68*67e74705SXin Li-(void) test3: (Test*  [3] [4])b ;
69*67e74705SXin Li- (SEL**) meth : (SEL) arg : (SEL*****) arg1 : (SEL*)arg2 : (SEL**) arg3;
70*67e74705SXin Li@end
71*67e74705SXin Li
72*67e74705SXin Li@implementation Test
73*67e74705SXin Li-(void) test3: (Test* [3] [4])b {}
74*67e74705SXin Li- (SEL**) meth : (SEL) arg : (SEL*****) arg1 : (SEL*)arg2 : (SEL**) arg3 {}
75*67e74705SXin Li@end
76*67e74705SXin Li
77*67e74705SXin Listruct S { int iS; };
78*67e74705SXin Li
79*67e74705SXin Li@interface Object
80*67e74705SXin Li{
81*67e74705SXin Li Class isa;
82*67e74705SXin Li}
83*67e74705SXin Li@end
84*67e74705SXin Litypedef Object MyObj;
85*67e74705SXin Li
86*67e74705SXin Liint main()
87*67e74705SXin Li{
88*67e74705SXin Li	const char *en = @encode(Derived);
89*67e74705SXin Li	const char *eb = @encode(B1);
90*67e74705SXin Li        const char *es = @encode(const struct S *);
91*67e74705SXin Li        const char *ec = @encode(const struct S);
92*67e74705SXin Li        const char *ee = @encode(MyObj *const);
93*67e74705SXin Li}
94*67e74705SXin Li
95*67e74705SXin Li// CHECK: @g0 = constant [15 x i8] c"{Innermost=CC}\00"
96*67e74705SXin Liconst char g0[] = @encode(struct Innermost);
97*67e74705SXin Li
98*67e74705SXin Li// CHECK: @g1 = constant [38 x i8] c"{Derived=#ib32b8b3b8sb16b8b8b2b8ccb6}\00"
99*67e74705SXin Liconst char g1[] = @encode(Derived);
100*67e74705SXin Li
101*67e74705SXin Li// CHECK: @g2 = constant [9 x i8] c"{B1=#@c}\00"
102*67e74705SXin Liconst char g2[] = @encode(B1);
103*67e74705SXin Li
104*67e74705SXin Li// CHECK: @g3 = constant [8 x i8] c"r^{S=i}\00"
105*67e74705SXin Liconst char g3[] = @encode(const struct S *);
106*67e74705SXin Li
107*67e74705SXin Li// CHECK: @g4 = constant [6 x i8] c"{S=i}\00"
108*67e74705SXin Liconst char g4[] = @encode(const struct S);
109*67e74705SXin Li
110*67e74705SXin Li// CHECK: @g5 = constant [12 x i8] c"^{Object=#}\00"
111*67e74705SXin Liconst char g5[] = @encode(MyObj * const);
112*67e74705SXin Li
113*67e74705SXin Li////
114*67e74705SXin Li
115*67e74705SXin Lienum Enum1X { one, two, three, four };
116*67e74705SXin Li
117*67e74705SXin Li@interface Base1X {
118*67e74705SXin Li  unsigned a: 2;
119*67e74705SXin Li  int b: 3;
120*67e74705SXin Li  enum Enum1X c: 4;
121*67e74705SXin Li  unsigned d: 5;
122*67e74705SXin Li}
123*67e74705SXin Li@end
124*67e74705SXin Li
125*67e74705SXin Li@interface Derived1X: Base1X {
126*67e74705SXin Li  signed e: 5;
127*67e74705SXin Li  int f: 4;
128*67e74705SXin Li  enum Enum1X g: 3;
129*67e74705SXin Li}
130*67e74705SXin Li@end
131*67e74705SXin Li
132*67e74705SXin Li@implementation Base1X @end
133*67e74705SXin Li
134*67e74705SXin Li@implementation Derived1X @end
135*67e74705SXin Li
136*67e74705SXin Li// CHECK: @g6 = constant [18 x i8] c"{Base1X=b2b3b4b5}\00"
137*67e74705SXin Liconst char g6[] = @encode(Base1X);
138*67e74705SXin Li
139*67e74705SXin Li// CHECK: @g7 = constant [27 x i8] c"{Derived1X=b2b3b4b5b5b4b3}\00"
140*67e74705SXin Liconst char g7[] = @encode(Derived1X);
141*67e74705SXin Li
142*67e74705SXin Li// CHECK: @g8 = constant [7 x i8] c"{s8=D}\00"
143*67e74705SXin Listruct s8 {
144*67e74705SXin Li  long double x;
145*67e74705SXin Li};
146*67e74705SXin Liconst char g8[] = @encode(struct s8);
147*67e74705SXin Li
148*67e74705SXin Li// CHECK: @g9 = constant [11 x i8] c"{S9=i[0i]}\00"
149*67e74705SXin Listruct S9 {
150*67e74705SXin Li  int x;
151*67e74705SXin Li  int flex[];
152*67e74705SXin Li};
153*67e74705SXin Liconst char g9[] = @encode(struct S9);
154*67e74705SXin Li
155*67e74705SXin Listruct f
156*67e74705SXin Li{
157*67e74705SXin Li  int i;
158*67e74705SXin Li  struct{} g[4];
159*67e74705SXin Li  int tt;
160*67e74705SXin Li};
161*67e74705SXin Li
162*67e74705SXin Li// CHECK: @g10 = constant [14 x i8] c"{f=i[4{?=}]i}\00"
163*67e74705SXin Liconst char g10[] = @encode(struct f);
164*67e74705SXin Li
165*67e74705SXin Li// rdar://9622422
166*67e74705SXin Li// CHECK: @g11 = constant [2 x i8] c"v\00"
167*67e74705SXin Liconst char g11[] = @encode(void);
168*67e74705SXin Li
169*67e74705SXin Li// PR14628
170*67e74705SXin Li// CHECK: @g12 = constant [3 x i8] c"Ai\00"
171*67e74705SXin Liconst char g12[] = @encode(_Atomic(int));
172*67e74705SXin Li
173*67e74705SXin Li// rdar://15824769
174*67e74705SXin Liid test_id = 0;
175*67e74705SXin LiClass test_class = 0;
176*67e74705SXin Liconst char g13[] = @encode(__typeof__(*test_class));
177*67e74705SXin Liconst char g14[] = @encode(__typeof__(*test_id));
178*67e74705SXin Li// CHECK: constant [14 x i8] c"{objc_class=}\00"
179*67e74705SXin Li// CHECK: constant [15 x i8] c"{objc_object=}\00"
180*67e74705SXin Li
181*67e74705SXin Li// CHECK: @g15 = constant [2 x i8] c":\00"
182*67e74705SXin Liconst char g15[] = @encode(SEL);
183