[clang] d4a9121 - Reland "[clang][modules] Use relative offsets for input files"
Jan Svoboda via cfe-commits
cfe-commits at lists.llvm.org
Mon Aug 28 09:54:45 PDT 2023
Author: Jan Svoboda
Date: 2023-08-28T09:54:39-07:00
New Revision: d4a912153488308ea9ab96a0267150460cdfc697
URL: https://github.com/llvm/llvm-project/commit/d4a912153488308ea9ab96a0267150460cdfc697
DIFF: https://github.com/llvm/llvm-project/commit/d4a912153488308ea9ab96a0267150460cdfc697.diff
LOG: Reland "[clang][modules] Use relative offsets for input files"
This reverts commit 870f1583eed0f22ddfb1a1979a90198c3dc09927, effectively relanding commit b9d78bdc730b2fcfe029a7579c24020536c3fa25.
Added:
Modified:
clang/include/clang/Serialization/ModuleFile.h
clang/lib/Serialization/ASTReader.cpp
clang/lib/Serialization/ASTWriter.cpp
Removed:
################################################################################
diff --git a/clang/include/clang/Serialization/ModuleFile.h b/clang/include/clang/Serialization/ModuleFile.h
index 8c4067853d6646..0af5cae6aebc37 100644
--- a/clang/include/clang/Serialization/ModuleFile.h
+++ b/clang/include/clang/Serialization/ModuleFile.h
@@ -245,7 +245,10 @@ class ModuleFile {
/// The cursor to the start of the input-files block.
llvm::BitstreamCursor InputFilesCursor;
- /// Offsets for all of the input file entries in the AST file.
+ /// Absolute offset of the start of the input-files block.
+ uint64_t InputFilesOffsetBase = 0;
+
+ /// Relative offsets for all of the input file entries in the AST file.
const llvm::support::unaligned_uint64_t *InputFileOffsets = nullptr;
/// The input files that have been loaded from this AST file.
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp
index 9491733d47df3d..82dac5fbfc888d 100644
--- a/clang/lib/Serialization/ASTReader.cpp
+++ b/clang/lib/Serialization/ASTReader.cpp
@@ -2326,7 +2326,8 @@ InputFileInfo ASTReader::getInputFileInfo(ModuleFile &F, unsigned ID) {
// Go find this input file.
BitstreamCursor &Cursor = F.InputFilesCursor;
SavedStreamPosition SavedPosition(Cursor);
- if (llvm::Error Err = Cursor.JumpToBit(F.InputFileOffsets[ID - 1])) {
+ if (llvm::Error Err = Cursor.JumpToBit(F.InputFilesOffsetBase +
+ F.InputFileOffsets[ID - 1])) {
// FIXME this drops errors on the floor.
consumeError(std::move(Err));
}
@@ -2410,7 +2411,8 @@ InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {
// Go find this input file.
BitstreamCursor &Cursor = F.InputFilesCursor;
SavedStreamPosition SavedPosition(Cursor);
- if (llvm::Error Err = Cursor.JumpToBit(F.InputFileOffsets[ID - 1])) {
+ if (llvm::Error Err = Cursor.JumpToBit(F.InputFilesOffsetBase +
+ F.InputFileOffsets[ID - 1])) {
// FIXME this drops errors on the floor.
consumeError(std::move(Err));
}
@@ -2788,6 +2790,7 @@ ASTReader::ReadControlBlock(ModuleFile &F,
Error("malformed block record in AST file");
return Failure;
}
+ F.InputFilesOffsetBase = F.InputFilesCursor.GetCurrentBitNo();
continue;
case OPTIONS_BLOCK_ID:
@@ -5328,6 +5331,7 @@ bool ASTReader::readASTFileControlBlock(
bool NeedsSystemInputFiles = Listener.needsSystemInputFileVisitation();
bool NeedsImports = Listener.needsImportVisitation();
BitstreamCursor InputFilesCursor;
+ uint64_t InputFilesOffsetBase = 0;
RecordData Record;
std::string ModuleDir;
@@ -5363,6 +5367,7 @@ bool ASTReader::readASTFileControlBlock(
if (NeedsInputFiles &&
ReadBlockAbbrevs(InputFilesCursor, INPUT_FILES_BLOCK_ID))
return true;
+ InputFilesOffsetBase = InputFilesCursor.GetCurrentBitNo();
break;
default:
@@ -5435,7 +5440,8 @@ bool ASTReader::readASTFileControlBlock(
BitstreamCursor &Cursor = InputFilesCursor;
SavedStreamPosition SavedPosition(Cursor);
- if (llvm::Error Err = Cursor.JumpToBit(InputFileOffs[I])) {
+ if (llvm::Error Err =
+ Cursor.JumpToBit(InputFilesOffsetBase + InputFileOffs[I])) {
// FIXME this drops errors on the floor.
consumeError(std::move(Err));
}
diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp
index 22420aab9ca08c..2a12779b0d7d12 100644
--- a/clang/lib/Serialization/ASTWriter.cpp
+++ b/clang/lib/Serialization/ASTWriter.cpp
@@ -1570,6 +1570,8 @@ void ASTWriter::WriteInputFiles(SourceManager &SourceMgr,
IFHAbbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 32));
unsigned IFHAbbrevCode = Stream.EmitAbbrev(std::move(IFHAbbrev));
+ uint64_t InputFilesOffsetBase = Stream.GetCurrentBitNo();
+
// Get all ContentCache objects for files.
std::vector<InputFileEntry> UserFiles;
std::vector<InputFileEntry> SystemFiles;
@@ -1633,7 +1635,7 @@ void ASTWriter::WriteInputFiles(SourceManager &SourceMgr,
continue; // already recorded this file.
// Record this entry's offset.
- InputFileOffsets.push_back(Stream.GetCurrentBitNo());
+ InputFileOffsets.push_back(Stream.GetCurrentBitNo() - InputFilesOffsetBase);
InputFileID = InputFileOffsets.size();
More information about the cfe-commits
mailing list