Skip to content

Commit e950a2f

Browse files
authored
Merge pull request #69309 from artemcm/DepScanOverlaysDirectOnly
[Dependency Scanning] On discovering cross-import overlays, do not add their discovered dependencies to the main module's direct dependencies
2 parents 879b04f + 306f5b9 commit e950a2f

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
@@ -854,12 +854,22 @@ void ModuleDependencyScanner::discoverCrossImportOverlayDependencies(
854854
}
855855

856856
// Update main module's dependencies to include these new overlays.
857+
auto resolvedDummyDep =
858+
*(cache.findDependency(dummyMainName, ModuleDependencyKind::SwiftSource)
859+
.value());
857860
auto mainDep =
858861
*(cache.findDependency(mainModuleName, ModuleDependencyKind::SwiftSource)
859862
.value());
860-
std::for_each(/* +1 to exclude dummy main*/ allModules.begin() + 1,
861-
allModules.end(), [&](ModuleDependencyID dependencyID) {
862-
mainDep.addModuleDependency(dependencyID);
863+
auto newOverlayDeps = resolvedDummyDep.getDirectModuleDependencies();
864+
auto existingMainDeps = mainDep.getDirectModuleDependencies();
865+
ModuleDependencyIDSet existingMainDepsSet(existingMainDeps.begin(),
866+
existingMainDeps.end());
867+
// Ensure we do not add cross-import overlay dependencies in case they
868+
// were already explicitly imported
869+
std::for_each(newOverlayDeps.begin(), newOverlayDeps.end(),
870+
[&](ModuleDependencyID crossImportOverlayModID) {
871+
if (!existingMainDepsSet.count(crossImportOverlayModID))
872+
mainDep.addModuleDependency(crossImportOverlayModID);
863873
});
864874
cache.updateDependency(
865875
{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)