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
