Skip to content

Commit 1e03616

Browse files
authored
Merge pull request #69310 from artemcm/510DepScanOverlaysDirectOnly
[5.10 🍒][Dependency Scanning] On discovering cross-import overlays, do not add their discovered dependencies to the main module's direct dependencies
2 parents 3593562 + f21926c commit 1e03616

File tree

3 files changed

+19
-3
lines changed

3 files changed

+19
-3
lines changed

lib/DependencyScan/ModuleDependencyScanner.cpp

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -850,12 +850,22 @@ void ModuleDependencyScanner::discoverCrossImportOverlayDependencies(
850850
}
851851

852852
// Update main module's dependencies to include these new overlays.
853+
auto resolvedDummyDep =
854+
*(cache.findDependency(dummyMainName, ModuleDependencyKind::SwiftSource)
855+
.value());
853856
auto mainDep =
854857
*(cache.findDependency(mainModuleName, ModuleDependencyKind::SwiftSource)
855858
.value());
856-
std::for_each(/* +1 to exclude dummy main*/ allModules.begin() + 1,
857-
allModules.end(), [&](ModuleDependencyID dependencyID) {
858-
mainDep.addModuleDependency(dependencyID);
859+
auto newOverlayDeps = resolvedDummyDep.getDirectModuleDependencies();
860+
auto existingMainDeps = mainDep.getDirectModuleDependencies();
861+
ModuleDependencyIDSet existingMainDepsSet(existingMainDeps.begin(),
862+
existingMainDeps.end());
863+
// Ensure we do not add cross-import overlay dependencies in case they
864+
// were already explicitly imported
865+
std::for_each(newOverlayDeps.begin(), newOverlayDeps.end(),
866+
[&](ModuleDependencyID crossImportOverlayModID) {
867+
if (!existingMainDepsSet.count(crossImportOverlayModID))
868+
mainDep.addModuleDependency(crossImportOverlayModID);
859869
});
860870
cache.updateDependency(
861871
{mainModuleName.str(), ModuleDependencyKind::SwiftSource}, mainDep);

test/ScanDependencies/Inputs/Swift/_cross_import_E.swiftinterface

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@
33
import Swift
44
import E
55
import SubE
6+
import X
67
public func funcCrossImportE() {}

test/ScanDependencies/module_deps_cross_import_overlay.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,9 @@ import SubEWrapper
2424
// CHECK-DAG: "swift": "_StringProcessing"
2525
// CHECK-DAG: "swift": "_cross_import_E"
2626
// CHECK-DAG: "clang": "_SwiftConcurrencyShims"
27+
// Ensure a transitive dependency via "_cross_import_E" is not a direct dep of main module
28+
// CHECK-NOT: "clang": "X"
2729
// CHECK: ],
30+
31+
// Ensure a transitive dependency via "_cross_import_E" is recorded in the graph still
32+
// CHECK: "clang": "X"

0 commit comments

Comments
 (0)