diff options
-rw-r--r-- | include/clang/Basic/SourceLocation.h | 2 | ||||
-rw-r--r-- | include/clang/Serialization/ASTReader.h | 12 |
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. |