@@ -687,88 +687,6 @@ ModuleDependencyScanner::getMainModuleDependencyInfo(ModuleDecl *mainModule) {
687
687
return mainDependencies;
688
688
}
689
689
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
-
772
690
// / For the dependency set of the main module, discover all
773
691
// / cross-import overlays and their corresponding '.swiftcrossimport'
774
692
// / files. Cross-import overlay dependencies are required when
@@ -1080,19 +998,38 @@ void ModuleDependencyScanner::resolveAllClangModuleDependencies(
1080
998
// We need to query the Clang dependency scanner for this module's
1081
999
// unresolved imports
1082
1000
llvm::StringSet<> resolvedImportIdentifiers;
1083
- for (const auto &resolvedDep : moduleDependencyInfo.getImportedSwiftDependencies ())
1001
+ for (const auto &resolvedDep :
1002
+ moduleDependencyInfo.getImportedSwiftDependencies ())
1084
1003
resolvedImportIdentifiers.insert (resolvedDep.ModuleName );
1085
1004
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
+
1086
1024
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);
1096
1033
}
1097
1034
}
1098
1035
0 commit comments