[Lldb-commits] [lldb] [lldb] Add std::*_ordering summary providers (PR #174195)
Sergei Druzhkov via lldb-commits
lldb-commits at lists.llvm.org
Thu Jan 8 06:24:11 PST 2026
https://github.com/DrSergei updated https://github.com/llvm/llvm-project/pull/174195
>From c87d522b6c7a332dd90e6e8e9ecf3c98d6e1fcb1 Mon Sep 17 00:00:00 2001
From: Sergei Druzhkov <serzhdruzhok at gmail.com>
Date: Fri, 2 Jan 2026 11:51:07 +0300
Subject: [PATCH 1/3] [lldb] Add std::*_ordering summary providers
---
.../Language/CPlusPlus/CPlusPlusLanguage.cpp | 33 ++++++
.../Plugins/Language/CPlusPlus/LibCxx.cpp | 100 ++++++++++++++++--
.../Plugins/Language/CPlusPlus/LibCxx.h | 12 +++
.../Plugins/Language/CPlusPlus/LibStdcpp.cpp | 88 +++++++++++++++
.../Plugins/Language/CPlusPlus/LibStdcpp.h | 12 +++
.../generic/ordering/Makefile | 4 +
.../ordering/TestDataFormatterStdOrdering.py | 42 ++++++++
.../generic/ordering/main.cpp | 16 +++
8 files changed, 300 insertions(+), 7 deletions(-)
create mode 100644 lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/ordering/Makefile
create mode 100644 lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/ordering/TestDataFormatterStdOrdering.py
create mode 100644 lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/ordering/main.cpp
diff --git a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
index 5c431e2faf0e4..02138a92adaf5 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
@@ -1286,6 +1286,22 @@ static void LoadLibCxxFormatters(lldb::TypeCategoryImplSP cpp_category_sp) {
TypeSummaryImplSP(new StringSummaryFormat(
eTypeOptionHideChildren | eTypeOptionHideValue,
"${var.__y_} ${var.__m_} ${var.__wdl_}")));
+
+ AddCXXSummary(cpp_category_sp,
+ lldb_private::formatters::LibcxxPartialOrderingSummaryProvider,
+ "libc++ std::partial_ordering summary provider",
+ "^std::__[[:alnum:]]+::partial_ordering$",
+ eTypeOptionHideChildren | eTypeOptionHideValue, true);
+ AddCXXSummary(cpp_category_sp,
+ lldb_private::formatters::LibcxxWeakOrderingSummaryProvider,
+ "libc++ std::weak_ordering summary provider",
+ "^std::__[[:alnum:]]+::weak_ordering$",
+ eTypeOptionHideChildren | eTypeOptionHideValue, true);
+ AddCXXSummary(cpp_category_sp,
+ lldb_private::formatters::LibcxxStrongOrderingSummaryProvider,
+ "libc++ std::strong_ordering summary provider",
+ "^std::__[[:alnum:]]+::strong_ordering$",
+ eTypeOptionHideChildren | eTypeOptionHideValue, true);
}
static void RegisterStdStringSummaryProvider(
@@ -1506,6 +1522,23 @@ static void LoadLibStdcppFormatters(lldb::TypeCategoryImplSP cpp_category_sp) {
lldb_private::formatters::StdlibCoroutineHandleSummaryProvider,
"libstdc++ std::coroutine_handle summary provider",
libstdcpp_std_coroutine_handle_regex, stl_summary_flags, true);
+
+ AddCXXSummary(
+ cpp_category_sp,
+ lldb_private::formatters::LibStdcppPartialOrderingSummaryProvider,
+ "libstdc++ std::partial_ordering summary provider",
+ "std::partial_ordering", eTypeOptionHideChildren | eTypeOptionHideValue,
+ false);
+ AddCXXSummary(cpp_category_sp,
+ lldb_private::formatters::LibStdcppWeakOrderingSummaryProvider,
+ "libstdc++ std::weak_ordering summary provider",
+ "std::weak_ordering",
+ eTypeOptionHideChildren | eTypeOptionHideValue, false);
+ AddCXXSummary(
+ cpp_category_sp,
+ lldb_private::formatters::LibStdcppStrongOrderingSummaryProvider,
+ "libstdc++ std::strong_ordering summary provider", "std::strong_ordering",
+ eTypeOptionHideChildren | eTypeOptionHideValue, false);
}
static lldb_private::SyntheticChildrenFrontEnd *
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp
index 141c5c9a2caf9..914abd9590c95 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp
@@ -256,6 +256,92 @@ bool lldb_private::formatters::LibcxxUniquePointerSummaryProvider(
return true;
}
+static std::optional<int64_t> LibcxxExtractOrderingValue(ValueObject &valobj) {
+ lldb::ValueObjectSP value_sp = valobj.GetChildMemberWithName("__value_");
+ if (!value_sp)
+ return std::nullopt;
+ bool success;
+ int64_t value = value_sp->GetValueAsSigned(0, &success);
+ if (!success)
+ return std::nullopt;
+ return value;
+}
+
+bool lldb_private::formatters::LibcxxPartialOrderingSummaryProvider(
+ ValueObject &valobj, Stream &stream, const TypeSummaryOptions &options) {
+ std::optional<int64_t> value = LibcxxExtractOrderingValue(valobj);
+ if (!value) {
+ stream << "Summary Unavailable";
+ return true;
+ }
+ switch (*value) {
+ case -1:
+ stream << "less";
+ break;
+ case 0:
+ stream << "equivalent";
+ break;
+ case 1:
+ stream << "greater";
+ break;
+ case -127:
+ stream << "unordered";
+ break;
+ default:
+ stream << "Invalid partial ordering value";
+ break;
+ }
+ return true;
+}
+
+bool lldb_private::formatters::LibcxxWeakOrderingSummaryProvider(
+ ValueObject &valobj, Stream &stream, const TypeSummaryOptions &options) {
+ std::optional<int64_t> value = LibcxxExtractOrderingValue(valobj);
+ if (!value) {
+ stream << "Summary Unavailable";
+ return true;
+ }
+ switch (*value) {
+ case -1:
+ stream << "less";
+ break;
+ case 0:
+ stream << "equivalent";
+ break;
+ case 1:
+ stream << "greater";
+ break;
+ default:
+ stream << "Invalid weak ordering value";
+ break;
+ }
+ return true;
+}
+
+bool lldb_private::formatters::LibcxxStrongOrderingSummaryProvider(
+ ValueObject &valobj, Stream &stream, const TypeSummaryOptions &options) {
+ std::optional<int64_t> value = LibcxxExtractOrderingValue(valobj);
+ if (!value) {
+ stream << "Summary Unavailable";
+ return true;
+ }
+ switch (*value) {
+ case -1:
+ stream << "less";
+ break;
+ case 0:
+ stream << "equal";
+ break;
+ case 1:
+ stream << "greater";
+ break;
+ default:
+ stream << "Invalid strong ordering value";
+ break;
+ }
+ return true;
+}
+
/*
(lldb) fr var ibeg --raw --ptr-depth 1 -T
(std::__1::__wrap_iter<int *>) ibeg = {
@@ -495,8 +581,8 @@ ExtractLibcxxStringInfo(ValueObject &valobj) {
StringLayout layout =
*index_or_err == 0 ? StringLayout::DSC : StringLayout::CSD;
- bool short_mode = false; // this means the string is in short-mode and the
- // data is stored inline
+ bool short_mode = false; // this means the string is in short-mode and the
+ // data is stored inline
bool using_bitmasks = true; // Whether the class uses bitmasks for the mode
// flag (pre-D123580).
uint64_t size;
@@ -639,23 +725,23 @@ bool lldb_private::formatters::LibcxxStringSummaryProviderUTF32(
}
static std::tuple<bool, ValueObjectSP, size_t>
-LibcxxExtractStringViewData(ValueObject& valobj) {
+LibcxxExtractStringViewData(ValueObject &valobj) {
auto dataobj = GetChildMemberWithName(
valobj, {ConstString("__data_"), ConstString("__data")});
auto sizeobj = GetChildMemberWithName(
valobj, {ConstString("__size_"), ConstString("__size")});
if (!dataobj || !sizeobj)
- return std::make_tuple<bool,ValueObjectSP,size_t>(false, {}, {});
+ return std::make_tuple<bool, ValueObjectSP, size_t>(false, {}, {});
if (!dataobj->GetError().Success() || !sizeobj->GetError().Success())
- return std::make_tuple<bool,ValueObjectSP,size_t>(false, {}, {});
+ return std::make_tuple<bool, ValueObjectSP, size_t>(false, {}, {});
bool success{false};
uint64_t size = sizeobj->GetValueAsUnsigned(0, &success);
if (!success)
- return std::make_tuple<bool,ValueObjectSP,size_t>(false, {}, {});
+ return std::make_tuple<bool, ValueObjectSP, size_t>(false, {}, {});
- return std::make_tuple(true,dataobj,size);
+ return std::make_tuple(true, dataobj, size);
}
template <StringPrinter::StringElementType element_type>
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxx.h b/lldb/source/Plugins/Language/CPlusPlus/LibCxx.h
index 8fd29288da35f..69cca8ee621d9 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibCxx.h
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxx.h
@@ -92,6 +92,18 @@ bool LibcxxFunctionSummaryProvider(
ValueObject &valobj, Stream &stream,
const TypeSummaryOptions &options); // libc++ std::function<>
+bool LibcxxPartialOrderingSummaryProvider(
+ ValueObject &valobj, Stream &stream,
+ const TypeSummaryOptions &options); // libc++ std::partial_ordering
+
+bool LibcxxWeakOrderingSummaryProvider(
+ ValueObject &valobj, Stream &stream,
+ const TypeSummaryOptions &options); // libc++ std::weak_ordering
+
+bool LibcxxStrongOrderingSummaryProvider(
+ ValueObject &valobj, Stream &stream,
+ const TypeSummaryOptions &options); // libc++ std::strong_ordering
+
SyntheticChildrenFrontEnd *
LibcxxVectorBoolSyntheticFrontEndCreator(CXXSyntheticChildren *,
lldb::ValueObjectSP);
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibStdcpp.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibStdcpp.cpp
index 650f2332b9d23..1f64f19d5c89e 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibStdcpp.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibStdcpp.cpp
@@ -494,3 +494,91 @@ bool formatters::LibStdcppVariantSummaryProvider(
stream << " Active Type = " << active_type.GetDisplayTypeName() << " ";
return true;
}
+
+static std::optional<int64_t>
+LibStdcppExtractOrderingValue(ValueObject &valobj) {
+ lldb::ValueObjectSP value_sp = valobj.GetChildMemberWithName("_M_value");
+ if (!value_sp)
+ return std::nullopt;
+ bool success;
+ int64_t value = value_sp->GetValueAsSigned(0, &success);
+ if (!success)
+ return std::nullopt;
+ return value;
+}
+
+bool lldb_private::formatters::LibStdcppPartialOrderingSummaryProvider(
+ ValueObject &valobj, Stream &stream, const TypeSummaryOptions &options) {
+ std::optional<int64_t> value = LibStdcppExtractOrderingValue(valobj);
+ if (!value) {
+ stream << "Summary Unavailable";
+ return true;
+ }
+ switch (*value) {
+ case -1:
+ stream << "less";
+ break;
+ case 0:
+ stream << "equivalent";
+ break;
+ case 1:
+ stream << "greater";
+ break;
+ case -128:
+ case 2:
+ stream << "unordered";
+ break;
+ default:
+ stream << "Invalid partial ordering value";
+ break;
+ }
+ return true;
+}
+
+bool lldb_private::formatters::LibStdcppWeakOrderingSummaryProvider(
+ ValueObject &valobj, Stream &stream, const TypeSummaryOptions &options) {
+ std::optional<int64_t> value = LibStdcppExtractOrderingValue(valobj);
+ if (!value) {
+ stream << "Summary Unavailable";
+ return true;
+ }
+ switch (*value) {
+ case -1:
+ stream << "less";
+ break;
+ case 0:
+ stream << "equivalent";
+ break;
+ case 1:
+ stream << "greater";
+ break;
+ default:
+ stream << "Invalid weak ordering value";
+ break;
+ }
+ return true;
+}
+
+bool lldb_private::formatters::LibStdcppStrongOrderingSummaryProvider(
+ ValueObject &valobj, Stream &stream, const TypeSummaryOptions &options) {
+ std::optional<int64_t> value = LibStdcppExtractOrderingValue(valobj);
+ if (!value) {
+ stream << "Summary Unavailable";
+ return true;
+ }
+ switch (*value) {
+ case -1:
+ stream << "less";
+ break;
+ case 0:
+ stream << "equal";
+ break;
+ case 1:
+ stream << "greater";
+ break;
+ default:
+ stream << "Invalid strong ordering value";
+ break;
+ }
+ return true;
+}
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibStdcpp.h b/lldb/source/Plugins/Language/CPlusPlus/LibStdcpp.h
index ffa5ea7bb084e..bc67885787bc2 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibStdcpp.h
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibStdcpp.h
@@ -44,6 +44,18 @@ bool LibStdcppVariantSummaryProvider(
ValueObject &valobj, Stream &stream,
const TypeSummaryOptions &options); // libstdc++ std::variant<>
+bool LibStdcppPartialOrderingSummaryProvider(
+ ValueObject &valobj, Stream &stream,
+ const TypeSummaryOptions &options); // libstdc++ std::partial_ordering
+
+bool LibStdcppWeakOrderingSummaryProvider(
+ ValueObject &valobj, Stream &stream,
+ const TypeSummaryOptions &options); // libstdc++ std::weak_ordering
+
+bool LibStdcppStrongOrderingSummaryProvider(
+ ValueObject &valobj, Stream &stream,
+ const TypeSummaryOptions &options); // libstdc++ std::strong_ordering
+
SyntheticChildrenFrontEnd *
LibstdcppMapIteratorSyntheticFrontEndCreator(CXXSyntheticChildren *,
lldb::ValueObjectSP);
diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/ordering/Makefile b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/ordering/Makefile
new file mode 100644
index 0000000000000..4f79c0a900c3a
--- /dev/null
+++ b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/ordering/Makefile
@@ -0,0 +1,4 @@
+CXX_SOURCES := main.cpp
+CXXFLAGS_EXTRAS := -std=c++20
+
+include Makefile.rules
diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/ordering/TestDataFormatterStdOrdering.py b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/ordering/TestDataFormatterStdOrdering.py
new file mode 100644
index 0000000000000..aa0b08249030a
--- /dev/null
+++ b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/ordering/TestDataFormatterStdOrdering.py
@@ -0,0 +1,42 @@
+"""
+Test std::*_ordering summary.
+"""
+
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+
+class StdOrderingTestCase(TestBase):
+ def do_test(self):
+ lldbutil.run_to_source_breakpoint(
+ self, "// break here", lldb.SBFileSpec("main.cpp")
+ )
+
+ self.expect(
+ "frame variable",
+ substrs=[
+ "(std::partial_ordering) po_less = less",
+ "(std::partial_ordering) po_equivalent = equivalent",
+ "(std::partial_ordering) po_greater = greater",
+ "(std::partial_ordering) po_unordered = unordered",
+ "(std::weak_ordering) wo_less = less",
+ "(std::weak_ordering) wo_equivalent = equivalent",
+ "(std::weak_ordering) wo_greater = greater",
+ "(std::strong_ordering) so_less = less",
+ "(std::strong_ordering) so_equal = equal",
+ "(std::strong_ordering) so_equivalent = equal",
+ "(std::strong_ordering) so_greater = greater",
+ ],
+ )
+
+ @add_test_categories(["libc++"])
+ def test_libcxx(self):
+ self.build(dictionary={"USE_LIBCPP": 1})
+ self.do_test()
+
+ @add_test_categories(["libstdcxx"])
+ def test_libstdcxx(self):
+ self.build(dictionary={"USE_LIBSTDCPP": 1})
+ self.do_test()
diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/ordering/main.cpp b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/ordering/main.cpp
new file mode 100644
index 0000000000000..2135d5558c1e7
--- /dev/null
+++ b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/ordering/main.cpp
@@ -0,0 +1,16 @@
+#include <compare>
+
+int main() {
+ auto po_less = std::partial_ordering::less;
+ auto po_equivalent = std::partial_ordering::equivalent;
+ auto po_greater = std::partial_ordering::greater;
+ auto po_unordered = std::partial_ordering::unordered;
+ auto wo_less = std::weak_ordering::less;
+ auto wo_equivalent = std::weak_ordering::equivalent;
+ auto wo_greater = std::weak_ordering::greater;
+ auto so_less = std::strong_ordering::less;
+ auto so_equal = std::strong_ordering::equal;
+ auto so_equivalent = std::strong_ordering::equivalent;
+ auto so_greater = std::strong_ordering::greater;
+ return 0; // break here
+}
>From c51723db8acf62a86bc40f49cd5e66d9d175f5c4 Mon Sep 17 00:00:00 2001
From: Sergei Druzhkov <serzhdruzhok at gmail.com>
Date: Fri, 2 Jan 2026 19:26:31 +0300
Subject: [PATCH 2/3] Fix review comments
---
.../source/Plugins/Language/CPlusPlus/LibStdcpp.cpp | 9 +++------
.../ordering/TestDataFormatterStdOrdering.py | 13 +++++++++++++
2 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibStdcpp.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibStdcpp.cpp
index 1f64f19d5c89e..7f55711c2ad0d 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibStdcpp.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibStdcpp.cpp
@@ -529,8 +529,7 @@ bool lldb_private::formatters::LibStdcppPartialOrderingSummaryProvider(
stream << "unordered";
break;
default:
- stream << "Invalid partial ordering value";
- break;
+ return false;
}
return true;
}
@@ -553,8 +552,7 @@ bool lldb_private::formatters::LibStdcppWeakOrderingSummaryProvider(
stream << "greater";
break;
default:
- stream << "Invalid weak ordering value";
- break;
+ return false;
}
return true;
}
@@ -577,8 +575,7 @@ bool lldb_private::formatters::LibStdcppStrongOrderingSummaryProvider(
stream << "greater";
break;
default:
- stream << "Invalid strong ordering value";
- break;
+ return false;
}
return true;
}
diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/ordering/TestDataFormatterStdOrdering.py b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/ordering/TestDataFormatterStdOrdering.py
index aa0b08249030a..78a1946885985 100644
--- a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/ordering/TestDataFormatterStdOrdering.py
+++ b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/ordering/TestDataFormatterStdOrdering.py
@@ -31,6 +31,19 @@ def do_test(self):
],
)
+ frame = self.frame()
+ self.assertEqual(frame.FindVariable("po_less").summary, "less")
+ self.assertEqual(frame.FindVariable("po_equivalent").summary, "equivalent")
+ self.assertEqual(frame.FindVariable("po_greater").summary, "greater")
+ self.assertEqual(frame.FindVariable("po_unordered").summary, "unordered")
+ self.assertEqual(frame.FindVariable("wo_less").summary, "less")
+ self.assertEqual(frame.FindVariable("wo_equivalent").summary, "equivalent")
+ self.assertEqual(frame.FindVariable("wo_greater").summary, "greater")
+ self.assertEqual(frame.FindVariable("so_less").summary, "less")
+ self.assertEqual(frame.FindVariable("so_equal").summary, "equal")
+ self.assertEqual(frame.FindVariable("so_equivalent").summary, "equal")
+ self.assertEqual(frame.FindVariable("so_greater").summary, "greater")
+
@add_test_categories(["libc++"])
def test_libcxx(self):
self.build(dictionary={"USE_LIBCPP": 1})
>From a298ea919fb52fb6db0a77b0f13c757ca9db01a8 Mon Sep 17 00:00:00 2001
From: Sergei Druzhkov <serzhdruzhok at gmail.com>
Date: Fri, 2 Jan 2026 19:29:46 +0300
Subject: [PATCH 3/3] Remove libc++ changes
---
.../Language/CPlusPlus/CPlusPlusLanguage.cpp | 16 ---
.../Plugins/Language/CPlusPlus/LibCxx.cpp | 100 ++----------------
.../Plugins/Language/CPlusPlus/LibCxx.h | 12 ---
.../ordering/TestDataFormatterStdOrdering.py | 5 -
4 files changed, 7 insertions(+), 126 deletions(-)
diff --git a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
index 02138a92adaf5..bdc67a004b06c 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
@@ -1286,22 +1286,6 @@ static void LoadLibCxxFormatters(lldb::TypeCategoryImplSP cpp_category_sp) {
TypeSummaryImplSP(new StringSummaryFormat(
eTypeOptionHideChildren | eTypeOptionHideValue,
"${var.__y_} ${var.__m_} ${var.__wdl_}")));
-
- AddCXXSummary(cpp_category_sp,
- lldb_private::formatters::LibcxxPartialOrderingSummaryProvider,
- "libc++ std::partial_ordering summary provider",
- "^std::__[[:alnum:]]+::partial_ordering$",
- eTypeOptionHideChildren | eTypeOptionHideValue, true);
- AddCXXSummary(cpp_category_sp,
- lldb_private::formatters::LibcxxWeakOrderingSummaryProvider,
- "libc++ std::weak_ordering summary provider",
- "^std::__[[:alnum:]]+::weak_ordering$",
- eTypeOptionHideChildren | eTypeOptionHideValue, true);
- AddCXXSummary(cpp_category_sp,
- lldb_private::formatters::LibcxxStrongOrderingSummaryProvider,
- "libc++ std::strong_ordering summary provider",
- "^std::__[[:alnum:]]+::strong_ordering$",
- eTypeOptionHideChildren | eTypeOptionHideValue, true);
}
static void RegisterStdStringSummaryProvider(
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp
index 914abd9590c95..141c5c9a2caf9 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp
@@ -256,92 +256,6 @@ bool lldb_private::formatters::LibcxxUniquePointerSummaryProvider(
return true;
}
-static std::optional<int64_t> LibcxxExtractOrderingValue(ValueObject &valobj) {
- lldb::ValueObjectSP value_sp = valobj.GetChildMemberWithName("__value_");
- if (!value_sp)
- return std::nullopt;
- bool success;
- int64_t value = value_sp->GetValueAsSigned(0, &success);
- if (!success)
- return std::nullopt;
- return value;
-}
-
-bool lldb_private::formatters::LibcxxPartialOrderingSummaryProvider(
- ValueObject &valobj, Stream &stream, const TypeSummaryOptions &options) {
- std::optional<int64_t> value = LibcxxExtractOrderingValue(valobj);
- if (!value) {
- stream << "Summary Unavailable";
- return true;
- }
- switch (*value) {
- case -1:
- stream << "less";
- break;
- case 0:
- stream << "equivalent";
- break;
- case 1:
- stream << "greater";
- break;
- case -127:
- stream << "unordered";
- break;
- default:
- stream << "Invalid partial ordering value";
- break;
- }
- return true;
-}
-
-bool lldb_private::formatters::LibcxxWeakOrderingSummaryProvider(
- ValueObject &valobj, Stream &stream, const TypeSummaryOptions &options) {
- std::optional<int64_t> value = LibcxxExtractOrderingValue(valobj);
- if (!value) {
- stream << "Summary Unavailable";
- return true;
- }
- switch (*value) {
- case -1:
- stream << "less";
- break;
- case 0:
- stream << "equivalent";
- break;
- case 1:
- stream << "greater";
- break;
- default:
- stream << "Invalid weak ordering value";
- break;
- }
- return true;
-}
-
-bool lldb_private::formatters::LibcxxStrongOrderingSummaryProvider(
- ValueObject &valobj, Stream &stream, const TypeSummaryOptions &options) {
- std::optional<int64_t> value = LibcxxExtractOrderingValue(valobj);
- if (!value) {
- stream << "Summary Unavailable";
- return true;
- }
- switch (*value) {
- case -1:
- stream << "less";
- break;
- case 0:
- stream << "equal";
- break;
- case 1:
- stream << "greater";
- break;
- default:
- stream << "Invalid strong ordering value";
- break;
- }
- return true;
-}
-
/*
(lldb) fr var ibeg --raw --ptr-depth 1 -T
(std::__1::__wrap_iter<int *>) ibeg = {
@@ -581,8 +495,8 @@ ExtractLibcxxStringInfo(ValueObject &valobj) {
StringLayout layout =
*index_or_err == 0 ? StringLayout::DSC : StringLayout::CSD;
- bool short_mode = false; // this means the string is in short-mode and the
- // data is stored inline
+ bool short_mode = false; // this means the string is in short-mode and the
+ // data is stored inline
bool using_bitmasks = true; // Whether the class uses bitmasks for the mode
// flag (pre-D123580).
uint64_t size;
@@ -725,23 +639,23 @@ bool lldb_private::formatters::LibcxxStringSummaryProviderUTF32(
}
static std::tuple<bool, ValueObjectSP, size_t>
-LibcxxExtractStringViewData(ValueObject &valobj) {
+LibcxxExtractStringViewData(ValueObject& valobj) {
auto dataobj = GetChildMemberWithName(
valobj, {ConstString("__data_"), ConstString("__data")});
auto sizeobj = GetChildMemberWithName(
valobj, {ConstString("__size_"), ConstString("__size")});
if (!dataobj || !sizeobj)
- return std::make_tuple<bool, ValueObjectSP, size_t>(false, {}, {});
+ return std::make_tuple<bool,ValueObjectSP,size_t>(false, {}, {});
if (!dataobj->GetError().Success() || !sizeobj->GetError().Success())
- return std::make_tuple<bool, ValueObjectSP, size_t>(false, {}, {});
+ return std::make_tuple<bool,ValueObjectSP,size_t>(false, {}, {});
bool success{false};
uint64_t size = sizeobj->GetValueAsUnsigned(0, &success);
if (!success)
- return std::make_tuple<bool, ValueObjectSP, size_t>(false, {}, {});
+ return std::make_tuple<bool,ValueObjectSP,size_t>(false, {}, {});
- return std::make_tuple(true, dataobj, size);
+ return std::make_tuple(true,dataobj,size);
}
template <StringPrinter::StringElementType element_type>
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxx.h b/lldb/source/Plugins/Language/CPlusPlus/LibCxx.h
index 69cca8ee621d9..8fd29288da35f 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibCxx.h
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxx.h
@@ -92,18 +92,6 @@ bool LibcxxFunctionSummaryProvider(
ValueObject &valobj, Stream &stream,
const TypeSummaryOptions &options); // libc++ std::function<>
-bool LibcxxPartialOrderingSummaryProvider(
- ValueObject &valobj, Stream &stream,
- const TypeSummaryOptions &options); // libc++ std::partial_ordering
-
-bool LibcxxWeakOrderingSummaryProvider(
- ValueObject &valobj, Stream &stream,
- const TypeSummaryOptions &options); // libc++ std::weak_ordering
-
-bool LibcxxStrongOrderingSummaryProvider(
- ValueObject &valobj, Stream &stream,
- const TypeSummaryOptions &options); // libc++ std::strong_ordering
-
SyntheticChildrenFrontEnd *
LibcxxVectorBoolSyntheticFrontEndCreator(CXXSyntheticChildren *,
lldb::ValueObjectSP);
diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/ordering/TestDataFormatterStdOrdering.py b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/ordering/TestDataFormatterStdOrdering.py
index 78a1946885985..deaa76459cc8e 100644
--- a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/ordering/TestDataFormatterStdOrdering.py
+++ b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/ordering/TestDataFormatterStdOrdering.py
@@ -44,11 +44,6 @@ def do_test(self):
self.assertEqual(frame.FindVariable("so_equivalent").summary, "equal")
self.assertEqual(frame.FindVariable("so_greater").summary, "greater")
- @add_test_categories(["libc++"])
- def test_libcxx(self):
- self.build(dictionary={"USE_LIBCPP": 1})
- self.do_test()
-
@add_test_categories(["libstdcxx"])
def test_libstdcxx(self):
self.build(dictionary={"USE_LIBSTDCPP": 1})
More information about the lldb-commits
mailing list