Author: Jan Svoboda Date: 2022-11-01T18:57:13-07:00 New Revision: fdbc55a51a792c65d4a1fd1f5d8e6ab19e0187d2
URL: https://github.com/llvm/llvm-project/commit/fdbc55a51a792c65d4a1fd1f5d8e6ab19e0187d2 DIFF: https://github.com/llvm/llvm-project/commit/fdbc55a51a792c65d4a1fd1f5d8e6ab19e0187d2.diff LOG: [clang][modules] NFCI: Unify FileID writing/reading This patch adds new functions for writing/reading `FileID`s and uses them to replace some ad-hoc code. Reviewed By: dexonsmith Differential Revision: https://reviews.llvm.org/D137211 Added: Modified: clang/include/clang/Serialization/ASTReader.h clang/include/clang/Serialization/ASTWriter.h clang/lib/Serialization/ASTReader.cpp clang/lib/Serialization/ASTWriter.cpp Removed: ################################################################################ diff --git a/clang/include/clang/Serialization/ASTReader.h b/clang/include/clang/Serialization/ASTReader.h index 820028d5c3ae7..da8b9a9207a03 100644 --- a/clang/include/clang/Serialization/ASTReader.h +++ b/clang/include/clang/Serialization/ASTReader.h @@ -2196,6 +2196,18 @@ class ASTReader return ReadSourceLocation(ModuleFile, Record[Idx++], Seq); } + /// Read a FileID. + FileID ReadFileID(ModuleFile &F, const RecordDataImpl &Record, + unsigned &Idx) const { + return TranslateFileID(F, FileID::get(Record[Idx++])); + } + + /// Translate a FileID from another module file's FileID space into ours. + FileID TranslateFileID(ModuleFile &F, FileID FID) const { + assert(FID.ID >= 0 && "Reading non-local FileID."); + return FileID::get(F.SLocEntryBaseID + FID.ID - 1); + } + /// Read a source range. SourceRange ReadSourceRange(ModuleFile &F, const RecordData &Record, unsigned &Idx, LocSeq *Seq = nullptr); diff --git a/clang/include/clang/Serialization/ASTWriter.h b/clang/include/clang/Serialization/ASTWriter.h index 81e5fac4a7294..b0e8306b3a8ee 100644 --- a/clang/include/clang/Serialization/ASTWriter.h +++ b/clang/include/clang/Serialization/ASTWriter.h @@ -582,6 +582,9 @@ class ASTWriter : public ASTDeserializationListener, void AddAlignPackInfo(const Sema::AlignPackInfo &Info, RecordDataImpl &Record); + /// Emit a FileID. + void AddFileID(FileID FID, RecordDataImpl &Record); + /// Emit a source location. void AddSourceLocation(SourceLocation Loc, RecordDataImpl &Record, LocSeq *Seq = nullptr); diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index 5db55d5cb7af5..cd63e9428bfdb 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -1338,10 +1338,7 @@ void ASTReader::ParseLineTable(ModuleFile &F, const RecordData &Record) { // Parse the line entries std::vector<LineEntry> Entries; while (Idx < Record.size()) { - int FID = Record[Idx++]; - assert(FID >= 0 && "Serialized line entries for non-local file."); - // Remap FileID from 1-based old view. - FID += F.SLocEntryBaseID - 1; + FileID FID = ReadFileID(F, Record, Idx); // Extract the line entries unsigned NumEntries = Record[Idx++]; @@ -1358,7 +1355,7 @@ void ASTReader::ParseLineTable(ModuleFile &F, const RecordData &Record) { Entries.push_back(LineEntry::get(FileOffset, LineNo, FilenameID, FileKind, IncludeOffset)); } - LineTable.AddEntry(FileID::get(FID), Entries); + LineTable.AddEntry(FID, Entries); } } @@ -4294,10 +4291,8 @@ ASTReader::ASTReadResult ASTReader::ReadAST(StringRef FileName, // Map the original source file ID into the ID space of the current // compilation. - if (F.OriginalSourceFileID.isValid()) { - F.OriginalSourceFileID = FileID::get( - F.SLocEntryBaseID + F.OriginalSourceFileID.getOpaqueValue() - 1); - } + if (F.OriginalSourceFileID.isValid()) + F.OriginalSourceFileID = TranslateFileID(F, F.OriginalSourceFileID); // Preload all the pending interesting identifiers by marking them out of // date. diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp index c2a586426a935..b2aa4a3c43df7 100644 --- a/clang/lib/Serialization/ASTWriter.cpp +++ b/clang/lib/Serialization/ASTWriter.cpp @@ -1469,12 +1469,12 @@ void ASTWriter::WriteControlBlock(Preprocessor &PP, ASTContext &Context, Record.clear(); Record.push_back(ORIGINAL_FILE); - Record.push_back(SM.getMainFileID().getOpaqueValue()); + AddFileID(SM.getMainFileID(), Record); EmitRecordWithPath(FileAbbrevCode, Record, MainFile->getName()); } Record.clear(); - Record.push_back(SM.getMainFileID().getOpaqueValue()); + AddFileID(SM.getMainFileID(), Record); Stream.EmitRecord(ORIGINAL_FILE_ID, Record); std::set<const FileEntry *> AffectingClangModuleMaps; @@ -2206,8 +2206,7 @@ void ASTWriter::WriteSourceManagerBlock(SourceManager &SourceMgr, if (L.first.ID < 0) continue; - // Emit the file ID - Record.push_back(L.first.ID); + AddFileID(L.first, Record); // Emit the line entries Record.push_back(L.second.size()); @@ -5228,6 +5227,10 @@ void ASTWriter::AddAlignPackInfo(const Sema::AlignPackInfo &Info, Record.push_back(Raw); } +void ASTWriter::AddFileID(FileID FID, RecordDataImpl &Record) { + Record.push_back(FID.getOpaqueValue()); +} + void ASTWriter::AddSourceLocation(SourceLocation Loc, RecordDataImpl &Record, SourceLocationSequence *Seq) { Record.push_back(SourceLocationEncoding::encode(Loc, Seq)); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits