jansvoboda11 created this revision. jansvoboda11 added reviewers: Bigcheese, dexonsmith, vsapsai. Herald added a subscriber: ributzka. Herald added a project: All. jansvoboda11 requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
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 <https://reviews.llvm.org/D137214>. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D137216 Files: clang/lib/Serialization/ASTWriter.cpp Index: clang/lib/Serialization/ASTWriter.cpp =================================================================== --- clang/lib/Serialization/ASTWriter.cpp +++ clang/lib/Serialization/ASTWriter.cpp @@ -2047,7 +2047,6 @@ // 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 @@ 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 @@ // 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 @@ } 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);
Index: clang/lib/Serialization/ASTWriter.cpp =================================================================== --- clang/lib/Serialization/ASTWriter.cpp +++ clang/lib/Serialization/ASTWriter.cpp @@ -2047,7 +2047,6 @@ // 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 @@ 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 @@ // 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 @@ } 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);
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits