John McCall | 260611a | 2012-06-20 06:18:46 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -triple i686-apple-darwin9 -fobjc-runtime=macosx-fragile-10.5 -emit-llvm -o %t %s |
Daniel Dunbar | e5ecb9c | 2010-10-11 21:13:44 +0000 | [diff] [blame] | 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" |
Fariborz Jahanian | e4bb68a | 2008-12-19 17:45:06 +0000 | [diff] [blame] | 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 |
Fariborz Jahanian | 43822ea | 2008-12-19 23:34:38 +0000 | [diff] [blame] | 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 | |
Fariborz Jahanian | adcaf54 | 2008-12-20 19:17:01 +0000 | [diff] [blame] | 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 | |
Fariborz Jahanian | 4306d3c | 2008-12-20 23:29:59 +0000 | [diff] [blame] | 63 | @interface Test |
| 64 | { |
| 65 | int ivar; |
Fariborz Jahanian | 8d2c0a9 | 2009-11-30 18:43:52 +0000 | [diff] [blame] | 66 | __attribute__((objc_gc(weak))) SEL selector; |
Fariborz Jahanian | 4306d3c | 2008-12-20 23:29:59 +0000 | [diff] [blame] | 67 | } |
Chris Lattner | c7c11b1 | 2009-04-27 01:55:56 +0000 | [diff] [blame] | 68 | -(void) test3: (Test* [3] [4])b ; |
Fariborz Jahanian | 60bce3e | 2009-11-23 20:40:50 +0000 | [diff] [blame] | 69 | - (SEL**) meth : (SEL) arg : (SEL*****) arg1 : (SEL*)arg2 : (SEL**) arg3; |
Fariborz Jahanian | 4306d3c | 2008-12-20 23:29:59 +0000 | [diff] [blame] | 70 | @end |
| 71 | |
| 72 | @implementation Test |
Chris Lattner | c7c11b1 | 2009-04-27 01:55:56 +0000 | [diff] [blame] | 73 | -(void) test3: (Test* [3] [4])b {} |
Fariborz Jahanian | 60bce3e | 2009-11-23 20:40:50 +0000 | [diff] [blame] | 74 | - (SEL**) meth : (SEL) arg : (SEL*****) arg1 : (SEL*)arg2 : (SEL**) arg3 {} |
Fariborz Jahanian | 4306d3c | 2008-12-20 23:29:59 +0000 | [diff] [blame] | 75 | @end |
| 76 | |
Fariborz Jahanian | 5b8c7d9 | 2008-12-22 23:22:27 +0000 | [diff] [blame] | 77 | struct S { int iS; }; |
Fariborz Jahanian | 4306d3c | 2008-12-20 23:29:59 +0000 | [diff] [blame] | 78 | |
Fariborz Jahanian | 3e1b16c | 2008-12-23 21:30:15 +0000 | [diff] [blame] | 79 | @interface Object |
| 80 | { |
| 81 | Class isa; |
| 82 | } |
| 83 | @end |
| 84 | typedef Object MyObj; |
| 85 | |
Fariborz Jahanian | 43822ea | 2008-12-19 23:34:38 +0000 | [diff] [blame] | 86 | int main() |
| 87 | { |
| 88 | const char *en = @encode(Derived); |
Fariborz Jahanian | adcaf54 | 2008-12-20 19:17:01 +0000 | [diff] [blame] | 89 | const char *eb = @encode(B1); |
Fariborz Jahanian | 5b8c7d9 | 2008-12-22 23:22:27 +0000 | [diff] [blame] | 90 | const char *es = @encode(const struct S *); |
| 91 | const char *ec = @encode(const struct S); |
Fariborz Jahanian | 3e1b16c | 2008-12-23 21:30:15 +0000 | [diff] [blame] | 92 | const char *ee = @encode(MyObj *const); |
Fariborz Jahanian | 43822ea | 2008-12-19 23:34:38 +0000 | [diff] [blame] | 93 | } |
| 94 | |
Daniel Dunbar | e5ecb9c | 2010-10-11 21:13:44 +0000 | [diff] [blame] | 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); |
Daniel Dunbar | 44414cf | 2010-10-11 21:13:46 +0000 | [diff] [blame] | 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); |
Daniel Dunbar | 3a0be84 | 2010-10-11 21:13:48 +0000 | [diff] [blame] | 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); |
Argyrios Kyrtzidis | 2636197 | 2011-05-17 00:46:38 +0000 | [diff] [blame] | 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); |
Fariborz Jahanian | 6c91615 | 2011-06-16 22:34:44 +0000 | [diff] [blame] | 164 | |
| 165 | // rdar://9622422 |
| 166 | // CHECK: @g11 = constant [2 x i8] c"v\00" |
| 167 | const char g11[] = @encode(void); |
John McCall | 3624e9e | 2012-12-20 02:45:14 +0000 | [diff] [blame] | 168 | |
| 169 | // PR14628 |
| 170 | // CHECK: @g12 = constant [3 x i8] c"Ai\00" |
| 171 | const char g12[] = @encode(_Atomic(int)); |