[Caching][DependencyScan] Fix main module header chaining

Fix a programming mistake when chaining bridging header for the main
module. Main module never has the binary module, thus it always need to
chain the bridging header content directly without falling back to
embedded binary module. Previously, the scanner was wrongly error out
because it failed to locate the binary module for main module.

rdar://167707148
This commit is contained in:
Steven Wu
2026-01-07 14:04:39 -08:00
parent 4490c656c0
commit 7b4c2f37e5
2 changed files with 24 additions and 8 deletions

View File

@@ -1843,8 +1843,9 @@ llvm::Error ModuleDependencyScanner::performBridgingHeaderChaining(
auto FS = ScanASTContext.SourceMgr.getFileSystem();
auto chainBridgingHeader = [&](StringRef moduleName, StringRef headerPath,
StringRef binaryModulePath) -> llvm::Error {
if (useImportHeader) {
StringRef binaryModulePath,
bool useHeader) -> llvm::Error {
if (useHeader) {
if (auto buffer = FS->getBufferForFile(headerPath)) {
outOS << "#include \"" << headerPath << "\"\n";
return llvm::Error::success();
@@ -1885,9 +1886,9 @@ llvm::Error ModuleDependencyScanner::performBridgingHeaderChaining(
if (binaryMod->headerImport.empty())
continue;
if (auto E =
chainBridgingHeader(moduleID.ModuleName, binaryMod->headerImport,
binaryMod->compiledModulePath))
if (auto E = chainBridgingHeader(
moduleID.ModuleName, binaryMod->headerImport,
binaryMod->compiledModulePath, useImportHeader))
return E;
}
}
@@ -1917,7 +1918,8 @@ llvm::Error ModuleDependencyScanner::performBridgingHeaderChaining(
if (mainModule->textualModuleDetails.bridgingHeaderFile) {
if (auto E = chainBridgingHeader(
rootModuleID.ModuleName,
*mainModule->textualModuleDetails.bridgingHeaderFile, ""))
*mainModule->textualModuleDetails.bridgingHeaderFile, "",
/*useHeader=*/true))
return E;
}