27
27
bareIvar = SomeObject ( )
28
28
wibble = SomeObject ( )
29
29
}
30
+
31
+ static var sharedProp : Int64 = 0
30
32
}
31
33
32
34
extension SomeObject {
@@ -38,6 +40,10 @@ extension SomeObject {
38
40
bareIvar = self
39
41
}
40
42
}
43
+
44
+ class var extensionClassProp : SomeObject . Type {
45
+ return self
46
+ }
41
47
}
42
48
43
49
// <rdar://problem/16952186> Crash with @lazy in @objc class
@@ -62,7 +68,10 @@ class Class17127126 {
62
68
lazy var x = 1
63
69
}
64
70
65
-
71
+ @objc protocol Proto {
72
+ var value : Int { get }
73
+ static var sharedInstance : AnyObject { get set }
74
+ }
66
75
67
76
68
77
@@ -82,6 +91,27 @@ class Class17127126 {
82
91
// CHECK: [[WIBBLE_NAME:@.*]] = private unnamed_addr constant [7 x i8] c"wobble\00"
83
92
// CHECK: [[WIBBLE_ATTRS:@.*]] = private unnamed_addr constant [50 x i8] c"T@\22_TtC15objc_properties10SomeObject\22,N,&,Vwibble\00"
84
93
94
+ // CHECK: [[SHARED_NAME:@.*]] = private unnamed_addr constant [11 x i8] c"sharedProp\00"
95
+ // CHECK: [[SHARED_ATTRS:@.*]] = private unnamed_addr constant [17 x i8] c"Tq,N,VsharedProp\00"
96
+
97
+ // CHECK: @_CLASS_PROPERTIES__TtC15objc_properties10SomeObject = private constant { {{.*}}] } {
98
+ // CHECK: i32 16,
99
+ // CHECK: i32 1,
100
+ // CHECK: [1 x { i8*, i8* }] [{
101
+ // CHECK: i8* getelementptr inbounds ([11 x i8], [11 x i8]* [[SHARED_NAME]], i64 0, i64 0),
102
+ // CHECK: i8* getelementptr inbounds ([17 x i8], [17 x i8]* [[SHARED_ATTRS]], i64 0, i64 0)
103
+ // CHECK: }]
104
+ // CHECK: }, section "__DATA, __objc_const", align 8
105
+
106
+ // CHECK: @_METACLASS_DATA__TtC15objc_properties10SomeObject = private constant { {{.*}} } {
107
+ // CHECK-SAME: i32 {{[0-9]+}}, i32 {{[0-9]+}}, i32 {{[0-9]+}}, i32 {{[0-9]+}},
108
+ // CHECK-SAME: i8* null,
109
+ // CHECK-SAME: i8* getelementptr inbounds ([{{.+}} x i8], [{{.+}} x i8]* {{@.+}}, i64 0, i64 0),
110
+ // CHECK-SAME: { {{.+}} }* @_CLASS_METHODS__TtC15objc_properties10SomeObject,
111
+ // CHECK-SAME: i8* null, i8* null, i8* null,
112
+ // CHECK-SAME: { {{.+}} }* @_CLASS_PROPERTIES__TtC15objc_properties10SomeObject
113
+ // CHECK-SAME: }, section "__DATA, __objc_const", align 8
114
+
85
115
// CHECK: @_INSTANCE_METHODS__TtC15objc_properties10SomeObject = private constant { {{.*}}] } {
86
116
// CHECK: i32 24,
87
117
// CHECK: i32 8,
@@ -138,8 +168,22 @@ class Class17127126 {
138
168
// CHECK: }]
139
169
// CHECK: }, section "__DATA, __objc_const", align 8
140
170
171
+ // CHECK: @_DATA__TtC15objc_properties10SomeObject = private constant { {{.+}} } {
172
+ // CHECK: i32 {{[0-9]+}}, i32 {{[0-9]+}}, i32 {{[0-9]+}}, i32 {{[0-9]+}},
173
+ // CHECK: i8* null,
174
+ // CHECK: i8* getelementptr inbounds ([{{.+}} x i8], [{{.+}} x i8]* {{@.+}}, i64 0, i64 0),
175
+ // CHECK: { {{.+}} }* @_INSTANCE_METHODS__TtC15objc_properties10SomeObject,
176
+ // CHECK: i8* null,
177
+ // CHECK: { {{.+}} }* @_IVARS__TtC15objc_properties10SomeObject,
178
+ // CHECK: i8* null,
179
+ // CHECK: { {{.+}} }* @_PROPERTIES__TtC15objc_properties10SomeObject
180
+ // CHECK: }, section "__DATA, __objc_const", align 8
181
+
141
182
// CHECK: [[EXTENSIONPROPERTY_NAME:@.*]] = private unnamed_addr constant [18 x i8] c"extensionProperty\00"
142
183
184
+ // CHECK: [[EXTENSIONCLASSPROPERTY_NAME:@.*]] = private unnamed_addr constant [19 x i8] c"extensionClassProp\00"
185
+ // CHECK: [[EXTENSIONCLASSPROPERTY_ATTRS:@.*]] = private unnamed_addr constant [7 x i8] c"T#,N,R\00"
186
+
143
187
// CHECK: @"_CATEGORY_INSTANCE_METHODS__TtC15objc_properties10SomeObject_$_objc_properties" = private constant { {{.*}}] } {
144
188
// CHECK: i32 24,
145
189
// CHECK: i32 2,
@@ -163,10 +207,71 @@ class Class17127126 {
163
207
// CHECK: }]
164
208
// CHECK: }, section "__DATA, __objc_const", align 8
165
209
210
+ // CHECK: @"_CATEGORY_CLASS_PROPERTIES__TtC15objc_properties10SomeObject_$_objc_properties" = private constant { {{.*}}] } {
211
+ // CHECK: i32 16,
212
+ // CHECK: i32 1,
213
+ // CHECK: [1 x { i8*, i8* }] [{
214
+ // CHECK: i8* getelementptr inbounds ([19 x i8], [19 x i8]* [[EXTENSIONCLASSPROPERTY_NAME]], i64 0, i64 0),
215
+ // CHECK: i8* getelementptr inbounds ([7 x i8], [7 x i8]* [[EXTENSIONCLASSPROPERTY_ATTRS]], i64 0, i64 0)
216
+ // CHECK: }]
217
+ // CHECK: }, section "__DATA, __objc_const", align 8
218
+
219
+ // CHECK: @"_CATEGORY__TtC15objc_properties10SomeObject_$_objc_properties" = private constant { {{.+}} } {
220
+ // CHECK: i8* getelementptr inbounds ([{{.+}} x i8], [{{.+}} x i8]* {{@.+}}, i64 0, i64 0),
221
+ // CHECK: %swift.type* bitcast (i64* getelementptr inbounds (<{ {{.+}} }>* @_TMfC15objc_properties10SomeObject, i32 0, i32 2) to %swift.type*),
222
+ // CHECK: { {{.+}} }* @"_CATEGORY_INSTANCE_METHODS__TtC15objc_properties10SomeObject_$_objc_properties",
223
+ // CHECK: { {{.+}} }* @"_CATEGORY_CLASS_METHODS__TtC15objc_properties10SomeObject_$_objc_properties",
224
+ // CHECK: i8* null,
225
+ // CHECK: { {{.+}} }* @"_CATEGORY_PROPERTIES__TtC15objc_properties10SomeObject_$_objc_properties",
226
+ // CHECK: { {{.+}} }* @"_CATEGORY_CLASS_PROPERTIES__TtC15objc_properties10SomeObject_$_objc_properties",
227
+ // CHECK: i32 60
228
+ // CHECK: }, section "__DATA, __objc_const", align 8
229
+
230
+
166
231
// CHECK: @_INSTANCE_METHODS__TtC15objc_properties4Tree =
167
232
// CHECK: i8* getelementptr inbounds ([7 x i8], [7 x i8]* @"\01L_selector_data(parent)", i64 0, i64 0),
168
233
// CHECK: i8* getelementptr inbounds ([8 x i8], [8 x i8]* [[GETTER_SIGNATURE]], i64 0, i64 0),
169
234
// CHECK: i8* bitcast (%2* (%2*, i8*)* @_TToFC15objc_properties4Treeg6parentXwGSqS0__ to i8*)
170
235
// CHECK: i8* getelementptr inbounds ([11 x i8], [11 x i8]* @"\01L_selector_data(setParent:)", i64 0, i64 0),
171
236
// CHECK: i8* getelementptr inbounds ([11 x i8], [11 x i8]* [[SETTER_SIGNATURE]], i64 0, i64 0),
172
237
// CHECK: i8* bitcast (void (%2*, i8*, %2*)* @_TToFC15objc_properties4Trees6parentXwGSqS0__ to i8*)
238
+
239
+ // CHECK: @_PROTOCOL__TtP15objc_properties5Proto_ = private constant { {{.+}} } {
240
+ // CHECK: i8* null,
241
+ // CHECK: i8* getelementptr inbounds ([{{.+}} x i8], [{{.+}} x i8]* {{@.+}}, i64 0, i64 0),
242
+ // CHECK: i8* null,
243
+ // CHECK: { {{.+}} }* @_PROTOCOL_INSTANCE_METHODS__TtP15objc_properties5Proto_,
244
+ // CHECK: { {{.+}} }* @_PROTOCOL_CLASS_METHODS__TtP15objc_properties5Proto_,
245
+ // CHECK: i8* null,
246
+ // CHECK: i8* null,
247
+ // CHECK: { {{.+}} }* @_PROTOCOL_PROPERTIES__TtP15objc_properties5Proto_,
248
+ // CHECK: i32 96, i32 1,
249
+ // CHECK: { {{.+}} }* @_PROTOCOL_METHOD_TYPES__TtP15objc_properties5Proto_,
250
+ // CHECK: i8* null,
251
+ // CHECK: { {{.+}} }* @_PROTOCOL_CLASS_PROPERTIES__TtP15objc_properties5Proto_
252
+ // CHECK: }, section "__DATA, __objc_const", align 8
253
+
254
+
255
+ // CHECK: [[PROTOCOLPROPERTY_NAME:@.+]] = private unnamed_addr constant [6 x i8] c"value\00"
256
+ // CHECK: [[PROTOCOLPROPERTY_ATTRS:@.+]] = private unnamed_addr constant [7 x i8] c"Tq,N,R\00"
257
+
258
+ // CHECK: [[PROTOCOLCLASSPROPERTY_NAME:@.+]] = private unnamed_addr constant [15 x i8] c"sharedInstance\00"
259
+ // CHECK: [[PROTOCOLCLASSPROPERTY_ATTRS:@.+]] = private unnamed_addr constant [7 x i8] c"T@,N,&\00"
260
+
261
+ // CHECK: @_PROTOCOL_PROPERTIES__TtP15objc_properties5Proto_ = private constant { {{.*}}] } {
262
+ // CHECK: i32 16,
263
+ // CHECK: i32 1,
264
+ // CHECK: [1 x { i8*, i8* }] [{
265
+ // CHECK: i8* getelementptr inbounds ([6 x i8], [6 x i8]* [[PROTOCOLPROPERTY_NAME]], i64 0, i64 0),
266
+ // CHECK: i8* getelementptr inbounds ([7 x i8], [7 x i8]* [[PROTOCOLPROPERTY_ATTRS]], i64 0, i64 0)
267
+ // CHECK: }]
268
+ // CHECK: }, section "__DATA, __objc_const", align 8
269
+
270
+ // CHECK: @_PROTOCOL_CLASS_PROPERTIES__TtP15objc_properties5Proto_ = private constant { {{.*}}] } {
271
+ // CHECK: i32 16,
272
+ // CHECK: i32 1,
273
+ // CHECK: [1 x { i8*, i8* }] [{
274
+ // CHECK: i8* getelementptr inbounds ([15 x i8], [15 x i8]* [[PROTOCOLCLASSPROPERTY_NAME]], i64 0, i64 0),
275
+ // CHECK: i8* getelementptr inbounds ([7 x i8], [7 x i8]* [[PROTOCOLCLASSPROPERTY_ATTRS]], i64 0, i64 0)
276
+ // CHECK: }]
277
+ // CHECK: }, section "__DATA, __objc_const", align 8
0 commit comments