[MoveChecker] Separate partial reinit from consume

This commit is contained in:
Nate Chandler
2024-01-25 18:07:20 -08:00
parent f2d68a21dc
commit 03f904af0c
9 changed files with 106 additions and 33 deletions

View File

@@ -967,13 +967,11 @@ void DiagnosticEmitter::emitCannotPartiallyMutateError(
if (!pathString.empty())
varName.append(pathString);
bool hasPartialConsumption =
astContext.LangOpts.hasFeature(Feature::MoveOnlyPartialConsumption);
(void)hasPartialConsumption;
switch (error) {
case PartialMutationError::Kind::FeatureDisabled:
assert(!hasPartialConsumption);
case PartialMutationError::Kind::FeatureDisabled: {
assert(!astContext.LangOpts.hasFeature(
partialMutationFeature(error.getKind())));
switch (kind) {
case PartialMutation::Kind::Consume:
diagnose(astContext, user, diag::sil_movechecking_cannot_destructure,
@@ -988,8 +986,12 @@ void DiagnosticEmitter::emitCannotPartiallyMutateError(
}
registerDiagnosticEmitted(address);
return;
}
case PartialMutationError::Kind::HasDeinit: {
assert(hasPartialConsumption);
assert(
astContext.LangOpts.hasFeature(Feature::MoveOnlyPartialConsumption) ||
astContext.LangOpts.hasFeature(
Feature::MoveOnlyPartialReinitialization));
switch (kind) {
case PartialMutation::Kind::Consume:
diagnose(astContext, user,