Author: Nerixyz
Date: 2026-01-08T17:19:54+01:00
New Revision: 255f173139d7952106736d4f52ee539ddb68dc21

URL: 
https://github.com/llvm/llvm-project/commit/255f173139d7952106736d4f52ee539ddb68dc21
DIFF: 
https://github.com/llvm/llvm-project/commit/255f173139d7952106736d4f52ee539ddb68dc21.diff

LOG: [LLDB] Run MSVC STL deque tests with PDB (#172360)

Similar to the other PRs, this looks up the type from a member variable.
Here, we can use the type of `_Mapptr`. On its own, that's enough to
pass the test with clang-cl.

Added: 
    

Modified: 
    lldb/source/Plugins/Language/CPlusPlus/MsvcStlDeque.cpp
    
lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/deque/TestDataFormatterGenericDeque.py

Removed: 
    


################################################################################
diff  --git a/lldb/source/Plugins/Language/CPlusPlus/MsvcStlDeque.cpp 
b/lldb/source/Plugins/Language/CPlusPlus/MsvcStlDeque.cpp
index 873354381a6da..5330f692bd7a9 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/MsvcStlDeque.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/MsvcStlDeque.cpp
@@ -111,13 +111,6 @@ 
lldb_private::formatters::MsvcStlDequeSyntheticFrontEnd::Update() {
   if (!block_size.IsValid())
     return lldb::eRefetch;
 
-  auto element_type = deque_type.GetTypeTemplateArgument(0);
-  if (!element_type)
-    return lldb::eRefetch;
-  auto element_size = element_type.GetByteSize(nullptr);
-  if (!element_size)
-    return lldb::eRefetch;
-
   auto offset_sp = storage_sp->GetChildMemberWithName("_Myoff");
   auto map_size_sp = storage_sp->GetChildMemberWithName("_Mapsize");
   auto map_sp = storage_sp->GetChildMemberWithName("_Map");
@@ -138,6 +131,17 @@ 
lldb_private::formatters::MsvcStlDequeSyntheticFrontEnd::Update() {
   if (!ok)
     return lldb::eRefetch;
 
+  auto element_type = deque_type.GetTypeTemplateArgument(0);
+  if (!element_type) {
+    // PDB doesn't have the template type, so use the type of _Map (T**).
+    element_type = map_sp->GetCompilerType().GetPointeeType().GetPointeeType();
+    if (!element_type)
+      return lldb::eRefetch;
+  }
+  auto element_size = element_type.GetByteSize(nullptr);
+  if (!element_size)
+    return lldb::eRefetch;
+
   m_map = map_sp.get();
   m_exe_ctx_ref = m_backend.GetExecutionContextRef();
   m_block_size = block_size.ULongLong();

diff  --git 
a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/deque/TestDataFormatterGenericDeque.py
 
b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/deque/TestDataFormatterGenericDeque.py
index 2332eff7b10dd..2b22281a87318 100644
--- 
a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/deque/TestDataFormatterGenericDeque.py
+++ 
b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/deque/TestDataFormatterGenericDeque.py
@@ -5,6 +5,8 @@
 
 
 class GenericDequeDataFormatterTestCase(TestBase):
+    TEST_WITH_PDB_DEBUG_INFO = True
+
     def findVariable(self, name):
         var = self.frame().FindVariable(name)
         self.assertTrue(var.IsValid())


        
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to