mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[Dependency Scanning] Remove hard failure mode (crash) during cross-import resolution
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user