From fee64473c49fa110bc9b3de611f112faa80c19de Mon Sep 17 00:00:00 2001 From: Vedant Kumar Date: Mon, 16 Nov 2015 00:11:58 +0000 Subject: [PATCH] [Basic] Use a bitfield in SLocEntry for clarity. NFC. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@253177 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Basic/SourceManager.h | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/include/clang/Basic/SourceManager.h b/include/clang/Basic/SourceManager.h index 8efcd79cbc..dfce3508e2 100644 --- a/include/clang/Basic/SourceManager.h +++ b/include/clang/Basic/SourceManager.h @@ -388,15 +388,16 @@ namespace SrcMgr { /// SourceManager keeps an array of these objects, and they are uniquely /// identified by the FileID datatype. class SLocEntry { - unsigned Offset; // low bit is set for expansion info. + unsigned Offset : 31; + unsigned IsExpansion : 1; union { FileInfo File; ExpansionInfo Expansion; }; public: - unsigned getOffset() const { return Offset >> 1; } + unsigned getOffset() const { return Offset; } - bool isExpansion() const { return Offset & 1; } + bool isExpansion() const { return IsExpansion; } bool isFile() const { return !isExpansion(); } const FileInfo &getFile() const { @@ -410,15 +411,19 @@ namespace SrcMgr { } static SLocEntry get(unsigned Offset, const FileInfo &FI) { + assert(!(Offset & (1 << 31)) && "Offset is too large"); SLocEntry E; - E.Offset = Offset << 1; + E.Offset = Offset; + E.IsExpansion = false; E.File = FI; return E; } static SLocEntry get(unsigned Offset, const ExpansionInfo &Expansion) { + assert(!(Offset & (1 << 31)) && "Offset is too large"); SLocEntry E; - E.Offset = (Offset << 1) | 1; + E.Offset = Offset; + E.IsExpansion = true; E.Expansion = Expansion; return E; } -- 2.40.0