@@ -137,6 +137,10 @@ struct CommonSwiftTextualModuleDependencyDetails {
137137
138138 // / (Clang) modules on which the bridging header depends.
139139 std::vector<std::string> bridgingModuleDependencies;
140+
141+ // / Dependencies comprised of Swift overlay modules of direct and
142+ // / transitive Clang dependencies.
143+ std::vector<ModuleDependencyID> swiftOverlayDependencies;
140144};
141145
142146// / Describes the dependencies of a Swift module described by an Swift interface file.
@@ -450,12 +454,26 @@ class ModuleDependencyInfo {
450454 }
451455
452456 // / Resolve a dependency's set of `imports` with qualified Module IDs
453- void resolveDependencies (const std::vector <ModuleDependencyID> & dependencyIDs) {
457+ void resolveDependencies (const ArrayRef <ModuleDependencyID> dependencyIDs) {
454458 assert (!storage->resolved && " Resolving an already-resolved dependency" );
455459 storage->resolved = true ;
456460 storage->resolvedModuleDependencies .assign (dependencyIDs.begin (), dependencyIDs.end ());
457461 }
458462
463+ // / Set this module's set of Swift Overlay dependencies
464+ void setOverlayDependencies (const ArrayRef<ModuleDependencyID> dependencyIDs) {
465+ assert (isSwiftSourceModule () || isSwiftInterfaceModule ());
466+ CommonSwiftTextualModuleDependencyDetails *textualModuleDetails;
467+ if (auto sourceDetailsStorage = dyn_cast<SwiftSourceModuleDependenciesStorage>(storage.get ())) {
468+ textualModuleDetails = &sourceDetailsStorage->textualModuleDetails ;
469+ } else if (auto interfaceDetailsStorage = dyn_cast<SwiftInterfaceModuleDependenciesStorage>(storage.get ())) {
470+ textualModuleDetails = &interfaceDetailsStorage->textualModuleDetails ;
471+ } else {
472+ llvm_unreachable (" Unknown kind of dependency module info." );
473+ }
474+ textualModuleDetails->swiftOverlayDependencies .assign (dependencyIDs.begin (), dependencyIDs.end ());
475+ }
476+
459477 void updateCommandLine (const std::vector<std::string> &newCommandLine) {
460478 assert (isSwiftInterfaceModule () && " Can only update command line on Swift interface dependency" );
461479 cast<SwiftInterfaceModuleDependenciesStorage>(storage.get ())->updateCommandLine (newCommandLine);
@@ -762,7 +780,12 @@ class ModuleDependenciesCache {
762780 // / Resolve a dependency module's set of imports
763781 // / to a kind-qualified set of module IDs.
764782 void resolveDependencyImports (ModuleDependencyID moduleID,
765- const std::vector<ModuleDependencyID> &dependencyIDs);
783+ const ArrayRef<ModuleDependencyID> dependencyIDs);
784+
785+ // / Resolve a dependency module's set of Swift module dependencies
786+ // / that are Swift overlays of Clang module dependencies.
787+ void setSwiftOverlayDependencues (ModuleDependencyID moduleID,
788+ const ArrayRef<ModuleDependencyID> dependencyIDs);
766789
767790 StringRef getMainModuleName () const {
768791 return mainScanModuleName;
0 commit comments