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

Reply via email to