[Lldb-commits] [lldb] 74e1554 - [lldb] Fix the sorting function for diagnostics (#113220)

via lldb-commits lldb-commits at lists.llvm.org
Mon Oct 21 14:03:52 PDT 2024


Author: Adrian Prantl
Date: 2024-10-21T14:03:49-07:00
New Revision: 74e1554d7b4013a975cf5fb8df64a6419bb14a45

URL: https://github.com/llvm/llvm-project/commit/74e1554d7b4013a975cf5fb8df64a6419bb14a45
DIFF: https://github.com/llvm/llvm-project/commit/74e1554d7b4013a975cf5fb8df64a6419bb14a45.diff

LOG: [lldb] Fix the sorting function for diagnostics (#113220)

Added: 
    

Modified: 
    lldb/source/Utility/DiagnosticsRendering.cpp
    lldb/unittests/Utility/DiagnosticsRenderingTest.cpp

Removed: 
    


################################################################################
diff  --git a/lldb/source/Utility/DiagnosticsRendering.cpp b/lldb/source/Utility/DiagnosticsRendering.cpp
index d28a9ab8958ba6..208733ffc86853 100644
--- a/lldb/source/Utility/DiagnosticsRendering.cpp
+++ b/lldb/source/Utility/DiagnosticsRendering.cpp
@@ -99,10 +99,10 @@ void RenderDiagnosticDetails(Stream &stream,
 
   // Sort the diagnostics.
   auto sort = [](auto &ds) {
-    llvm::sort(ds.begin(), ds.end(), [](auto &d1, auto &d2) {
+    std::stable_sort(ds.begin(), ds.end(), [](auto &d1, auto &d2) {
       auto l1 = d1.source_location.value_or(DiagnosticDetail::SourceLocation{});
       auto l2 = d2.source_location.value_or(DiagnosticDetail::SourceLocation{});
-      return std::pair(l1.line, l2.column) < std::pair(l1.line, l2.column);
+      return std::tie(l1.line, l1.column) < std::tie(l2.line, l2.column);
     });
   };
   sort(remaining_details);

diff  --git a/lldb/unittests/Utility/DiagnosticsRenderingTest.cpp b/lldb/unittests/Utility/DiagnosticsRenderingTest.cpp
index 39d8b1d558420d..ad2ebf7ffe1e2f 100644
--- a/lldb/unittests/Utility/DiagnosticsRenderingTest.cpp
+++ b/lldb/unittests/Utility/DiagnosticsRenderingTest.cpp
@@ -46,16 +46,20 @@ TEST_F(ErrorDisplayTest, RenderStatus) {
     std::string result =
         Render({DiagnosticDetail{loc2, eSeverityError, "X", "X"},
                 DiagnosticDetail{loc1, eSeverityError, "Y", "Y"}});
-    ASSERT_LT(StringRef(result).find("Y"), StringRef(result).find("X"));
+    // Unintuitively the later diagnostic appears first in the string:
+    //    ^   ^
+    //    |   second
+    //    first
+    ASSERT_GT(StringRef(result).find("Y"), StringRef(result).find("X"));
   }
   {
     // Test that diagnostics in reverse order are emitted correctly.
-    SourceLocation loc1 = {FileSpec{"a.c"}, 2, 10, 0, false, true};
+    SourceLocation loc1 = {FileSpec{"a.c"}, 1, 10, 0, false, true};
     SourceLocation loc2 = {FileSpec{"a.c"}, 1, 20, 0, false, true};
     std::string result =
         Render({DiagnosticDetail{loc2, eSeverityError, "X", "X"},
                 DiagnosticDetail{loc1, eSeverityError, "Y", "Y"}});
-    ASSERT_LT(StringRef(result).find("Y"), StringRef(result).find("X"));
+    ASSERT_GT(StringRef(result).find("Y"), StringRef(result).find("X"));
   }
   {
     // Test that range diagnostics are emitted correctly.


        


More information about the lldb-commits mailing list