https://github.com/DrSergei created https://github.com/llvm/llvm-project/pull/171854
This patch introduces general summary provider for `std::string_view` and simial types. I tried to remove copy-paste between different stl implementations. I cannot check now how it works on Windows machine, but I hope it works as expected (I used msvc stl implementation as a base). >From ef8a0e118f394df64e14d4f399ce1246d5ab53f7 Mon Sep 17 00:00:00 2001 From: Druzhkov Sergei <[email protected]> Date: Thu, 11 Dec 2025 18:19:30 +0300 Subject: [PATCH] [lldb] Add generic string view summary provider --- .../Plugins/Language/CPlusPlus/CMakeLists.txt | 1 + .../Language/CPlusPlus/CPlusPlusLanguage.cpp | 95 +++++++------ .../Plugins/Language/CPlusPlus/Generic.h | 8 ++ .../Language/CPlusPlus/GenericStringView.cpp | 131 ++++++++++++++++++ .../Plugins/Language/CPlusPlus/LibCxx.cpp | 96 +------------ .../Plugins/Language/CPlusPlus/LibCxx.h | 16 --- .../Plugins/Language/CPlusPlus/MsvcStl.cpp | 63 --------- .../Plugins/Language/CPlusPlus/MsvcStl.h | 9 -- .../TestDataFormatterStdStringView.py | 5 + .../TestDataFormatterStdU8StringView.py | 2 - 10 files changed, 196 insertions(+), 230 deletions(-) create mode 100644 lldb/source/Plugins/Language/CPlusPlus/GenericStringView.cpp diff --git a/lldb/source/Plugins/Language/CPlusPlus/CMakeLists.txt b/lldb/source/Plugins/Language/CPlusPlus/CMakeLists.txt index c52d3bdb31284..940737068fd47 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/CMakeLists.txt +++ b/lldb/source/Plugins/Language/CPlusPlus/CMakeLists.txt @@ -17,6 +17,7 @@ add_lldb_library(lldbPluginCPlusPlusLanguage PLUGIN GenericInitializerList.cpp GenericList.cpp GenericOptional.cpp + GenericStringView.cpp LibCxx.cpp LibCxxAtomic.cpp LibCxxMap.cpp diff --git a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp index ae6086ff89d71..bd58abca7ab04 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp @@ -54,6 +54,8 @@ using namespace lldb; using namespace lldb_private; using namespace lldb_private::formatters; +using StringElementType = StringPrinter::StringElementType; + LLDB_PLUGIN_DEFINE(CPlusPlusLanguage) void CPlusPlusLanguage::Initialize() { @@ -799,42 +801,47 @@ static void LoadLibCxxFormatters(lldb::TypeCategoryImplSP cpp_category_sp) { stl_summary_flags, true); AddCXXSummary(cpp_category_sp, - lldb_private::formatters::LibcxxStringViewSummaryProviderASCII, + GenericStringViewSummaryProvider<StringElementType::ASCII>, "std::string_view summary provider", "^std::__[[:alnum:]]+::string_view$", stl_summary_flags, true); AddCXXSummary(cpp_category_sp, - lldb_private::formatters::LibcxxStringViewSummaryProviderASCII, + GenericStringViewSummaryProvider<StringElementType::ASCII>, "std::string_view summary provider", "^std::__[[:alnum:]]+::basic_string_view<char, " "std::__[[:alnum:]]+::char_traits<char> >$", stl_summary_flags, true); AddCXXSummary(cpp_category_sp, - lldb_private::formatters::LibcxxStringViewSummaryProviderASCII, + GenericStringViewSummaryProvider<StringElementType::ASCII>, "std::string_view summary provider", "^std::__[[:alnum:]]+::basic_string_view<unsigned char, " "std::__[[:alnum:]]+::char_traits<unsigned char> >$", stl_summary_flags, true); AddCXXSummary(cpp_category_sp, - lldb_private::formatters::LibcxxStringViewSummaryProviderUTF16, + GenericStringViewSummaryProvider<StringElementType::UTF8>, + "std::u8string_view summary provider", + "^std::__[[:alnum:]]+::basic_string_view<char8_t, " + "std::__[[:alnum:]]+::char_traits<char8_t> >$", + stl_summary_flags, true); + + AddCXXSummary(cpp_category_sp, + GenericStringViewSummaryProvider<StringElementType::UTF16>, "std::u16string_view summary provider", "^std::__[[:alnum:]]+::basic_string_view<char16_t, " "std::__[[:alnum:]]+::char_traits<char16_t> >$", stl_summary_flags, true); AddCXXSummary(cpp_category_sp, - lldb_private::formatters::LibcxxStringViewSummaryProviderUTF32, + GenericStringViewSummaryProvider<StringElementType::UTF32>, "std::u32string_view summary provider", "^std::__[[:alnum:]]+::basic_string_view<char32_t, " "std::__[[:alnum:]]+::char_traits<char32_t> >$", stl_summary_flags, true); - AddCXXSummary(cpp_category_sp, - lldb_private::formatters::LibcxxWStringViewSummaryProvider, + AddCXXSummary(cpp_category_sp, GenericWStringViewSummaryProvider, "std::wstring_view summary provider", "^std::__[[:alnum:]]+::wstring_view$", stl_summary_flags, true); - AddCXXSummary(cpp_category_sp, - lldb_private::formatters::LibcxxWStringViewSummaryProvider, + AddCXXSummary(cpp_category_sp, GenericWStringViewSummaryProvider, "std::wstring_view summary provider", "^std::__[[:alnum:]]+::basic_string_view<wchar_t, " "std::__[[:alnum:]]+::char_traits<wchar_t> >$", @@ -1696,8 +1703,6 @@ static void LoadCommonStlFormatters(lldb::TypeCategoryImplSP cpp_category_sp) { stl_synth_flags.SetCascades(true).SetSkipPointers(false).SetSkipReferences( false); - using StringElementType = StringPrinter::StringElementType; - RegisterStdStringSummaryProvider( cpp_category_sp, "std::string", "char", std::make_shared<CXXFunctionSummaryFormat>( @@ -1722,9 +1727,39 @@ static void LoadCommonStlFormatters(lldb::TypeCategoryImplSP cpp_category_sp) { }, "MSVC STL/libstdc++ std::wstring summary provider")); - // NOTE: it is loaded as a common formatter because the libc++ version is not - // in the `__1` namespace, hence we need to dispatch based on the class - // layout. + RegisterStdStringViewSummaryProvider( + cpp_category_sp, "std::string_view", "char", + std::make_shared<CXXFunctionSummaryFormat>( + stl_summary_flags, + GenericStringViewSummaryProvider<StringElementType::ASCII>, + "MSVC STL/libstdc++ std::string_view summary provider")); + RegisterStdStringViewSummaryProvider( + cpp_category_sp, "std::u8string_view", "char8_t", + std::make_shared<CXXFunctionSummaryFormat>( + stl_summary_flags, + GenericStringViewSummaryProvider<StringElementType::UTF8>, + "MSVC STL/libstdc++ std::u8string_view summary provider")); + RegisterStdStringViewSummaryProvider( + cpp_category_sp, "std::u16string_view", "char16_t", + std::make_shared<CXXFunctionSummaryFormat>( + stl_summary_flags, + GenericStringViewSummaryProvider<StringElementType::UTF16>, + "MSVC STL/libstdc++ std::u16string_view summary provider")); + RegisterStdStringViewSummaryProvider( + cpp_category_sp, "std::u32string_view", "char32_t", + std::make_shared<CXXFunctionSummaryFormat>( + stl_summary_flags, + GenericStringViewSummaryProvider<StringElementType::UTF32>, + "MSVC STL/libstdc++ std::u32string_view summary provider")); + RegisterStdStringViewSummaryProvider( + cpp_category_sp, "std::wstring_view", "wchar_t", + std::make_shared<CXXFunctionSummaryFormat>( + stl_summary_flags, GenericWStringViewSummaryProvider, + "MSVC STL/libstdc++ std::wstring_view summary provider")); + + // NOTE: it is loaded as a common formatter because the libc++ version is + // not in the `__1` namespace, hence we need to dispatch based on the + // class layout. AddCXXSynthetic(cpp_category_sp, GenericInitializerListSyntheticFrontEndCreator, "std::initializer_list synthetic children", @@ -1837,8 +1872,6 @@ static void LoadMsvcStlFormatters(lldb::TypeCategoryImplSP cpp_category_sp) { stl_synth_flags.SetCascades(true).SetSkipPointers(false).SetSkipReferences( false); - using StringElementType = StringPrinter::StringElementType; - RegisterStdStringSummaryProvider( cpp_category_sp, "std::u8string", "char8_t", std::make_shared<CXXFunctionSummaryFormat>( @@ -1858,36 +1891,6 @@ static void LoadMsvcStlFormatters(lldb::TypeCategoryImplSP cpp_category_sp) { MsvcStlStringSummaryProvider<StringElementType::UTF32>, "MSVC STL std::u32string summary provider")); - RegisterStdStringViewSummaryProvider( - cpp_category_sp, "std::string_view", "char", - std::make_shared<CXXFunctionSummaryFormat>( - stl_summary_flags, - MsvcStlStringViewSummaryProvider<StringElementType::ASCII>, - "MSVC STL std::string_view summary provider")); - RegisterStdStringViewSummaryProvider( - cpp_category_sp, "std::u8string_view", "char8_t", - std::make_shared<CXXFunctionSummaryFormat>( - stl_summary_flags, - MsvcStlStringViewSummaryProvider<StringElementType::UTF8>, - "MSVC STL std::u8string_view summary provider")); - RegisterStdStringViewSummaryProvider( - cpp_category_sp, "std::u16string_view", "char16_t", - std::make_shared<CXXFunctionSummaryFormat>( - stl_summary_flags, - MsvcStlStringViewSummaryProvider<StringElementType::UTF16>, - "MSVC STL std::u16string_view summary provider")); - RegisterStdStringViewSummaryProvider( - cpp_category_sp, "std::u32string_view", "char32_t", - std::make_shared<CXXFunctionSummaryFormat>( - stl_summary_flags, - MsvcStlStringViewSummaryProvider<StringElementType::UTF32>, - "MSVC STL std::u32string_view summary provider")); - RegisterStdStringViewSummaryProvider( - cpp_category_sp, "std::wstring_view", "wchar_t", - std::make_shared<CXXFunctionSummaryFormat>( - stl_summary_flags, MsvcStlWStringViewSummaryProvider, - "MSVC STL std::wstring_view summary provider")); - stl_summary_flags.SetDontShowChildren(false); AddCXXSynthetic(cpp_category_sp, MsvcStlAtomicSyntheticFrontEndCreator, diff --git a/lldb/source/Plugins/Language/CPlusPlus/Generic.h b/lldb/source/Plugins/Language/CPlusPlus/Generic.h index 539eddd3d3e78..9283875852cf1 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/Generic.h +++ b/lldb/source/Plugins/Language/CPlusPlus/Generic.h @@ -9,6 +9,7 @@ #ifndef LLDB_SOURCE_PLUGINS_LANGUAGE_CPLUSPLUS_GENERIC_H #define LLDB_SOURCE_PLUGINS_LANGUAGE_CPLUSPLUS_GENERIC_H +#include "lldb/DataFormatters/StringPrinter.h" #include "lldb/DataFormatters/TypeSummary.h" #include "lldb/Utility/Stream.h" #include "lldb/ValueObject/ValueObject.h" @@ -19,6 +20,13 @@ namespace formatters { bool GenericOptionalSummaryProvider(ValueObject &valobj, Stream &stream, const TypeSummaryOptions &options); +template <StringPrinter::StringElementType element_type> +bool GenericStringViewSummaryProvider(ValueObject &valobj, Stream &stream, + const TypeSummaryOptions &options); + +bool GenericWStringViewSummaryProvider(ValueObject &valobj, Stream &stream, + const TypeSummaryOptions &options); + /// Return the ValueObjectSP of the underlying pointer member whose type /// is a desugared 'std::shared_ptr::element_type *'. lldb::ValueObjectSP GetDesugaredSmartPointerValue(ValueObject &ptr, diff --git a/lldb/source/Plugins/Language/CPlusPlus/GenericStringView.cpp b/lldb/source/Plugins/Language/CPlusPlus/GenericStringView.cpp new file mode 100644 index 0000000000000..f566ef210489b --- /dev/null +++ b/lldb/source/Plugins/Language/CPlusPlus/GenericStringView.cpp @@ -0,0 +1,131 @@ +//===-- GenericStringView.cpp --------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===---------------------------------------------------------------------===// + +#include "Generic.h" +#include "LibCxx.h" + +#include "lldb/ValueObject/ValueObject.h" +#include "lldb/lldb-forward.h" + +#include "Plugins/Language/CPlusPlus/CxxStringTypes.h" +#include <tuple> + +using namespace lldb; +using namespace lldb_private; +using namespace lldb_private::formatters; + +using StringElementType = StringPrinter::StringElementType; + +enum class StlType { + LibCxx, + LibStdcpp, + MsvcStl, +}; + +std::tuple<StlType, lldb::ValueObjectSP, lldb::ValueObjectSP> +extractStringViewData(ValueObject &valobj) { + auto data_sp = valobj.GetChildMemberWithName("_Mydata"); + if (data_sp) + return std::make_tuple(StlType::MsvcStl, data_sp, + valobj.GetChildMemberWithName("_Mysize")); + data_sp = valobj.GetChildMemberWithName("_M_str"); + if (data_sp) + return std::make_tuple(StlType::LibStdcpp, data_sp, + valobj.GetChildMemberWithName("_M_len")); + return std::make_tuple( + StlType::LibCxx, + GetChildMemberWithName(valobj, + {ConstString("__data_"), ConstString("__data")}), + GetChildMemberWithName(valobj, + {ConstString("__size_"), ConstString("__size")})); +} + +template <StringPrinter::StringElementType element_type> +static bool formatStringViewImpl(lldb::ValueObjectSP data_sp, + lldb::ValueObjectSP size_sp, Stream &stream, + const TypeSummaryOptions &summary_options, + std::string prefix_token) { + if (!data_sp || !size_sp) + return false; + + bool success = false; + uint64_t size = size_sp->GetValueAsUnsigned(0, &success); + if (!success) { + stream << "Summary Unavailable"; + return true; + } + + StreamString scratch_stream; + success = StringBufferSummaryProvider<element_type>( + scratch_stream, summary_options, data_sp, size, prefix_token); + + if (success) + stream << scratch_stream.GetData(); + else + stream << "Summary Unavailable"; + return true; +} + +template <StringElementType element_type> +static constexpr const char *getPrefixToken() { + if constexpr (element_type == StringElementType::ASCII) + return ""; + if constexpr (element_type == StringElementType::UTF8) + return "u8"; + if constexpr (element_type == StringElementType::UTF16) + return "u"; + if constexpr (element_type == StringElementType::UTF32) + return "U"; + llvm_unreachable("invalid element type"); +} + +template <StringPrinter::StringElementType element_type> +bool lldb_private::formatters::GenericStringViewSummaryProvider( + ValueObject &valobj, Stream &stream, const TypeSummaryOptions &options) { + auto [_, data_sp, size_sp] = extractStringViewData(valobj); + return formatStringViewImpl<element_type>(data_sp, size_sp, stream, options, + getPrefixToken<element_type>()); +} + +template bool lldb_private::formatters::GenericStringViewSummaryProvider< + StringElementType::ASCII>(ValueObject &, Stream &, + const TypeSummaryOptions &); +template bool lldb_private::formatters::GenericStringViewSummaryProvider< + StringElementType::UTF8>(ValueObject &, Stream &, + const TypeSummaryOptions &); +template bool lldb_private::formatters::GenericStringViewSummaryProvider< + StringElementType::UTF16>(ValueObject &, Stream &, + const TypeSummaryOptions &); +template bool lldb_private::formatters::GenericStringViewSummaryProvider< + StringElementType::UTF32>(ValueObject &, Stream &, + const TypeSummaryOptions &); + +bool lldb_private::formatters::GenericWStringViewSummaryProvider( + ValueObject &valobj, Stream &stream, const TypeSummaryOptions &options) { + auto [stl, data_sp, size_sp] = extractStringViewData(valobj); + if (stl == StlType::LibStdcpp) + return formatStringViewImpl<StringElementType::UTF32>(data_sp, size_sp, + stream, options, "L"); + + auto wchar_t_size = GetWCharByteSize(valobj); + if (!wchar_t_size) + return false; + + switch (*wchar_t_size) { + case 1: + return formatStringViewImpl<StringElementType::UTF8>(data_sp, size_sp, + stream, options, "L"); + case 2: + return formatStringViewImpl<StringElementType::UTF16>(data_sp, size_sp, + stream, options, "L"); + case 4: + return formatStringViewImpl<StringElementType::UTF32>(data_sp, size_sp, + stream, options, "L"); + } + return false; +} diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp index 141c5c9a2caf9..a68c9f0fdc963 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp @@ -495,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; @@ -638,98 +638,6 @@ bool lldb_private::formatters::LibcxxStringSummaryProviderUTF32( valobj, stream, summary_options, "U"); } -static std::tuple<bool, ValueObjectSP, size_t> -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, {}, {}); - - if (!dataobj->GetError().Success() || !sizeobj->GetError().Success()) - 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(true,dataobj,size); -} - -template <StringPrinter::StringElementType element_type> -static bool formatStringViewImpl(ValueObject &valobj, Stream &stream, - const TypeSummaryOptions &summary_options, - std::string prefix_token) { - - bool success; - ValueObjectSP dataobj; - size_t size; - std::tie(success, dataobj, size) = LibcxxExtractStringViewData(valobj); - - if (!success) { - stream << "Summary Unavailable"; - return true; - } - - return StringBufferSummaryProvider<element_type>(stream, summary_options, - dataobj, size, prefix_token); -} - -bool lldb_private::formatters::LibcxxStringViewSummaryProviderASCII( - ValueObject &valobj, Stream &stream, - const TypeSummaryOptions &summary_options) { - return formatStringViewImpl<StringPrinter::StringElementType::ASCII>( - valobj, stream, summary_options, ""); -} - -bool lldb_private::formatters::LibcxxStringViewSummaryProviderUTF16( - ValueObject &valobj, Stream &stream, - const TypeSummaryOptions &summary_options) { - return formatStringViewImpl<StringPrinter::StringElementType::UTF16>( - valobj, stream, summary_options, "u"); -} - -bool lldb_private::formatters::LibcxxStringViewSummaryProviderUTF32( - ValueObject &valobj, Stream &stream, - const TypeSummaryOptions &summary_options) { - return formatStringViewImpl<StringPrinter::StringElementType::UTF32>( - valobj, stream, summary_options, "U"); -} - -bool lldb_private::formatters::LibcxxWStringViewSummaryProvider( - ValueObject &valobj, Stream &stream, - const TypeSummaryOptions &summary_options) { - - bool success; - ValueObjectSP dataobj; - size_t size; - std::tie(success, dataobj, size) = LibcxxExtractStringViewData(valobj); - - if (!success) { - stream << "Summary Unavailable"; - return true; - } - - auto wchar_t_size = GetWCharByteSize(valobj); - if (!wchar_t_size) - return false; - - switch (*wchar_t_size) { - case 1: - return StringBufferSummaryProvider<StringPrinter::StringElementType::UTF8>( - stream, summary_options, dataobj, size, "L"); - case 2: - return StringBufferSummaryProvider<StringPrinter::StringElementType::UTF16>( - stream, summary_options, dataobj, size, "L"); - case 4: - return StringBufferSummaryProvider<StringPrinter::StringElementType::UTF32>( - stream, summary_options, dataobj, size, "L"); - } - return false; -} - static bool LibcxxChronoTimePointSecondsSummaryProvider(ValueObject &valobj, Stream &stream, const TypeSummaryOptions &options, diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxx.h b/lldb/source/Plugins/Language/CPlusPlus/LibCxx.h index 8fd29288da35f..d1a30d176fe7a 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxx.h +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxx.h @@ -59,22 +59,6 @@ bool LibcxxWStringSummaryProvider( ValueObject &valobj, Stream &stream, const TypeSummaryOptions &options); // libc++ std::wstring -bool LibcxxStringViewSummaryProviderASCII( - ValueObject &valueObj, Stream &stream, - const TypeSummaryOptions &summary_options); // libc++ std::string_view - -bool LibcxxStringViewSummaryProviderUTF16( - ValueObject &valobj, Stream &stream, - const TypeSummaryOptions &summary_options); // libc++ std::u16string_view - -bool LibcxxStringViewSummaryProviderUTF32( - ValueObject &valobj, Stream &stream, - const TypeSummaryOptions &summary_options); // libc++ std::u32string_view - -bool LibcxxWStringViewSummaryProvider( - ValueObject &valobj, Stream &stream, - const TypeSummaryOptions &options); // libc++ std::wstring_view - bool LibcxxStdSliceArraySummaryProvider( ValueObject &valobj, Stream &stream, const TypeSummaryOptions &options); // libc++ std::slice_array diff --git a/lldb/source/Plugins/Language/CPlusPlus/MsvcStl.cpp b/lldb/source/Plugins/Language/CPlusPlus/MsvcStl.cpp index 8fb305b284bbb..5d0f20b1beaae 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/MsvcStl.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/MsvcStl.cpp @@ -112,33 +112,6 @@ static bool formatStringImpl(ValueObject &valobj, Stream &stream, return true; } -template <StringPrinter::StringElementType element_type> -static bool formatStringViewImpl(ValueObject &valobj, Stream &stream, - const TypeSummaryOptions &summary_options, - std::string prefix_token) { - auto data_sp = valobj.GetChildMemberWithName("_Mydata"); - auto size_sp = valobj.GetChildMemberWithName("_Mysize"); - if (!data_sp || !size_sp) - return false; - - bool success = false; - uint64_t size = size_sp->GetValueAsUnsigned(0, &success); - if (!success) { - stream << "Summary Unavailable"; - return true; - } - - StreamString scratch_stream; - success = StringBufferSummaryProvider<element_type>( - scratch_stream, summary_options, data_sp, size, prefix_token); - - if (success) - stream << scratch_stream.GetData(); - else - stream << "Summary Unavailable"; - return true; -} - bool lldb_private::formatters::IsMsvcStlStringType(ValueObject &valobj) { std::vector<uint32_t> indexes; return valobj.GetCompilerType().GetIndexOfChildMemberWithName("_Mypair", true, @@ -180,39 +153,3 @@ bool lldb_private::formatters::MsvcStlStringSummaryProvider< return MsvcStlStringSummaryProviderImpl<StringElementType::UTF32>( valobj, stream, summary_options, "U"); } - -bool lldb_private::formatters::MsvcStlWStringViewSummaryProvider( - ValueObject &valobj, Stream &stream, - const TypeSummaryOptions &summary_options) { - return formatStringViewImpl<StringElementType::UTF16>(valobj, stream, - summary_options, "L"); -} - -template <> -bool lldb_private::formatters::MsvcStlStringViewSummaryProvider< - StringElementType::ASCII>(ValueObject &valobj, Stream &stream, - const TypeSummaryOptions &summary_options) { - return formatStringViewImpl<StringElementType::ASCII>(valobj, stream, - summary_options, ""); -} -template <> -bool lldb_private::formatters::MsvcStlStringViewSummaryProvider< - StringElementType::UTF8>(ValueObject &valobj, Stream &stream, - const TypeSummaryOptions &summary_options) { - return formatStringViewImpl<StringElementType::UTF8>(valobj, stream, - summary_options, "u8"); -} -template <> -bool lldb_private::formatters::MsvcStlStringViewSummaryProvider< - StringElementType::UTF16>(ValueObject &valobj, Stream &stream, - const TypeSummaryOptions &summary_options) { - return formatStringViewImpl<StringElementType::UTF16>(valobj, stream, - summary_options, "u"); -} -template <> -bool lldb_private::formatters::MsvcStlStringViewSummaryProvider< - StringElementType::UTF32>(ValueObject &valobj, Stream &stream, - const TypeSummaryOptions &summary_options) { - return formatStringViewImpl<StringElementType::UTF32>(valobj, stream, - summary_options, "U"); -} diff --git a/lldb/source/Plugins/Language/CPlusPlus/MsvcStl.h b/lldb/source/Plugins/Language/CPlusPlus/MsvcStl.h index e818b88e202ef..dab809bbe10cf 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/MsvcStl.h +++ b/lldb/source/Plugins/Language/CPlusPlus/MsvcStl.h @@ -29,15 +29,6 @@ bool MsvcStlWStringSummaryProvider( ValueObject &valobj, Stream &stream, const TypeSummaryOptions &options); // VC 2015+ std::wstring -template <StringPrinter::StringElementType element_type> -bool MsvcStlStringViewSummaryProvider( - ValueObject &valobj, Stream &stream, - const TypeSummaryOptions &summary_options); // std::{u8,u16,u32}?string_view - -bool MsvcStlWStringViewSummaryProvider( - ValueObject &valobj, Stream &stream, - const TypeSummaryOptions &options); // std::wstring_view - // MSVC STL std::shared_ptr<> and std::weak_ptr<> bool IsMsvcStlSmartPointer(ValueObject &valobj); bool MsvcStlSmartPointerSummaryProvider(ValueObject &valobj, Stream &stream, diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/string_view/TestDataFormatterStdStringView.py b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/string_view/TestDataFormatterStdStringView.py index 5c915b6d9f588..8895156abb366 100644 --- a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/string_view/TestDataFormatterStdStringView.py +++ b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/string_view/TestDataFormatterStdStringView.py @@ -175,6 +175,11 @@ 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() + @add_test_categories(["msvcstl"]) def test_msvcstl(self): self.build() diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/u8string_view/TestDataFormatterStdU8StringView.py b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/u8string_view/TestDataFormatterStdU8StringView.py index 6cf72d18a864f..7d0f3be8a2623 100644 --- a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/u8string_view/TestDataFormatterStdU8StringView.py +++ b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/u8string_view/TestDataFormatterStdU8StringView.py @@ -34,13 +34,11 @@ def do_test(self): ], ) - @expectedFailureAll(bugnumber="No libc++ formatters for std::u8string_view yet.") @add_test_categories(["libc++"]) def test_libcxx(self): self.build(dictionary={"USE_LIBCPP": 1}) self.do_test() - @expectedFailureAll(bugnumber="No libstdc++ formatters for std::u8string_view yet.") @add_test_categories(["libstdcxx"]) def test_libstdcxx(self): self.build(dictionary={"USE_LIBSTDCPP": 1}) _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
