@@ -37,6 +37,26 @@ struct ThreeNonTrivialNoDeinit {
37
37
var k2: Klass
38
38
}
39
39
40
+ @_moveOnly enum TrivialMoveOnlyEnum {
41
+ case first
42
+ case second(Builtin.Int32)
43
+ case third(Builtin.Int64, Builtin.Int64)
44
+ deinit
45
+ }
46
+
47
+ @_moveOnly enum NonTrivialMoveOnlyEnum {
48
+ case first
49
+ case second(Builtin.Int32)
50
+ case third(Klass, Klass)
51
+ case fourth(Builtin.Int64, Builtin.Int64)
52
+ case fifth(TrivialMoveOnlyEnum)
53
+ deinit
54
+ }
55
+
56
+ //===----------------------------------------------------------------------===//
57
+ // Object Tests
58
+ //===----------------------------------------------------------------------===//
59
+
40
60
// CHECK-LABEL: sil [ossa] @klassTest : $@convention(thin) (@owned Klass) -> () {
41
61
// CHECK: bb0([[ARG:%.*]] : @owned $Klass):
42
62
// CHECK: [[FUNC:%.*]] = function_ref @$s4main5KlassCfD :
@@ -49,10 +69,6 @@ bb0(%0 : @owned $Klass):
49
69
return %9999 : $()
50
70
}
51
71
52
- //===----------------------------------------------------------------------===//
53
- // Object Tests
54
- //===----------------------------------------------------------------------===//
55
-
56
72
// CHECK-LABEL: sil [ossa] @trivialStructTest : $@convention(thin) (@owned TrivialStruct) -> () {
57
73
// CHECK: bb0([[ARG:%.*]] : @owned $TrivialStruct):
58
74
// CHECK: [[FUNC:%.*]] = function_ref @$s4main13TrivialStructVfD :
@@ -87,6 +103,24 @@ bb0(%0 : @owned $ThreeNonTrivial):
87
103
return %9999 : $()
88
104
}
89
105
106
+ // CHECK-LABEL: sil [ossa] @trivialMoveOnlyEnum : $@convention(thin) (@owned TrivialMoveOnlyEnum) -> () {
107
+ // CHECK: [[FUNC:%.*]] = function_ref @$s4main19TrivialMoveOnlyEnumOfD :
108
+ // CHECK: apply [[FUNC]]([[ARG]])
109
+ // CHECK: } // end sil function 'trivialMoveOnlyEnum'
110
+ sil [ossa] @trivialMoveOnlyEnum : $@convention(thin) (@owned TrivialMoveOnlyEnum) -> () {
111
+ bb0(%0 : @owned $TrivialMoveOnlyEnum):
112
+ destroy_value %0 : $TrivialMoveOnlyEnum
113
+ %9999 = tuple()
114
+ return %9999 : $()
115
+ }
116
+
117
+ sil [ossa] @nonTrivialMoveOnlyEnum : $@convention(thin) (@owned NonTrivialMoveOnlyEnum) -> () {
118
+ bb0(%0 : @owned $NonTrivialMoveOnlyEnum):
119
+ destroy_value %0 : $NonTrivialMoveOnlyEnum
120
+ %9999 = tuple()
121
+ return %9999 : $()
122
+ }
123
+
90
124
//===----------------------------------------------------------------------===//
91
125
// Var Tests
92
126
//===----------------------------------------------------------------------===//
@@ -128,6 +162,32 @@ bb0(%0 : $*ThreeNonTrivial):
128
162
return %9999 : $()
129
163
}
130
164
165
+ // CHECK-LABEL: sil [ossa] @trivialMoveOnlyEnumArg : $@convention(thin) (@in TrivialMoveOnlyEnum) -> () {
166
+ // CHECK: bb0([[ARG:%.*]] : $*TrivialMoveOnlyEnum):
167
+ // CHECK: [[FUNC:%.*]] = function_ref @$s4main19TrivialMoveOnlyEnumOfD
168
+ // CHECK: [[LOADED_VALUE:%.*]] = load [take] [[ARG]]
169
+ // CHECK: apply [[FUNC]]([[LOADED_VALUE]])
170
+ // CHECK: } // end sil function 'trivialMoveOnlyEnumArg'
171
+ sil [ossa] @trivialMoveOnlyEnumArg : $@convention(thin) (@in TrivialMoveOnlyEnum) -> () {
172
+ bb0(%0 : $*TrivialMoveOnlyEnum):
173
+ destroy_addr %0 : $*TrivialMoveOnlyEnum
174
+ %9999 = tuple()
175
+ return %9999 : $()
176
+ }
177
+
178
+ // CHECK-LABEL: sil [ossa] @nonTrivialMoveOnlyEnumAddrTest : $@convention(thin) (@in NonTrivialMoveOnlyEnum) -> () {
179
+ // CHECK: bb0([[ARG:%.*]] : $*NonTrivialMoveOnlyEnum):
180
+ // CHECK: [[FUNC:%.*]] = function_ref @$s4main22NonTrivialMoveOnlyEnumOfD :
181
+ // CHECK: [[LOADED_VALUE:%.*]] = load [take] [[ARG]]
182
+ // CHECK: apply [[FUNC]]([[LOADED_VALUE]])
183
+ // CHECK: } // end sil function 'nonTrivialMoveOnlyEnumAddrTest'
184
+ sil [ossa] @nonTrivialMoveOnlyEnumAddrTest : $@convention(thin) (@in NonTrivialMoveOnlyEnum) -> () {
185
+ bb0(%0 : $*NonTrivialMoveOnlyEnum):
186
+ destroy_addr %0 : $*NonTrivialMoveOnlyEnum
187
+ %9999 = tuple()
188
+ return %9999 : $()
189
+ }
190
+
131
191
//===----------------------------------------------------------------------===//
132
192
// Type Without Deinit
133
193
//===----------------------------------------------------------------------===//
@@ -197,12 +257,64 @@ bb0(%0 : @owned $ThreeNonTrivial):
197
257
return %7 : $()
198
258
}
199
259
260
+ sil hidden [ossa] @$s4main19TrivialMoveOnlyEnumOfD : $@convention(method) (@owned TrivialMoveOnlyEnum) -> () {
261
+ bb0(%0 : @owned $TrivialMoveOnlyEnum):
262
+ debug_value %0 : $TrivialMoveOnlyEnum, let, name "self", argno 1, implicit
263
+ switch_enum %0 : $TrivialMoveOnlyEnum, case #TrivialMoveOnlyEnum.first!enumelt: bb1, case #TrivialMoveOnlyEnum.second!enumelt: bb2, case #TrivialMoveOnlyEnum.third!enumelt: bb3
264
+
265
+ bb1:
266
+ br bb4
267
+
268
+ bb2(%4 : $Builtin.Int32):
269
+ br bb4
270
+
271
+ bb3(%6 : $(Builtin.Int64, Builtin.Int64)):
272
+ br bb4
273
+
274
+ bb4:
275
+ %8 = tuple ()
276
+ return %8 : $()
277
+ }
278
+
279
+ // CHECK-LABEL: sil hidden [ossa] @$s4main22NonTrivialMoveOnlyEnumOfD : $@convention(method) (@owned NonTrivialMoveOnlyEnum) -> () {
280
+ // CHECK: bb5([[ARG:%.*]] : @owned $TrivialMoveOnlyEnum):
281
+ // CHECK: [[FUNC_REF:%.*]] = function_ref @$s4main19TrivialMoveOnlyEnumOfD : $@convention(method) (@owned TrivialMoveOnlyEnum) -> ()
282
+ // CHECK: apply [[FUNC_REF]]([[ARG]])
283
+ // CHECK: } // end sil function '$s4main22NonTrivialMoveOnlyEnumOfD'
284
+ sil hidden [ossa] @$s4main22NonTrivialMoveOnlyEnumOfD : $@convention(method) (@owned NonTrivialMoveOnlyEnum) -> () {
285
+ bb0(%0 : @owned $NonTrivialMoveOnlyEnum):
286
+ debug_value %0 : $NonTrivialMoveOnlyEnum, let, name "self", argno 1, implicit
287
+ switch_enum %0 : $NonTrivialMoveOnlyEnum, case #NonTrivialMoveOnlyEnum.first!enumelt: bb1, case #NonTrivialMoveOnlyEnum.second!enumelt: bb2, case #NonTrivialMoveOnlyEnum.third!enumelt: bb3, case #NonTrivialMoveOnlyEnum.fourth!enumelt: bb4, case #NonTrivialMoveOnlyEnum.fifth!enumelt: bb5
288
+
289
+ bb1:
290
+ br bb6
291
+
292
+ bb2(%4 : $Builtin.Int32):
293
+ br bb6
294
+
295
+
296
+ bb3(%6 : @owned $(Klass, Klass)):
297
+ destroy_value %6 : $(Klass, Klass)
298
+ br bb6
299
+
300
+ bb4(%9 : $(Builtin.Int64, Builtin.Int64)):
301
+ br bb6
302
+
303
+ bb5(%11 : @owned $TrivialMoveOnlyEnum):
304
+ destroy_value %11 : $TrivialMoveOnlyEnum
305
+ br bb6
306
+
307
+ bb6:
308
+ %14 = tuple ()
309
+ return %14 : $()
310
+ }
311
+
200
312
sil @$s4main5KlassCfD : $@convention(method) (@owned Klass) -> ()
201
313
sil @$s4main5KlassCACycfc : $@convention(method) (@owned Klass) -> @owned Klass
202
314
sil @$s4main5KlassCfd : $@convention(method) (@guaranteed Klass) -> @owned Builtin.NativeObject
203
315
204
316
sil_moveonlydeinit Klass {
205
- @$s4main5KlassCfD // Klass.__deallocating_deinit
317
+ @$s4main5KlassCfD
206
318
}
207
319
208
320
sil_moveonlydeinit TrivialStruct {
@@ -220,3 +332,11 @@ sil_moveonlydeinit ThreeNonTrivial {
220
332
sil_vtable Klass {
221
333
#Klass.deinit!deallocator: @$s4main5KlassCfD // Klass.__deallocating_deinit
222
334
}
335
+
336
+ sil_moveonlydeinit TrivialMoveOnlyEnum {
337
+ @$s4main19TrivialMoveOnlyEnumOfD
338
+ }
339
+
340
+ sil_moveonlydeinit NonTrivialMoveOnlyEnum {
341
+ @$s4main22NonTrivialMoveOnlyEnumOfD
342
+ }
0 commit comments