Skip to content

Commit bd67268

Browse files
authored
Merge pull request #79702 from artemcm/FixCrossImportFailureMode
[Dependency Scanning] Remove hard failure mode (crash) during cross-import resolution
2 parents 7899343 + 6f0bc1e commit bd67268

File tree

2 files changed

+12
-10
lines changed

2 files changed

+12
-10
lines changed

lib/DependencyScan/ModuleDependencyScanner.cpp

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -602,7 +602,7 @@ static void discoverCrossImportOverlayFiles(
602602
auto getModuleIDForImportIdentifier =
603603
[](const std::string &importIdentifierStr,
604604
const ModuleDependencyIDSet &directSwiftDepsSet,
605-
const ModuleDependencyIDSet &directClangDepsSet) -> ModuleDependencyID {
605+
const ModuleDependencyIDSet &directClangDepsSet) -> std::optional<ModuleDependencyID> {
606606
if (auto textualDepIt = directSwiftDepsSet.find(
607607
{importIdentifierStr, ModuleDependencyKind::SwiftInterface});
608608
textualDepIt != directSwiftDepsSet.end())
@@ -615,8 +615,8 @@ static void discoverCrossImportOverlayFiles(
615615
{importIdentifierStr, ModuleDependencyKind::Clang});
616616
clangDepIt != directClangDepsSet.end())
617617
return *clangDepIt;
618-
llvm_unreachable(
619-
"Unresolved import during cross-import overlay resolution");
618+
else
619+
return std::nullopt;
620620
};
621621

622622
// Collect the set of directly-imported module dependencies
@@ -625,9 +625,10 @@ static void discoverCrossImportOverlayFiles(
625625
auto importResolvedModuleID = getModuleIDForImportIdentifier(
626626
import.importIdentifier, mainModuleDirectSwiftDepsSet,
627627
mainModuleDirectClangDepsSet);
628-
for (const auto &importLocation : import.importLocations)
629-
perSourceFileDependencies[importLocation.bufferIdentifier].insert(
630-
importResolvedModuleID);
628+
if (importResolvedModuleID)
629+
for (const auto &importLocation : import.importLocations)
630+
perSourceFileDependencies[importLocation.bufferIdentifier].insert(
631+
*importResolvedModuleID);
631632
}
632633

633634
// For each source-file, build a set of module dependencies of the
@@ -658,9 +659,10 @@ static void discoverCrossImportOverlayFiles(
658659
auto importResolvedDepID = getModuleIDForImportIdentifier(
659660
import.importIdentifier, directSwiftDepsSet,
660661
directClangDepsSet);
661-
if (!perSourceFileDependencies[bufferIdentifier].count(
662-
importResolvedDepID))
663-
worklist.push_back(importResolvedDepID);
662+
if (importResolvedDepID &&
663+
!perSourceFileDependencies[bufferIdentifier].count(
664+
*importResolvedDepID))
665+
worklist.push_back(*importResolvedDepID);
664666
}
665667
}
666668
}

test/ScanDependencies/test_clang_gmodules.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// RUN: %empty-directory(%t)
22
// RUN: %empty-directory(%t/module-cache)
3-
// RUN: %target-swift-frontend -scan-dependencies -module-cache-path %t/module-cache %s -o %t/deps.json -I %S/Inputs/CHeaders -I %S/Inputs/Swift -target %target-cpu-apple-macosx10.14
3+
// RUN: %target-swift-frontend -scan-dependencies -module-cache-path %t/module-cache %s -o %t/deps.json -I %S/Inputs/CHeaders -I %S/Inputs/Swift -target %target-cpu-apple-macosx10.14 -disable-implicit-concurrency-module-import -disable-implicit-string-processing-module-import
44
// RUN: %validate-json %t/deps.json | %FileCheck %s
55

66
import X

0 commit comments

Comments
 (0)