1
1
// RUN: %empty-directory(%t)
2
- // RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -emit-module -enable-resilience -I %t -module-name resilient_struct -o %t %S/../Inputs/resilient_struct.swift
3
- // RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -emit-module -enable-resilience -I %t -module-name resilient_class -o %t %S/../Inputs/resilient_class.swift
4
- // RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -enable-resilience -parse-sil -parse-as-library -emit-ir -I %t %s | %FileCheck %s
2
+ // RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -emit-module -enable-resilience -enable-class-resilience -I %t -module-name resilient_struct -o %t %S/../Inputs/resilient_struct.swift
3
+ // RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -emit-module -enable-resilience -enable-class-resilience -I %t -module-name resilient_class -o %t %S/../Inputs/resilient_class.swift
4
+ // RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -enable-resilience -enable-class-resilience -parse-sil -parse-as-library -emit-ir -I %t %s | %FileCheck %s
5
+
6
+ // CHECK: %swift.type = type { [[INT:i32|i64]] }
5
7
6
8
sil_stage canonical
7
9
@@ -51,10 +53,13 @@ bb0(%0 : $ChildToResilientParent):
51
53
52
54
// ChildToResilientParent is in our resilience domain - can load the superclass's metadata directly.
53
55
// CHECK-LABEL: define{{( protected)?}} swiftcc void @_T05super22ChildToResilientParentC6methodyyF(%T5super22ChildToResilientParentC* swiftself)
54
- // CHECK: [[SUPER_METADATA:%[0-9]+]] = call %swift.type* @_T015resilient_class22ResilientOutsideParentCMa()
55
- // CHECK: [[OPAQUE_SUPER_METADATA:%[0-9]+]] = bitcast %swift.type* [[SUPER_METADATA]] to void (%T15resilient_class22ResilientOutsideParentC*)**
56
- // CHECK: [[VTABLE_SLOT:%[0-9]+]] = getelementptr inbounds void (%T15resilient_class22ResilientOutsideParentC*)*, void (%T15resilient_class22ResilientOutsideParentC*)** [[OPAQUE_SUPER_METADATA]]
57
- // CHECK: [[FN_PTR:%[0-9]+]] = load void (%T15resilient_class22ResilientOutsideParentC*)*, void (%T15resilient_class22ResilientOutsideParentC*)** [[VTABLE_SLOT]]
56
+ // CHECK: [[SUPER_METADATA:%.*]] = call %swift.type* @_T015resilient_class22ResilientOutsideParentCMa()
57
+ // CHECK: [[BASE:%.*]] = load [[INT]], [[INT]]* @_T015resilient_class22ResilientOutsideParentCMo
58
+ // CHECK: [[VTABLE_OFFSET:%.*]] = add [[INT]] [[BASE]], {{20|40}}
59
+ // CHECK: [[SUPER_ADDR:%.*]] = bitcast %swift.type* [[SUPER_METADATA]] to i8*
60
+ // CHECK: [[VTABLE_ADDR:%.*]] = getelementptr inbounds i8, i8* [[SUPER_ADDR]], [[INT]] [[VTABLE_OFFSET]]
61
+ // CHECK: [[VTABLE_SLOT:%.*]] = bitcast i8* [[VTABLE_ADDR]] to void (%T15resilient_class22ResilientOutsideParentC*)**
62
+ // CHECK: [[FN_PTR:%.*]] = load void (%T15resilient_class22ResilientOutsideParentC*)*, void (%T15resilient_class22ResilientOutsideParentC*)** [[VTABLE_SLOT]]
58
63
// CHECK: call void
59
64
60
65
// static super.ChildToResilientParent.classMethod () -> ()
@@ -70,10 +75,13 @@ bb0(%0 : $@thick ChildToResilientParent.Type):
70
75
71
76
// ChildToResilientParent is in our resilience domain - can load the superclass's metadata directly.
72
77
// CHECK-LABEL: define{{( protected)?}} swiftcc void @_T05super22ChildToResilientParentC11classMethodyyFZ(%swift.type* swiftself)
73
- // CHECK: [[SUPER_METADATA:%[0-9]+]] = call %swift.type* @_T015resilient_class22ResilientOutsideParentCMa()
74
- // CHECK: [[OPAQUE_SUPER_METADATA:%[0-9]+]] = bitcast %swift.type* [[SUPER_METADATA]] to void (%swift.type*)**
75
- // CHECK: [[VTABLE_SLOT:%[0-9]+]] = getelementptr inbounds void (%swift.type*)*, void (%swift.type*)** [[OPAQUE_SUPER_METADATA]]
76
- // CHECK: [[FN_PTR:%[0-9]+]] = load void (%swift.type*)*, void (%swift.type*)** [[VTABLE_SLOT]]
78
+ // CHECK: [[SUPER_METADATA:%.*]] = call %swift.type* @_T015resilient_class22ResilientOutsideParentCMa()
79
+ // CHECK: [[BASE:%.*]] = load [[INT]], [[INT]]* @_T015resilient_class22ResilientOutsideParentCMo
80
+ // CHECK: [[VTABLE_OFFSET:%.*]] = add [[INT]] [[BASE]], {{24|48}}
81
+ // CHECK: [[SUPER_ADDR:%.*]] = bitcast %swift.type* [[SUPER_METADATA]] to i8*
82
+ // CHECK: [[VTABLE_ADDR:%.*]] = getelementptr inbounds i8, i8* [[SUPER_ADDR]], [[INT]] [[VTABLE_OFFSET]]
83
+ // CHECK: [[VTABLE_SLOT:%.*]] = bitcast i8* [[VTABLE_ADDR]] to void (%swift.type*)**
84
+ // CHECK: [[FN_PTR:%.*]] = load void (%swift.type*)*, void (%swift.type*)** [[VTABLE_SLOT]]
77
85
// CHECK: call swiftcc void
78
86
79
87
// resilient_class.OutsideParent.method () -> ()
@@ -97,10 +105,10 @@ bb0(%0 : $ChildToFixedParent):
97
105
}
98
106
99
107
// CHECK-LABEL: define{{( protected)?}} swiftcc void @_T05super18ChildToFixedParentC6methodyyF(%T5super18ChildToFixedParentC* swiftself)
100
- // CHECK: [[SUPER_METADATA:%[0-9]+ ]] = call %swift.type* @_T015resilient_class13OutsideParentCMa()
101
- // CHECK: [[OPAQUE_SUPER_METADATA:%[0-9]+ ]] = bitcast %swift.type* [[SUPER_METADATA]] to void (%T15resilient_class13OutsideParentC*)**
102
- // CHECK: [[VTABLE_SLOT:%[0-9]+ ]] = getelementptr inbounds void (%T15resilient_class13OutsideParentC*)*, void (%T15resilient_class13OutsideParentC*)** [[OPAQUE_SUPER_METADATA]]
103
- // CHECK: [[FN_PTR:%[0-9]+ ]] = load void (%T15resilient_class13OutsideParentC*)*, void (%T15resilient_class13OutsideParentC*)** [[VTABLE_SLOT]]
108
+ // CHECK: [[SUPER_METADATA:%.* ]] = call %swift.type* @_T015resilient_class13OutsideParentCMa()
109
+ // CHECK: [[OPAQUE_SUPER_METADATA:%.* ]] = bitcast %swift.type* [[SUPER_METADATA]] to void (%T15resilient_class13OutsideParentC*)**
110
+ // CHECK: [[VTABLE_SLOT:%.* ]] = getelementptr inbounds void (%T15resilient_class13OutsideParentC*)*, void (%T15resilient_class13OutsideParentC*)** [[OPAQUE_SUPER_METADATA]]
111
+ // CHECK: [[FN_PTR:%.* ]] = load void (%T15resilient_class13OutsideParentC*)*, void (%T15resilient_class13OutsideParentC*)** [[VTABLE_SLOT]]
104
112
// CHECK: call swiftcc void
105
113
106
114
// static super.ChildToFixedParent.classMethod () -> ()
@@ -117,10 +125,10 @@ bb0(%0 : $@thick ChildToFixedParent.Type):
117
125
118
126
// ChildToFixedParent is in our resilience domain - load super metadata directly.
119
127
// CHECK-LABEL: define{{( protected)?}} swiftcc void @_T05super18ChildToFixedParentC11classMethodyyFZ(%swift.type* swiftself)
120
- // CHECK: [[SUPER_METADATA:%[0-9]+ ]] = call %swift.type* @_T015resilient_class13OutsideParentCMa()
121
- // CHECK: [[OPAQUE_SUPER_METADATA:%[0-9]+ ]] = bitcast %swift.type* [[SUPER_METADATA]] to void (%swift.type*)**
122
- // CHECK: [[VTABLE_SLOT:%[0-9]+ ]] = getelementptr inbounds void (%swift.type*)*, void (%swift.type*)** [[OPAQUE_SUPER_METADATA]]
123
- // CHECK: [[FN_PTR:%[0-9]+ ]] = load void (%swift.type*)*, void (%swift.type*)** [[VTABLE_SLOT]]
128
+ // CHECK: [[SUPER_METADATA:%.* ]] = call %swift.type* @_T015resilient_class13OutsideParentCMa()
129
+ // CHECK: [[OPAQUE_SUPER_METADATA:%.* ]] = bitcast %swift.type* [[SUPER_METADATA]] to void (%swift.type*)**
130
+ // CHECK: [[VTABLE_SLOT:%.* ]] = getelementptr inbounds void (%swift.type*)*, void (%swift.type*)** [[OPAQUE_SUPER_METADATA]]
131
+ // CHECK: [[FN_PTR:%.* ]] = load void (%swift.type*)*, void (%swift.type*)** [[VTABLE_SLOT]]
124
132
// CHECK: call swiftcc void
125
133
126
134
// ext.super.resilient_class.ResilientOutsideChild.callSuperMethod () -> ()
@@ -139,13 +147,16 @@ bb0(%0 : $ResilientOutsideChild):
139
147
140
148
// Extending a resilient class - load super metadata indirectly.
141
149
// CHECK-LABEL: define{{( protected)?}} swiftcc void @_T015resilient_class21ResilientOutsideChildC5superE15callSuperMethodyyF(%T15resilient_class21ResilientOutsideChildC* swiftself)
142
- // CHECK: [[METADATA:%[0-9]+]] = call %swift.type* @_T015resilient_class21ResilientOutsideChildCMa()
143
- // CHECK: [[OPAQUE_METADATA:%[0-9]+]] = bitcast %swift.type* [[METADATA]] to %swift.type**
144
- // CHECK: [[SUPER_METADATA_PTR:%[0-9]+]] = getelementptr inbounds %swift.type*, %swift.type** [[OPAQUE_METADATA]], i32 1
145
- // CHECK: [[SUPER_METADATA:%[0-9]+]] = load %swift.type*, %swift.type** [[SUPER_METADATA_PTR]]
146
- // CHECK: [[OPAQUE_SUPER_METADATA:%[0-9]+]] = bitcast %swift.type* [[SUPER_METADATA]] to void (%T15resilient_class22ResilientOutsideParentC*)**
147
- // CHECK: [[VTABLE_SLOT:%[0-9]+]] = getelementptr inbounds void (%T15resilient_class22ResilientOutsideParentC*)*, void (%T15resilient_class22ResilientOutsideParentC*)** [[OPAQUE_SUPER_METADATA]]
148
- // CHECK: [[FN_PTR:%[0-9]+]] = load void (%T15resilient_class22ResilientOutsideParentC*)*, void (%T15resilient_class22ResilientOutsideParentC*)** [[VTABLE_SLOT]]
150
+ // CHECK: [[METADATA:%.*]] = call %swift.type* @_T015resilient_class21ResilientOutsideChildCMa()
151
+ // CHECK: [[OPAQUE_METADATA:%.*]] = bitcast %swift.type* [[METADATA]] to %swift.type**
152
+ // CHECK: [[SUPER_METADATA_PTR:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[OPAQUE_METADATA]], i32 1
153
+ // CHECK: [[SUPER_METADATA:%.*]] = load %swift.type*, %swift.type** [[SUPER_METADATA_PTR]]
154
+ // CHECK: [[BASE:%.*]] = load [[INT]], [[INT]]* @_T015resilient_class22ResilientOutsideParentCMo
155
+ // CHECK: [[VTABLE_OFFSET:%.*]] = add [[INT]] [[BASE]], {{20|40}}
156
+ // CHECK: [[SUPER_ADDR:%.*]] = bitcast %swift.type* [[SUPER_METADATA]] to i8*
157
+ // CHECK: [[VTABLE_ADDR:%.*]] = getelementptr inbounds i8, i8* [[SUPER_ADDR]], [[INT]] [[VTABLE_OFFSET]]
158
+ // CHECK: [[VTABLE_SLOT:%.*]] = bitcast i8* [[VTABLE_ADDR]] to void (%T15resilient_class22ResilientOutsideParentC*)*
159
+ // CHECK: [[FN_PTR:%.*]] = load void (%T15resilient_class22ResilientOutsideParentC*)*, void (%T15resilient_class22ResilientOutsideParentC*)** [[VTABLE_SLOT]]
149
160
// CHECK: call void
150
161
151
162
// static ext.super.resilient_class.ResilientOutsideChild.callSuperClassMethod () -> ()
@@ -162,13 +173,16 @@ bb0(%0 : $@thick ResilientOutsideChild.Type):
162
173
163
174
// Extending a resilient class - load super metadata indirectly.
164
175
// CHECK-LABEL: define{{( protected)?}} swiftcc void @_T015resilient_class21ResilientOutsideChildC5superE20callSuperClassMethodyyFZ(%swift.type* swiftself)
165
- // CHECK: [[METADATA:%[0-9]+]] = call %swift.type* @_T015resilient_class21ResilientOutsideChildCMa()
166
- // CHECK: [[OPAQUE_METADATA:%[0-9]+]] = bitcast %swift.type* [[METADATA]] to %swift.type**
167
- // CHECK: [[SUPER_METADATA_PTR:%[0-9]+]] = getelementptr inbounds %swift.type*, %swift.type** [[OPAQUE_METADATA]], i32 1
168
- // CHECK: [[SUPER_METADATA:%[0-9]+]] = load %swift.type*, %swift.type** [[SUPER_METADATA_PTR]]
169
- // CHECK: [[OPAQUE_SUPER_METADATA:%[0-9]+]] = bitcast %swift.type* [[SUPER_METADATA]] to void (%swift.type*)**
170
- // CHECK: [[VTABLE_SLOT:%[0-9]+]] = getelementptr inbounds void (%swift.type*)*, void (%swift.type*)** [[OPAQUE_SUPER_METADATA]]
171
- // CHECK: [[FN_PTR:%[0-9]+]] = load void (%swift.type*)*, void (%swift.type*)** [[VTABLE_SLOT]]
176
+ // CHECK: [[METADATA:%.*]] = call %swift.type* @_T015resilient_class21ResilientOutsideChildCMa()
177
+ // CHECK: [[OPAQUE_METADATA:%.*]] = bitcast %swift.type* [[METADATA]] to %swift.type**
178
+ // CHECK: [[SUPER_METADATA_PTR:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[OPAQUE_METADATA]], i32 1
179
+ // CHECK: [[SUPER_METADATA:%.*]] = load %swift.type*, %swift.type** [[SUPER_METADATA_PTR]]
180
+ // CHECK: [[BASE:%.*]] = load [[INT]], [[INT]]* @_T015resilient_class22ResilientOutsideParentCMo
181
+ // CHECK: [[VTABLE_OFFSET:%.*]] = add [[INT]] [[BASE]], {{24|48}}
182
+ // CHECK: [[SUPER_ADDR:%.*]] = bitcast %swift.type* [[SUPER_METADATA]] to i8*
183
+ // CHECK: [[VTABLE_ADDR:%.*]] = getelementptr inbounds i8, i8* [[SUPER_ADDR]], [[INT]] [[VTABLE_OFFSET]]
184
+ // CHECK: [[VTABLE_SLOT:%.*]] = bitcast i8* [[VTABLE_ADDR]] to void (%swift.type*)**
185
+ // CHECK: [[FN_PTR:%.*]] = load void (%swift.type*)*, void (%swift.type*)** [[VTABLE_SLOT]]
172
186
// CHECK: call swiftcc void
173
187
174
188
sil_vtable ChildToResilientParent {
@@ -202,10 +216,10 @@ sil_vtable Derived {
202
216
}
203
217
204
218
// CHECK-LABEL: define{{.*}} @test_super_method_of_generic_base
205
- // CHECK: [[METADATA:%[0-9]+ ]] = call %swift.type* @_T05super4BaseCyAA3StrVGMa()
206
- // CHECK: [[BASEMETADATA:%[0-9]+ ]] = bitcast %swift.type* [[METADATA]] to void (%T5super4BaseC*)**
207
- // CHECK: [[GEP:%[0-9]+ ]] = getelementptr inbounds void (%T5super4BaseC*)*, void (%T5super4BaseC*)** [[BASEMETADATA]]
208
- // CHECK: [[SUPERMT:%[0-9]+ ]] = load void (%T5super4BaseC*)*, void (%T5super4BaseC*)** [[GEP]]
219
+ // CHECK: [[METADATA:%.* ]] = call %swift.type* @_T05super4BaseCyAA3StrVGMa()
220
+ // CHECK: [[BASEMETADATA:%.* ]] = bitcast %swift.type* [[METADATA]] to void (%T5super4BaseC*)**
221
+ // CHECK: [[GEP:%.* ]] = getelementptr inbounds void (%T5super4BaseC*)*, void (%T5super4BaseC*)** [[BASEMETADATA]]
222
+ // CHECK: [[SUPERMT:%.* ]] = load void (%T5super4BaseC*)*, void (%T5super4BaseC*)** [[GEP]]
209
223
// CHECK: ret void
210
224
sil @test_super_method_of_generic_base : $@convention(method) (@guaranteed Derived) -> () {
211
225
bb0(%0 : $Derived):
0 commit comments