@@ -164,8 +164,10 @@ class PartialMutationError {
164164 struct NonfrozenUsableFromInlineType {
165165 NominalTypeDecl &nominal;
166166 };
167+ struct ConsumeDuringDeinit {
168+ };
167169 using Payload = TaggedUnion<FeatureDisabled, HasDeinit, NonfrozenImportedType,
168- NonfrozenUsableFromInlineType>;
170+ NonfrozenUsableFromInlineType, ConsumeDuringDeinit >;
169171 Payload payload;
170172
171173 PartialMutationError (SILType type, Payload payload)
@@ -212,6 +214,8 @@ class PartialMutationError {
212214 // / with library evolution, prevent the aggregate from being partially
213215 // / mutated.
214216 NonfrozenUsableFromInlineType,
217+ // / The value was fully consumed in a `deinit`.
218+ ConsumeDuringDeinit,
215219 };
216220
217221 operator Kind () {
@@ -221,8 +225,12 @@ class PartialMutationError {
221225 return Kind::HasDeinit;
222226 else if (payload.isa <NonfrozenImportedType>())
223227 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" );
226234 }
227235
228236 static PartialMutationError featureDisabled (SILType type,
@@ -245,6 +253,10 @@ class PartialMutationError {
245253 return PartialMutationError (type, NonfrozenUsableFromInlineType{nominal});
246254 }
247255
256+ static PartialMutationError consumeDuringDeinit (SILType type) {
257+ return PartialMutationError (type, ConsumeDuringDeinit{});
258+ }
259+
248260 PartialMutation::Kind getKind () {
249261 return payload.get <FeatureDisabled>().kind ;
250262 }
0 commit comments