@@ -695,88 +695,6 @@ ModuleDependencyScanner::getMainModuleDependencyInfo(ModuleDecl *mainModule) {
695695 return mainDependencies;
696696}
697697
698- // / Retrieve the module dependencies for the Clang module with the given name.
699- std::optional<const ModuleDependencyInfo *>
700- ModuleDependencyScanner::getNamedClangModuleDependencyInfo (
701- StringRef moduleName, ModuleDependenciesCache &cache,
702- ModuleDependencyIDSetVector &discoveredClangModules) {
703- // Check whether we've cached this result.
704- auto moduleID = ModuleDependencyID{moduleName.str (),
705- ModuleDependencyKind::Clang};
706- if (auto found = cache.findDependency (moduleID)) {
707- discoveredClangModules.insert (moduleID);
708- auto directClangDeps = cache.getImportedClangDependencies (moduleID);
709- ModuleDependencyIDSetVector reachableClangModules;
710- reachableClangModules.insert (directClangDeps.begin (),
711- directClangDeps.end ());
712- for (unsigned currentModuleIdx = 0 ;
713- currentModuleIdx < reachableClangModules.size ();
714- ++currentModuleIdx) {
715- auto moduleID = reachableClangModules[currentModuleIdx];
716- auto dependencies =
717- cache.findKnownDependency (moduleID).getImportedClangDependencies ();
718- reachableClangModules.insert (dependencies.begin (), dependencies.end ());
719- }
720- discoveredClangModules.insert (reachableClangModules.begin (),
721- reachableClangModules.end ());
722- return found;
723- }
724-
725- // Otherwise perform filesystem scan
726- auto moduleIdentifier = getModuleImportIdentifier (moduleName);
727- auto moduleDependencies = withDependencyScanningWorker (
728- [&cache, moduleIdentifier](ModuleDependencyScanningWorker *ScanningWorker) {
729- return ScanningWorker->scanFilesystemForClangModuleDependency (
730- moduleIdentifier, cache.getModuleOutputPath (),
731- cache.getSDKModuleOutputPath (),
732- cache.getAlreadySeenClangModules (),
733- cache.getScanService ().getPrefixMapper ());
734- });
735- if (moduleDependencies.empty ())
736- return std::nullopt ;
737-
738- discoveredClangModules.insert (moduleID);
739- for (const auto &dep : moduleDependencies)
740- discoveredClangModules.insert (dep.first );
741-
742- cache.recordDependencies (moduleDependencies, Diagnostics);
743- return cache.findDependency (moduleID);
744- }
745-
746- // / Retrieve the module dependencies for the Swift module with the given name.
747- std::optional<const ModuleDependencyInfo *>
748- ModuleDependencyScanner::getNamedSwiftModuleDependencyInfo (
749- StringRef moduleName, ModuleDependenciesCache &cache) {
750- // Check whether we've cached this result.
751- if (auto found =
752- cache.findDependency (moduleName, ModuleDependencyKind::SwiftSource))
753- return found;
754- if (auto found = cache.findDependency (moduleName,
755- ModuleDependencyKind::SwiftInterface))
756- return found;
757- if (auto found =
758- cache.findDependency (moduleName, ModuleDependencyKind::SwiftBinary))
759- return found;
760- if (auto found = cache.findDependency (moduleName,
761- ModuleDependencyKind::SwiftPlaceholder))
762- return found;
763-
764- // Otherwise perform filesystem scan
765- auto moduleIdentifier = getModuleImportIdentifier (moduleName);
766- auto moduleDependencies = withDependencyScanningWorker (
767- [&cache, moduleIdentifier](ModuleDependencyScanningWorker *ScanningWorker) {
768- return ScanningWorker->scanFilesystemForSwiftModuleDependency (
769- moduleIdentifier, cache.getModuleOutputPath (),
770- cache.getSDKModuleOutputPath (),
771- cache.getScanService ().getPrefixMapper ());
772- });
773- if (moduleDependencies.empty ())
774- return std::nullopt ;
775-
776- cache.recordDependencies (moduleDependencies, Diagnostics);
777- return cache.findDependency (moduleName);
778- }
779-
780698// / For the dependency set of the main module, discover all
781699// / cross-import overlays and their corresponding '.swiftcrossimport'
782700// / files. Cross-import overlay dependencies are required when
@@ -1088,19 +1006,38 @@ void ModuleDependencyScanner::resolveAllClangModuleDependencies(
10881006 // We need to query the Clang dependency scanner for this module's
10891007 // unresolved imports
10901008 llvm::StringSet<> resolvedImportIdentifiers;
1091- for (const auto &resolvedDep : moduleDependencyInfo.getImportedSwiftDependencies ())
1009+ for (const auto &resolvedDep :
1010+ moduleDependencyInfo.getImportedSwiftDependencies ())
10921011 resolvedImportIdentifiers.insert (resolvedDep.ModuleName );
10931012
1013+ // When querying a *clang* module 'CxxStdlib' we must
1014+ // instead expect a module called 'std'...
1015+ auto addCanonicalClangModuleImport =
1016+ [this ](const ScannerImportStatementInfo &importInfo,
1017+ std::vector<ScannerImportStatementInfo> &unresolvedImports,
1018+ llvm::StringSet<> &unresolvedImportIdentifiers) {
1019+ if (importInfo.importIdentifier ==
1020+ ScanASTContext.Id_CxxStdlib .str ()) {
1021+ auto canonicalImportInfo = ScannerImportStatementInfo (
1022+ " std" , importInfo.isExported , importInfo.importLocations );
1023+ unresolvedImports.push_back (canonicalImportInfo);
1024+ unresolvedImportIdentifiers.insert (
1025+ canonicalImportInfo.importIdentifier );
1026+ } else {
1027+ unresolvedImports.push_back (importInfo);
1028+ unresolvedImportIdentifiers.insert (importInfo.importIdentifier );
1029+ }
1030+ };
1031+
10941032 for (const auto &depImport : moduleDependencyInfo.getModuleImports ())
1095- if (!resolvedImportIdentifiers.contains (depImport.importIdentifier )) {
1096- unresolvedImports->push_back (depImport);
1097- unresolvedImportIdentifiers.insert (depImport.importIdentifier );
1098- }
1099- for (const auto &depImport : moduleDependencyInfo.getOptionalModuleImports ())
1100- if (!resolvedImportIdentifiers.contains (depImport.importIdentifier )) {
1101- unresolvedOptionalImports->push_back (depImport);
1102- unresolvedOptionalImportIdentifiers.insert (depImport.importIdentifier );
1103- }
1033+ if (!resolvedImportIdentifiers.contains (depImport.importIdentifier ))
1034+ addCanonicalClangModuleImport (depImport, *unresolvedImports,
1035+ unresolvedImportIdentifiers);
1036+ for (const auto &depImport :
1037+ moduleDependencyInfo.getOptionalModuleImports ())
1038+ if (!resolvedImportIdentifiers.contains (depImport.importIdentifier ))
1039+ addCanonicalClangModuleImport (depImport, *unresolvedOptionalImports,
1040+ unresolvedOptionalImportIdentifiers);
11041041 }
11051042 }
11061043
0 commit comments