@@ -687,88 +687,6 @@ ModuleDependencyScanner::getMainModuleDependencyInfo(ModuleDecl *mainModule) {
687687 return mainDependencies;
688688}
689689
690- // / Retrieve the module dependencies for the Clang module with the given name.
691- std::optional<const ModuleDependencyInfo *>
692- ModuleDependencyScanner::getNamedClangModuleDependencyInfo (
693- StringRef moduleName, ModuleDependenciesCache &cache,
694- ModuleDependencyIDSetVector &discoveredClangModules) {
695- // Check whether we've cached this result.
696- auto moduleID = ModuleDependencyID{moduleName.str (),
697- ModuleDependencyKind::Clang};
698- if (auto found = cache.findDependency (moduleID)) {
699- discoveredClangModules.insert (moduleID);
700- auto directClangDeps = cache.getImportedClangDependencies (moduleID);
701- ModuleDependencyIDSetVector reachableClangModules;
702- reachableClangModules.insert (directClangDeps.begin (),
703- directClangDeps.end ());
704- for (unsigned currentModuleIdx = 0 ;
705- currentModuleIdx < reachableClangModules.size ();
706- ++currentModuleIdx) {
707- auto moduleID = reachableClangModules[currentModuleIdx];
708- auto dependencies =
709- cache.findKnownDependency (moduleID).getImportedClangDependencies ();
710- reachableClangModules.insert (dependencies.begin (), dependencies.end ());
711- }
712- discoveredClangModules.insert (reachableClangModules.begin (),
713- reachableClangModules.end ());
714- return found;
715- }
716-
717- // Otherwise perform filesystem scan
718- auto moduleIdentifier = getModuleImportIdentifier (moduleName);
719- auto moduleDependencies = withDependencyScanningWorker (
720- [&cache, moduleIdentifier](ModuleDependencyScanningWorker *ScanningWorker) {
721- return ScanningWorker->scanFilesystemForClangModuleDependency (
722- moduleIdentifier, cache.getModuleOutputPath (),
723- cache.getSDKModuleOutputPath (),
724- cache.getAlreadySeenClangModules (),
725- cache.getScanService ().getPrefixMapper ());
726- });
727- if (moduleDependencies.empty ())
728- return std::nullopt ;
729-
730- discoveredClangModules.insert (moduleID);
731- for (const auto &dep : moduleDependencies)
732- discoveredClangModules.insert (dep.first );
733-
734- cache.recordDependencies (moduleDependencies, Diagnostics);
735- return cache.findDependency (moduleID);
736- }
737-
738- // / Retrieve the module dependencies for the Swift module with the given name.
739- std::optional<const ModuleDependencyInfo *>
740- ModuleDependencyScanner::getNamedSwiftModuleDependencyInfo (
741- StringRef moduleName, ModuleDependenciesCache &cache) {
742- // Check whether we've cached this result.
743- if (auto found =
744- cache.findDependency (moduleName, ModuleDependencyKind::SwiftSource))
745- return found;
746- if (auto found = cache.findDependency (moduleName,
747- ModuleDependencyKind::SwiftInterface))
748- return found;
749- if (auto found =
750- cache.findDependency (moduleName, ModuleDependencyKind::SwiftBinary))
751- return found;
752- if (auto found = cache.findDependency (moduleName,
753- ModuleDependencyKind::SwiftPlaceholder))
754- return found;
755-
756- // Otherwise perform filesystem scan
757- auto moduleIdentifier = getModuleImportIdentifier (moduleName);
758- auto moduleDependencies = withDependencyScanningWorker (
759- [&cache, moduleIdentifier](ModuleDependencyScanningWorker *ScanningWorker) {
760- return ScanningWorker->scanFilesystemForSwiftModuleDependency (
761- moduleIdentifier, cache.getModuleOutputPath (),
762- cache.getSDKModuleOutputPath (),
763- cache.getScanService ().getPrefixMapper ());
764- });
765- if (moduleDependencies.empty ())
766- return std::nullopt ;
767-
768- cache.recordDependencies (moduleDependencies, Diagnostics);
769- return cache.findDependency (moduleName);
770- }
771-
772690// / For the dependency set of the main module, discover all
773691// / cross-import overlays and their corresponding '.swiftcrossimport'
774692// / files. Cross-import overlay dependencies are required when
@@ -1080,19 +998,38 @@ void ModuleDependencyScanner::resolveAllClangModuleDependencies(
1080998 // We need to query the Clang dependency scanner for this module's
1081999 // unresolved imports
10821000 llvm::StringSet<> resolvedImportIdentifiers;
1083- for (const auto &resolvedDep : moduleDependencyInfo.getImportedSwiftDependencies ())
1001+ for (const auto &resolvedDep :
1002+ moduleDependencyInfo.getImportedSwiftDependencies ())
10841003 resolvedImportIdentifiers.insert (resolvedDep.ModuleName );
10851004
1005+ // When querying a *clang* module 'CxxStdlib' we must
1006+ // instead expect a module called 'std'...
1007+ auto addCanonicalClangModuleImport =
1008+ [this ](const ScannerImportStatementInfo &importInfo,
1009+ std::vector<ScannerImportStatementInfo> &unresolvedImports,
1010+ llvm::StringSet<> &unresolvedImportIdentifiers) {
1011+ if (importInfo.importIdentifier ==
1012+ ScanASTContext.Id_CxxStdlib .str ()) {
1013+ auto canonicalImportInfo = ScannerImportStatementInfo (
1014+ " std" , importInfo.isExported , importInfo.importLocations );
1015+ unresolvedImports.push_back (canonicalImportInfo);
1016+ unresolvedImportIdentifiers.insert (
1017+ canonicalImportInfo.importIdentifier );
1018+ } else {
1019+ unresolvedImports.push_back (importInfo);
1020+ unresolvedImportIdentifiers.insert (importInfo.importIdentifier );
1021+ }
1022+ };
1023+
10861024 for (const auto &depImport : moduleDependencyInfo.getModuleImports ())
1087- if (!resolvedImportIdentifiers.contains (depImport.importIdentifier )) {
1088- unresolvedImports->push_back (depImport);
1089- unresolvedImportIdentifiers.insert (depImport.importIdentifier );
1090- }
1091- for (const auto &depImport : moduleDependencyInfo.getOptionalModuleImports ())
1092- if (!resolvedImportIdentifiers.contains (depImport.importIdentifier )) {
1093- unresolvedOptionalImports->push_back (depImport);
1094- unresolvedOptionalImportIdentifiers.insert (depImport.importIdentifier );
1095- }
1025+ if (!resolvedImportIdentifiers.contains (depImport.importIdentifier ))
1026+ addCanonicalClangModuleImport (depImport, *unresolvedImports,
1027+ unresolvedImportIdentifiers);
1028+ for (const auto &depImport :
1029+ moduleDependencyInfo.getOptionalModuleImports ())
1030+ if (!resolvedImportIdentifiers.contains (depImport.importIdentifier ))
1031+ addCanonicalClangModuleImport (depImport, *unresolvedOptionalImports,
1032+ unresolvedOptionalImportIdentifiers);
10961033 }
10971034 }
10981035
0 commit comments