@@ -800,6 +800,19 @@ bool CompilerInvocation::shouldImportSwiftONoneSupport() const {
800800 FrontendOptions::doesActionGenerateSIL (options.RequestedAction );
801801}
802802
803+ void CompilerInstance::verifyImplicitConcurrencyImport () {
804+ if (Invocation.shouldImportSwiftConcurrency () &&
805+ !canImportSwiftConcurrency ()) {
806+ Diagnostics.diagnose (SourceLoc (),
807+ diag::warn_implicit_concurrency_import_failed);
808+ }
809+ }
810+
811+ bool CompilerInstance::canImportSwiftConcurrency () const {
812+ return getASTContext ().canImportModule (
813+ {getASTContext ().getIdentifier (SWIFT_CONCURRENCY_NAME), SourceLoc ()});
814+ }
815+
803816ImplicitImportInfo CompilerInstance::getImplicitImportInfo () const {
804817 auto &frontendOpts = Invocation.getFrontendOptions ();
805818
@@ -824,14 +837,18 @@ ImplicitImportInfo CompilerInstance::getImplicitImportInfo() const {
824837 pushImport (SWIFT_ONONE_SUPPORT);
825838 }
826839
840+ // FIXME: The canImport check is required for compatibility
841+ // with older SDKs. Longer term solution is to have the driver make
842+ // the decision on the implicit import: rdar://76996377
827843 if (Invocation.shouldImportSwiftConcurrency ()) {
828844 switch (imports.StdlibKind ) {
829845 case ImplicitStdlibKind::Builtin:
830846 case ImplicitStdlibKind::None:
831847 break ;
832848
833849 case ImplicitStdlibKind::Stdlib:
834- pushImport (SWIFT_CONCURRENCY_NAME);
850+ if (canImportSwiftConcurrency ())
851+ pushImport (SWIFT_CONCURRENCY_NAME);
835852 break ;
836853 }
837854 }
@@ -1043,6 +1060,8 @@ bool CompilerInstance::loadStdlibIfNeeded() {
10431060 return true ;
10441061 }
10451062
1063+ verifyImplicitConcurrencyImport ();
1064+
10461065 // If we failed to load, we should have already diagnosed.
10471066 if (M->failedToLoad ()) {
10481067 assert (Diagnostics.hadAnyError () &&
0 commit comments