Author: Daedie-git Date: 2026-08-21T12:34:20+02:00 New Revision: 490641fad2db5ffd5829198b35990ed833b25325
URL: https://github.com/llvm/llvm-project/commit/490641fad2db5ffd5829198b35990ed833b25325 DIFF: https://github.com/llvm/llvm-project/commit/490641fad2db5ffd5829198b35990ed833b25325.diff LOG: [lldb] Add MSVC STL formatter for vector iterators (#217247) `std::_Vector_iterator` and `std::_Vector_const_iterator` store the element pointer in `_Ptr`. Reuse the existing vector-iterator frontend (same pattern as libc++ / libstdc++). Tests: generic iterator suite's MSVC STL category (Windows). Part of #24834 Assisted-by: Grok 4.6 Assisted-by: codex-5.6-high --------- Co-authored-by: Bjorn Schobben <[email protected]> Added: Modified: lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp lldb/source/Plugins/Language/CPlusPlus/MsvcStl.h lldb/source/Plugins/Language/CPlusPlus/MsvcStlVector.cpp lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/iterator/TestDataFormatterStdIterator.py Removed: ################################################################################ diff --git a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp index 30050e0878e6e..cb6f9a04a0c55 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp @@ -2039,6 +2039,10 @@ static void LoadMsvcStlFormatters(lldb::TypeCategoryImplSP cpp_category_sp) { "MSVC STL tree iterator summary", "^std::_Tree(_const)?_iterator<.+>(( )?&)?$", stl_summary_flags, true); + AddCXXSynthetic( + cpp_category_sp, MsvcStlVectorIteratorSyntheticFrontEndCreator, + "MSVC STL vector iterator synthetic children", + "^std::_Vector(_const)?_iterator<.+>(( )?&)?$", stl_synth_flags, true); } static void LoadSystemFormatters(lldb::TypeCategoryImplSP cpp_category_sp) { diff --git a/lldb/source/Plugins/Language/CPlusPlus/MsvcStl.h b/lldb/source/Plugins/Language/CPlusPlus/MsvcStl.h index 0bdd548dd99e3..7858a7d45b51e 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/MsvcStl.h +++ b/lldb/source/Plugins/Language/CPlusPlus/MsvcStl.h @@ -81,6 +81,9 @@ MsvcStlTupleSyntheticFrontEndCreator(CXXSyntheticChildren *, bool IsMsvcStlVector(ValueObject &valobj); lldb_private::SyntheticChildrenFrontEnd * MsvcStlVectorSyntheticFrontEndCreator(lldb::ValueObjectSP valobj_sp); +SyntheticChildrenFrontEnd * +MsvcStlVectorIteratorSyntheticFrontEndCreator(CXXSyntheticChildren *, + lldb::ValueObjectSP valobj_sp); // MSVC STL std::list and std::forward_list bool IsMsvcStlList(ValueObject &valobj); diff --git a/lldb/source/Plugins/Language/CPlusPlus/MsvcStlVector.cpp b/lldb/source/Plugins/Language/CPlusPlus/MsvcStlVector.cpp index 8ce1153c561a7..8e988465dff05 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/MsvcStlVector.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/MsvcStlVector.cpp @@ -10,6 +10,7 @@ #include "lldb/DataFormatters/FormattersHelpers.h" #include "lldb/DataFormatters/TypeSynthetic.h" +#include "lldb/DataFormatters/VectorIterator.h" #include "llvm/Support/ErrorExtras.h" using namespace lldb; @@ -17,6 +18,14 @@ using namespace lldb; namespace lldb_private { namespace formatters { +SyntheticChildrenFrontEnd * +MsvcStlVectorIteratorSyntheticFrontEndCreator(CXXSyntheticChildren *, + lldb::ValueObjectSP valobj_sp) { + return valobj_sp ? new VectorIteratorSyntheticFrontEnd(valobj_sp, + {ConstString("_Ptr")}) + : nullptr; +} + class MsvcStlVectorSyntheticFrontEnd : public SyntheticChildrenFrontEnd { public: MsvcStlVectorSyntheticFrontEnd(lldb::ValueObjectSP valobj_sp); diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/iterator/TestDataFormatterStdIterator.py b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/iterator/TestDataFormatterStdIterator.py index 56aaf4078f18e..56874a9dda500 100644 --- a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/iterator/TestDataFormatterStdIterator.py +++ b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/iterator/TestDataFormatterStdIterator.py @@ -77,3 +77,8 @@ def test_libcxx(self): def test_libstdcxx(self): self.build(dictionary={"USE_LIBSTDCPP": 1}) self.do_test() + + @add_test_categories(["msvcstl"]) + def test_msvcstl(self): + self.build() + self.do_test() _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
