@@ -695,88 +695,6 @@ ModuleDependencyScanner::getMainModuleDependencyInfo(ModuleDecl *mainModule) {
695
695
return mainDependencies;
696
696
}
697
697
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
-
780
698
// / For the dependency set of the main module, discover all
781
699
// / cross-import overlays and their corresponding '.swiftcrossimport'
782
700
// / files. Cross-import overlay dependencies are required when
@@ -1088,19 +1006,38 @@ void ModuleDependencyScanner::resolveAllClangModuleDependencies(
1088
1006
// We need to query the Clang dependency scanner for this module's
1089
1007
// unresolved imports
1090
1008
llvm::StringSet<> resolvedImportIdentifiers;
1091
- for (const auto &resolvedDep : moduleDependencyInfo.getImportedSwiftDependencies ())
1009
+ for (const auto &resolvedDep :
1010
+ moduleDependencyInfo.getImportedSwiftDependencies ())
1092
1011
resolvedImportIdentifiers.insert (resolvedDep.ModuleName );
1093
1012
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
+
1094
1032
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);
1104
1041
}
1105
1042
}
1106
1043
0 commit comments