Skip to content

Commit e6fda6a

Browse files
committed
fix(deque): fall back to element type if templates are unvailable
1 parent 12b4e32 commit e6fda6a

File tree

1 file changed

+10
-7
lines changed

1 file changed

+10
-7
lines changed

lldb/source/Plugins/Language/CPlusPlus/MsvcStlDeque.cpp

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -111,13 +111,6 @@ lldb_private::formatters::MsvcStlDequeSyntheticFrontEnd::Update() {
111111
if (!block_size.IsValid())
112112
return lldb::eRefetch;
113113

114-
auto element_type = deque_type.GetTypeTemplateArgument(0);
115-
if (!element_type)
116-
return lldb::eRefetch;
117-
auto element_size = element_type.GetByteSize(nullptr);
118-
if (!element_size)
119-
return lldb::eRefetch;
120-
121114
auto offset_sp = storage_sp->GetChildMemberWithName("_Myoff");
122115
auto map_size_sp = storage_sp->GetChildMemberWithName("_Mapsize");
123116
auto map_sp = storage_sp->GetChildMemberWithName("_Map");
@@ -138,6 +131,16 @@ lldb_private::formatters::MsvcStlDequeSyntheticFrontEnd::Update() {
138131
if (!ok)
139132
return lldb::eRefetch;
140133

134+
auto element_type = deque_type.GetTypeTemplateArgument(0);
135+
if (!element_type) {
136+
element_type = map_sp->GetCompilerType().GetPointeeType().GetPointeeType();
137+
if (!element_type)
138+
return lldb::eRefetch;
139+
}
140+
auto element_size = element_type.GetByteSize(nullptr);
141+
if (!element_size)
142+
return lldb::eRefetch;
143+
141144
m_map = map_sp.get();
142145
m_exe_ctx_ref = m_backend.GetExecutionContextRef();
143146
m_block_size = block_size.ULongLong();

0 commit comments

Comments
 (0)