blob: e8d65413740dcbe0406b637942197b6ff1c070d7 [file] [log] [blame]
John McCall260611a2012-06-20 06:18:46 +00001// RUN: %clang_cc1 -triple i686-apple-darwin9 -fobjc-runtime=macosx-fragile-10.5 -emit-llvm -o %t %s
Daniel Dunbare5ecb9c2010-10-11 21:13:44 +00002// 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"
Fariborz Jahaniane4bb68a2008-12-19 17:45:06 +00005
6@class Int1;
7
8struct 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
Fariborz Jahanian43822ea2008-12-19 23:34:38 +000020
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
Fariborz Jahanianadcaf542008-12-20 19:17:01 +000052@interface B1
53{
54 struct objc_class *isa;
55 Int1 *sBase;
56 char c;
57}
58@end
59
60@implementation B1
61@end
62
Fariborz Jahanian4306d3c2008-12-20 23:29:59 +000063@interface Test
64{
65 int ivar;
Fariborz Jahanian8d2c0a92009-11-30 18:43:52 +000066 __attribute__((objc_gc(weak))) SEL selector;
Fariborz Jahanian4306d3c2008-12-20 23:29:59 +000067}
Chris Lattnerc7c11b12009-04-27 01:55:56 +000068-(void) test3: (Test* [3] [4])b ;
Fariborz Jahanian60bce3e2009-11-23 20:40:50 +000069- (SEL**) meth : (SEL) arg : (SEL*****) arg1 : (SEL*)arg2 : (SEL**) arg3;
Fariborz Jahanian4306d3c2008-12-20 23:29:59 +000070@end
71
72@implementation Test
Chris Lattnerc7c11b12009-04-27 01:55:56 +000073-(void) test3: (Test* [3] [4])b {}
Fariborz Jahanian60bce3e2009-11-23 20:40:50 +000074- (SEL**) meth : (SEL) arg : (SEL*****) arg1 : (SEL*)arg2 : (SEL**) arg3 {}
Fariborz Jahanian4306d3c2008-12-20 23:29:59 +000075@end
76
Fariborz Jahanian5b8c7d92008-12-22 23:22:27 +000077struct S { int iS; };
Fariborz Jahanian4306d3c2008-12-20 23:29:59 +000078
Fariborz Jahanian3e1b16c2008-12-23 21:30:15 +000079@interface Object
80{
81 Class isa;
82}
83@end
84typedef Object MyObj;
85
Fariborz Jahanian43822ea2008-12-19 23:34:38 +000086int main()
87{
88 const char *en = @encode(Derived);
Fariborz Jahanianadcaf542008-12-20 19:17:01 +000089 const char *eb = @encode(B1);
Fariborz Jahanian5b8c7d92008-12-22 23:22:27 +000090 const char *es = @encode(const struct S *);
91 const char *ec = @encode(const struct S);
Fariborz Jahanian3e1b16c2008-12-23 21:30:15 +000092 const char *ee = @encode(MyObj *const);
Fariborz Jahanian43822ea2008-12-19 23:34:38 +000093}
94
Daniel Dunbare5ecb9c2010-10-11 21:13:44 +000095// CHECK: @g0 = constant [15 x i8] c"{Innermost=CC}\00"
96const char g0[] = @encode(struct Innermost);
97
98// CHECK: @g1 = constant [38 x i8] c"{Derived=#ib32b8b3b8sb16b8b8b2b8ccb6}\00"
99const char g1[] = @encode(Derived);
100
101// CHECK: @g2 = constant [9 x i8] c"{B1=#@c}\00"
102const char g2[] = @encode(B1);
103
104// CHECK: @g3 = constant [8 x i8] c"r^{S=i}\00"
105const char g3[] = @encode(const struct S *);
106
107// CHECK: @g4 = constant [6 x i8] c"{S=i}\00"
108const char g4[] = @encode(const struct S);
109
110// CHECK: @g5 = constant [12 x i8] c"^{Object=#}\00"
111const char g5[] = @encode(MyObj * const);
Daniel Dunbar44414cf2010-10-11 21:13:46 +0000112
113////
114
115enum 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"
137const char g6[] = @encode(Base1X);
138
139// CHECK: @g7 = constant [27 x i8] c"{Derived1X=b2b3b4b5b5b4b3}\00"
140const char g7[] = @encode(Derived1X);
Daniel Dunbar3a0be842010-10-11 21:13:48 +0000141
142// CHECK: @g8 = constant [7 x i8] c"{s8=D}\00"
143struct s8 {
144 long double x;
145};
146const char g8[] = @encode(struct s8);
Argyrios Kyrtzidis26361972011-05-17 00:46:38 +0000147
148// CHECK: @g9 = constant [11 x i8] c"{S9=i[0i]}\00"
149struct S9 {
150 int x;
151 int flex[];
152};
153const char g9[] = @encode(struct S9);
154
155struct 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"
163const char g10[] = @encode(struct f);
Fariborz Jahanian6c916152011-06-16 22:34:44 +0000164
165// rdar://9622422
166// CHECK: @g11 = constant [2 x i8] c"v\00"
167const char g11[] = @encode(void);
John McCall3624e9e2012-12-20 02:45:14 +0000168
169// PR14628
170// CHECK: @g12 = constant [3 x i8] c"Ai\00"
171const char g12[] = @encode(_Atomic(int));