[clang] [clang] NFC: Add alias for std::pair<FileID, unsigned> used in SourceLocation (PR #145711)
Haojian Wu via cfe-commits
cfe-commits at lists.llvm.org
Thu Jun 26 05:03:42 PDT 2025
https://github.com/hokein updated https://github.com/llvm/llvm-project/pull/145711
>From 2bd778b5b5c5ffc0a36cf0e0e71034fe16c48ad0 Mon Sep 17 00:00:00 2001
From: Haojian Wu <hokein.wu at gmail.com>
Date: Wed, 25 Jun 2025 16:12:40 +0200
Subject: [PATCH 1/2] [clang] Create alias for the common `std::pair<FileID,
unsigned>` type used in SourceLocation.
---
clang/include/clang/Basic/SourceLocation.h | 6 +-
clang/include/clang/Basic/SourceManager.h | 28 ++++-----
clang/lib/AST/ASTContext.cpp | 2 +-
clang/lib/AST/ASTImporter.cpp | 2 +-
clang/lib/AST/CommentLexer.cpp | 2 +-
clang/lib/AST/Expr.cpp | 3 +-
clang/lib/AST/RawCommentList.cpp | 7 +--
clang/lib/Analysis/PathDiagnostic.cpp | 4 +-
clang/lib/Basic/Diagnostic.cpp | 9 ++-
clang/lib/Basic/Sarif.cpp | 2 +-
clang/lib/Basic/SourceLocation.cpp | 4 +-
clang/lib/Basic/SourceManager.cpp | 59 +++++++++----------
clang/lib/Edit/Commit.cpp | 8 +--
clang/lib/Frontend/SARIFDiagnostic.cpp | 4 +-
clang/lib/Frontend/TextDiagnostic.cpp | 6 +-
clang/lib/Index/CommentToXML.cpp | 2 +-
clang/lib/Index/USRGeneration.cpp | 2 +-
clang/lib/Lex/Lexer.cpp | 21 ++++---
clang/lib/Lex/MacroInfo.cpp | 6 +-
clang/lib/Lex/Preprocessor.cpp | 2 +-
clang/lib/Parse/ParseStmt.cpp | 2 +-
clang/lib/Parse/ParseStmtAsm.cpp | 9 +--
clang/lib/Rewrite/Rewriter.cpp | 2 +-
clang/lib/Sema/CodeCompleteConsumer.cpp | 4 +-
clang/lib/Sema/SemaDecl.cpp | 2 +-
clang/lib/Sema/SemaObjCProperty.cpp | 2 +-
clang/lib/Serialization/ASTReader.cpp | 3 +-
.../Checkers/LocalizationChecker.cpp | 3 +-
.../Core/BugReporterVisitors.cpp | 2 +-
.../StaticAnalyzer/Core/HTMLDiagnostics.cpp | 4 +-
clang/lib/Tooling/Core/Replacement.cpp | 7 +--
.../lib/Tooling/Refactoring/AtomicChange.cpp | 2 +-
clang/lib/Tooling/Transformer/SourceCode.cpp | 4 +-
clang/tools/libclang/CIndex.cpp | 20 +++----
clang/tools/libclang/CIndexHigh.cpp | 6 +-
clang/tools/libclang/CXIndexDataConsumer.cpp | 6 +-
clang/tools/libclang/CXSourceLocation.cpp | 4 +-
clang/unittests/Lex/LexerTest.cpp | 7 +--
38 files changed, 124 insertions(+), 144 deletions(-)
diff --git a/clang/include/clang/Basic/SourceLocation.h b/clang/include/clang/Basic/SourceLocation.h
index 7a0f5ba8d1270..14543cc41a38e 100644
--- a/clang/include/clang/Basic/SourceLocation.h
+++ b/clang/include/clang/Basic/SourceLocation.h
@@ -70,6 +70,8 @@ class FileID {
int getOpaqueValue() const { return ID; }
};
+using FileIDAndOffset = std::pair<FileID, unsigned>;
+
/// Encodes a location in the source. The SourceManager can decode this
/// to get at the full include stack, line and column information.
///
@@ -403,7 +405,7 @@ class FullSourceLoc : public SourceLocation {
/// pair, after walking through all expansion records.
///
/// \see SourceManager::getDecomposedExpansionLoc
- std::pair<FileID, unsigned> getDecomposedExpansionLoc() const;
+ FileIDAndOffset getDecomposedExpansionLoc() const;
unsigned getSpellingLineNumber(bool *Invalid = nullptr) const;
unsigned getSpellingColumnNumber(bool *Invalid = nullptr) const;
@@ -424,7 +426,7 @@ class FullSourceLoc : public SourceLocation {
///
/// The first element is the FileID, the second is the offset from the
/// start of the buffer of the location.
- std::pair<FileID, unsigned> getDecomposedLoc() const;
+ FileIDAndOffset getDecomposedLoc() const;
bool isInSystemHeader() const;
diff --git a/clang/include/clang/Basic/SourceManager.h b/clang/include/clang/Basic/SourceManager.h
index cd3dac9133223..eefd4885534c8 100644
--- a/clang/include/clang/Basic/SourceManager.h
+++ b/clang/include/clang/Basic/SourceManager.h
@@ -795,7 +795,7 @@ class SourceManager : public RefCountedBase<SourceManager> {
///
/// Used to cache results from and speed-up \c getDecomposedIncludedLoc
/// function.
- mutable llvm::DenseMap<FileID, std::pair<FileID, unsigned>> IncludedLocMap;
+ mutable llvm::DenseMap<FileID, FileIDAndOffset> IncludedLocMap;
/// The key value into the IsBeforeInTUCache table.
using IsBeforeInTUCacheKey = std::pair<FileID, FileID>;
@@ -1269,7 +1269,7 @@ class SourceManager : public RefCountedBase<SourceManager> {
///
/// The first element is the FileID, the second is the offset from the
/// start of the buffer of the location.
- std::pair<FileID, unsigned> getDecomposedLoc(SourceLocation Loc) const {
+ FileIDAndOffset getDecomposedLoc(SourceLocation Loc) const {
FileID FID = getFileID(Loc);
auto *Entry = getSLocEntryOrNull(FID);
if (!Entry)
@@ -1281,8 +1281,7 @@ class SourceManager : public RefCountedBase<SourceManager> {
///
/// If the location is an expansion record, walk through it until we find
/// the final location expanded.
- std::pair<FileID, unsigned>
- getDecomposedExpansionLoc(SourceLocation Loc) const {
+ FileIDAndOffset getDecomposedExpansionLoc(SourceLocation Loc) const {
FileID FID = getFileID(Loc);
auto *E = getSLocEntryOrNull(FID);
if (!E)
@@ -1299,8 +1298,7 @@ class SourceManager : public RefCountedBase<SourceManager> {
///
/// If the location is an expansion record, walk through it until we find
/// its spelling record.
- std::pair<FileID, unsigned>
- getDecomposedSpellingLoc(SourceLocation Loc) const {
+ FileIDAndOffset getDecomposedSpellingLoc(SourceLocation Loc) const {
FileID FID = getFileID(Loc);
auto *E = getSLocEntryOrNull(FID);
if (!E)
@@ -1314,7 +1312,7 @@ class SourceManager : public RefCountedBase<SourceManager> {
/// Returns the "included/expanded in" decomposed location of the given
/// FileID.
- std::pair<FileID, unsigned> getDecomposedIncludedLoc(FileID FID) const;
+ FileIDAndOffset getDecomposedIncludedLoc(FileID FID) const;
/// Returns the offset from the start of the file that the
/// specified SourceLocation represents.
@@ -1682,8 +1680,8 @@ class SourceManager : public RefCountedBase<SourceManager> {
/// are in the same TU. The second bool is true if the first is true
/// and \p LOffs is before \p ROffs.
std::pair<bool, bool>
- isInTheSameTranslationUnit(std::pair<FileID, unsigned> &LOffs,
- std::pair<FileID, unsigned> &ROffs) const;
+ isInTheSameTranslationUnit(FileIDAndOffset &LOffs,
+ FileIDAndOffset &ROffs) const;
/// \param Loc a source location in a loaded AST (of a PCH/Module file).
/// \returns a FileID uniquely identifies the AST of a loaded
@@ -1691,9 +1689,8 @@ class SourceManager : public RefCountedBase<SourceManager> {
FileID getUniqueLoadedASTFileID(SourceLocation Loc) const;
/// Determines whether the two decomposed source location is in the same TU.
- bool isInTheSameTranslationUnitImpl(
- const std::pair<FileID, unsigned> &LOffs,
- const std::pair<FileID, unsigned> &ROffs) const;
+ bool isInTheSameTranslationUnitImpl(const FileIDAndOffset &LOffs,
+ const FileIDAndOffset &ROffs) const;
/// Determines the order of 2 source locations in the "source location
/// address space".
@@ -1979,11 +1976,10 @@ class SourceManager : public RefCountedBase<SourceManager> {
SourceLocation getSpellingLocSlowCase(SourceLocation Loc) const;
SourceLocation getFileLocSlowCase(SourceLocation Loc) const;
- std::pair<FileID, unsigned>
+ FileIDAndOffset
getDecomposedExpansionLocSlowCase(const SrcMgr::SLocEntry *E) const;
- std::pair<FileID, unsigned>
- getDecomposedSpellingLocSlowCase(const SrcMgr::SLocEntry *E,
- unsigned Offset) const;
+ FileIDAndOffset getDecomposedSpellingLocSlowCase(const SrcMgr::SLocEntry *E,
+ unsigned Offset) const;
void computeMacroArgsCache(MacroArgsMap &MacroArgsCache, FileID FID) const;
void associateFileChunkWithMacroArgExp(MacroArgsMap &MacroArgsCache,
FileID FID,
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp
index e7abb18330e17..b13bdd5642977 100644
--- a/clang/lib/AST/ASTContext.cpp
+++ b/clang/lib/AST/ASTContext.cpp
@@ -248,7 +248,7 @@ RawComment *ASTContext::getRawCommentForDeclNoCacheImpl(
// Decompose the location for the declaration and find the beginning of the
// file buffer.
- const std::pair<FileID, unsigned> DeclLocDecomp =
+ const FileIDAndOffset DeclLocDecomp =
SourceMgr.getDecomposedLoc(RepresentativeLocForDecl);
// Slow path.
diff --git a/clang/lib/AST/ASTImporter.cpp b/clang/lib/AST/ASTImporter.cpp
index 2b7d67f389a64..c4d20554f09ef 100644
--- a/clang/lib/AST/ASTImporter.cpp
+++ b/clang/lib/AST/ASTImporter.cpp
@@ -9989,7 +9989,7 @@ Expected<SourceLocation> ASTImporter::Import(SourceLocation FromLoc) {
SourceManager &FromSM = FromContext.getSourceManager();
bool IsBuiltin = FromSM.isWrittenInBuiltinFile(FromLoc);
- std::pair<FileID, unsigned> Decomposed = FromSM.getDecomposedLoc(FromLoc);
+ FileIDAndOffset Decomposed = FromSM.getDecomposedLoc(FromLoc);
Expected<FileID> ToFileIDOrErr = Import(Decomposed.first, IsBuiltin);
if (!ToFileIDOrErr)
return ToFileIDOrErr.takeError();
diff --git a/clang/lib/AST/CommentLexer.cpp b/clang/lib/AST/CommentLexer.cpp
index 804be89a8d4dd..e19c2327aebdc 100644
--- a/clang/lib/AST/CommentLexer.cpp
+++ b/clang/lib/AST/CommentLexer.cpp
@@ -904,7 +904,7 @@ void Lexer::lex(Token &T) {
StringRef Lexer::getSpelling(const Token &Tok,
const SourceManager &SourceMgr) const {
SourceLocation Loc = Tok.getLocation();
- std::pair<FileID, unsigned> LocInfo = SourceMgr.getDecomposedLoc(Loc);
+ FileIDAndOffset LocInfo = SourceMgr.getDecomposedLoc(Loc);
bool InvalidTemp = false;
StringRef File = SourceMgr.getBufferData(LocInfo.first, &InvalidTemp);
diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp
index 51d83c480c2f1..149b274f36b63 100644
--- a/clang/lib/AST/Expr.cpp
+++ b/clang/lib/AST/Expr.cpp
@@ -1356,8 +1356,7 @@ StringLiteral::getLocationOfByte(unsigned ByteNo, const SourceManager &SM,
SourceLocation StrTokSpellingLoc = SM.getSpellingLoc(StrTokLoc);
// Re-lex the token to get its length and original spelling.
- std::pair<FileID, unsigned> LocInfo =
- SM.getDecomposedLoc(StrTokSpellingLoc);
+ FileIDAndOffset LocInfo = SM.getDecomposedLoc(StrTokSpellingLoc);
bool Invalid = false;
StringRef Buffer = SM.getBufferData(LocInfo.first, &Invalid);
if (Invalid) {
diff --git a/clang/lib/AST/RawCommentList.cpp b/clang/lib/AST/RawCommentList.cpp
index 9658c6ab3d39d..3f9edc75311d4 100644
--- a/clang/lib/AST/RawCommentList.cpp
+++ b/clang/lib/AST/RawCommentList.cpp
@@ -224,8 +224,8 @@ comments::FullComment *RawComment::parse(const ASTContext &Context,
static bool onlyWhitespaceBetween(SourceManager &SM,
SourceLocation Loc1, SourceLocation Loc2,
unsigned MaxNewlinesAllowed) {
- std::pair<FileID, unsigned> Loc1Info = SM.getDecomposedLoc(Loc1);
- std::pair<FileID, unsigned> Loc2Info = SM.getDecomposedLoc(Loc2);
+ FileIDAndOffset Loc1Info = SM.getDecomposedLoc(Loc1);
+ FileIDAndOffset Loc2Info = SM.getDecomposedLoc(Loc2);
// Question does not make sense if locations are in different files.
if (Loc1Info.first != Loc2Info.first)
@@ -279,8 +279,7 @@ void RawCommentList::addComment(const RawComment &RC,
if (RC.isOrdinary() && !CommentOpts.ParseAllComments)
return;
- std::pair<FileID, unsigned> Loc =
- SourceMgr.getDecomposedLoc(RC.getBeginLoc());
+ FileIDAndOffset Loc = SourceMgr.getDecomposedLoc(RC.getBeginLoc());
const FileID CommentFile = Loc.first;
const unsigned CommentOffset = Loc.second;
diff --git a/clang/lib/Analysis/PathDiagnostic.cpp b/clang/lib/Analysis/PathDiagnostic.cpp
index 962f9e9bc79cf..b1fbc3c9eff94 100644
--- a/clang/lib/Analysis/PathDiagnostic.cpp
+++ b/clang/lib/Analysis/PathDiagnostic.cpp
@@ -323,8 +323,8 @@ static bool compareCrossTUSourceLocs(FullSourceLoc XL, FullSourceLoc YL) {
return true;
if (XL.isValid() && YL.isInvalid())
return false;
- std::pair<FileID, unsigned> XOffs = XL.getDecomposedLoc();
- std::pair<FileID, unsigned> YOffs = YL.getDecomposedLoc();
+ FileIDAndOffset XOffs = XL.getDecomposedLoc();
+ FileIDAndOffset YOffs = YL.getDecomposedLoc();
const SourceManager &SM = XL.getManager();
std::pair<bool, bool> InSameTU = SM.isInTheSameTranslationUnit(XOffs, YOffs);
if (InSameTU.first)
diff --git a/clang/lib/Basic/Diagnostic.cpp b/clang/lib/Basic/Diagnostic.cpp
index a30bfa28eca71..ab0525e96f3ba 100644
--- a/clang/lib/Basic/Diagnostic.cpp
+++ b/clang/lib/Basic/Diagnostic.cpp
@@ -173,7 +173,7 @@ void DiagnosticsEngine::DiagStateMap::append(SourceManager &SrcMgr,
CurDiagState = State;
CurDiagStateLoc = Loc;
- std::pair<FileID, unsigned> Decomp = SrcMgr.getDecomposedLoc(Loc);
+ FileIDAndOffset Decomp = SrcMgr.getDecomposedLoc(Loc);
unsigned Offset = Decomp.second;
for (File *F = getFile(SrcMgr, Decomp.first); F;
Offset = F->ParentOffset, F = F->Parent) {
@@ -199,7 +199,7 @@ DiagnosticsEngine::DiagStateMap::lookup(SourceManager &SrcMgr,
if (Files.empty())
return FirstDiagState;
- std::pair<FileID, unsigned> Decomp = SrcMgr.getDecomposedLoc(Loc);
+ FileIDAndOffset Decomp = SrcMgr.getDecomposedLoc(Loc);
const File *F = getFile(SrcMgr, Decomp.first);
return F->lookup(Decomp.second);
}
@@ -226,7 +226,7 @@ DiagnosticsEngine::DiagStateMap::getFile(SourceManager &SrcMgr,
// We created a new File; look up the diagnostic state at the start of it and
// initialize it.
if (ID.isValid()) {
- std::pair<FileID, unsigned> Decomp = SrcMgr.getDecomposedIncludedLoc(ID);
+ FileIDAndOffset Decomp = SrcMgr.getDecomposedIncludedLoc(ID);
F.Parent = getFile(SrcMgr, Decomp.first);
F.ParentOffset = Decomp.second;
F.StateTransitions.push_back({F.Parent->lookup(Decomp.second), 0});
@@ -263,8 +263,7 @@ void DiagnosticsEngine::DiagStateMap::dump(SourceManager &SrcMgr,
<< ">: " << SrcMgr.getBufferOrFake(ID).getBufferIdentifier();
if (F.second.Parent) {
- std::pair<FileID, unsigned> Decomp =
- SrcMgr.getDecomposedIncludedLoc(ID);
+ FileIDAndOffset Decomp = SrcMgr.getDecomposedIncludedLoc(ID);
assert(File.ParentOffset == Decomp.second);
llvm::errs() << " parent " << File.Parent << " <FileID "
<< Decomp.first.getHashValue() << "> ";
diff --git a/clang/lib/Basic/Sarif.cpp b/clang/lib/Basic/Sarif.cpp
index ed50b73e92240..69862b73febd7 100644
--- a/clang/lib/Basic/Sarif.cpp
+++ b/clang/lib/Basic/Sarif.cpp
@@ -117,7 +117,7 @@ static unsigned int adjustColumnPos(FullSourceLoc Loc,
unsigned int TokenLen = 0) {
assert(!Loc.isInvalid() && "invalid Loc when adjusting column position");
- std::pair<FileID, unsigned> LocInfo = Loc.getDecomposedExpansionLoc();
+ FileIDAndOffset LocInfo = Loc.getDecomposedExpansionLoc();
std::optional<MemoryBufferRef> Buf =
Loc.getManager().getBufferOrNone(LocInfo.first);
assert(Buf && "got an invalid buffer for the location's file");
diff --git a/clang/lib/Basic/SourceLocation.cpp b/clang/lib/Basic/SourceLocation.cpp
index c5b9864dbb33f..3e26f75d25b10 100644
--- a/clang/lib/Basic/SourceLocation.cpp
+++ b/clang/lib/Basic/SourceLocation.cpp
@@ -164,7 +164,7 @@ FullSourceLoc FullSourceLoc::getExpansionLoc() const {
return FullSourceLoc(SrcMgr->getExpansionLoc(*this), *SrcMgr);
}
-std::pair<FileID, unsigned> FullSourceLoc::getDecomposedExpansionLoc() const {
+FileIDAndOffset FullSourceLoc::getDecomposedExpansionLoc() const {
return SrcMgr->getDecomposedExpansionLoc(*this);
}
@@ -274,6 +274,6 @@ StringRef FullSourceLoc::getBufferData(bool *Invalid) const {
return SrcMgr->getBufferData(SrcMgr->getFileID(*this), Invalid);
}
-std::pair<FileID, unsigned> FullSourceLoc::getDecomposedLoc() const {
+FileIDAndOffset FullSourceLoc::getDecomposedLoc() const {
return SrcMgr->getDecomposedLoc(*this);
}
diff --git a/clang/lib/Basic/SourceManager.cpp b/clang/lib/Basic/SourceManager.cpp
index 053e82683a4a6..a05d6c16caa32 100644
--- a/clang/lib/Basic/SourceManager.cpp
+++ b/clang/lib/Basic/SourceManager.cpp
@@ -267,7 +267,7 @@ void SourceManager::AddLineNote(SourceLocation Loc, unsigned LineNo,
int FilenameID, bool IsFileEntry,
bool IsFileExit,
SrcMgr::CharacteristicKind FileKind) {
- std::pair<FileID, unsigned> LocInfo = getDecomposedExpansionLoc(Loc);
+ FileIDAndOffset LocInfo = getDecomposedExpansionLoc(Loc);
bool Invalid = false;
SLocEntry &Entry = getSLocEntry(LocInfo.first, &Invalid);
@@ -916,7 +916,7 @@ getExpansionLocSlowCase(SourceLocation Loc) const {
SourceLocation SourceManager::getSpellingLocSlowCase(SourceLocation Loc) const {
do {
- std::pair<FileID, unsigned> LocInfo = getDecomposedLoc(Loc);
+ FileIDAndOffset LocInfo = getDecomposedLoc(Loc);
Loc = getSLocEntry(LocInfo.first).getExpansion().getSpellingLoc();
Loc = Loc.getLocWithOffset(LocInfo.second);
} while (!Loc.isFileID());
@@ -933,10 +933,8 @@ SourceLocation SourceManager::getFileLocSlowCase(SourceLocation Loc) const {
return Loc;
}
-
-std::pair<FileID, unsigned>
-SourceManager::getDecomposedExpansionLocSlowCase(
- const SrcMgr::SLocEntry *E) const {
+FileIDAndOffset SourceManager::getDecomposedExpansionLocSlowCase(
+ const SrcMgr::SLocEntry *E) const {
// If this is an expansion record, walk through all the expansion points.
FileID FID;
SourceLocation Loc;
@@ -952,7 +950,7 @@ SourceManager::getDecomposedExpansionLocSlowCase(
return std::make_pair(FID, Offset);
}
-std::pair<FileID, unsigned>
+FileIDAndOffset
SourceManager::getDecomposedSpellingLocSlowCase(const SrcMgr::SLocEntry *E,
unsigned Offset) const {
// If this is an expansion record, walk through all the expansion points.
@@ -976,7 +974,7 @@ SourceManager::getDecomposedSpellingLocSlowCase(const SrcMgr::SLocEntry *E,
/// found. This should not generally be used by clients.
SourceLocation SourceManager::getImmediateSpellingLoc(SourceLocation Loc) const{
if (Loc.isFileID()) return Loc;
- std::pair<FileID, unsigned> LocInfo = getDecomposedLoc(Loc);
+ FileIDAndOffset LocInfo = getDecomposedLoc(Loc);
Loc = getSLocEntry(LocInfo.first).getExpansion().getSpellingLoc();
return Loc.getLocWithOffset(LocInfo.second);
}
@@ -1048,7 +1046,7 @@ bool SourceManager::isAtStartOfImmediateMacroExpansion(SourceLocation Loc,
SourceLocation *MacroBegin) const {
assert(Loc.isValid() && Loc.isMacroID() && "Expected a valid macro loc");
- std::pair<FileID, unsigned> DecompLoc = getDecomposedLoc(Loc);
+ FileIDAndOffset DecompLoc = getDecomposedLoc(Loc);
if (DecompLoc.second > 0)
return false; // Does not point at the start of expansion range.
@@ -1125,7 +1123,7 @@ const char *SourceManager::getCharacterData(SourceLocation SL,
bool *Invalid) const {
// Note that this is a hot function in the getSpelling() path, which is
// heavily used by -E mode.
- std::pair<FileID, unsigned> LocInfo = getDecomposedSpellingLoc(SL);
+ FileIDAndOffset LocInfo = getDecomposedSpellingLoc(SL);
// Note that calling 'getBuffer()' may lazily page in a source file.
bool CharDataInvalid = false;
@@ -1204,14 +1202,14 @@ static bool isInvalid(LocType Loc, bool *Invalid) {
unsigned SourceManager::getSpellingColumnNumber(SourceLocation Loc,
bool *Invalid) const {
if (isInvalid(Loc, Invalid)) return 0;
- std::pair<FileID, unsigned> LocInfo = getDecomposedSpellingLoc(Loc);
+ FileIDAndOffset LocInfo = getDecomposedSpellingLoc(Loc);
return getColumnNumber(LocInfo.first, LocInfo.second, Invalid);
}
unsigned SourceManager::getExpansionColumnNumber(SourceLocation Loc,
bool *Invalid) const {
if (isInvalid(Loc, Invalid)) return 0;
- std::pair<FileID, unsigned> LocInfo = getDecomposedExpansionLoc(Loc);
+ FileIDAndOffset LocInfo = getDecomposedExpansionLoc(Loc);
return getColumnNumber(LocInfo.first, LocInfo.second, Invalid);
}
@@ -1412,13 +1410,13 @@ unsigned SourceManager::getLineNumber(FileID FID, unsigned FilePos,
unsigned SourceManager::getSpellingLineNumber(SourceLocation Loc,
bool *Invalid) const {
if (isInvalid(Loc, Invalid)) return 0;
- std::pair<FileID, unsigned> LocInfo = getDecomposedSpellingLoc(Loc);
+ FileIDAndOffset LocInfo = getDecomposedSpellingLoc(Loc);
return getLineNumber(LocInfo.first, LocInfo.second);
}
unsigned SourceManager::getExpansionLineNumber(SourceLocation Loc,
bool *Invalid) const {
if (isInvalid(Loc, Invalid)) return 0;
- std::pair<FileID, unsigned> LocInfo = getDecomposedExpansionLoc(Loc);
+ FileIDAndOffset LocInfo = getDecomposedExpansionLoc(Loc);
return getLineNumber(LocInfo.first, LocInfo.second);
}
unsigned SourceManager::getPresumedLineNumber(SourceLocation Loc,
@@ -1439,7 +1437,7 @@ unsigned SourceManager::getPresumedLineNumber(SourceLocation Loc,
SrcMgr::CharacteristicKind
SourceManager::getFileCharacteristic(SourceLocation Loc) const {
assert(Loc.isValid() && "Can't get file characteristic of invalid loc!");
- std::pair<FileID, unsigned> LocInfo = getDecomposedExpansionLoc(Loc);
+ FileIDAndOffset LocInfo = getDecomposedExpansionLoc(Loc);
const SLocEntry *SEntry = getSLocEntryForFile(LocInfo.first);
if (!SEntry)
return C_User;
@@ -1488,7 +1486,7 @@ PresumedLoc SourceManager::getPresumedLoc(SourceLocation Loc,
if (Loc.isInvalid()) return PresumedLoc();
// Presumed locations are always for expansion points.
- std::pair<FileID, unsigned> LocInfo = getDecomposedExpansionLoc(Loc);
+ FileIDAndOffset LocInfo = getDecomposedExpansionLoc(Loc);
bool Invalid = false;
const SLocEntry &Entry = getSLocEntry(LocInfo.first, &Invalid);
@@ -1563,7 +1561,7 @@ bool SourceManager::isInMainFile(SourceLocation Loc) const {
if (Loc.isInvalid()) return false;
// Presumed locations are always for expansion points.
- std::pair<FileID, unsigned> LocInfo = getDecomposedExpansionLoc(Loc);
+ FileIDAndOffset LocInfo = getDecomposedExpansionLoc(Loc);
const SLocEntry *Entry = getSLocEntryForFile(LocInfo.first);
if (!Entry)
@@ -1918,14 +1916,13 @@ SourceManager::getMacroArgExpandedLocation(SourceLocation Loc) const {
return Loc;
}
-std::pair<FileID, unsigned>
-SourceManager::getDecomposedIncludedLoc(FileID FID) const {
+FileIDAndOffset SourceManager::getDecomposedIncludedLoc(FileID FID) const {
if (FID.isInvalid())
return std::make_pair(FileID(), 0);
// Uses IncludedLocMap to retrieve/cache the decomposed loc.
- using DecompTy = std::pair<FileID, unsigned>;
+ using DecompTy = FileIDAndOffset;
auto InsertOp = IncludedLocMap.try_emplace(FID);
DecompTy &DecompLoc = InsertOp.first->second;
if (!InsertOp.second)
@@ -1966,8 +1963,7 @@ FileID SourceManager::getUniqueLoadedASTFileID(SourceLocation Loc) const {
}
bool SourceManager::isInTheSameTranslationUnitImpl(
- const std::pair<FileID, unsigned> &LOffs,
- const std::pair<FileID, unsigned> &ROffs) const {
+ const FileIDAndOffset &LOffs, const FileIDAndOffset &ROffs) const {
// If one is local while the other is loaded.
if (isLoadedFileID(LOffs.first) != isLoadedFileID(ROffs.first))
return false;
@@ -1992,10 +1988,9 @@ bool SourceManager::isInTheSameTranslationUnitImpl(
/// to the parent source location within the same translation unit. If this is
/// possible, return the decomposed version of the parent in Loc and return
/// false. If Loc is a top-level entry, return true and don't modify it.
-static bool
-MoveUpTranslationUnitIncludeHierarchy(std::pair<FileID, unsigned> &Loc,
- const SourceManager &SM) {
- std::pair<FileID, unsigned> UpperLoc = SM.getDecomposedIncludedLoc(Loc.first);
+static bool MoveUpTranslationUnitIncludeHierarchy(FileIDAndOffset &Loc,
+ const SourceManager &SM) {
+ FileIDAndOffset UpperLoc = SM.getDecomposedIncludedLoc(Loc.first);
if (UpperLoc.first.isInvalid() ||
!SM.isInTheSameTranslationUnitImpl(UpperLoc, Loc))
return true; // We reached the top.
@@ -2041,8 +2036,8 @@ bool SourceManager::isBeforeInTranslationUnit(SourceLocation LHS,
if (LHS == RHS)
return false;
- std::pair<FileID, unsigned> LOffs = getDecomposedLoc(LHS);
- std::pair<FileID, unsigned> ROffs = getDecomposedLoc(RHS);
+ FileIDAndOffset LOffs = getDecomposedLoc(LHS);
+ FileIDAndOffset ROffs = getDecomposedLoc(RHS);
// getDecomposedLoc may have failed to return a valid FileID because, e.g. it
// is a serialized one referring to a file that was removed after we loaded
@@ -2057,9 +2052,9 @@ bool SourceManager::isBeforeInTranslationUnit(SourceLocation LHS,
return LOffs.first < ROffs.first;
}
-std::pair<bool, bool> SourceManager::isInTheSameTranslationUnit(
- std::pair<FileID, unsigned> &LOffs,
- std::pair<FileID, unsigned> &ROffs) const {
+std::pair<bool, bool>
+SourceManager::isInTheSameTranslationUnit(FileIDAndOffset &LOffs,
+ FileIDAndOffset &ROffs) const {
// If the source locations are not in the same TU, return early.
if (!isInTheSameTranslationUnitImpl(LOffs, ROffs))
return std::make_pair(false, false);
@@ -2086,7 +2081,7 @@ std::pair<bool, bool> SourceManager::isInTheSameTranslationUnit(
// A location within a FileID on the path up from LOffs to the main file.
struct Entry {
- std::pair<FileID, unsigned> DecomposedLoc; // FileID redundant, but clearer.
+ FileIDAndOffset DecomposedLoc; // FileID redundant, but clearer.
FileID ChildFID; // Used for breaking ties. Invalid for the initial loc.
};
llvm::SmallDenseMap<FileID, Entry, 16> LChain;
diff --git a/clang/lib/Edit/Commit.cpp b/clang/lib/Edit/Commit.cpp
index 6e785e866666f..b1d58a0cad1e4 100644
--- a/clang/lib/Edit/Commit.cpp
+++ b/clang/lib/Edit/Commit.cpp
@@ -239,7 +239,7 @@ bool Commit::canInsert(SourceLocation loc, FileOffset &offs) {
if (SM.isInSystemHeader(loc))
return false;
- std::pair<FileID, unsigned> locInfo = SM.getDecomposedLoc(loc);
+ FileIDAndOffset locInfo = SM.getDecomposedLoc(loc);
if (locInfo.first.isInvalid())
return false;
offs = FileOffset(locInfo.first, locInfo.second);
@@ -273,7 +273,7 @@ bool Commit::canInsertAfterToken(SourceLocation loc, FileOffset &offs,
if (loc.isInvalid())
return false;
- std::pair<FileID, unsigned> locInfo = SM.getDecomposedLoc(loc);
+ FileIDAndOffset locInfo = SM.getDecomposedLoc(loc);
if (locInfo.first.isInvalid())
return false;
offs = FileOffset(locInfo.first, locInfo.second);
@@ -309,8 +309,8 @@ bool Commit::canRemoveRange(CharSourceRange range,
if (PPRec && PPRec->rangeIntersectsConditionalDirective(range.getAsRange()))
return false;
- std::pair<FileID, unsigned> beginInfo = SM.getDecomposedLoc(range.getBegin());
- std::pair<FileID, unsigned> endInfo = SM.getDecomposedLoc(range.getEnd());
+ FileIDAndOffset beginInfo = SM.getDecomposedLoc(range.getBegin());
+ FileIDAndOffset endInfo = SM.getDecomposedLoc(range.getEnd());
if (beginInfo.first != endInfo.first ||
beginInfo.second > endInfo.second)
return false;
diff --git a/clang/lib/Frontend/SARIFDiagnostic.cpp b/clang/lib/Frontend/SARIFDiagnostic.cpp
index e2aec7f677f12..ac27d7480de3e 100644
--- a/clang/lib/Frontend/SARIFDiagnostic.cpp
+++ b/clang/lib/Frontend/SARIFDiagnostic.cpp
@@ -91,8 +91,8 @@ SarifResult SARIFDiagnostic::addLocationToResult(
SourceLocation E = ERange.getEnd();
bool IsTokenRange = ERange.isTokenRange();
- std::pair<FileID, unsigned> BInfo = SM.getDecomposedLoc(B);
- std::pair<FileID, unsigned> EInfo = SM.getDecomposedLoc(E);
+ FileIDAndOffset BInfo = SM.getDecomposedLoc(B);
+ FileIDAndOffset EInfo = SM.getDecomposedLoc(E);
// If the start or end of the range is in another file, just discard
// it.
diff --git a/clang/lib/Frontend/TextDiagnostic.cpp b/clang/lib/Frontend/TextDiagnostic.cpp
index b9e681b52e509..ccdd59da89bd1 100644
--- a/clang/lib/Frontend/TextDiagnostic.cpp
+++ b/clang/lib/Frontend/TextDiagnostic.cpp
@@ -1012,7 +1012,7 @@ static std::string buildFixItInsertionLine(FileID FID, unsigned LineNo,
// We have an insertion hint. Determine whether the inserted
// code contains no newlines and is on the same line as the caret.
- std::pair<FileID, unsigned> HintLocInfo =
+ FileIDAndOffset HintLocInfo =
SM.getDecomposedExpansionLoc(H.RemoveRange.getBegin());
if (FID == HintLocInfo.first &&
LineNo == SM.getLineNumber(HintLocInfo.first, HintLocInfo.second) &&
@@ -1518,8 +1518,8 @@ void TextDiagnostic::emitParseableFixits(ArrayRef<FixItHint> Hints,
SourceLocation BLoc = H.RemoveRange.getBegin();
SourceLocation ELoc = H.RemoveRange.getEnd();
- std::pair<FileID, unsigned> BInfo = SM.getDecomposedLoc(BLoc);
- std::pair<FileID, unsigned> EInfo = SM.getDecomposedLoc(ELoc);
+ FileIDAndOffset BInfo = SM.getDecomposedLoc(BLoc);
+ FileIDAndOffset EInfo = SM.getDecomposedLoc(ELoc);
// Adjust for token ranges.
if (H.RemoveRange.isTokenRange())
diff --git a/clang/lib/Index/CommentToXML.cpp b/clang/lib/Index/CommentToXML.cpp
index 672386171ecf6..f54d8be790217 100644
--- a/clang/lib/Index/CommentToXML.cpp
+++ b/clang/lib/Index/CommentToXML.cpp
@@ -898,7 +898,7 @@ void CommentASTToXMLConverter::visitFullComment(const FullComment *C) {
{
// Print line and column number.
SourceLocation Loc = DI->CurrentDecl->getLocation();
- std::pair<FileID, unsigned> LocInfo = SM.getDecomposedLoc(Loc);
+ FileIDAndOffset LocInfo = SM.getDecomposedLoc(Loc);
FileID FID = LocInfo.first;
unsigned FileOffset = LocInfo.second;
diff --git a/clang/lib/Index/USRGeneration.cpp b/clang/lib/Index/USRGeneration.cpp
index 1d5dcacdaa41f..6a884f7be00e1 100644
--- a/clang/lib/Index/USRGeneration.cpp
+++ b/clang/lib/Index/USRGeneration.cpp
@@ -31,7 +31,7 @@ static bool printLoc(llvm::raw_ostream &OS, SourceLocation Loc,
return true;
}
Loc = SM.getExpansionLoc(Loc);
- const std::pair<FileID, unsigned> &Decomposed = SM.getDecomposedLoc(Loc);
+ const FileIDAndOffset &Decomposed = SM.getDecomposedLoc(Loc);
OptionalFileEntryRef FE = SM.getFileEntryRefForID(Decomposed.first);
if (FE) {
OS << llvm::sys::path::filename(FE->getName());
diff --git a/clang/lib/Lex/Lexer.cpp b/clang/lib/Lex/Lexer.cpp
index f4d16ecce393c..718514cf1e7c6 100644
--- a/clang/lib/Lex/Lexer.cpp
+++ b/clang/lib/Lex/Lexer.cpp
@@ -383,7 +383,7 @@ StringRef Lexer::getSpelling(SourceLocation loc,
const LangOptions &options,
bool *invalid) {
// Break down the source location.
- std::pair<FileID, unsigned> locInfo = SM.getDecomposedLoc(loc);
+ FileIDAndOffset locInfo = SM.getDecomposedLoc(loc);
// Try to the load the file buffer.
bool invalidTemp = false;
@@ -521,7 +521,7 @@ bool Lexer::getRawToken(SourceLocation Loc, Token &Result,
// If this comes from a macro expansion, we really do want the macro name, not
// the token this macro expanded to.
Loc = SM.getExpansionLoc(Loc);
- std::pair<FileID, unsigned> LocInfo = SM.getDecomposedLoc(Loc);
+ FileIDAndOffset LocInfo = SM.getDecomposedLoc(Loc);
bool Invalid = false;
StringRef Buffer = SM.getBufferData(LocInfo.first, &Invalid);
if (Invalid)
@@ -563,7 +563,7 @@ static SourceLocation getBeginningOfFileToken(SourceLocation Loc,
const SourceManager &SM,
const LangOptions &LangOpts) {
assert(Loc.isFileID());
- std::pair<FileID, unsigned> LocInfo = SM.getDecomposedLoc(Loc);
+ FileIDAndOffset LocInfo = SM.getDecomposedLoc(Loc);
if (LocInfo.first.isInvalid())
return Loc;
@@ -618,9 +618,8 @@ SourceLocation Lexer::GetBeginningOfToken(SourceLocation Loc,
SourceLocation FileLoc = SM.getSpellingLoc(Loc);
SourceLocation BeginFileLoc = getBeginningOfFileToken(FileLoc, SM, LangOpts);
- std::pair<FileID, unsigned> FileLocInfo = SM.getDecomposedLoc(FileLoc);
- std::pair<FileID, unsigned> BeginFileLocInfo =
- SM.getDecomposedLoc(BeginFileLoc);
+ FileIDAndOffset FileLocInfo = SM.getDecomposedLoc(FileLoc);
+ FileIDAndOffset BeginFileLocInfo = SM.getDecomposedLoc(BeginFileLoc);
assert(FileLocInfo.first == BeginFileLocInfo.first &&
FileLocInfo.second >= BeginFileLocInfo.second);
return Loc.getLocWithOffset(BeginFileLocInfo.second - FileLocInfo.second);
@@ -1033,7 +1032,7 @@ StringRef Lexer::getSourceText(CharSourceRange Range,
}
// Break down the source location.
- std::pair<FileID, unsigned> beginInfo = SM.getDecomposedLoc(Range.getBegin());
+ FileIDAndOffset beginInfo = SM.getDecomposedLoc(Range.getBegin());
if (beginInfo.first.isInvalid()) {
if (Invalid) *Invalid = true;
return {};
@@ -1099,7 +1098,7 @@ StringRef Lexer::getImmediateMacroName(SourceLocation Loc,
// Dig out the buffer where the macro name was spelled and the extents of the
// name so that we can render it into the expansion note.
- std::pair<FileID, unsigned> ExpansionInfo = SM.getDecomposedLoc(Loc);
+ FileIDAndOffset ExpansionInfo = SM.getDecomposedLoc(Loc);
unsigned MacroTokenLength = Lexer::MeasureTokenLength(Loc, SM, LangOpts);
StringRef ExpansionBuffer = SM.getBufferData(ExpansionInfo.first);
return ExpansionBuffer.substr(ExpansionInfo.second, MacroTokenLength);
@@ -1126,7 +1125,7 @@ StringRef Lexer::getImmediateMacroNameForDiagnostics(
// Dig out the buffer where the macro name was spelled and the extents of the
// name so that we can render it into the expansion note.
- std::pair<FileID, unsigned> ExpansionInfo = SM.getDecomposedLoc(Loc);
+ FileIDAndOffset ExpansionInfo = SM.getDecomposedLoc(Loc);
unsigned MacroTokenLength = Lexer::MeasureTokenLength(Loc, SM, LangOpts);
StringRef ExpansionBuffer = SM.getBufferData(ExpansionInfo.first);
return ExpansionBuffer.substr(ExpansionInfo.second, MacroTokenLength);
@@ -1160,7 +1159,7 @@ StringRef Lexer::getIndentationForLine(SourceLocation Loc,
const SourceManager &SM) {
if (Loc.isInvalid() || Loc.isMacroID())
return {};
- std::pair<FileID, unsigned> LocInfo = SM.getDecomposedLoc(Loc);
+ FileIDAndOffset LocInfo = SM.getDecomposedLoc(Loc);
if (LocInfo.first.isInvalid())
return {};
bool Invalid = false;
@@ -1334,7 +1333,7 @@ std::optional<Token> Lexer::findNextToken(SourceLocation Loc,
Loc = Lexer::getLocForEndOfToken(Loc, 0, SM, LangOpts);
// Break down the source location.
- std::pair<FileID, unsigned> LocInfo = SM.getDecomposedLoc(Loc);
+ FileIDAndOffset LocInfo = SM.getDecomposedLoc(Loc);
// Try to load the file buffer.
bool InvalidTemp = false;
diff --git a/clang/lib/Lex/MacroInfo.cpp b/clang/lib/Lex/MacroInfo.cpp
index c33276ea71cb7..e4ad97406e995 100644
--- a/clang/lib/Lex/MacroInfo.cpp
+++ b/clang/lib/Lex/MacroInfo.cpp
@@ -69,10 +69,8 @@ unsigned MacroInfo::getDefinitionLengthSlow(const SourceManager &SM) const {
"Macro defined in macro?");
assert((macroEnd.isFileID() || lastToken.is(tok::comment)) &&
"Macro defined in macro?");
- std::pair<FileID, unsigned>
- startInfo = SM.getDecomposedExpansionLoc(macroStart);
- std::pair<FileID, unsigned>
- endInfo = SM.getDecomposedExpansionLoc(macroEnd);
+ FileIDAndOffset startInfo = SM.getDecomposedExpansionLoc(macroStart);
+ FileIDAndOffset endInfo = SM.getDecomposedExpansionLoc(macroEnd);
assert(startInfo.first == endInfo.first &&
"Macro definition spanning multiple FileIDs ?");
assert(startInfo.second <= endInfo.second);
diff --git a/clang/lib/Lex/Preprocessor.cpp b/clang/lib/Lex/Preprocessor.cpp
index 7fecbe9eee53c..408985aa395b6 100644
--- a/clang/lib/Lex/Preprocessor.cpp
+++ b/clang/lib/Lex/Preprocessor.cpp
@@ -510,7 +510,7 @@ void Preprocessor::CreateString(StringRef Str, Token &Tok,
SourceLocation Preprocessor::SplitToken(SourceLocation Loc, unsigned Length) {
auto &SM = getSourceManager();
SourceLocation SpellingLoc = SM.getSpellingLoc(Loc);
- std::pair<FileID, unsigned> LocInfo = SM.getDecomposedLoc(SpellingLoc);
+ FileIDAndOffset LocInfo = SM.getDecomposedLoc(SpellingLoc);
bool Invalid = false;
StringRef Buffer = SM.getBufferData(LocInfo.first, &Invalid);
if (Invalid)
diff --git a/clang/lib/Parse/ParseStmt.cpp b/clang/lib/Parse/ParseStmt.cpp
index bc40b726bf41b..8217151a0259a 100644
--- a/clang/lib/Parse/ParseStmt.cpp
+++ b/clang/lib/Parse/ParseStmt.cpp
@@ -1327,7 +1327,7 @@ struct MisleadingIndentationChecker {
if (ColNo == 0 || TabStop == 1)
return ColNo;
- std::pair<FileID, unsigned> FIDAndOffset = SM.getDecomposedLoc(Loc);
+ FileIDAndOffset FIDAndOffset = SM.getDecomposedLoc(Loc);
bool Invalid;
StringRef BufData = SM.getBufferData(FIDAndOffset.first, &Invalid);
diff --git a/clang/lib/Parse/ParseStmtAsm.cpp b/clang/lib/Parse/ParseStmtAsm.cpp
index 182907df56070..c679aa6fe7b27 100644
--- a/clang/lib/Parse/ParseStmtAsm.cpp
+++ b/clang/lib/Parse/ParseStmtAsm.cpp
@@ -380,8 +380,7 @@ StmtResult Parser::ParseMicrosoftAsmStatement(SourceLocation AsmLoc) {
++NumTokensRead;
} else {
// Single-line inline asm; compute which line it is on.
- std::pair<FileID, unsigned> ExpAsmLoc =
- SrcMgr.getDecomposedExpansionLoc(EndLoc);
+ FileIDAndOffset ExpAsmLoc = SrcMgr.getDecomposedExpansionLoc(EndLoc);
FID = ExpAsmLoc.first;
LineNo = SrcMgr.getLineNumber(FID, ExpAsmLoc.second);
LBraceLocs.push_back(SourceLocation());
@@ -408,16 +407,14 @@ StmtResult Parser::ParseMicrosoftAsmStatement(SourceLocation AsmLoc) {
InAsmComment = true;
if (!SingleLineMode) {
// Compute which line the comment is on.
- std::pair<FileID, unsigned> ExpSemiLoc =
- SrcMgr.getDecomposedExpansionLoc(TokLoc);
+ FileIDAndOffset ExpSemiLoc = SrcMgr.getDecomposedExpansionLoc(TokLoc);
FID = ExpSemiLoc.first;
LineNo = SrcMgr.getLineNumber(FID, ExpSemiLoc.second);
}
} else if (SingleLineMode || InAsmComment) {
// If end-of-line is significant, check whether this token is on a
// new line.
- std::pair<FileID, unsigned> ExpLoc =
- SrcMgr.getDecomposedExpansionLoc(TokLoc);
+ FileIDAndOffset ExpLoc = SrcMgr.getDecomposedExpansionLoc(TokLoc);
if (ExpLoc.first != FID ||
SrcMgr.getLineNumber(ExpLoc.first, ExpLoc.second) != LineNo) {
// If this is a single-line __asm, we're done, except if the next
diff --git a/clang/lib/Rewrite/Rewriter.cpp b/clang/lib/Rewrite/Rewriter.cpp
index 68cf797f97905..ae21a10f81c35 100644
--- a/clang/lib/Rewrite/Rewriter.cpp
+++ b/clang/lib/Rewrite/Rewriter.cpp
@@ -133,7 +133,7 @@ std::string Rewriter::getRewrittenText(CharSourceRange Range) const {
unsigned Rewriter::getLocationOffsetAndFileID(SourceLocation Loc,
FileID &FID) const {
assert(Loc.isValid() && "Invalid location");
- std::pair<FileID, unsigned> V = SourceMgr->getDecomposedLoc(Loc);
+ FileIDAndOffset V = SourceMgr->getDecomposedLoc(Loc);
FID = V.first;
return V.second;
}
diff --git a/clang/lib/Sema/CodeCompleteConsumer.cpp b/clang/lib/Sema/CodeCompleteConsumer.cpp
index c4e5ef0d75af7..e3fc7c11f4594 100644
--- a/clang/lib/Sema/CodeCompleteConsumer.cpp
+++ b/clang/lib/Sema/CodeCompleteConsumer.cpp
@@ -700,8 +700,8 @@ void PrintingCodeCompleteConsumer::ProcessCodeCompleteResults(
const SourceLocation ELoc = FixIt.RemoveRange.getEnd();
SourceManager &SM = SemaRef.SourceMgr;
- std::pair<FileID, unsigned> BInfo = SM.getDecomposedLoc(BLoc);
- std::pair<FileID, unsigned> EInfo = SM.getDecomposedLoc(ELoc);
+ FileIDAndOffset BInfo = SM.getDecomposedLoc(BLoc);
+ FileIDAndOffset EInfo = SM.getDecomposedLoc(ELoc);
// Adjust for token ranges.
if (FixIt.RemoveRange.isTokenRange())
EInfo.second += Lexer::MeasureTokenLength(ELoc, SM, SemaRef.LangOpts);
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index e1cccf068b5aa..a60a558155e69 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -16391,7 +16391,7 @@ Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body,
// Returns true if the token beginning at this Loc is `const`.
auto isLocAtConst = [&](SourceLocation Loc, const SourceManager &SM,
const LangOptions &LangOpts) {
- std::pair<FileID, unsigned> LocInfo = SM.getDecomposedLoc(Loc);
+ FileIDAndOffset LocInfo = SM.getDecomposedLoc(Loc);
if (LocInfo.first.isInvalid())
return false;
diff --git a/clang/lib/Sema/SemaObjCProperty.cpp b/clang/lib/Sema/SemaObjCProperty.cpp
index 3e962fcb8b0e5..9d5106805892a 100644
--- a/clang/lib/Sema/SemaObjCProperty.cpp
+++ b/clang/lib/Sema/SemaObjCProperty.cpp
@@ -310,7 +310,7 @@ static bool LocPropertyAttribute( ASTContext &Context, const char *attrName,
return false;
SourceManager &SM = Context.getSourceManager();
- std::pair<FileID, unsigned> locInfo = SM.getDecomposedLoc(LParenLoc);
+ FileIDAndOffset locInfo = SM.getDecomposedLoc(LParenLoc);
// Try to load the file buffer.
bool invalidTemp = false;
StringRef file = SM.getBufferData(locInfo.first, &invalidTemp);
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp
index b696cb2efee3d..5046502479d40 100644
--- a/clang/lib/Serialization/ASTReader.cpp
+++ b/clang/lib/Serialization/ASTReader.cpp
@@ -10196,8 +10196,7 @@ void ASTReader::ReadComments() {
for (RawComment *C : Comments) {
SourceLocation CommentLoc = C->getBeginLoc();
if (CommentLoc.isValid()) {
- std::pair<FileID, unsigned> Loc =
- SourceMgr.getDecomposedLoc(CommentLoc);
+ FileIDAndOffset Loc = SourceMgr.getDecomposedLoc(CommentLoc);
if (Loc.first.isValid())
Context.Comments.OrderedComments[Loc.first].emplace(Loc.second, C);
}
diff --git a/clang/lib/StaticAnalyzer/Checkers/LocalizationChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/LocalizationChecker.cpp
index 2539d3b9b71e5..538104d13e697 100644
--- a/clang/lib/StaticAnalyzer/Checkers/LocalizationChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/LocalizationChecker.cpp
@@ -1118,8 +1118,7 @@ void EmptyLocalizationContextChecker::MethodCrawler::VisitObjCMessageExpr(
// source, so SL should point to the NSLocalizedString macro.
SourceLocation SL =
Mgr.getSourceManager().getImmediateMacroCallerLoc(R.getBegin());
- std::pair<FileID, unsigned> SLInfo =
- Mgr.getSourceManager().getDecomposedLoc(SL);
+ FileIDAndOffset SLInfo = Mgr.getSourceManager().getDecomposedLoc(SL);
SrcMgr::SLocEntry SE = Mgr.getSourceManager().getSLocEntry(SLInfo.first);
diff --git a/clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp b/clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp
index 584ae33383cb5..3686bd4488877 100644
--- a/clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp
+++ b/clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp
@@ -305,7 +305,7 @@ static bool isFunctionMacroExpansion(SourceLocation Loc,
return false;
while (SM.isMacroArgExpansion(Loc))
Loc = SM.getImmediateExpansionRange(Loc).getBegin();
- std::pair<FileID, unsigned> TLInfo = SM.getDecomposedLoc(Loc);
+ FileIDAndOffset TLInfo = SM.getDecomposedLoc(Loc);
SrcMgr::SLocEntry SE = SM.getSLocEntry(TLInfo.first);
const SrcMgr::ExpansionInfo &EInfo = SE.getExpansion();
return EInfo.isFunctionMacroExpansion();
diff --git a/clang/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp b/clang/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp
index c1bafe8583586..2ef98e17cf9c0 100644
--- a/clang/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp
+++ b/clang/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp
@@ -895,7 +895,7 @@ void HTMLDiagnostics::HandlePiece(Rewriter &R, FileID BugFileID,
SourceManager &SM = R.getSourceMgr();
assert(&Pos.getManager() == &SM && "SourceManagers are different!");
- std::pair<FileID, unsigned> LPosInfo = SM.getDecomposedExpansionLoc(Pos);
+ FileIDAndOffset LPosInfo = SM.getDecomposedExpansionLoc(Pos);
if (LPosInfo.first != BugFileID)
return;
@@ -1034,7 +1034,7 @@ void HTMLDiagnostics::HandlePiece(Rewriter &R, FileID BugFileID,
FullSourceLoc L = MP->getLocation().asLocation().getExpansionLoc();
assert(L.isFileID());
StringRef BufferInfo = L.getBufferData();
- std::pair<FileID, unsigned> LocInfo = L.getDecomposedLoc();
+ FileIDAndOffset LocInfo = L.getDecomposedLoc();
const char* MacroName = LocInfo.second + BufferInfo.data();
Lexer rawLexer(SM.getLocForStartOfFile(LocInfo.first), PP.getLangOpts(),
BufferInfo.begin(), MacroName, BufferInfo.end());
diff --git a/clang/lib/Tooling/Core/Replacement.cpp b/clang/lib/Tooling/Core/Replacement.cpp
index 9e2582ee53c59..1506218d88553 100644
--- a/clang/lib/Tooling/Core/Replacement.cpp
+++ b/clang/lib/Tooling/Core/Replacement.cpp
@@ -120,8 +120,7 @@ bool operator==(const Replacement &LHS, const Replacement &RHS) {
void Replacement::setFromSourceLocation(const SourceManager &Sources,
SourceLocation Start, unsigned Length,
StringRef ReplacementText) {
- const std::pair<FileID, unsigned> DecomposedLocation =
- Sources.getDecomposedLoc(Start);
+ const FileIDAndOffset DecomposedLocation = Sources.getDecomposedLoc(Start);
OptionalFileEntryRef Entry =
Sources.getFileEntryRefForID(DecomposedLocation.first);
this->FilePath = std::string(Entry ? Entry->getName() : InvalidLocation);
@@ -137,8 +136,8 @@ static int getRangeSize(const SourceManager &Sources,
const LangOptions &LangOpts) {
SourceLocation SpellingBegin = Sources.getSpellingLoc(Range.getBegin());
SourceLocation SpellingEnd = Sources.getSpellingLoc(Range.getEnd());
- std::pair<FileID, unsigned> Start = Sources.getDecomposedLoc(SpellingBegin);
- std::pair<FileID, unsigned> End = Sources.getDecomposedLoc(SpellingEnd);
+ FileIDAndOffset Start = Sources.getDecomposedLoc(SpellingBegin);
+ FileIDAndOffset End = Sources.getDecomposedLoc(SpellingEnd);
if (Start.first != End.first) return -1;
if (Range.isTokenRange())
End.second += Lexer::MeasureTokenLength(SpellingEnd, Sources, LangOpts);
diff --git a/clang/lib/Tooling/Refactoring/AtomicChange.cpp b/clang/lib/Tooling/Refactoring/AtomicChange.cpp
index 116f2a757a807..75da3da10bba8 100644
--- a/clang/lib/Tooling/Refactoring/AtomicChange.cpp
+++ b/clang/lib/Tooling/Refactoring/AtomicChange.cpp
@@ -196,7 +196,7 @@ combineReplacementsInChanges(llvm::StringRef FilePath,
AtomicChange::AtomicChange(const SourceManager &SM,
SourceLocation KeyPosition) {
const FullSourceLoc FullKeyPosition(KeyPosition, SM);
- std::pair<FileID, unsigned> FileIDAndOffset =
+ FileIDAndOffset FileIDAndOffset =
FullKeyPosition.getSpellingLoc().getDecomposedLoc();
OptionalFileEntryRef FE = SM.getFileEntryRefForID(FileIDAndOffset.first);
assert(FE && "Cannot create AtomicChange with invalid location.");
diff --git a/clang/lib/Tooling/Transformer/SourceCode.cpp b/clang/lib/Tooling/Transformer/SourceCode.cpp
index ab7184c2c069e..922dafeddf416 100644
--- a/clang/lib/Tooling/Transformer/SourceCode.cpp
+++ b/clang/lib/Tooling/Transformer/SourceCode.cpp
@@ -68,8 +68,8 @@ llvm::Error clang::tooling::validateRange(const CharSourceRange &Range,
"Range is in system header");
}
- std::pair<FileID, unsigned> BeginInfo = SM.getDecomposedLoc(Range.getBegin());
- std::pair<FileID, unsigned> EndInfo = SM.getDecomposedLoc(Range.getEnd());
+ FileIDAndOffset BeginInfo = SM.getDecomposedLoc(Range.getBegin());
+ FileIDAndOffset EndInfo = SM.getDecomposedLoc(Range.getEnd());
if (BeginInfo.first != EndInfo.first)
return llvm::make_error<StringError>(
errc::invalid_argument, "Range begins and ends in different files");
diff --git a/clang/tools/libclang/CIndex.cpp b/clang/tools/libclang/CIndex.cpp
index 3068621d9c004..8e00cd1bd8670 100644
--- a/clang/tools/libclang/CIndex.cpp
+++ b/clang/tools/libclang/CIndex.cpp
@@ -270,10 +270,10 @@ bool CursorVisitor::visitFileRegion() {
ASTUnit *Unit = cxtu::getASTUnit(TU);
SourceManager &SM = Unit->getSourceManager();
- std::pair<FileID, unsigned> Begin = SM.getDecomposedLoc(
- SM.getFileLoc(RegionOfInterest.getBegin())),
- End = SM.getDecomposedLoc(
- SM.getFileLoc(RegionOfInterest.getEnd()));
+ FileIDAndOffset Begin = SM.getDecomposedLoc(
+ SM.getFileLoc(RegionOfInterest.getBegin())),
+ End = SM.getDecomposedLoc(
+ SM.getFileLoc(RegionOfInterest.getEnd()));
if (End.first != Begin.first) {
// If the end does not reside in the same file, try to recover by
@@ -7636,7 +7636,7 @@ CXString clang_getTokenSpelling(CXTranslationUnit TU, CXToken CXTok) {
return cxstring::createEmpty();
SourceLocation Loc = SourceLocation::getFromRawEncoding(CXTok.int_data[1]);
- std::pair<FileID, unsigned> LocInfo =
+ FileIDAndOffset LocInfo =
CXXUnit->getSourceManager().getDecomposedSpellingLoc(Loc);
bool Invalid = false;
StringRef Buffer =
@@ -7680,9 +7680,9 @@ CXSourceRange clang_getTokenExtent(CXTranslationUnit TU, CXToken CXTok) {
static void getTokens(ASTUnit *CXXUnit, SourceRange Range,
SmallVectorImpl<CXToken> &CXTokens) {
SourceManager &SourceMgr = CXXUnit->getSourceManager();
- std::pair<FileID, unsigned> BeginLocInfo =
+ FileIDAndOffset BeginLocInfo =
SourceMgr.getDecomposedSpellingLoc(Range.getBegin());
- std::pair<FileID, unsigned> EndLocInfo =
+ FileIDAndOffset EndLocInfo =
SourceMgr.getDecomposedSpellingLoc(Range.getEnd());
// Cannot tokenize across files.
@@ -7761,7 +7761,7 @@ CXToken *clang_getToken(CXTranslationUnit TU, CXSourceLocation Location) {
if (Begin.isInvalid())
return nullptr;
SourceManager &SM = CXXUnit->getSourceManager();
- std::pair<FileID, unsigned> DecomposedEnd = SM.getDecomposedLoc(Begin);
+ FileIDAndOffset DecomposedEnd = SM.getDecomposedLoc(Begin);
DecomposedEnd.second +=
Lexer::MeasureTokenLength(Begin, SM, CXXUnit->getLangOpts());
@@ -8410,9 +8410,9 @@ static void annotatePreprocessorTokens(CXTranslationUnit TU,
Preprocessor &PP = CXXUnit->getPreprocessor();
SourceManager &SourceMgr = CXXUnit->getSourceManager();
- std::pair<FileID, unsigned> BeginLocInfo =
+ FileIDAndOffset BeginLocInfo =
SourceMgr.getDecomposedSpellingLoc(RegionOfInterest.getBegin());
- std::pair<FileID, unsigned> EndLocInfo =
+ FileIDAndOffset EndLocInfo =
SourceMgr.getDecomposedSpellingLoc(RegionOfInterest.getEnd());
if (BeginLocInfo.first != EndLocInfo.first)
diff --git a/clang/tools/libclang/CIndexHigh.cpp b/clang/tools/libclang/CIndexHigh.cpp
index c055ff91da557..1f6d3b9dcfe31 100644
--- a/clang/tools/libclang/CIndexHigh.cpp
+++ b/clang/tools/libclang/CIndexHigh.cpp
@@ -193,7 +193,7 @@ static enum CXChildVisitResult findFileIdRefVisit(CXCursor cursor,
}
// We are looking for identifiers in a specific file.
- std::pair<FileID, unsigned> LocInfo = SM.getDecomposedLoc(Loc);
+ FileIDAndOffset LocInfo = SM.getDecomposedLoc(Loc);
if (LocInfo.first != data->FID)
return CXChildVisit_Recurse;
@@ -288,7 +288,7 @@ static enum CXChildVisitResult findFileMacroRefVisit(CXCursor cursor,
}
// We are looking for identifiers in a specific file.
- std::pair<FileID, unsigned> LocInfo = SM.getDecomposedLoc(Loc);
+ FileIDAndOffset LocInfo = SM.getDecomposedLoc(Loc);
if (SM.getFileEntryForID(LocInfo.first) != data->File)
return CXChildVisit_Continue;
@@ -360,7 +360,7 @@ struct FindFileIncludesVisitor {
SourceManager &SM = Ctx.getSourceManager();
// We are looking for includes in a specific file.
- std::pair<FileID, unsigned> LocInfo = SM.getDecomposedLoc(Loc);
+ FileIDAndOffset LocInfo = SM.getDecomposedLoc(Loc);
if (SM.getFileEntryForID(LocInfo.first) != File)
return CXChildVisit_Continue;
diff --git a/clang/tools/libclang/CXIndexDataConsumer.cpp b/clang/tools/libclang/CXIndexDataConsumer.cpp
index 2b2e70d60d1d6..f0d92e8c40124 100644
--- a/clang/tools/libclang/CXIndexDataConsumer.cpp
+++ b/clang/tools/libclang/CXIndexDataConsumer.cpp
@@ -1011,8 +1011,8 @@ bool CXIndexDataConsumer::markEntityOccurrenceInFile(const NamedDecl *D,
SourceManager &SM = Ctx->getSourceManager();
D = getEntityDecl(D);
-
- std::pair<FileID, unsigned> LocInfo = SM.getDecomposedLoc(SM.getFileLoc(Loc));
+
+ FileIDAndOffset LocInfo = SM.getDecomposedLoc(SM.getFileLoc(Loc));
FileID FID = LocInfo.first;
if (FID.isInvalid())
return true;
@@ -1093,7 +1093,7 @@ void CXIndexDataConsumer::translateLoc(SourceLocation Loc,
SourceManager &SM = Ctx->getSourceManager();
Loc = SM.getFileLoc(Loc);
- std::pair<FileID, unsigned> LocInfo = SM.getDecomposedLoc(Loc);
+ FileIDAndOffset LocInfo = SM.getDecomposedLoc(Loc);
FileID FID = LocInfo.first;
unsigned FileOffset = LocInfo.second;
diff --git a/clang/tools/libclang/CXSourceLocation.cpp b/clang/tools/libclang/CXSourceLocation.cpp
index cd41e9f0d6403..4c16e5de4498a 100644
--- a/clang/tools/libclang/CXSourceLocation.cpp
+++ b/clang/tools/libclang/CXSourceLocation.cpp
@@ -332,7 +332,7 @@ void clang_getSpellingLocation(CXSourceLocation location,
const SourceManager &SM =
*static_cast<const SourceManager*>(location.ptr_data[0]);
SourceLocation SpellLoc = SM.getSpellingLoc(Loc);
- std::pair<FileID, unsigned> LocInfo = SM.getDecomposedLoc(SpellLoc);
+ FileIDAndOffset LocInfo = SM.getDecomposedLoc(SpellLoc);
FileID FID = LocInfo.first;
unsigned FileOffset = LocInfo.second;
@@ -368,7 +368,7 @@ void clang_getFileLocation(CXSourceLocation location,
const SourceManager &SM =
*static_cast<const SourceManager*>(location.ptr_data[0]);
SourceLocation FileLoc = SM.getFileLoc(Loc);
- std::pair<FileID, unsigned> LocInfo = SM.getDecomposedLoc(FileLoc);
+ FileIDAndOffset LocInfo = SM.getDecomposedLoc(FileLoc);
FileID FID = LocInfo.first;
unsigned FileOffset = LocInfo.second;
diff --git a/clang/unittests/Lex/LexerTest.cpp b/clang/unittests/Lex/LexerTest.cpp
index 33c8abbec35a3..d9655217b3e23 100644
--- a/clang/unittests/Lex/LexerTest.cpp
+++ b/clang/unittests/Lex/LexerTest.cpp
@@ -522,15 +522,14 @@ TEST_F(LexerTest, GetBeginningOfTokenWithEscapedNewLine) {
std::vector<Token> LexedTokens = CheckLex(TextToLex, ExpectedTokens);
for (const Token &Tok : LexedTokens) {
- std::pair<FileID, unsigned> OriginalLocation =
+ FileIDAndOffset OriginalLocation =
SourceMgr.getDecomposedLoc(Tok.getLocation());
for (unsigned Offset = 0; Offset < IdentifierLength; ++Offset) {
SourceLocation LookupLocation =
Tok.getLocation().getLocWithOffset(Offset);
- std::pair<FileID, unsigned> FoundLocation =
- SourceMgr.getDecomposedExpansionLoc(
- Lexer::GetBeginningOfToken(LookupLocation, SourceMgr, LangOpts));
+ FileIDAndOffset FoundLocation = SourceMgr.getDecomposedExpansionLoc(
+ Lexer::GetBeginningOfToken(LookupLocation, SourceMgr, LangOpts));
// Check that location returned by the GetBeginningOfToken
// is the same as original token location reported by Lexer.
>From 83545b2adeaedbb9a762d9d95e2045c9b9654db5 Mon Sep 17 00:00:00 2001
From: Haojian Wu <hokein.wu at gmail.com>
Date: Thu, 26 Jun 2025 13:56:17 +0200
Subject: [PATCH 2/2] More changes.
---
clang/lib/Tooling/Refactoring/AtomicChange.cpp | 3 +--
clang/lib/Tooling/Refactoring/Rename/USRLocFinder.cpp | 3 +--
2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/clang/lib/Tooling/Refactoring/AtomicChange.cpp b/clang/lib/Tooling/Refactoring/AtomicChange.cpp
index 75da3da10bba8..13256b52caea2 100644
--- a/clang/lib/Tooling/Refactoring/AtomicChange.cpp
+++ b/clang/lib/Tooling/Refactoring/AtomicChange.cpp
@@ -196,8 +196,7 @@ combineReplacementsInChanges(llvm::StringRef FilePath,
AtomicChange::AtomicChange(const SourceManager &SM,
SourceLocation KeyPosition) {
const FullSourceLoc FullKeyPosition(KeyPosition, SM);
- FileIDAndOffset FileIDAndOffset =
- FullKeyPosition.getSpellingLoc().getDecomposedLoc();
+ auto FileIDAndOffset = FullKeyPosition.getSpellingLoc().getDecomposedLoc();
OptionalFileEntryRef FE = SM.getFileEntryRefForID(FileIDAndOffset.first);
assert(FE && "Cannot create AtomicChange with invalid location.");
FilePath = std::string(FE->getName());
diff --git a/clang/lib/Tooling/Refactoring/Rename/USRLocFinder.cpp b/clang/lib/Tooling/Refactoring/Rename/USRLocFinder.cpp
index c18f9290471fe..8eff77861f753 100644
--- a/clang/lib/Tooling/Refactoring/Rename/USRLocFinder.cpp
+++ b/clang/lib/Tooling/Refactoring/Rename/USRLocFinder.cpp
@@ -45,8 +45,7 @@ bool IsValidEditLoc(const clang::SourceManager& SM, clang::SourceLocation Loc) {
if (Loc.isInvalid())
return false;
const clang::FullSourceLoc FullLoc(Loc, SM);
- std::pair<clang::FileID, unsigned> FileIdAndOffset =
- FullLoc.getSpellingLoc().getDecomposedLoc();
+ auto FileIdAndOffset = FullLoc.getSpellingLoc().getDecomposedLoc();
return SM.getFileEntryForID(FileIdAndOffset.first) != nullptr;
}
More information about the cfe-commits
mailing list