Skip to content

Commit d9a7ac5

Browse files
committed
Revert "[Dependency Scanning][C++ Interop] Remap lookup of Clang module 'CxxStdlib' to 'std'"
This reverts commit c4fcee0.
1 parent c29f284 commit d9a7ac5

File tree

5 files changed

+106
-71
lines changed

5 files changed

+106
-71
lines changed

include/swift/AST/ModuleDependencies.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -164,11 +164,6 @@ struct ScannerImportStatementInfo {
164164
: importLocations({location}), importIdentifier(importIdentifier),
165165
isExported(isExported) {}
166166

167-
ScannerImportStatementInfo(std::string importIdentifier, bool isExported,
168-
SmallVector<ImportDiagnosticLocationInfo, 4> locations)
169-
: importLocations(locations), importIdentifier(importIdentifier),
170-
isExported(isExported) {}
171-
172167
void addImportLocation(ImportDiagnosticLocationInfo location) {
173168
importLocations.push_back(location);
174169
}

include/swift/DependencyScan/ModuleDependencyScanner.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,19 @@ class ModuleDependencyScanner {
128128
performDependencyScan(ModuleDependencyID rootModuleID,
129129
ModuleDependenciesCache &cache);
130130

131+
/// Query the module dependency info for the Clang module with the given name.
132+
/// Explicit by-name lookups are useful for batch mode scanning.
133+
std::optional<const ModuleDependencyInfo *>
134+
getNamedClangModuleDependencyInfo(StringRef moduleName,
135+
ModuleDependenciesCache &cache,
136+
ModuleDependencyIDSetVector &discoveredClangModules);
137+
138+
/// Query the module dependency info for the Swift module with the given name.
139+
/// Explicit by-name lookups are useful for batch mode scanning.
140+
std::optional<const ModuleDependencyInfo *>
141+
getNamedSwiftModuleDependencyInfo(StringRef moduleName,
142+
ModuleDependenciesCache &cache);
143+
131144
/// How many filesystem lookups were performed by the scanner
132145
unsigned getNumLookups() { return NumLookups; }
133146

lib/DependencyScan/ModuleDependencyScanner.cpp

Lines changed: 92 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -687,6 +687,88 @@ 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+
690772
/// For the dependency set of the main module, discover all
691773
/// cross-import overlays and their corresponding '.swiftcrossimport'
692774
/// files. Cross-import overlay dependencies are required when
@@ -998,38 +1080,19 @@ void ModuleDependencyScanner::resolveAllClangModuleDependencies(
9981080
// We need to query the Clang dependency scanner for this module's
9991081
// unresolved imports
10001082
llvm::StringSet<> resolvedImportIdentifiers;
1001-
for (const auto &resolvedDep :
1002-
moduleDependencyInfo.getImportedSwiftDependencies())
1083+
for (const auto &resolvedDep : moduleDependencyInfo.getImportedSwiftDependencies())
10031084
resolvedImportIdentifiers.insert(resolvedDep.ModuleName);
10041085

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-
10241086
for (const auto &depImport : moduleDependencyInfo.getModuleImports())
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);
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+
}
10331096
}
10341097
}
10351098

lib/DependencyScan/ScanDependencies.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1404,8 +1404,7 @@ static void resolveImplicitLinkLibraries(const CompilerInstance &instance,
14041404

14051405
if (langOpts.EnableCXXInterop) {
14061406
auto OptionalCxxDep = cache.findDependency(CXX_MODULE_NAME);
1407-
auto OptionalCxxStdLibDep =
1408-
cache.findDependency(instance.getASTContext().Id_CxxStdlib.str());
1407+
auto OptionalCxxStdLibDep = cache.findDependency("CxxStdlib");
14091408
bool hasStaticCxx =
14101409
OptionalCxxDep.has_value() && OptionalCxxDep.value()->isStaticLibrary();
14111410
bool hasStaticCxxStdlib = OptionalCxxStdLibDep.has_value() &&

test/ScanDependencies/cxx-overlay-underlying-module-lookup.swift

Lines changed: 0 additions & 35 deletions
This file was deleted.

0 commit comments

Comments
 (0)