@@ -164,8 +164,10 @@ class PartialMutationError {
164
164
struct NonfrozenUsableFromInlineType {
165
165
NominalTypeDecl &nominal;
166
166
};
167
+ struct ConsumeDuringDeinit {
168
+ };
167
169
using Payload = TaggedUnion<FeatureDisabled, HasDeinit, NonfrozenImportedType,
168
- NonfrozenUsableFromInlineType>;
170
+ NonfrozenUsableFromInlineType, ConsumeDuringDeinit >;
169
171
Payload payload;
170
172
171
173
PartialMutationError (SILType type, Payload payload)
@@ -212,6 +214,8 @@ class PartialMutationError {
212
214
// / with library evolution, prevent the aggregate from being partially
213
215
// / mutated.
214
216
NonfrozenUsableFromInlineType,
217
+ // / The value was fully consumed in a `deinit`.
218
+ ConsumeDuringDeinit,
215
219
};
216
220
217
221
operator Kind () {
@@ -221,8 +225,12 @@ class PartialMutationError {
221
225
return Kind::HasDeinit;
222
226
else if (payload.isa <NonfrozenImportedType>())
223
227
return Kind::NonfrozenImportedType;
224
- assert (payload.isa <NonfrozenUsableFromInlineType>());
225
- return Kind::NonfrozenUsableFromInlineType;
228
+ else if (payload.isa <NonfrozenUsableFromInlineType>())
229
+ return Kind::NonfrozenUsableFromInlineType;
230
+ else if (payload.isa <ConsumeDuringDeinit>())
231
+ return Kind::ConsumeDuringDeinit;
232
+
233
+ llvm_unreachable (" unhandled tag" );
226
234
}
227
235
228
236
static PartialMutationError featureDisabled (SILType type,
@@ -245,6 +253,10 @@ class PartialMutationError {
245
253
return PartialMutationError (type, NonfrozenUsableFromInlineType{nominal});
246
254
}
247
255
256
+ static PartialMutationError consumeDuringDeinit (SILType type) {
257
+ return PartialMutationError (type, ConsumeDuringDeinit{});
258
+ }
259
+
248
260
PartialMutation::Kind getKind () {
249
261
return payload.get <FeatureDisabled>().kind ;
250
262
}
0 commit comments