llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-lldb Author: Sergei Druzhkov (DrSergei) <details> <summary>Changes</summary> Added libcxx std::*_ordering summary providers similar to #<!-- -->174195. --- Full diff: https://github.com/llvm/llvm-project/pull/174227.diff 4 Files Affected: - (modified) lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp (+16) - (modified) lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp (+77) - (modified) lldb/source/Plugins/Language/CPlusPlus/LibCxx.h (+12) - (modified) lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/ordering/TestDataFormatterStdOrdering.py (+5) ``````````diff diff --git a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp index bdc67a004b06c..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( diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp index 141c5c9a2caf9..dd3da7ca0cdcd 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp @@ -256,6 +256,83 @@ 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) + return false; + switch (*value) { + case -1: + stream << "less"; + break; + case 0: + stream << "equivalent"; + break; + case 1: + stream << "greater"; + break; + case -127: + stream << "unordered"; + break; + default: + return false; + } + return true; +} + +bool lldb_private::formatters::LibcxxWeakOrderingSummaryProvider( + ValueObject &valobj, Stream &stream, const TypeSummaryOptions &options) { + std::optional<int64_t> value = LibcxxExtractOrderingValue(valobj); + if (!value) + return false; + switch (*value) { + case -1: + stream << "less"; + break; + case 0: + stream << "equivalent"; + break; + case 1: + stream << "greater"; + break; + default: + return false; + } + return true; +} + +bool lldb_private::formatters::LibcxxStrongOrderingSummaryProvider( + ValueObject &valobj, Stream &stream, const TypeSummaryOptions &options) { + std::optional<int64_t> value = LibcxxExtractOrderingValue(valobj); + if (!value) + return false; + switch (*value) { + case -1: + stream << "less"; + break; + case 0: + stream << "equal"; + break; + case 1: + stream << "greater"; + break; + default: + return false; + } + return true; +} + /* (lldb) fr var ibeg --raw --ptr-depth 1 -T (std::__1::__wrap_iter<int *>) ibeg = { 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/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 deaa76459cc8e..4f5f6d209073e 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,6 +44,11 @@ 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_libstdcxx(self): + self.build(dictionary={"USE_LIBCPP": 1}) + self.do_test() + @add_test_categories(["libstdcxx"]) def test_libstdcxx(self): self.build(dictionary={"USE_LIBSTDCPP": 1}) `````````` </details> https://github.com/llvm/llvm-project/pull/174227 _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
