@@ -313,3 +313,29 @@ sil_witness_table hidden Klass4: P module devirtualize_protocol_composition {
313
313
method #P.foo: <Self where Self : P> (Self) -> () -> Int32 : @Klass4foo
314
314
}
315
315
316
+ // CHECK-LABEL: sil shared [ossa] @$s32testExistentialSpecializeUnownedTf4e_n :
317
+ // CHECK: [[VAL0:%.*]] = copy_value %0
318
+ // CHECK: [[VAL1:%.*]] = init_existential_ref [[VAL0]]
319
+ // CHECK: destroy_value [[VAL1]]
320
+ // CHECK-LABEL: } // end sil function '$s32testExistentialSpecializeUnownedTf4e_n'
321
+ sil hidden [ossa] @testExistentialSpecializeUnowned : $@convention(thin) (any Klass3 & P) -> Int32 {
322
+ bb0(%0 : @unowned $Klass3 & P):
323
+ %1 = copy_value %0 : $Klass3 & P
324
+ %2 = open_existential_ref %1 : $Klass3 & P to $@opened("77949BFA-77BC-11EB-BC0E-F2189810406F", Klass3 & P) Self
325
+ %3 = alloc_stack $@opened("77949BFA-77BC-11EB-BC0E-F2189810406F", Klass3 & P) Self
326
+ %4 = store_borrow %2 to %3 : $*@opened("77949BFA-77BC-11EB-BC0E-F2189810406F", Klass3 & P) Self
327
+ %5 = witness_method $@opened("77949BFA-77BC-11EB-BC0E-F2189810406F", Klass3 & P) Self, #P.foo : <Self where Self : P> (Self) -> () -> Int32, %2 : $@opened("77949BFA-77BC-11EB-BC0E-F2189810406F", Klass3 & P) Self : $@convention(witness_method: P) <τ_0_0 where τ_0_0 : P> (@in_guaranteed τ_0_0) -> Int32
328
+ %6 = apply %5<@opened("77949BFA-77BC-11EB-BC0E-F2189810406F", Klass3 & P) Self>(%4) : $@convention(witness_method: P) <τ_0_0 where τ_0_0 : P> (@in_guaranteed τ_0_0) -> Int32
329
+ end_borrow %4 : $*@opened("77949BFA-77BC-11EB-BC0E-F2189810406F", Klass3 & P) Self
330
+ dealloc_stack %3 : $*@opened("77949BFA-77BC-11EB-BC0E-F2189810406F", Klass3 & P) Self
331
+ destroy_value %2 : $@opened("77949BFA-77BC-11EB-BC0E-F2189810406F", Klass3 & P) Self
332
+ return %6 : $Int32
333
+ }
334
+
335
+ sil hidden [ossa] @entrypoint_unowned : $@convention(thin) (@guaranteed Klass4) -> Int32 {
336
+ bb0(%0 : @guaranteed $Klass4):
337
+ %1 = init_existential_ref %0 : $Klass4 : $Klass4, $any Klass3 & P
338
+ %func = function_ref @testExistentialSpecializeUnowned : $@convention(thin) (any Klass3 & P) -> Int32
339
+ %res = apply %func(%1) : $@convention(thin) (any Klass3 & P) -> Int32
340
+ return %res : $Int32
341
+ }
0 commit comments