[Lldb-commits] [lldb] [lldb] Fix the sorting function for diagnostics (PR #113220)
Adrian Prantl via lldb-commits
lldb-commits at lists.llvm.org
Mon Oct 21 13:58:11 PDT 2024
https://github.com/adrian-prantl created https://github.com/llvm/llvm-project/pull/113220
None
>From 417e6f4c27d1603d118dadd8327e57b766626e6d Mon Sep 17 00:00:00 2001
From: Adrian Prantl <aprantl at apple.com>
Date: Mon, 21 Oct 2024 13:57:09 -0700
Subject: [PATCH] [lldb] Fix the sorting function for diagnostics
---
lldb/source/Utility/DiagnosticsRendering.cpp | 4 ++--
lldb/unittests/Utility/DiagnosticsRenderingTest.cpp | 10 +++++++---
2 files changed, 9 insertions(+), 5 deletions(-)
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