@@ -267,6 +267,7 @@ void lldb_private::formatters::LibcxxStdMapSyntheticFrontEnd::GetValueOffset(
267
267
uint64_t bit_offset;
268
268
if (node_type.GetIndexOfFieldWithName (" __value_" , nullptr , &bit_offset) !=
269
269
UINT32_MAX) {
270
+ // Old layout (pre 089a7cc5dea)
270
271
m_skip_size = bit_offset / 8u ;
271
272
} else {
272
273
auto ast_ctx = node_type.GetTypeSystem ().dyn_cast_or_null <TypeSystemClang>();
@@ -328,45 +329,47 @@ lldb_private::formatters::LibcxxStdMapSyntheticFrontEnd::GetChildAtIndex(
328
329
nullptr ; // this will stop all future searches until an Update() happens
329
330
return iterated_sp;
330
331
}
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
359
350
iterated_sp = iterated_sp->GetSyntheticChildAtOffset (
360
351
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 ();
365
355
}
366
356
} 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
+ }
369
371
}
372
+
370
373
// at this point we have a valid
371
374
// we need to copy current_sp into a new object otherwise we will end up with
372
375
// all items named __value_
0 commit comments