@@ -66,7 +66,8 @@ static bool diagnoseSubstitutionMapAvailability(
6666 SourceLoc loc, SubstitutionMap subs, const ExportContext &where,
6767 Type depTy = Type(), Type replacementTy = Type(),
6868 bool warnIfConformanceUnavailablePreSwift6 = false,
69- bool suppressParameterizationCheckForOptional = false);
69+ bool suppressParameterizationCheckForOptional = false,
70+ bool preconcurrency = false);
7071
7172// / Diagnose uses of unavailable declarations in types.
7273static bool
@@ -3990,8 +3991,12 @@ bool ExprAvailabilityWalker::diagnoseDeclRefAvailability(
39903991 }
39913992
39923993 if (R.isValid ()) {
3993- if (diagnoseSubstitutionMapAvailability (R.Start , declRef.getSubstitutions (),
3994- Where)) {
3994+ if (diagnoseSubstitutionMapAvailability (
3995+ R.Start , declRef.getSubstitutions (), Where,
3996+ Type (), Type (),
3997+ /* warnIfConformanceUnavailablePreSwift6*/ false ,
3998+ /* suppressParameterizationCheckForOptional*/ false ,
3999+ /* preconcurrency*/ D->preconcurrency ())) {
39954000 return true ;
39964001 }
39974002 }
@@ -4489,7 +4494,8 @@ class ProblematicTypeFinder : public TypeDeclFinder {
44894494 /* depTy=*/ Type (),
44904495 /* replacementTy=*/ Type (),
44914496 /* warnIfConformanceUnavailablePreSwift6=*/ false ,
4492- /* suppressParameterizationCheckForOptional=*/ ty->isOptional ());
4497+ /* suppressParameterizationCheckForOptional=*/ ty->isOptional (),
4498+ /* preconcurrency*/ ty->getAnyNominal ()->preconcurrency ());
44934499 return Action::Continue;
44944500 }
44954501
@@ -4539,17 +4545,19 @@ void swift::diagnoseTypeAvailability(const TypeRepr *TR, Type T, SourceLoc loc,
45394545}
45404546
45414547static void diagnoseMissingConformance (
4542- SourceLoc loc, Type type, ProtocolDecl *proto, const DeclContext *fromDC) {
4548+ SourceLoc loc, Type type, ProtocolDecl *proto, const DeclContext *fromDC,
4549+ bool preconcurrency) {
45434550 assert (proto->isSpecificProtocol (KnownProtocolKind::Sendable));
4544- diagnoseMissingSendableConformance (loc, type, fromDC);
4551+ diagnoseMissingSendableConformance (loc, type, fromDC, preconcurrency );
45454552}
45464553
45474554bool
45484555swift::diagnoseConformanceAvailability (SourceLoc loc,
45494556 ProtocolConformanceRef conformance,
45504557 const ExportContext &where,
45514558 Type depTy, Type replacementTy,
4552- bool warnIfConformanceUnavailablePreSwift6) {
4559+ bool warnIfConformanceUnavailablePreSwift6,
4560+ bool preconcurrency) {
45534561 assert (!where.isImplicit ());
45544562
45554563 if (conformance.isInvalid () || conformance.isAbstract ())
@@ -4561,7 +4569,8 @@ swift::diagnoseConformanceAvailability(SourceLoc loc,
45614569 for (auto patternConf : pack->getPatternConformances ()) {
45624570 diagnosed |= diagnoseConformanceAvailability (
45634571 loc, patternConf, where, depTy, replacementTy,
4564- warnIfConformanceUnavailablePreSwift6);
4572+ warnIfConformanceUnavailablePreSwift6,
4573+ preconcurrency);
45654574 }
45664575 return diagnosed;
45674576 }
@@ -4581,7 +4590,8 @@ swift::diagnoseConformanceAvailability(SourceLoc loc,
45814590 if (auto builtinConformance = dyn_cast<BuiltinProtocolConformance>(rootConf)){
45824591 if (builtinConformance->isMissing ()) {
45834592 diagnoseMissingConformance (loc, builtinConformance->getType (),
4584- builtinConformance->getProtocol (), DC);
4593+ builtinConformance->getProtocol (), DC,
4594+ preconcurrency);
45854595 }
45864596 }
45874597
@@ -4640,7 +4650,8 @@ swift::diagnoseConformanceAvailability(SourceLoc loc,
46404650 SubstitutionMap subConformanceSubs = concreteConf->getSubstitutionMap ();
46414651 if (diagnoseSubstitutionMapAvailability (loc, subConformanceSubs, where,
46424652 depTy, replacementTy,
4643- warnIfConformanceUnavailablePreSwift6))
4653+ warnIfConformanceUnavailablePreSwift6,
4654+ preconcurrency))
46444655 return true ;
46454656
46464657 return false ;
@@ -4649,12 +4660,14 @@ swift::diagnoseConformanceAvailability(SourceLoc loc,
46494660bool diagnoseSubstitutionMapAvailability (
46504661 SourceLoc loc, SubstitutionMap subs, const ExportContext &where, Type depTy,
46514662 Type replacementTy, bool warnIfConformanceUnavailablePreSwift6,
4652- bool suppressParameterizationCheckForOptional) {
4663+ bool suppressParameterizationCheckForOptional,
4664+ bool preconcurrency) {
46534665 bool hadAnyIssues = false ;
46544666 for (ProtocolConformanceRef conformance : subs.getConformances ()) {
46554667 if (diagnoseConformanceAvailability (loc, conformance, where,
46564668 depTy, replacementTy,
4657- warnIfConformanceUnavailablePreSwift6))
4669+ warnIfConformanceUnavailablePreSwift6,
4670+ preconcurrency))
46584671 hadAnyIssues = true ;
46594672 }
46604673
0 commit comments