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