https://github.com/localspook updated 
https://github.com/llvm/llvm-project/pull/174524

>From 0f765712a6c5586478656998f15a3b581f09d704 Mon Sep 17 00:00:00 2001
From: Victor Chernyakin <[email protected]>
Date: Mon, 5 Jan 2026 19:24:37 -0800
Subject: [PATCH 1/3] [LLVM][ADT] Add specialization of `DenseMapInfo` for
 `SourceRange`

---
 clang/include/clang/Basic/SourceLocation.h | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/clang/include/clang/Basic/SourceLocation.h 
b/clang/include/clang/Basic/SourceLocation.h
index 14543cc41a38e..85fe65901d207 100644
--- a/clang/include/clang/Basic/SourceLocation.h
+++ b/clang/include/clang/Basic/SourceLocation.h
@@ -521,6 +521,27 @@ namespace llvm {
     static void Profile(const clang::SourceLocation &X, FoldingSetNodeID &ID);
   };
 
+  template <> struct DenseMapInfo<clang::SourceRange, void> {
+    static clang::SourceRange getEmptyKey() {
+      return {DenseMapInfo<clang::SourceLocation>::getEmptyKey(),
+              DenseMapInfo<clang::SourceLocation>::getEmptyKey()};
+    }
+
+    static clang::SourceRange getTombstoneKey() {
+      return {DenseMapInfo<clang::SourceLocation>::getTombstoneKey(),
+              DenseMapInfo<clang::SourceLocation>::getTombstoneKey()};
+    }
+
+    static unsigned getHashValue(clang::SourceRange Range) {
+      return detail::combineHashValue(Range.getBegin().getHashValue(),
+                                      Range.getEnd().getHashValue());
+    }
+
+    static bool isEqual(clang::SourceRange LHS, clang::SourceRange RHS) {
+      return LHS == RHS;
+    }
+  };
+
 } // namespace llvm
 
 #endif // LLVM_CLANG_BASIC_SOURCELOCATION_H

>From adad67045ac2bec6d79b9f2ea3fe5e294bef18c1 Mon Sep 17 00:00:00 2001
From: Victor Chernyakin <[email protected]>
Date: Tue, 6 Jan 2026 07:29:33 -0800
Subject: [PATCH 2/3] Add unit tests, slightly simplify implementation

---
 clang/include/clang/Basic/SourceLocation.h  |  8 +++-----
 clang/unittests/Basic/SourceManagerTest.cpp | 14 ++++++++++++++
 2 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/clang/include/clang/Basic/SourceLocation.h 
b/clang/include/clang/Basic/SourceLocation.h
index 85fe65901d207..bd0038d5ae1ae 100644
--- a/clang/include/clang/Basic/SourceLocation.h
+++ b/clang/include/clang/Basic/SourceLocation.h
@@ -521,15 +521,13 @@ namespace llvm {
     static void Profile(const clang::SourceLocation &X, FoldingSetNodeID &ID);
   };
 
-  template <> struct DenseMapInfo<clang::SourceRange, void> {
+  template <> struct DenseMapInfo<clang::SourceRange> {
     static clang::SourceRange getEmptyKey() {
-      return {DenseMapInfo<clang::SourceLocation>::getEmptyKey(),
-              DenseMapInfo<clang::SourceLocation>::getEmptyKey()};
+      return DenseMapInfo<clang::SourceLocation>::getEmptyKey();
     }
 
     static clang::SourceRange getTombstoneKey() {
-      return {DenseMapInfo<clang::SourceLocation>::getTombstoneKey(),
-              DenseMapInfo<clang::SourceLocation>::getTombstoneKey()};
+      return DenseMapInfo<clang::SourceLocation>::getTombstoneKey();
     }
 
     static unsigned getHashValue(clang::SourceRange Range) {
diff --git a/clang/unittests/Basic/SourceManagerTest.cpp 
b/clang/unittests/Basic/SourceManagerTest.cpp
index 04b23dd13ba3e..59d2afa427891 100644
--- a/clang/unittests/Basic/SourceManagerTest.cpp
+++ b/clang/unittests/Basic/SourceManagerTest.cpp
@@ -379,6 +379,20 @@ TEST_F(SourceManagerTest, getInvalidBOM) {
             "UTF-32 (LE)");
 }
 
+TEST_F(SourceManagerTest, sourceRangeWorksWithDenseSet) {
+  llvm::DenseSet<SourceRange> Set;
+  SourceRange TestRange = {SourceLocation::getFromRawEncoding(10),
+                           SourceLocation::getFromRawEncoding(11)};
+  ASSERT_EQ(Set.size(), 0);
+  Set.insert(TestRange);
+  ASSERT_EQ(Set.size(), 1);
+  ASSERT_TRUE(Set.contains(TestRange));
+  ASSERT_FALSE(Set.contains({SourceLocation::getFromRawEncoding(10),
+                             SourceLocation::getFromRawEncoding(10)}));
+  Set.erase(TestRange);
+  ASSERT_EQ(Set.size(), 0);
+}
+
 // Regression test - there was an out of bound access for buffers not 
terminated by zero.
 TEST_F(SourceManagerTest, getLineNumber) {
   const unsigned pageSize = llvm::sys::Process::getPageSizeEstimate();

>From 437be70c8ff7e77352cf092c742bdf34579c7cfd Mon Sep 17 00:00:00 2001
From: Victor Chernyakin <[email protected]>
Date: Tue, 6 Jan 2026 09:00:20 -0700
Subject: [PATCH 3/3] Fix integer signedness

---
 clang/unittests/Basic/SourceManagerTest.cpp | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/clang/unittests/Basic/SourceManagerTest.cpp 
b/clang/unittests/Basic/SourceManagerTest.cpp
index 59d2afa427891..42e6eade55a0e 100644
--- a/clang/unittests/Basic/SourceManagerTest.cpp
+++ b/clang/unittests/Basic/SourceManagerTest.cpp
@@ -383,14 +383,14 @@ TEST_F(SourceManagerTest, sourceRangeWorksWithDenseSet) {
   llvm::DenseSet<SourceRange> Set;
   SourceRange TestRange = {SourceLocation::getFromRawEncoding(10),
                            SourceLocation::getFromRawEncoding(11)};
-  ASSERT_EQ(Set.size(), 0);
+  ASSERT_EQ(Set.size(), 0U);
   Set.insert(TestRange);
-  ASSERT_EQ(Set.size(), 1);
+  ASSERT_EQ(Set.size(), 1U);
   ASSERT_TRUE(Set.contains(TestRange));
   ASSERT_FALSE(Set.contains({SourceLocation::getFromRawEncoding(10),
                              SourceLocation::getFromRawEncoding(10)}));
   Set.erase(TestRange);
-  ASSERT_EQ(Set.size(), 0);
+  ASSERT_EQ(Set.size(), 0U);
 }
 
 // Regression test - there was an out of bound access for buffers not 
terminated by zero.

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

Reply via email to