@@ -10,6 +10,9 @@ func useOptNS(_ : NSString?) {}
10
10
func makeNS( ) -> NSString { return " help " as NSString }
11
11
func makeOptNS( ) -> NSString ? { return nil }
12
12
13
+ func useAnyObject( _: AnyObject ) { }
14
+ func useOptAnyObject( _: AnyObject ? ) { }
15
+
13
16
/*** Return values ***********************************************************/
14
17
15
18
// CHECK-LABEL: sil hidden @_T022objc_bridging_peephole16testMethodResultySo10DummyClassC5dummy_tF
@@ -37,6 +40,35 @@ func testMethodResult(dummy: DummyClass) {
37
40
// CHECK-NEXT: apply [[USE]]([[RESULT]])
38
41
// CHECK-NEXT: end_borrow [[SELF]] from %0
39
42
useOptNS ( dummy. fetchNonnullString ( ) as NSString ? )
43
+
44
+ // CHECK: [[USE:%.*]] = function_ref @_T022objc_bridging_peephole15useOptAnyObjectyyXlSgF
45
+ // CHECK-NEXT: [[SELF:%.*]] = begin_borrow %0
46
+ // CHECK-NEXT: [[METHOD:%.*]] = objc_method
47
+ // CHECK-NEXT: [[RESULT:%.*]] = apply [[METHOD]]([[SELF]])
48
+ // CHECK-NEXT: [[ANYOBJECT:%.*]] = unchecked_ref_cast [[RESULT]] : $Optional<NSString> to $Optional<AnyObject>
49
+ // CHECK-NEXT: apply [[USE]]([[ANYOBJECT]])
50
+ // CHECK-NEXT: end_borrow [[SELF]] from %0
51
+ useOptAnyObject ( dummy. fetchNullableString ( ) as AnyObject ? )
52
+
53
+ // CHECK: [[USE:%.*]] = function_ref @_T022objc_bridging_peephole15useOptAnyObjectyyXlSgF
54
+ // CHECK-NEXT: [[SELF:%.*]] = begin_borrow %0
55
+ // CHECK-NEXT: [[METHOD:%.*]] = objc_method
56
+ // CHECK-NEXT: [[RESULT:%.*]] = apply [[METHOD]]([[SELF]])
57
+ // CHECK-NEXT: [[ANYOBJECT:%.*]] = unchecked_ref_cast [[RESULT]] : $Optional<NSString> to $Optional<AnyObject>
58
+ // CHECK-NEXT: apply [[USE]]([[ANYOBJECT]])
59
+ // CHECK-NEXT: end_borrow [[SELF]] from %0
60
+ useOptAnyObject ( dummy. fetchNullproneString ( ) as AnyObject ? )
61
+
62
+ // CHECK: [[USE:%.*]] = function_ref @_T022objc_bridging_peephole15useOptAnyObjectyyXlSgF
63
+ // CHECK-NEXT: [[SELF:%.*]] = begin_borrow %0
64
+ // CHECK-NEXT: [[METHOD:%.*]] = objc_method
65
+ // CHECK-NEXT: [[RESULT:%.*]] = apply [[METHOD]]([[SELF]])
66
+ // CHECK-NEXT: [[ANYOBJECT:%.*]] = unchecked_ref_cast [[RESULT]] : $Optional<NSString> to $Optional<AnyObject>
67
+ // CHECK-NEXT: apply [[USE]]([[ANYOBJECT]])
68
+ // CHECK-NEXT: end_borrow [[SELF]] from %0
69
+ useOptAnyObject ( dummy. fetchNonnullString ( ) as AnyObject ? )
70
+
71
+ // CHECK: return
40
72
}
41
73
42
74
// CHECK-LABEL: sil hidden @_T022objc_bridging_peephole23testNonNullMethodResultySo10DummyClassC5dummy_tF
@@ -52,6 +84,21 @@ func testNonNullMethodResult(dummy: DummyClass) {
52
84
// CHECK-NEXT: apply [[USE]]([[RESULT]])
53
85
// CHECK-NEXT: end_borrow [[SELF]] from %0
54
86
useNS ( dummy. fetchNonnullString ( ) as NSString )
87
+
88
+ // CHECK: [[USE:%.*]] = function_ref @_T022objc_bridging_peephole12useAnyObjectyyXlF
89
+ // CHECK-NEXT: [[SELF:%.*]] = begin_borrow %0
90
+ // CHECK-NEXT: [[METHOD:%.*]] = objc_method
91
+ // CHECK-NEXT: [[RESULT:%.*]] = apply [[METHOD]]([[SELF]])
92
+ // CHECK-NEXT: switch_enum [[RESULT]]
93
+ // CHECK: bb3:
94
+ // CHECK: function_ref @_T0s30_diagnoseUnexpectedNilOptionalyBp14_filenameStart_Bw01_E6LengthBi1_01_E7IsASCIIBw5_linetF
95
+ // CHECK: bb4([[RESULT:%.*]] : @owned $NSString):
96
+ // CHECK-NEXT: [[ANYOBJECT:%.*]] = init_existential_ref [[RESULT]] : $NSString : $NSString, $AnyObject
97
+ // CHECK-NEXT: apply [[USE]]([[ANYOBJECT]])
98
+ // CHECK-NEXT: end_borrow [[SELF]] from %0
99
+ useAnyObject ( dummy. fetchNonnullString ( ) as AnyObject )
100
+
101
+ // CHECK: return
55
102
}
56
103
57
104
// CHECK-LABEL: sil hidden @_T022objc_bridging_peephole22testForcedMethodResultySo10DummyClassC5dummy_tF
@@ -67,6 +114,21 @@ func testForcedMethodResult(dummy: DummyClass) {
67
114
// CHECK-NEXT: apply [[USE]]([[RESULT]])
68
115
// CHECK-NEXT: end_borrow [[SELF]] from %0
69
116
useNS ( dummy. fetchNullproneString ( ) as NSString )
117
+
118
+ // CHECK: [[USE:%.*]] = function_ref @_T022objc_bridging_peephole12useAnyObjectyyXlF
119
+ // CHECK-NEXT: [[SELF:%.*]] = begin_borrow %0
120
+ // CHECK-NEXT: [[METHOD:%.*]] = objc_method
121
+ // CHECK-NEXT: [[RESULT:%.*]] = apply [[METHOD]]([[SELF]])
122
+ // CHECK-NEXT: switch_enum [[RESULT]]
123
+ // CHECK: bb3:
124
+ // CHECK: function_ref @_T0s30_diagnoseUnexpectedNilOptionalyBp14_filenameStart_Bw01_E6LengthBi1_01_E7IsASCIIBw5_linetF
125
+ // CHECK: bb4([[RESULT:%.*]] : @owned $NSString):
126
+ // CHECK-NEXT: [[ANYOBJECT:%.*]] = init_existential_ref [[RESULT]] : $NSString : $NSString, $AnyObject
127
+ // CHECK-NEXT: apply [[USE]]([[ANYOBJECT]])
128
+ // CHECK-NEXT: end_borrow [[SELF]] from %0
129
+ useAnyObject ( dummy. fetchNullproneString ( ) as AnyObject )
130
+
131
+ // CHECK: return
70
132
}
71
133
72
134
/*** Property loads **********************************************************/
@@ -96,6 +158,35 @@ func testPropertyValue(dummy: DummyClass) {
96
158
// CHECK-NEXT: apply [[USE]]([[RESULT]])
97
159
// CHECK-NEXT: end_borrow [[SELF]] from %0
98
160
useOptNS ( dummy. nonnullStringProperty as NSString ? )
161
+
162
+ // CHECK: [[USE:%.*]] = function_ref @_T022objc_bridging_peephole15useOptAnyObjectyyXlSgF
163
+ // CHECK-NEXT: [[SELF:%.*]] = begin_borrow %0
164
+ // CHECK-NEXT: [[METHOD:%.*]] = objc_method
165
+ // CHECK-NEXT: [[RESULT:%.*]] = apply [[METHOD]]([[SELF]])
166
+ // CHECK-NEXT: [[ANYOBJECT:%.*]] = unchecked_ref_cast [[RESULT]] : $Optional<NSString> to $Optional<AnyObject>
167
+ // CHECK-NEXT: apply [[USE]]([[ANYOBJECT]])
168
+ // CHECK-NEXT: end_borrow [[SELF]] from %0
169
+ useOptAnyObject ( dummy. nullableStringProperty as AnyObject ? )
170
+
171
+ // CHECK: [[USE:%.*]] = function_ref @_T022objc_bridging_peephole15useOptAnyObjectyyXlSgF
172
+ // CHECK-NEXT: [[SELF:%.*]] = begin_borrow %0
173
+ // CHECK-NEXT: [[METHOD:%.*]] = objc_method
174
+ // CHECK-NEXT: [[RESULT:%.*]] = apply [[METHOD]]([[SELF]])
175
+ // CHECK-NEXT: [[ANYOBJECT:%.*]] = unchecked_ref_cast [[RESULT]] : $Optional<NSString> to $Optional<AnyObject>
176
+ // CHECK-NEXT: apply [[USE]]([[ANYOBJECT]])
177
+ // CHECK-NEXT: end_borrow [[SELF]] from %0
178
+ useOptAnyObject ( dummy. nullproneStringProperty as AnyObject ? )
179
+
180
+ // CHECK: [[USE:%.*]] = function_ref @_T022objc_bridging_peephole15useOptAnyObjectyyXlSgF
181
+ // CHECK-NEXT: [[SELF:%.*]] = begin_borrow %0
182
+ // CHECK-NEXT: [[METHOD:%.*]] = objc_method
183
+ // CHECK-NEXT: [[RESULT:%.*]] = apply [[METHOD]]([[SELF]])
184
+ // CHECK-NEXT: [[ANYOBJECT:%.*]] = unchecked_ref_cast [[RESULT]] : $Optional<NSString> to $Optional<AnyObject>
185
+ // CHECK-NEXT: apply [[USE]]([[ANYOBJECT]])
186
+ // CHECK-NEXT: end_borrow [[SELF]] from %0
187
+ useOptAnyObject ( dummy. nonnullStringProperty as AnyObject ? )
188
+
189
+ // CHECK: return
99
190
}
100
191
101
192
// CHECK-LABEL: sil hidden @_T022objc_bridging_peephole24testNonNullPropertyValueySo10DummyClassC5dummy_tF
@@ -111,6 +202,21 @@ func testNonNullPropertyValue(dummy: DummyClass) {
111
202
// CHECK-NEXT: apply [[USE]]([[RESULT]])
112
203
// CHECK-NEXT: end_borrow [[SELF]] from %0
113
204
useNS ( dummy. nonnullStringProperty as NSString )
205
+
206
+ // CHECK: [[USE:%.*]] = function_ref @_T022objc_bridging_peephole12useAnyObjectyyXlF
207
+ // CHECK-NEXT: [[SELF:%.*]] = begin_borrow %0
208
+ // CHECK-NEXT: [[METHOD:%.*]] = objc_method
209
+ // CHECK-NEXT: [[RESULT:%.*]] = apply [[METHOD]]([[SELF]])
210
+ // CHECK-NEXT: switch_enum [[RESULT]]
211
+ // CHECK: bb3:
212
+ // CHECK: function_ref @_T0s30_diagnoseUnexpectedNilOptionalyBp14_filenameStart_Bw01_E6LengthBi1_01_E7IsASCIIBw5_linetF
213
+ // CHECK: bb4([[RESULT:%.*]] : @owned $NSString):
214
+ // CHECK-NEXT: [[ANYOBJECT:%.*]] = init_existential_ref [[RESULT]] : $NSString : $NSString, $AnyObject
215
+ // CHECK-NEXT: apply [[USE]]([[ANYOBJECT]])
216
+ // CHECK-NEXT: end_borrow [[SELF]] from %0
217
+ useAnyObject ( dummy. nonnullStringProperty as AnyObject )
218
+
219
+ // CHECK: return
114
220
}
115
221
116
222
// CHECK-LABEL: sil hidden @_T022objc_bridging_peephole23testForcedPropertyValueySo10DummyClassC5dummy_tF
@@ -126,6 +232,21 @@ func testForcedPropertyValue(dummy: DummyClass) {
126
232
// CHECK-NEXT: apply [[USE]]([[RESULT]])
127
233
// CHECK-NEXT: end_borrow [[SELF]] from %0
128
234
useNS ( dummy. nullproneStringProperty as NSString )
235
+
236
+ // CHECK: [[USE:%.*]] = function_ref @_T022objc_bridging_peephole12useAnyObjectyyXlF
237
+ // CHECK-NEXT: [[SELF:%.*]] = begin_borrow %0
238
+ // CHECK-NEXT: [[METHOD:%.*]] = objc_method
239
+ // CHECK-NEXT: [[RESULT:%.*]] = apply [[METHOD]]([[SELF]])
240
+ // CHECK-NEXT: switch_enum [[RESULT]]
241
+ // CHECK: bb3:
242
+ // CHECK: function_ref @_T0s30_diagnoseUnexpectedNilOptionalyBp14_filenameStart_Bw01_E6LengthBi1_01_E7IsASCIIBw5_linetF
243
+ // CHECK: bb4([[RESULT:%.*]] : @owned $NSString):
244
+ // CHECK-NEXT: [[ANYOBJECT:%.*]] = init_existential_ref [[RESULT]] : $NSString : $NSString, $AnyObject
245
+ // CHECK-NEXT: apply [[USE]]([[ANYOBJECT]])
246
+ // CHECK-NEXT: end_borrow [[SELF]] from %0
247
+ useAnyObject ( dummy. nullproneStringProperty as AnyObject )
248
+
249
+ // CHECK: return
129
250
}
130
251
131
252
/*** Subscript loads *********************************************************/
@@ -158,6 +279,8 @@ func testNonnullSubscriptGet(object: NonnullSubscript, index: AnyObject) {
158
279
// CHECK-NEXT: apply [[USE]]([[RESULT]])
159
280
// CHECK: end_borrow [[SELF]] from %0
160
281
useNS ( object [ index] as NSString )
282
+
283
+ // CHECK: return
161
284
}
162
285
163
286
// CHECK-LABEL: sil hidden @_T022objc_bridging_peephole24testNullableSubscriptGetySo0eF0C6object_yXl5indextF
@@ -172,6 +295,8 @@ func testNullableSubscriptGet(object: NullableSubscript, index: AnyObject) {
172
295
// CHECK-NEXT: apply [[USE]]([[RESULT]])
173
296
// CHECK: end_borrow [[SELF]] from %0
174
297
useOptNS ( object [ index] as NSString ? )
298
+
299
+ // CHECK: return
175
300
}
176
301
177
302
// CHECK-LABEL: sil hidden @_T022objc_bridging_peephole25testNullproneSubscriptGetySo0eF0C6object_yXl5indextF
@@ -200,6 +325,8 @@ func testNullproneSubscriptGet(object: NullproneSubscript, index: AnyObject) {
200
325
// CHECK-NEXT: apply [[USE]]([[RESULT]])
201
326
// CHECK: end_borrow [[SELF]] from %0
202
327
useNS ( object [ index] as NSString )
328
+
329
+ // CHECK: return
203
330
}
204
331
205
332
/*** Call arguments **********************************************************/
@@ -237,6 +364,8 @@ func testMethodArgument(dummy: DummyClass) {
237
364
// CHECK-NEXT: destroy_value [[OPTARG]]
238
365
// CHECK-NEXT: end_borrow [[SELF]] from %0
239
366
dummy. takeNullproneString ( makeNS ( ) as String )
367
+
368
+ // CHECK: return
240
369
}
241
370
242
371
// CHECK-LABEL: sil hidden @_T022objc_bridging_peephole28testValueToOptMethodArgumentySo10DummyClassC5dummy_tF
@@ -262,6 +391,8 @@ func testValueToOptMethodArgument(dummy: DummyClass) {
262
391
// CHECK-NEXT: destroy_value [[OPTARG]]
263
392
// CHECK-NEXT: end_borrow [[SELF]] from %0
264
393
dummy. takeNullproneString ( makeNS ( ) as String ? )
394
+
395
+ // CHECK: return
265
396
}
266
397
267
398
// CHECK-LABEL: sil hidden @_T022objc_bridging_peephole09testOptToE14MethodArgumentySo10DummyClassC5dummy_tF
@@ -285,6 +416,8 @@ func testOptToOptMethodArgument(dummy: DummyClass) {
285
416
// CHECK-NEXT: destroy_value [[ARG]]
286
417
// CHECK-NEXT: end_borrow [[SELF]] from %0
287
418
dummy. takeNullproneString ( makeOptNS ( ) as String ? )
419
+
420
+ // CHECK: return
288
421
}
289
422
290
423
/*** Property assignments ****************************************************/
@@ -322,6 +455,8 @@ func testPropertySetter(dummy: DummyClass) {
322
455
// CHECK-NEXT: destroy_value [[OPTARG]]
323
456
// CHECK-NEXT: end_borrow [[SELF]] from %0
324
457
dummy. nullproneStringProperty = makeNS ( ) as String
458
+
459
+ // CHECK: return
325
460
}
326
461
327
462
// CHECK-LABEL: sil hidden @_T022objc_bridging_peephole28testValueToOptPropertySetterySo10DummyClassC5dummy_tF
@@ -347,6 +482,8 @@ func testValueToOptPropertySetter(dummy: DummyClass) {
347
482
// CHECK-NEXT: destroy_value [[OPTARG]]
348
483
// CHECK-NEXT: end_borrow [[SELF]] from %0
349
484
dummy. nullproneStringProperty = makeNS ( ) as String ?
485
+
486
+ // CHECK: return
350
487
}
351
488
352
489
// CHECK-LABEL: sil hidden @_T022objc_bridging_peephole09testOptToE14PropertySetterySo10DummyClassC5dummy_tF
@@ -370,6 +507,8 @@ func testOptToOptPropertySetter(dummy: DummyClass) {
370
507
// CHECK-NEXT: destroy_value [[ARG]]
371
508
// CHECK-NEXT: end_borrow [[SELF]] from %0
372
509
dummy. nullproneStringProperty = makeOptNS ( ) as String ?
510
+
511
+ // CHECK: return
373
512
}
374
513
375
514
/*** Subscript assignments ***************************************************/
@@ -389,6 +528,8 @@ func testNonnullSubscriptSet(object: NonnullSubscript, index: AnyObject) {
389
528
// CHECK: destroy_value [[ARG]]
390
529
// CHECK: end_borrow [[SELF]] from %0
391
530
object [ index] = makeNS ( ) as String
531
+
532
+ // CHECK: return
392
533
}
393
534
394
535
// CHECK-LABEL: sil hidden @_T022objc_bridging_peephole24testNullableSubscriptSetySo0eF0C6object_yXl5indextF
@@ -430,6 +571,8 @@ func testNullableSubscriptSet(object: NullableSubscript, index: AnyObject) {
430
571
// CHECK: destroy_value [[ARG]]
431
572
// CHECK: end_borrow [[SELF]] from %0
432
573
object [ index] = makeOptNS ( ) as String ?
574
+
575
+ // CHECK: return
433
576
}
434
577
435
578
// CHECK-LABEL: sil hidden @_T022objc_bridging_peephole25testNullproneSubscriptSetySo0eF0C6object_yXl5indextF
@@ -471,6 +614,8 @@ func testNullproneSubscriptSet(object: NullproneSubscript, index: AnyObject) {
471
614
// CHECK: destroy_value [[ARG]]
472
615
// CHECK: end_borrow [[SELF]] from %0
473
616
object [ index] = makeOptNS ( ) as String ?
617
+
618
+ // CHECK: return
474
619
}
475
620
476
621
/*** Bugfixes ***************************************************************/
0 commit comments