diff --git a/clang/include/clang/Basic/SourceManager.h b/clang/include/clang/Basic/SourceManager.h --- a/clang/include/clang/Basic/SourceManager.h +++ b/clang/include/clang/Basic/SourceManager.h @@ -439,8 +439,8 @@ /// SourceManager keeps an array of these objects, and they are uniquely /// identified by the FileID datatype. class SLocEntry { - unsigned Offset : 31; - unsigned IsExpansion : 1; + unsigned Offset; + bool IsExpansion; union { FileInfo File; ExpansionInfo Expansion; @@ -465,7 +465,6 @@ } static SLocEntry get(unsigned Offset, const FileInfo &FI) { - assert(!(Offset & (1u << 31)) && "Offset is too large"); SLocEntry E; E.Offset = Offset; E.IsExpansion = false; @@ -474,7 +473,6 @@ } static SLocEntry get(unsigned Offset, const ExpansionInfo &Expansion) { - assert(!(Offset & (1u << 31)) && "Offset is too large"); SLocEntry E; E.Offset = Offset; E.IsExpansion = true; diff --git a/clang/lib/Basic/SourceManager.cpp b/clang/lib/Basic/SourceManager.cpp --- a/clang/lib/Basic/SourceManager.cpp +++ b/clang/lib/Basic/SourceManager.cpp @@ -885,14 +885,14 @@ bool Invalid = false; unsigned MiddleIndex = (GreaterIndex-LessIndex)/2+LessIndex; unsigned MidOffset = getLocalSLocEntry(MiddleIndex, &Invalid).getOffset(); - if (Invalid) + if (LLVM_UNLIKELY(Invalid)) return FileID::get(0); ++NumProbes; // If the offset of the midpoint is too large, chop the high side of the // range to the midpoint. - if (MidOffset > SLocOffset) { + if (LLVM_LIKELY(MidOffset > SLocOffset)) { GreaterIndex = MiddleIndex; continue; } @@ -900,7 +900,7 @@ // If the middle index contains the value, succeed and return. // FIXME: This could be made faster by using a function that's aware of // being in the local area. - if (isOffsetInFileID(FileID::get(MiddleIndex), SLocOffset)) { + if (LLVM_UNLIKELY(isOffsetInFileID(FileID::get(MiddleIndex), SLocOffset))) { FileID Res = FileID::get(MiddleIndex); // If this isn't a macro expansion, remember it. We have good locality