@@ -313,3 +313,29 @@ sil_witness_table hidden Klass4: P module devirtualize_protocol_composition {
313313 method #P.foo: <Self where Self : P> (Self) -> () -> Int32 : @Klass4foo
314314}
315315
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