https://github.com/SergejSalnikov updated 
https://github.com/llvm/llvm-project/pull/166593

>From 2b15525dc77371424b84e93a65738453699da46a Mon Sep 17 00:00:00 2001
From: SKill <[email protected]>
Date: Wed, 5 Nov 2025 17:59:25 +0100
Subject: [PATCH 1/3] Reuse code when computing Column and Line numbers

---
 clang/include/clang/Basic/SourceManager.h |  2 ++
 clang/lib/Basic/SourceManager.cpp         | 30 ++++++++++++++---------
 2 files changed, 20 insertions(+), 12 deletions(-)

diff --git a/clang/include/clang/Basic/SourceManager.h 
b/clang/include/clang/Basic/SourceManager.h
index 6d9d074d78026..a6984f7b06cbc 100644
--- a/clang/include/clang/Basic/SourceManager.h
+++ b/clang/include/clang/Basic/SourceManager.h
@@ -1409,6 +1409,7 @@ class SourceManager : public 
RefCountedBase<SourceManager> {
   /// before calling this method.
   unsigned getColumnNumber(FileID FID, unsigned FilePos,
                            bool *Invalid = nullptr) const;
+  unsigned getColumnNumber(SourceLocation Loc, bool *Invalid = nullptr) const;
   unsigned getSpellingColumnNumber(SourceLocation Loc,
                                    bool *Invalid = nullptr) const;
   unsigned getExpansionColumnNumber(SourceLocation Loc,
@@ -1423,6 +1424,7 @@ class SourceManager : public 
RefCountedBase<SourceManager> {
   /// MemoryBuffer, so this is not cheap: use only when about to emit a
   /// diagnostic.
   unsigned getLineNumber(FileID FID, unsigned FilePos, bool *Invalid = 
nullptr) const;
+  unsigned getLineNumber(SourceLocation Loc, bool *Invalid = nullptr) const;
   unsigned getSpellingLineNumber(SourceLocation Loc, bool *Invalid = nullptr) 
const;
   unsigned getExpansionLineNumber(SourceLocation Loc, bool *Invalid = nullptr) 
const;
   unsigned getPresumedLineNumber(SourceLocation Loc, bool *Invalid = nullptr) 
const;
diff --git a/clang/lib/Basic/SourceManager.cpp 
b/clang/lib/Basic/SourceManager.cpp
index 7dc81c50f87a2..01faeb67597a2 100644
--- a/clang/lib/Basic/SourceManager.cpp
+++ b/clang/lib/Basic/SourceManager.cpp
@@ -1159,18 +1159,22 @@ static bool isInvalid(LocType Loc, bool *Invalid) {
   return MyInvalid;
 }
 
-unsigned SourceManager::getSpellingColumnNumber(SourceLocation Loc,
-                                                bool *Invalid) const {
+unsigned SourceManager::getColumnNumber(SourceLocation Loc,
+                                        bool *Invalid) const {
+  assert(Loc.isFileID());
   if (isInvalid(Loc, Invalid)) return 0;
-  FileIDAndOffset LocInfo = getDecomposedSpellingLoc(Loc);
+  FileIDAndOffset LocInfo = getDecomposedLoc(Loc);
   return getColumnNumber(LocInfo.first, LocInfo.second, Invalid);
 }
 
+unsigned SourceManager::getSpellingColumnNumber(SourceLocation Loc,
+                                                bool *Invalid) const {
+  return getColumnNumber(getSpellingLoc(Loc), Invalid);
+}
+
 unsigned SourceManager::getExpansionColumnNumber(SourceLocation Loc,
                                                  bool *Invalid) const {
-  if (isInvalid(Loc, Invalid)) return 0;
-  FileIDAndOffset LocInfo = getDecomposedExpansionLoc(Loc);
-  return getColumnNumber(LocInfo.first, LocInfo.second, Invalid);
+  return getColumnNumber(getExpansionLoc(Loc), Invalid);
 }
 
 unsigned SourceManager::getPresumedColumnNumber(SourceLocation Loc,
@@ -1367,17 +1371,19 @@ unsigned SourceManager::getLineNumber(FileID FID, 
unsigned FilePos,
   return LineNo;
 }
 
-unsigned SourceManager::getSpellingLineNumber(SourceLocation Loc,
-                                              bool *Invalid) const {
+unsigned SourceManager::getLineNumber(SourceLocation Loc, bool *Invalid) const 
{
+  assert(Loc.isFileID());
   if (isInvalid(Loc, Invalid)) return 0;
-  FileIDAndOffset LocInfo = getDecomposedSpellingLoc(Loc);
+  FileIDAndOffset LocInfo = getDecomposedLoc(Loc);
   return getLineNumber(LocInfo.first, LocInfo.second);
 }
+unsigned SourceManager::getSpellingLineNumber(SourceLocation Loc,
+                                              bool *Invalid) const {
+  return getLineNumber(getSpellingLoc(Loc), Invalid);
+}
 unsigned SourceManager::getExpansionLineNumber(SourceLocation Loc,
                                                bool *Invalid) const {
-  if (isInvalid(Loc, Invalid)) return 0;
-  FileIDAndOffset LocInfo = getDecomposedExpansionLoc(Loc);
-  return getLineNumber(LocInfo.first, LocInfo.second);
+  return getLineNumber(getExpansionLoc(Loc), Invalid);
 }
 unsigned SourceManager::getPresumedLineNumber(SourceLocation Loc,
                                               bool *Invalid) const {

>From 05724b813b08fbbef031751a87d7a7ba23741e92 Mon Sep 17 00:00:00 2001
From: SKill <[email protected]>
Date: Wed, 5 Nov 2025 18:07:34 +0100
Subject: [PATCH 2/3] Move short methods to .h file

---
 clang/include/clang/Basic/SourceManager.h | 16 ++++++++++++----
 clang/lib/Basic/SourceManager.cpp         | 19 +------------------
 2 files changed, 13 insertions(+), 22 deletions(-)

diff --git a/clang/include/clang/Basic/SourceManager.h 
b/clang/include/clang/Basic/SourceManager.h
index a6984f7b06cbc..6b7daebb32c1a 100644
--- a/clang/include/clang/Basic/SourceManager.h
+++ b/clang/include/clang/Basic/SourceManager.h
@@ -1411,9 +1411,13 @@ class SourceManager : public 
RefCountedBase<SourceManager> {
                            bool *Invalid = nullptr) const;
   unsigned getColumnNumber(SourceLocation Loc, bool *Invalid = nullptr) const;
   unsigned getSpellingColumnNumber(SourceLocation Loc,
-                                   bool *Invalid = nullptr) const;
+                                   bool *Invalid = nullptr) const {
+    return getColumnNumber(getSpellingLoc(Loc), Invalid);
+  }
   unsigned getExpansionColumnNumber(SourceLocation Loc,
-                                    bool *Invalid = nullptr) const;
+                                    bool *Invalid = nullptr) const {
+    return getColumnNumber(getExpansionLoc(Loc), Invalid);
+  }
   unsigned getPresumedColumnNumber(SourceLocation Loc,
                                    bool *Invalid = nullptr) const;
 
@@ -1425,8 +1429,12 @@ class SourceManager : public 
RefCountedBase<SourceManager> {
   /// diagnostic.
   unsigned getLineNumber(FileID FID, unsigned FilePos, bool *Invalid = 
nullptr) const;
   unsigned getLineNumber(SourceLocation Loc, bool *Invalid = nullptr) const;
-  unsigned getSpellingLineNumber(SourceLocation Loc, bool *Invalid = nullptr) 
const;
-  unsigned getExpansionLineNumber(SourceLocation Loc, bool *Invalid = nullptr) 
const;
+  unsigned getSpellingLineNumber(SourceLocation Loc, bool *Invalid = nullptr) 
const {
+    return getLineNumber(getSpellingLoc(Loc), Invalid);
+  }
+  unsigned getExpansionLineNumber(SourceLocation Loc, bool *Invalid = nullptr) 
const {
+    return getLineNumber(getExpansionLoc(Loc), Invalid);
+  }
   unsigned getPresumedLineNumber(SourceLocation Loc, bool *Invalid = nullptr) 
const;
 
   /// Return the filename or buffer identifier of the buffer the
diff --git a/clang/lib/Basic/SourceManager.cpp 
b/clang/lib/Basic/SourceManager.cpp
index 01faeb67597a2..b6cc6ec9365f5 100644
--- a/clang/lib/Basic/SourceManager.cpp
+++ b/clang/lib/Basic/SourceManager.cpp
@@ -1167,16 +1167,6 @@ unsigned SourceManager::getColumnNumber(SourceLocation 
Loc,
   return getColumnNumber(LocInfo.first, LocInfo.second, Invalid);
 }
 
-unsigned SourceManager::getSpellingColumnNumber(SourceLocation Loc,
-                                                bool *Invalid) const {
-  return getColumnNumber(getSpellingLoc(Loc), Invalid);
-}
-
-unsigned SourceManager::getExpansionColumnNumber(SourceLocation Loc,
-                                                 bool *Invalid) const {
-  return getColumnNumber(getExpansionLoc(Loc), Invalid);
-}
-
 unsigned SourceManager::getPresumedColumnNumber(SourceLocation Loc,
                                                 bool *Invalid) const {
   PresumedLoc PLoc = getPresumedLoc(Loc);
@@ -1377,14 +1367,7 @@ unsigned SourceManager::getLineNumber(SourceLocation 
Loc, bool *Invalid) const {
   FileIDAndOffset LocInfo = getDecomposedLoc(Loc);
   return getLineNumber(LocInfo.first, LocInfo.second);
 }
-unsigned SourceManager::getSpellingLineNumber(SourceLocation Loc,
-                                              bool *Invalid) const {
-  return getLineNumber(getSpellingLoc(Loc), Invalid);
-}
-unsigned SourceManager::getExpansionLineNumber(SourceLocation Loc,
-                                               bool *Invalid) const {
-  return getLineNumber(getExpansionLoc(Loc), Invalid);
-}
+
 unsigned SourceManager::getPresumedLineNumber(SourceLocation Loc,
                                               bool *Invalid) const {
   PresumedLoc PLoc = getPresumedLoc(Loc);

>From 0f1968d58302d81da2f43ec255cecf8e11197b96 Mon Sep 17 00:00:00 2001
From: SKill <[email protected]>
Date: Wed, 5 Nov 2025 18:11:44 +0100
Subject: [PATCH 3/3] Update formatting

---
 clang/include/clang/Basic/SourceManager.h | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/clang/include/clang/Basic/SourceManager.h 
b/clang/include/clang/Basic/SourceManager.h
index 6b7daebb32c1a..bc9e97863556d 100644
--- a/clang/include/clang/Basic/SourceManager.h
+++ b/clang/include/clang/Basic/SourceManager.h
@@ -1429,10 +1429,12 @@ class SourceManager : public 
RefCountedBase<SourceManager> {
   /// diagnostic.
   unsigned getLineNumber(FileID FID, unsigned FilePos, bool *Invalid = 
nullptr) const;
   unsigned getLineNumber(SourceLocation Loc, bool *Invalid = nullptr) const;
-  unsigned getSpellingLineNumber(SourceLocation Loc, bool *Invalid = nullptr) 
const {
+  unsigned getSpellingLineNumber(SourceLocation Loc,
+                                 bool *Invalid = nullptr) const {
     return getLineNumber(getSpellingLoc(Loc), Invalid);
   }
-  unsigned getExpansionLineNumber(SourceLocation Loc, bool *Invalid = nullptr) 
const {
+  unsigned getExpansionLineNumber(SourceLocation Loc,
+                                  bool *Invalid = nullptr) const {
     return getLineNumber(getExpansionLoc(Loc), Invalid);
   }
   unsigned getPresumedLineNumber(SourceLocation Loc, bool *Invalid = nullptr) 
const;

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to