diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp --- a/clang/lib/Serialization/ASTWriter.cpp +++ b/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);