@@ -24,13 +24,27 @@ public enum AddressOnlyEnum {
24
24
public class AddressOnlySetter {
25
25
@WrapGod var value : AddressOnlyEnum = . value( nil )
26
26
27
+ init ( ) {
28
+ // CHECK-LABEL: sil hidden [ossa] @$s27resilient_assign_by_wrapper17AddressOnlySetterCACycfc
29
+ // CHECK: [[E1:%.*]] = alloc_stack $AddressOnlyEnum
30
+ // CHECK: [[W:%.*]] = alloc_stack $WrapGod<AddressOnlyEnum>
31
+ // CHECK: [[I:%.*]] = function_ref @$s27resilient_assign_by_wrapper17AddressOnlySetterC5valueAA0eF4EnumOvpfP : $@convention(thin) (@in AddressOnlyEnum) -> @out WrapGod<AddressOnlyEnum>
32
+ // CHECK: apply [[I]]([[W]], [[E1]])
33
+
34
+ // CHECK: [[E2:%.*]] = alloc_stack $AddressOnlyEnum
35
+ // CHECK-NEXT: inject_enum_addr [[E2]] : $*AddressOnlyEnum, #AddressOnlyEnum.some!enumelt
36
+ // CHECK: [[S:%.*]] = partial_apply [callee_guaranteed] {{%.*}}({{%.*}}) : $@convention(method) (@in AddressOnlyEnum, @guaranteed AddressOnlySetter) -> ()
37
+ // CHECK: assign_by_wrapper [[E2]] : $*AddressOnlyEnum
38
+ // CHECK-SAME: set [[S]] : $@callee_guaranteed (@in AddressOnlyEnum) -> ()
39
+ self . value = . some
40
+ }
41
+
27
42
func testAssignment( ) {
28
43
// CHECK-LABEL: sil hidden [ossa] @$s27resilient_assign_by_wrapper17AddressOnlySetterC14testAssignmentyyF
29
44
// CHECK: [[E:%.*]] = alloc_stack $AddressOnlyEnum
30
45
// CHECK: inject_enum_addr [[E]] : $*AddressOnlyEnum, #AddressOnlyEnum.some!enumelt
31
- // CHECK: [[S:%.*]] = partial_apply [callee_guaranteed] {{%.*}}({{%.*}}) : $@convention(method) (@in AddressOnlyEnum, @guaranteed AddressOnlySetter) -> ()
32
- // CHECK: assign_by_wrapper [[E]] : $*AddressOnlyEnum
33
- // CHECK-SAME: set [[S]] : $@callee_guaranteed (@in AddressOnlyEnum) -> ()
46
+ // CHECK: [[S:%.*]] = class_method %0 : $AddressOnlySetter, #AddressOnlySetter.value!setter : (AddressOnlySetter) -> (AddressOnlyEnum) -> (), $@convention(method) (@in AddressOnlyEnum, @guaranteed AddressOnlySetter) -> ()
47
+ // CHECK: apply [[S]]([[E]], %0) : $@convention(method) (@in AddressOnlyEnum, @guaranteed AddressOnlySetter) -> ()
34
48
self . value = . some
35
49
}
36
50
}
@@ -40,8 +54,8 @@ public struct SubstitutedSetter<T> {
40
54
}
41
55
42
56
extension SubstitutedSetter where T == Bool {
43
- mutating func testAssignment ( ) {
44
- // CHECK-LABEL: sil hidden [ossa] @$s27resilient_assign_by_wrapper17SubstitutedSetterVAASbRszlE14testAssignmentyyF
57
+ init ( ) {
58
+ // CHECK-LABEL: hidden [ossa] @$s27resilient_assign_by_wrapper17SubstitutedSetterVAASbRszlEACySbGycfC
45
59
// CHECK: [[W:%.*]] = struct_element_addr {{%.*}} : $*SubstitutedSetter<Bool>, #SubstitutedSetter._value
46
60
// CHECK: [[B:%.*]] = alloc_stack $Bool
47
61
// CHECK: assign_by_wrapper [[B]] : $*Bool to [[W]] : $*WrapGod<Bool>
@@ -56,9 +70,9 @@ public struct ReabstractedSetter<T> {
56
70
}
57
71
58
72
extension ReabstractedSetter where T == Int {
59
- mutating func testAssignment ( ) {
60
- // CHECK-LABEL: sil hidden [ossa] @$s27resilient_assign_by_wrapper18ReabstractedSetterVAASiRszlE14testAssignmentyyF
61
- // CHECK: [[F:%.*]] = function_ref @$s27resilient_assign_by_wrapper18ReabstractedSetterVAASiRszlE14testAssignmentyyFySicfU_ : $@convention(thin) (Int) -> ()
73
+ init ( ) {
74
+ // CHECK-LABEL: hidden [ossa] @$s27resilient_assign_by_wrapper18ReabstractedSetterVAASiRszlEACySiGycfC
75
+ // CHECK: [[F:%.*]] = function_ref @$s27resilient_assign_by_wrapper18ReabstractedSetterVAASiRszlEACySiGycfcySicfU_ : $@convention(thin) (Int) -> ()
62
76
// CHECK: [[TH_F:%.*]] = thin_to_thick_function [[F]] : $@convention(thin) (Int) -> () to $@callee_guaranteed (Int) -> ()
63
77
// CHECK: [[THUNK_REF:%.*]] = function_ref @$sSiIegy_SiIegn_TR : $@convention(thin) (@in_guaranteed Int, @guaranteed @callee_guaranteed (Int) -> ()) -> ()
64
78
// CHECK: [[CF:%.*]] = partial_apply [callee_guaranteed] [[THUNK_REF]]([[TH_F]]) : $@convention(thin) (@in_guaranteed Int, @guaranteed @callee_guaranteed (Int) -> ()) -> ()
@@ -76,8 +90,8 @@ public struct ObjectifiedSetter<T: AnyObject> {
76
90
public class SomeObject { }
77
91
78
92
extension ObjectifiedSetter where T == SomeObject {
79
- mutating func testAssignment ( ) {
80
- // CHECK-LABEL: sil hidden [ossa] @$s27resilient_assign_by_wrapper17ObjectifiedSetterVA2A10SomeObjectCRszrlE14testAssignmentyyF : $@convention(method) (@ inout ObjectifiedSetter<SomeObject >) -> () {
93
+ init ( ) {
94
+ // CHECK-LABEL: sil hidden [ossa] @$s27resilient_assign_by_wrapper17ObjectifiedSetterV5valuexvs : $@convention(method) <T where T : AnyObject> (@owned T, @ inout ObjectifiedSetter<T >) -> () {
81
95
// CHECK: [[OBJ:%.*]] = apply {{%.*}}({{%.*}}) : $@convention(method) (@thick SomeObject.Type) -> @owned SomeObject
82
96
// CHECK: [[STORAGE:%.*]] = struct_element_addr {{%.*}} : $*ObjectifiedSetter<SomeObject>, #ObjectifiedSetter._value
83
97
// CHECK: assign_by_wrapper [[OBJ]] : $SomeObject to [[STORAGE]] : $*WrapGod<SomeObject>
0 commit comments