Skip to content

Commit db12ff1

Browse files
fixup! [lldb] Upgrade GetIndexOfChildWithName to use llvm::Expected
1 parent f7d5ef8 commit db12ff1

32 files changed

+199
-111
lines changed

lldb/include/lldb/API/SBValue.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@
1313
#include "lldb/API/SBDefines.h"
1414
#include "lldb/API/SBType.h"
1515

16-
#include "lldb/Core/Value.h"
17-
1816
class ValueImpl;
1917
class ValueLocker;
2018

lldb/include/lldb/DataFormatters/TypeSynthetic.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,10 @@ class SyntheticValueProviderFrontEnd : public SyntheticChildrenFrontEnd {
118118
lldb::ValueObjectSP GetChildAtIndex(uint32_t idx) override { return nullptr; }
119119

120120
llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override {
121-
return llvm::createStringError("Cannot find index of child '%s'",
122-
name.AsCString());
121+
return llvm::createStringError(
122+
"'SyntheticChildrenFrontEnd::SyntheticValueProviderFrontEnd' cannot "
123+
"find index of child '%s'",
124+
name.AsCString());
123125
}
124126

125127
lldb::ChildCacheState Update() override {

lldb/include/lldb/Interpreter/ScriptInterpreter.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -371,8 +371,9 @@ class ScriptInterpreter : public PluginInterface {
371371
virtual llvm::Expected<int>
372372
GetIndexOfChildWithName(const StructuredData::ObjectSP &implementor,
373373
const char *child_name) {
374-
return llvm::createStringError("Cannot find index of child '%s'",
375-
child_name);
374+
return llvm::createStringError(
375+
"'PluginInterface::ScriptInterpreter' cannot find index of child '%s'",
376+
child_name);
376377
}
377378

378379
virtual bool

lldb/source/API/SBValue.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -707,12 +707,10 @@ uint32_t SBValue::GetIndexOfChildWithName(const char *name) {
707707
ValueLocker locker;
708708
lldb::ValueObjectSP value_sp(GetSP(locker));
709709
if (value_sp) {
710-
auto idx_or_err = value_sp->GetIndexOfChildWithName(name);
711-
if (!idx_or_err) {
710+
if (auto idx_or_err = value_sp->GetIndexOfChildWithName(name))
711+
return *idx_or_err;
712+
else
712713
llvm::consumeError(idx_or_err.takeError());
713-
return UINT32_MAX;
714-
}
715-
return *idx_or_err;
716714
}
717715
return UINT32_MAX;
718716
}

lldb/source/DataFormatters/FormatterBytecode.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -491,11 +491,8 @@ llvm::Error Interpret(std::vector<ControlStackElement> &control,
491491
auto name = data.Pop<std::string>();
492492
POP_VALOBJ(valobj);
493493
auto index_or_err = valobj->GetIndexOfChildWithName(name);
494-
if (!index_or_err) {
495-
data.Push(ValueObjectConstResult::Create(
496-
nullptr, Status::FromError(index_or_err.takeError())));
497-
break;
498-
}
494+
if (!index_or_err)
495+
return index_or_err.takeError();
499496
data.Push((uint64_t)*index_or_err);
500497
break;
501498
}

lldb/source/DataFormatters/TypeSynthetic.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,8 +221,9 @@ bool ScriptedSyntheticChildren::FrontEnd::MightHaveChildren() {
221221
llvm::Expected<size_t>
222222
ScriptedSyntheticChildren::FrontEnd::GetIndexOfChildWithName(ConstString name) {
223223
if (!m_wrapper_sp || m_interpreter == nullptr)
224-
return llvm::createStringError("Cannot find index of child '%s'",
225-
name.AsCString());
224+
return llvm::createStringError(
225+
"'ScriptedSyntheticChildren::FrontEnd' cannot find index of child '%s'",
226+
name.AsCString());
226227
return m_interpreter->GetIndexOfChildWithName(m_wrapper_sp,
227228
name.GetCString());
228229
}

lldb/source/DataFormatters/VectorType.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -273,8 +273,10 @@ class VectorTypeSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
273273
const char *item_name = name.GetCString();
274274
uint32_t idx = ExtractIndexFromString(item_name);
275275
if (idx < UINT32_MAX && idx >= CalculateNumChildrenIgnoringErrors())
276-
return llvm::createStringError("Cannot find index of child '%s'",
277-
name.AsCString());
276+
return llvm::createStringError(
277+
"'SyntheticChildrenFrontEnd::VectorTypeSyntheticFrontEnd' cannot "
278+
"find index of child '%s'",
279+
name.AsCString());
278280
return idx;
279281
}
280282

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,8 +146,10 @@ class BlockPointerSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
146146

147147
llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override {
148148
if (!m_block_struct_type.IsValid())
149-
return llvm::createStringError("Cannot find index of child '%s'",
150-
name.AsCString());
149+
return llvm::createStringError(
150+
"'SyntheticChildrenFrontend::BlockPointerSyntheticFrontEnd' cannot "
151+
"find index of child '%s'",
152+
name.AsCString());
151153

152154
const bool omit_empty_base_classes = false;
153155
return m_block_struct_type.GetIndexOfChildWithName(name.AsCString(),
@@ -177,6 +179,7 @@ bool lldb_private::formatters::BlockPointerSummaryProvider(
177179
synthetic_children->GetIndexOfChildWithName(s_FuncPtr_name);
178180

179181
if (!index_or_err) {
182+
LLDB_LOG_ERROR(GetLog(LLDBLog::Types), index_or_err.takeError(), "{0}");
180183
return false;
181184
}
182185

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

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -203,8 +203,12 @@ llvm::Expected<size_t>
203203
StdlibCoroutineHandleSyntheticFrontEnd::GetIndexOfChildWithName(
204204
ConstString name) {
205205
if (!m_resume_ptr_sp || !m_destroy_ptr_sp)
206-
return llvm::createStringError("Cannot find index of child '%s'",
207-
name.AsCString());
206+
return llvm::createStringError(
207+
"'SyntheticChildrenFrontend::StdlibCoroutineHandleSyntheticFrontEnd' "
208+
"cannot find index of child '%s'. (m_resume_ptr_sp='%p', "
209+
"m_destroy_ptr_sp='%p')",
210+
name.AsCString(), static_cast<void *>(m_resume_ptr_sp.get()),
211+
static_cast<void *>(m_destroy_ptr_sp.get()));
208212

209213
if (name == ConstString("resume"))
210214
return 0;
@@ -213,8 +217,10 @@ StdlibCoroutineHandleSyntheticFrontEnd::GetIndexOfChildWithName(
213217
if (name == ConstString("promise_ptr") && m_promise_ptr_sp)
214218
return 2;
215219

216-
return llvm::createStringError("Cannot find index of child '%s'",
217-
name.AsCString());
220+
return llvm::createStringError(
221+
"'SyntheticChildrenFrontend::StdlibCoroutineHandleSyntheticFrontEnd' "
222+
"cannot find index of child '%s'",
223+
name.AsCString());
218224
}
219225

220226
SyntheticChildrenFrontEnd *

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

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -316,8 +316,10 @@ lldb_private::formatters::LibcxxSharedPtrSyntheticFrontEnd::
316316
return 0;
317317
if (name == "$$dereference$$")
318318
return 1;
319-
return llvm::createStringError("Cannot find index of child '%s'",
320-
name.AsCString());
319+
return llvm::createStringError(
320+
"'SyntheticChildrenFrontend::LibcxxSharedPtrSyntheticFrontEnd' cannot "
321+
"find index of child '%s'",
322+
name.AsCString());
321323
}
322324

323325
lldb_private::formatters::LibcxxSharedPtrSyntheticFrontEnd::
@@ -418,8 +420,10 @@ lldb_private::formatters::LibcxxUniquePtrSyntheticFrontEnd::
418420
return 1;
419421
if (name == "$$dereference$$")
420422
return 2;
421-
return llvm::createStringError("Cannot find index of child '%s'",
422-
name.AsCString());
423+
return llvm::createStringError(
424+
"'ScriptedSyntheticChildren::LibcxxUniquePtrSyntheticFrontEnd' cannot "
425+
"find index of child '%s'",
426+
name.AsCString());
423427
}
424428

425429
bool lldb_private::formatters::LibcxxContainerSummaryProvider(
@@ -460,9 +464,13 @@ ExtractLibcxxStringInfo(ValueObject &valobj) {
460464
if (!l)
461465
return {};
462466

463-
StringLayout layout = l->GetIndexOfChildWithName("__data_").get() == 0
464-
? StringLayout::DSC
465-
: StringLayout::CSD;
467+
auto index_or_err = l->GetIndexOfChildWithName("__data_");
468+
if (!index_or_err)
469+
LLDB_LOG_ERROR(GetLog(LLDBLog::Types), index_or_err.takeError(), "{0}");
470+
return {};
471+
472+
StringLayout layout =
473+
*index_or_err == 0 ? StringLayout::DSC : StringLayout::CSD;
466474

467475
bool short_mode = false; // this means the string is in short-mode and the
468476
// data is stored inline

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -133,11 +133,12 @@ lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::GetChildAtIndex(
133133
llvm::Expected<size_t>
134134
lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::
135135
GetIndexOfChildWithName(ConstString name) {
136-
if (name == "Value") {
136+
if (name == "Value")
137137
return 0;
138-
}
139-
return llvm::createStringError("Cannot find index of child '%s'",
140-
name.AsCString());
138+
return llvm::createStringError(
139+
"'SyntheticChildrenFrontend::LibcxxStdAtomicSyntheticFrontEnd' cannot "
140+
"find index of child '%s'",
141+
name.AsCString());
141142
}
142143

143144
SyntheticChildrenFrontEnd *

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -492,8 +492,11 @@ llvm::Expected<size_t>
492492
lldb_private::formatters::LibCxxMapIteratorSyntheticFrontEnd::
493493
GetIndexOfChildWithName(ConstString name) {
494494
if (!m_pair_sp)
495-
return llvm::createStringError("Cannot find index of child '%s'",
496-
name.AsCString());
495+
return llvm::createStringError(
496+
"'SyntheticChildrenFrontend::LibCxxMapIteratorSyntheticFrontEnd' "
497+
"cannot find index of child '%s'. Underlying pair is invalid: "
498+
"m_pair_sp=%p",
499+
name.AsCString(), static_cast<void *>(m_pair_sp.get()));
497500

498501
return m_pair_sp->GetIndexOfChildWithName(name);
499502
}

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,10 @@ llvm::Expected<size_t>
177177
lldb_private::formatters::LibcxxStdProxyArraySyntheticFrontEnd::
178178
GetIndexOfChildWithName(ConstString name) {
179179
if (!m_base)
180-
return std::numeric_limits<size_t>::max();
180+
return llvm::createStringError(
181+
"'SyntheticChildrenFrontend::LibcxxStdProxyArraySyntheticFrontEnd' "
182+
"cannot find index of child '%s'",
183+
name.AsCString());
181184
return ExtractIndexFromString(name.GetCString());
182185
}
183186

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ class QueueFrontEnd : public SyntheticChildrenFrontEnd {
2121
}
2222

2323
llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override {
24-
if (m_container_sp) {
24+
if (m_container_sp)
2525
return m_container_sp->GetIndexOfChildWithName(name);
26-
}
27-
return llvm::createStringError("Cannot find index of child '%s'",
26+
return llvm::createStringError("'SyntheticChildrenFrontend::QueueFrontEnd' "
27+
"cannot find index of child '%s'",
2828
name.AsCString());
2929
}
3030

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,10 @@ llvm::Expected<size_t>
148148
lldb_private::formatters::LibcxxStdSliceArraySyntheticFrontEnd::
149149
GetIndexOfChildWithName(ConstString name) {
150150
if (!m_start)
151-
return llvm::createStringError("Cannot find index of child '%s'",
152-
name.AsCString());
151+
return llvm::createStringError(
152+
"'SyntheticChildrenFrontend::LibcxxStdSliceArraySyntheticFrontEnd' "
153+
"cannot find index of child '%s'",
154+
name.AsCString());
153155
return ExtractIndexFromString(name.GetCString());
154156
}
155157

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,8 +130,10 @@ lldb_private::formatters::LibcxxStdSpanSyntheticFrontEnd::Update() {
130130
llvm::Expected<size_t> lldb_private::formatters::
131131
LibcxxStdSpanSyntheticFrontEnd::GetIndexOfChildWithName(ConstString name) {
132132
if (!m_start)
133-
return llvm::createStringError("Cannot find index of child '%s'",
134-
name.AsCString());
133+
return llvm::createStringError(
134+
"'SyntheticChildrenFrontEnd::LibcxxStdSpanSyntheticFrontEnd' cannot "
135+
"find index of child '%s'",
136+
name.AsCString());
135137
return ExtractIndexFromString(name.GetCString());
136138
}
137139

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -406,8 +406,10 @@ lldb_private::formatters::LibCxxUnorderedMapIteratorSyntheticFrontEnd::
406406
return 0;
407407
if (name == "second")
408408
return 1;
409-
return llvm::createStringError("Cannot find index of child '%s'",
410-
name.AsCString());
409+
return llvm::createStringError(
410+
"'SyntheticChildrenFrontEnd::LibCxxUnorderedMapIteratorSyntheticFrontEnd'"
411+
" cannot find index of child '%s'",
412+
name.AsCString());
411413
}
412414

413415
SyntheticChildrenFrontEnd *

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,10 @@ llvm::Expected<size_t>
127127
lldb_private::formatters::LibcxxStdValarraySyntheticFrontEnd::
128128
GetIndexOfChildWithName(ConstString name) {
129129
if (!m_start || !m_finish)
130-
return llvm::createStringError("Cannot find index of child '%s'",
131-
name.AsCString());
130+
return llvm::createStringError(
131+
"'SyntheticChildrenFrontEnd::LibcxxStdValarraySyntheticFrontEnd' "
132+
"cannot find index of child '%s'",
133+
name.AsCString());
132134
return ExtractIndexFromString(name.GetCString());
133135
}
134136

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,8 +205,10 @@ class VariantFrontEnd : public SyntheticChildrenFrontEnd {
205205
llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override {
206206
size_t index = formatters::ExtractIndexFromString(name.GetCString());
207207
if (index == UINT32_MAX) {
208-
return llvm::createStringError("Cannot find index of child '%s'",
209-
name.AsCString());
208+
return llvm::createStringError(
209+
"'SyntheticChildrenFrontEnd::VariantFrontEnd' cannot find index of "
210+
"child '%s'",
211+
name.AsCString());
210212
}
211213
return index;
212214
}

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

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,10 @@ llvm::Expected<size_t>
167167
lldb_private::formatters::LibcxxStdVectorSyntheticFrontEnd::
168168
GetIndexOfChildWithName(ConstString name) {
169169
if (!m_start || !m_finish)
170-
return UINT32_MAX;
170+
return llvm::createStringError(
171+
"'SyntheticChildrenFrontEnd::LibcxxStdVectorSyntheticFrontEnd' cannot "
172+
"find index of child '%s'",
173+
name.AsCString());
171174
return ExtractIndexFromString(name.GetCString());
172175
}
173176

@@ -264,13 +267,17 @@ llvm::Expected<size_t>
264267
lldb_private::formatters::LibcxxVectorBoolSyntheticFrontEnd::
265268
GetIndexOfChildWithName(ConstString name) {
266269
if (!m_count || !m_base_data_address)
267-
return llvm::createStringError("Cannot find index of child '%s'",
268-
name.AsCString());
270+
return llvm::createStringError(
271+
"'SyntheticChildrenFrontEnd::LibcxxVectorBoolSyntheticFrontEnd' cannot "
272+
"find index of child '%s'",
273+
name.AsCString());
269274
const char *item_name = name.GetCString();
270275
uint32_t idx = ExtractIndexFromString(item_name);
271276
if (idx < UINT32_MAX && idx >= CalculateNumChildrenIgnoringErrors())
272-
return llvm::createStringError("Cannot find index of child '%s'",
273-
name.AsCString());
277+
return llvm::createStringError(
278+
"'SyntheticChildrenFrontEnd::LibcxxVectorBoolSyntheticFrontEnd' cannot "
279+
"find index of child '%s'",
280+
name.AsCString());
274281
return idx;
275282
}
276283

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

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -153,8 +153,10 @@ LibstdcppMapIteratorSyntheticFrontEnd::GetIndexOfChildWithName(
153153
return 0;
154154
if (name == "second")
155155
return 1;
156-
return llvm::createStringError("Cannot find index of child '%s'",
157-
name.AsCString());
156+
return llvm::createStringError(
157+
"'SyntheticChildrenFrontEnd::LibstdcppMapIteratorSyntheticFrontEnd' "
158+
"cannot find index of child '%s'",
159+
name.AsCString());
158160
}
159161

160162
SyntheticChildrenFrontEnd *
@@ -233,8 +235,10 @@ llvm::Expected<size_t>
233235
VectorIteratorSyntheticFrontEnd::GetIndexOfChildWithName(ConstString name) {
234236
if (name == "item")
235237
return 0;
236-
return llvm::createStringError("Cannot find index of child '%s'",
237-
name.AsCString());
238+
return llvm::createStringError(
239+
"'SyntheticChildrenFrontEnd::VectorIteratorSyntheticFrontEnd' cannot "
240+
"find index of child '%s'",
241+
name.AsCString());
238242
}
239243

240244
bool lldb_private::formatters::LibStdcppStringSummaryProvider(
@@ -419,8 +423,10 @@ LibStdcppSharedPtrSyntheticFrontEnd::GetIndexOfChildWithName(ConstString name) {
419423
return 0;
420424
if (name == "object" || name == "$$dereference$$")
421425
return 1;
422-
return llvm::createStringError("Cannot find index of child '%s'",
423-
name.AsCString());
426+
return llvm::createStringError(
427+
"'SyntheticChildrenFrontEnd::LibStdcppSharedPtrSyntheticFrontEnd' cannot "
428+
"find index of child '%s'",
429+
name.AsCString());
424430
}
425431

426432
SyntheticChildrenFrontEnd *

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,10 @@ LibStdcppUniquePtrSyntheticFrontEnd::GetIndexOfChildWithName(ConstString name) {
147147
return 1;
148148
if (name == "obj" || name == "object" || name == "$$dereference$$")
149149
return 2;
150-
return llvm::createStringError("Cannot find index of child '%s'",
151-
name.AsCString());
150+
return llvm::createStringError(
151+
"'SyntheticChildrenFrontEnd::LibStdcppUniquePtrSyntheticFrontEnd' cannot "
152+
"find index of child '%s'",
153+
name.AsCString());
152154
}
153155

154156
bool LibStdcppUniquePtrSyntheticFrontEnd::GetSummary(

0 commit comments

Comments
 (0)