[CSDiagnostics/Tests] Add tests for any Sendable vs. Any interaction in non-strict concurrency contexts

This commit is contained in:
Pavel Yaskevich
2024-12-13 09:35:34 -08:00
parent fb54682753
commit c8f3524961
3 changed files with 171 additions and 0 deletions

View File

@@ -1044,6 +1044,34 @@ bool GenericArgumentsMismatchFailure::diagnoseAsError() {
break;
}
case ConstraintLocator::Member: {
auto *memberLoc = getConstraintLocator(anchor, path);
auto selectedOverload = getOverloadChoiceIfAvailable(memberLoc);
if (!selectedOverload)
return false;
auto baseTy = selectedOverload->choice.getBaseType()->getRValueType();
auto *memberRef = selectedOverload->choice.getDecl();
if (Mismatches.size() == 1) {
auto mismatchIdx = Mismatches.front();
auto actualArgTy = getActual()->getGenericArgs()[mismatchIdx];
auto requiredArgTy = getRequired()->getGenericArgs()[mismatchIdx];
emitDiagnostic(diag::types_not_equal_in_decl_ref, memberRef, baseTy,
actualArgTy, requiredArgTy);
emitDiagnosticAt(memberRef, diag::decl_declared_here, memberRef);
return true;
}
emitDiagnostic(
diag::cannot_reference_conditional_member_on_base_multiple_mismatches,
memberRef, baseTy);
emitDiagnosticAt(memberRef, diag::decl_declared_here, memberRef);
emitNotesForMismatches();
return true;
}
default:
break;
}