@@ -267,6 +267,7 @@ void lldb_private::formatters::LibcxxStdMapSyntheticFrontEnd::GetValueOffset(
267267 uint64_t bit_offset;
268268 if (node_type.GetIndexOfFieldWithName (" __value_" , nullptr , &bit_offset) !=
269269 UINT32_MAX) {
270+ // Old layout (pre 089a7cc5dea)
270271 m_skip_size = bit_offset / 8u ;
271272 } else {
272273 auto ast_ctx = node_type.GetTypeSystem ().dyn_cast_or_null <TypeSystemClang>();
@@ -328,45 +329,47 @@ lldb_private::formatters::LibcxxStdMapSyntheticFrontEnd::GetChildAtIndex(
328329 nullptr ; // this will stop all future searches until an Update() happens
329330 return iterated_sp;
330331 }
331- if (GetDataType ()) {
332- if (!need_to_skip) {
333- Status error;
334- iterated_sp = iterated_sp->Dereference (error);
335- if (!iterated_sp || error.Fail ()) {
336- m_tree = nullptr ;
337- return lldb::ValueObjectSP ();
338- }
339- GetValueOffset (iterated_sp);
340- auto child_sp = iterated_sp->GetChildMemberWithName (" __value_" );
341- if (child_sp)
342- iterated_sp = child_sp;
343- else
344- iterated_sp = iterated_sp->GetSyntheticChildAtOffset (
345- m_skip_size, m_element_type, true );
346- if (!iterated_sp) {
347- m_tree = nullptr ;
348- return lldb::ValueObjectSP ();
349- }
350- } else {
351- // because of the way our debug info is made, we need to read item 0
352- // first so that we can cache information used to generate other elements
353- if (m_skip_size == UINT32_MAX)
354- GetChildAtIndex (0 );
355- if (m_skip_size == UINT32_MAX) {
356- m_tree = nullptr ;
357- return lldb::ValueObjectSP ();
358- }
332+
333+ if (!GetDataType ()) {
334+ m_tree = nullptr ;
335+ return lldb::ValueObjectSP ();
336+ }
337+
338+ if (!need_to_skip) {
339+ Status error;
340+ iterated_sp = iterated_sp->Dereference (error);
341+ if (!iterated_sp || error.Fail ()) {
342+ m_tree = nullptr ;
343+ return lldb::ValueObjectSP ();
344+ }
345+ GetValueOffset (iterated_sp);
346+ auto child_sp = iterated_sp->GetChildMemberWithName (" __value_" );
347+ if (child_sp)
348+ iterated_sp = child_sp;
349+ else
359350 iterated_sp = iterated_sp->GetSyntheticChildAtOffset (
360351 m_skip_size, m_element_type, true );
361- if (!iterated_sp) {
362- m_tree = nullptr ;
363- return lldb::ValueObjectSP ();
364- }
352+ if (!iterated_sp) {
353+ m_tree = nullptr ;
354+ return lldb::ValueObjectSP ();
365355 }
366356 } else {
367- m_tree = nullptr ;
368- return lldb::ValueObjectSP ();
357+ // because of the way our debug info is made, we need to read item 0
358+ // first so that we can cache information used to generate other elements
359+ if (m_skip_size == UINT32_MAX)
360+ GetChildAtIndex (0 );
361+ if (m_skip_size == UINT32_MAX) {
362+ m_tree = nullptr ;
363+ return lldb::ValueObjectSP ();
364+ }
365+ iterated_sp = iterated_sp->GetSyntheticChildAtOffset (m_skip_size,
366+ m_element_type, true );
367+ if (!iterated_sp) {
368+ m_tree = nullptr ;
369+ return lldb::ValueObjectSP ();
370+ }
369371 }
372+
370373 // at this point we have a valid
371374 // we need to copy current_sp into a new object otherwise we will end up with
372375 // all items named __value_
0 commit comments