[Dependency Scanning] Remove hard failure mode (crash) during cross-import resolution

This commit is contained in:
Artem Chikin
2025-02-28 11:12:12 -08:00
parent d98d6fd6fe
commit 6f0bc1ede1
2 changed files with 12 additions and 10 deletions

View File

@@ -602,7 +602,7 @@ static void discoverCrossImportOverlayFiles(
auto getModuleIDForImportIdentifier =
[](const std::string &importIdentifierStr,
const ModuleDependencyIDSet &directSwiftDepsSet,
const ModuleDependencyIDSet &directClangDepsSet) -> ModuleDependencyID {
const ModuleDependencyIDSet &directClangDepsSet) -> std::optional<ModuleDependencyID> {
if (auto textualDepIt = directSwiftDepsSet.find(
{importIdentifierStr, ModuleDependencyKind::SwiftInterface});
textualDepIt != directSwiftDepsSet.end())
@@ -615,8 +615,8 @@ static void discoverCrossImportOverlayFiles(
{importIdentifierStr, ModuleDependencyKind::Clang});
clangDepIt != directClangDepsSet.end())
return *clangDepIt;
llvm_unreachable(
"Unresolved import during cross-import overlay resolution");
else
return std::nullopt;
};
// Collect the set of directly-imported module dependencies
@@ -625,9 +625,10 @@ static void discoverCrossImportOverlayFiles(
auto importResolvedModuleID = getModuleIDForImportIdentifier(
import.importIdentifier, mainModuleDirectSwiftDepsSet,
mainModuleDirectClangDepsSet);
for (const auto &importLocation : import.importLocations)
perSourceFileDependencies[importLocation.bufferIdentifier].insert(
importResolvedModuleID);
if (importResolvedModuleID)
for (const auto &importLocation : import.importLocations)
perSourceFileDependencies[importLocation.bufferIdentifier].insert(
*importResolvedModuleID);
}
// For each source-file, build a set of module dependencies of the
@@ -658,9 +659,10 @@ static void discoverCrossImportOverlayFiles(
auto importResolvedDepID = getModuleIDForImportIdentifier(
import.importIdentifier, directSwiftDepsSet,
directClangDepsSet);
if (!perSourceFileDependencies[bufferIdentifier].count(
importResolvedDepID))
worklist.push_back(importResolvedDepID);
if (importResolvedDepID &&
!perSourceFileDependencies[bufferIdentifier].count(
*importResolvedDepID))
worklist.push_back(*importResolvedDepID);
}
}
}

View File

@@ -1,6 +1,6 @@
// RUN: %empty-directory(%t)
// RUN: %empty-directory(%t/module-cache)
// 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
// 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
// RUN: %validate-json %t/deps.json | %FileCheck %s
import X