describe illegal casts to existentials

This commit is contained in:
Kavon Farvardin
2023-06-22 22:47:42 -07:00
parent ada0d335b1
commit 66bf3c03fc
8 changed files with 99 additions and 40 deletions

View File

@@ -6140,7 +6140,27 @@ bool NotCompileTimeConstFailure::diagnoseAsError() {
}
bool NotCopyableFailure::diagnoseAsError() {
emitDiagnostic(diag::noncopyable_generics, noncopyableTy);
switch (failure.reason) {
case NoncopyableMatchFailure::CastToExistential: {
assert(failure.type->is<ExistentialType>());
if (noncopyableTy->is<AnyMetatypeType>())
emitDiagnostic(diag::noncopyable_generics_metatype_cast,
noncopyableTy,
failure.type,
noncopyableTy->getMetatypeInstanceType());
else
emitDiagnostic(diag::noncopyable_generics_erasure,
noncopyableTy,
failure.type);
break;
}
case NoncopyableMatchFailure::Unknown:
emitDiagnostic(diag::noncopyable_generics,
noncopyableTy);
break;
}
return true;
}