aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/clang/Basic/SourceLocation.h2
-rw-r--r--include/clang/Serialization/ASTReader.h12
2 files changed, 6 insertions, 8 deletions
diff --git a/include/clang/Basic/SourceLocation.h b/include/clang/Basic/SourceLocation.h
index f3b5f26649..51734ef748 100644
--- a/include/clang/Basic/SourceLocation.h
+++ b/include/clang/Basic/SourceLocation.h
@@ -84,6 +84,8 @@ private:
class SourceLocation {
unsigned ID;
friend class SourceManager;
+ friend class ASTReader;
+ friend class ASTWriter;
enum {
MacroIDBit = 1U << 31
};
diff --git a/include/clang/Serialization/ASTReader.h b/include/clang/Serialization/ASTReader.h
index ce980f775b..1a4603d53a 100644
--- a/include/clang/Serialization/ASTReader.h
+++ b/include/clang/Serialization/ASTReader.h
@@ -1143,15 +1143,11 @@ public:
/// \brief Read a source location from raw form.
SourceLocation ReadSourceLocation(Module &Module, unsigned Raw) const {
- unsigned Flag = Raw & (1U << 31);
- unsigned Offset = Raw & ~(1U << 31);
- assert(Module.SLocRemap.find(Offset) != Module.SLocRemap.end() &&
+ SourceLocation Loc = SourceLocation::getFromRawEncoding(Raw);
+ assert(Module.SLocRemap.find(Loc.getOffset()) != Module.SLocRemap.end() &&
"Cannot find offset to remap.");
- int Remap = Module.SLocRemap.find(Offset)->second;
- Offset += Remap;
- assert((Offset & (1U << 31)) == 0 &&
- "Bad offset in reading source location");
- return SourceLocation::getFromRawEncoding(Offset | Flag);
+ int Remap = Module.SLocRemap.find(Loc.getOffset())->second;
+ return Loc.getFileLocWithOffset(Remap);
}
/// \brief Read a source location.