From a13122c612a653026b2ac220e220c50783c3aa82 Mon Sep 17 00:00:00 2001 From: Jan Svoboda Date: Tue, 1 Nov 2022 19:19:06 -0700 Subject: [PATCH] [clang][modules] NFCI: Avoid unnecessary serialization logic for non-affecting files This patch delays some `ASTWriter` logic until after we've checked whether the source location entry we're serializing as an affecting file or not. Depends on D137214. Reviewed By: dexonsmith Differential Revision: https://reviews.llvm.org/D137216 --- clang/lib/Serialization/ASTWriter.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp index c4f3148..a298d43 100644 --- a/clang/lib/Serialization/ASTWriter.cpp +++ b/clang/lib/Serialization/ASTWriter.cpp @@ -2047,7 +2047,6 @@ void ASTWriter::WriteSourceManagerBlock(SourceManager &SourceMgr, // Record the offset of this source-location entry. uint64_t Offset = Stream.GetCurrentBitNo() - SLocEntryOffsetsBase; assert((Offset >> 32) == 0 && "SLocEntry offset too large"); - SLocEntryOffsets.push_back(Offset); // Figure out which record code to use. unsigned Code; @@ -2062,8 +2061,6 @@ void ASTWriter::WriteSourceManagerBlock(SourceManager &SourceMgr, Record.clear(); Record.push_back(Code); - // Starting offset of this entry within this module, so skip the dummy. - Record.push_back(getAdjustedOffset(SLoc->getOffset()) - 2); if (SLoc->isFile()) { const SrcMgr::FileInfo &File = SLoc->getFile(); const SrcMgr::ContentCache *Content = &File.getContentCache(); @@ -2073,6 +2070,9 @@ void ASTWriter::WriteSourceManagerBlock(SourceManager &SourceMgr, // Do not emit files that were not listed as inputs. continue; } + SLocEntryOffsets.push_back(Offset); + // Starting offset of this entry within this module, so skip the dummy. + Record.push_back(getAdjustedOffset(SLoc->getOffset()) - 2); AddSourceLocation(File.getIncludeLoc(), Record); Record.push_back(File.getFileCharacteristic()); // FIXME: stable encoding Record.push_back(File.hasLineDirectives()); @@ -2133,6 +2133,9 @@ void ASTWriter::WriteSourceManagerBlock(SourceManager &SourceMgr, } else { // The source location entry is a macro expansion. const SrcMgr::ExpansionInfo &Expansion = SLoc->getExpansion(); + SLocEntryOffsets.push_back(Offset); + // Starting offset of this entry within this module, so skip the dummy. + Record.push_back(getAdjustedOffset(SLoc->getOffset()) - 2); LocSeq::State Seq; AddSourceLocation(Expansion.getSpellingLoc(), Record, Seq); AddSourceLocation(Expansion.getExpansionLocStart(), Record, Seq); -- 2.7.4