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