aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/clang/Serialization/ASTWriter.h2
-rw-r--r--lib/Serialization/ASTWriter.cpp9
2 files changed, 6 insertions, 5 deletions
diff --git a/include/clang/Serialization/ASTWriter.h b/include/clang/Serialization/ASTWriter.h
index 2c747d8ea8..bad5c379bc 100644
--- a/include/clang/Serialization/ASTWriter.h
+++ b/include/clang/Serialization/ASTWriter.h
@@ -146,7 +146,7 @@ private:
/// 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 {
diff --git a/lib/Serialization/ASTWriter.cpp b/lib/Serialization/ASTWriter.cpp
index 0c9f0a1247..1b44baa9ce 100644
--- a/lib/Serialization/ASTWriter.cpp
+++ b/lib/Serialization/ASTWriter.cpp
@@ -3501,7 +3501,9 @@ void ASTWriter::associateDeclWithFile(const Decl *D, DeclID ID) {
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);
@@ -3511,11 +3513,10 @@ void ASTWriter::associateDeclWithFile(const Decl *D, DeclID ID) {
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;
}