/// the declaration's ID.
std::vector<serialization::DeclOffset> DeclOffsets;
- /// \brief Vector of pairs of raw location/DeclID.
+ /// \brief Sorted (by file offset) vector of pairs of file offset/DeclID.
typedef SmallVector<std::pair<unsigned, serialization::DeclID>, 64>
LocDeclIDsTy;
struct DeclIDInFileInfo {
SourceManager &SM = Context->getSourceManager();
SourceLocation FileLoc = SM.getFileLoc(Loc);
assert(SM.isLocalSourceLocation(FileLoc));
- FileID FID = SM.getFileID(FileLoc);
+ FileID FID;
+ unsigned Offset;
+ llvm::tie(FID, Offset) = SM.getDecomposedLoc(FileLoc);
if (FID.isInvalid())
return;
const SrcMgr::SLocEntry *Entry = &SM.getSLocEntry(FID);
if (!Info)
Info = new DeclIDInFileInfo();
- unsigned RawLoc = FileLoc.getRawEncoding();
- std::pair<unsigned, serialization::DeclID> LocDecl(RawLoc, ID);
+ std::pair<unsigned, serialization::DeclID> LocDecl(Offset, ID);
LocDeclIDsTy &Decls = Info->DeclIDs;
- if (Decls.empty() || Decls.back().first <= RawLoc) {
+ if (Decls.empty() || Decls.back().first <= Offset) {
Decls.push_back(LocDecl);
return;
}