Skip to content

Commit 1194b59

Browse files
Merge pull request #80512 from cachemeifyoucan/eng/PR-148538787
[BridgingHeaderChaining] Bind bridging header module when load module
2 parents ee5290a + 02ee2f4 commit 1194b59

File tree

4 files changed

+33
-14
lines changed

4 files changed

+33
-14
lines changed

include/swift/ClangImporter/ClangImporter.h

+10
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,16 @@ class ClangImporter final : public ClangModuleLoader {
428428
bool trackParsedSymbols = false,
429429
bool implicitImport = false);
430430

431+
/// Bind the bridging header content to the module.
432+
///
433+
/// \param adapter The module that depends on the contents of this header.
434+
/// \param diagLoc A location to attach any diagnostics to if import fails.
435+
///
436+
/// \returns true if there was an error importing the header.
437+
///
438+
/// \sa importBridgingHeader
439+
bool bindBridgingHeader(ModuleDecl *adapter, SourceLoc diagLoc);
440+
431441
/// Returns the module that contains imports and declarations from all loaded
432442
/// Objective-C header files.
433443
///

lib/ClangImporter/ClangImporter.cpp

+10-6
Original file line numberDiff line numberDiff line change
@@ -1845,12 +1845,7 @@ bool ClangImporter::importBridgingHeader(StringRef header, ModuleDecl *adapter,
18451845
bool trackParsedSymbols,
18461846
bool implicitImport) {
18471847
if (isPCHFilenameExtension(header)) {
1848-
Impl.ImportedHeaderOwners.push_back(adapter);
1849-
// We already imported this with -include-pch above, so we should have
1850-
// collected a bunch of PCH-encoded module imports that we just need to
1851-
// replay in handleDeferredImports.
1852-
Impl.handleDeferredImports(diagLoc);
1853-
return false;
1848+
return bindBridgingHeader(adapter, diagLoc);
18541849
}
18551850

18561851
clang::FileManager &fileManager = Impl.Instance->getFileManager();
@@ -1877,6 +1872,15 @@ bool ClangImporter::importBridgingHeader(StringRef header, ModuleDecl *adapter,
18771872
std::move(sourceBuffer), implicitImport);
18781873
}
18791874

1875+
bool ClangImporter::bindBridgingHeader(ModuleDecl *adapter, SourceLoc diagLoc) {
1876+
Impl.ImportedHeaderOwners.push_back(adapter);
1877+
// We already imported this with -include-pch above, so we should have
1878+
// collected a bunch of PCH-encoded module imports that we just need to
1879+
// replay in handleDeferredImports.
1880+
Impl.handleDeferredImports(diagLoc);
1881+
return false;
1882+
}
1883+
18801884
static llvm::Expected<llvm::cas::ObjectRef>
18811885
setupIncludeTreeInput(clang::CompilerInvocation &invocation,
18821886
StringRef headerPath, StringRef pchIncludeTree) {

lib/Serialization/ModuleFile.cpp

+11-8
Original file line numberDiff line numberDiff line change
@@ -165,15 +165,18 @@ ModuleFile::loadDependenciesForFileContext(const FileUnit *file,
165165
if (dependency.isHeader()) {
166166
// The path may be empty if the file being loaded is a partial AST,
167167
// and the current compiler invocation is a merge-modules step.
168-
if (!dependency.Core.RawPath.empty() &&
169-
!M->getASTContext().SearchPathOpts.BridgingHeaderChaining) {
168+
if (!dependency.Core.RawPath.empty()) {
169+
// If using bridging header chaining, just bind the entire bridging
170+
// header pch to the module. Otherwise, import the header.
170171
bool hadError =
171-
clangImporter->importHeader(dependency.Core.RawPath,
172-
file->getParentModule(),
173-
Core->importedHeaderInfo.fileSize,
174-
Core->importedHeaderInfo.fileModTime,
175-
Core->importedHeaderInfo.contents,
176-
diagLoc);
172+
M->getASTContext().SearchPathOpts.BridgingHeaderChaining
173+
? clangImporter->bindBridgingHeader(file->getParentModule(),
174+
diagLoc)
175+
: clangImporter->importHeader(
176+
dependency.Core.RawPath, file->getParentModule(),
177+
Core->importedHeaderInfo.fileSize,
178+
Core->importedHeaderInfo.fileModTime,
179+
Core->importedHeaderInfo.contents, diagLoc);
177180
if (hadError)
178181
return error(Status::FailedToLoadBridgingHeader);
179182
}

test/ScanDependencies/bridging-header-autochaining.swift

+2
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,8 @@ extension A {
188188
public func testA() {}
189189
}
190190

191+
public class AB : B {}
192+
191193
//--- user2.swift
192194
import Test
193195

0 commit comments

Comments
 (0)