[Lldb-commits] [lldb] [lldb] Upgrade `GetIndexOfChildWithName` to use `llvm::Expected` (PR #136693)
via lldb-commits
lldb-commits at lists.llvm.org
Tue Apr 22 05:29:58 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-lldb
Author: Charles Zablit (charles-zablit)
<details>
<summary>Changes</summary>
This patch replaces the use of `UINT32_MAX` as the error return value of `GetIndexOfChildWithName` with `llvm::Expected`.
---
Patch is 66.88 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/136693.diff
52 Files Affected:
- (modified) lldb/include/lldb/API/SBValue.h (+2)
- (modified) lldb/include/lldb/DataFormatters/TypeSynthetic.h (+6-5)
- (modified) lldb/include/lldb/DataFormatters/VectorIterator.h (+1-1)
- (modified) lldb/include/lldb/Interpreter/ScriptInterpreter.h (+3-2)
- (modified) lldb/include/lldb/Symbol/CompilerType.h (+3-2)
- (modified) lldb/include/lldb/Symbol/TypeSystem.h (+4-3)
- (modified) lldb/include/lldb/ValueObject/ValueObject.h (+1-1)
- (modified) lldb/include/lldb/ValueObject/ValueObjectRegister.h (+1-1)
- (modified) lldb/include/lldb/ValueObject/ValueObjectSyntheticFilter.h (+1-1)
- (modified) lldb/source/API/SBValue.cpp (+7-3)
- (modified) lldb/source/DataFormatters/FormatterBytecode.cpp (+8-1)
- (modified) lldb/source/DataFormatters/TypeSynthetic.cpp (+5-4)
- (modified) lldb/source/DataFormatters/VectorType.cpp (+3-2)
- (modified) lldb/source/Plugins/Language/CPlusPlus/BlockPointer.cpp (+12-4)
- (modified) lldb/source/Plugins/Language/CPlusPlus/Coroutines.cpp (+6-3)
- (modified) lldb/source/Plugins/Language/CPlusPlus/Coroutines.h (+1-1)
- (modified) lldb/source/Plugins/Language/CPlusPlus/GenericBitset.cpp (+1-1)
- (modified) lldb/source/Plugins/Language/CPlusPlus/GenericOptional.cpp (+1-1)
- (modified) lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp (+9-5)
- (modified) lldb/source/Plugins/Language/CPlusPlus/LibCxx.h (+2-2)
- (modified) lldb/source/Plugins/Language/CPlusPlus/LibCxxAtomic.cpp (+8-3)
- (modified) lldb/source/Plugins/Language/CPlusPlus/LibCxxInitializerList.cpp (+3-2)
- (modified) lldb/source/Plugins/Language/CPlusPlus/LibCxxList.cpp (+1-1)
- (modified) lldb/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp (+7-5)
- (modified) lldb/source/Plugins/Language/CPlusPlus/LibCxxProxyArray.cpp (+3-2)
- (modified) lldb/source/Plugins/Language/CPlusPlus/LibCxxQueue.cpp (+6-3)
- (modified) lldb/source/Plugins/Language/CPlusPlus/LibCxxRangesRefView.cpp (+1-1)
- (modified) lldb/source/Plugins/Language/CPlusPlus/LibCxxSliceArray.cpp (+5-3)
- (modified) lldb/source/Plugins/Language/CPlusPlus/LibCxxSpan.cpp (+5-4)
- (modified) lldb/source/Plugins/Language/CPlusPlus/LibCxxTuple.cpp (+1-1)
- (modified) lldb/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp (+8-5)
- (modified) lldb/source/Plugins/Language/CPlusPlus/LibCxxValarray.cpp (+5-3)
- (modified) lldb/source/Plugins/Language/CPlusPlus/LibCxxVariant.cpp (+7-2)
- (modified) lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp (+10-6)
- (modified) lldb/source/Plugins/Language/CPlusPlus/LibStdcpp.cpp (+15-10)
- (modified) lldb/source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp (+3-3)
- (modified) lldb/source/Plugins/Language/CPlusPlus/LibStdcppUniquePointer.cpp (+5-4)
- (modified) lldb/source/Plugins/Language/ObjC/Cocoa.cpp (+3-2)
- (modified) lldb/source/Plugins/Language/ObjC/NSArray.cpp (+11-12)
- (modified) lldb/source/Plugins/Language/ObjC/NSDictionary.cpp (+33-24)
- (modified) lldb/source/Plugins/Language/ObjC/NSError.cpp (+3-2)
- (modified) lldb/source/Plugins/Language/ObjC/NSException.cpp (+3-2)
- (modified) lldb/source/Plugins/Language/ObjC/NSIndexPath.cpp (+3-2)
- (modified) lldb/source/Plugins/Language/ObjC/NSSet.cpp (+13-12)
- (modified) lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp (+11-5)
- (modified) lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPythonImpl.h (+3-2)
- (modified) lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp (+1-1)
- (modified) lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.h (+4-3)
- (modified) lldb/source/Symbol/CompilerType.cpp (+3-2)
- (modified) lldb/source/ValueObject/ValueObject.cpp (+2-1)
- (modified) lldb/source/ValueObject/ValueObjectRegister.cpp (+4-2)
- (modified) lldb/source/ValueObject/ValueObjectSyntheticFilter.cpp (+19-18)
``````````diff
diff --git a/lldb/include/lldb/API/SBValue.h b/lldb/include/lldb/API/SBValue.h
index 75d20a4378f09..69c50ab038e5b 100644
--- a/lldb/include/lldb/API/SBValue.h
+++ b/lldb/include/lldb/API/SBValue.h
@@ -13,6 +13,8 @@
#include "lldb/API/SBDefines.h"
#include "lldb/API/SBType.h"
+#include "lldb/Core/Value.h"
+
class ValueImpl;
class ValueLocker;
diff --git a/lldb/include/lldb/DataFormatters/TypeSynthetic.h b/lldb/include/lldb/DataFormatters/TypeSynthetic.h
index 14e516964f250..a132c63a93b08 100644
--- a/lldb/include/lldb/DataFormatters/TypeSynthetic.h
+++ b/lldb/include/lldb/DataFormatters/TypeSynthetic.h
@@ -51,7 +51,7 @@ class SyntheticChildrenFrontEnd {
virtual lldb::ValueObjectSP GetChildAtIndex(uint32_t idx) = 0;
- virtual size_t GetIndexOfChildWithName(ConstString name) = 0;
+ virtual llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) = 0;
/// This function is assumed to always succeed and if it fails, the front-end
/// should know to deal with it in the correct way (most probably, by refusing
@@ -117,8 +117,9 @@ class SyntheticValueProviderFrontEnd : public SyntheticChildrenFrontEnd {
lldb::ValueObjectSP GetChildAtIndex(uint32_t idx) override { return nullptr; }
- size_t GetIndexOfChildWithName(ConstString name) override {
- return UINT32_MAX;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override {
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
}
lldb::ChildCacheState Update() override {
@@ -343,7 +344,7 @@ class TypeFilterImpl : public SyntheticChildren {
bool MightHaveChildren() override { return filter->GetCount() > 0; }
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
typedef std::shared_ptr<SyntheticChildrenFrontEnd> SharedPointer;
@@ -442,7 +443,7 @@ class ScriptedSyntheticChildren : public SyntheticChildren {
bool MightHaveChildren() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
lldb::ValueObjectSP GetSyntheticValue() override;
diff --git a/lldb/include/lldb/DataFormatters/VectorIterator.h b/lldb/include/lldb/DataFormatters/VectorIterator.h
index d095f085cabab..bdfaca7349c6a 100644
--- a/lldb/include/lldb/DataFormatters/VectorIterator.h
+++ b/lldb/include/lldb/DataFormatters/VectorIterator.h
@@ -30,7 +30,7 @@ class VectorIteratorSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
private:
ExecutionContextRef m_exe_ctx_ref;
diff --git a/lldb/include/lldb/Interpreter/ScriptInterpreter.h b/lldb/include/lldb/Interpreter/ScriptInterpreter.h
index 25e82779f05c6..5425e58f0d594 100644
--- a/lldb/include/lldb/Interpreter/ScriptInterpreter.h
+++ b/lldb/include/lldb/Interpreter/ScriptInterpreter.h
@@ -368,10 +368,11 @@ class ScriptInterpreter : public PluginInterface {
return lldb::ValueObjectSP();
}
- virtual int
+ virtual llvm::Expected<int>
GetIndexOfChildWithName(const StructuredData::ObjectSP &implementor,
const char *child_name) {
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ child_name);
}
virtual bool
diff --git a/lldb/include/lldb/Symbol/CompilerType.h b/lldb/include/lldb/Symbol/CompilerType.h
index 41a1676dabd76..539a4cae04e1c 100644
--- a/lldb/include/lldb/Symbol/CompilerType.h
+++ b/lldb/include/lldb/Symbol/CompilerType.h
@@ -450,8 +450,9 @@ class CompilerType {
/// Lookup a child given a name. This function will match base class names and
/// member member names in "clang_type" only, not descendants.
- uint32_t GetIndexOfChildWithName(llvm::StringRef name,
- bool omit_empty_base_classes) const;
+ llvm::Expected<uint32_t>
+ GetIndexOfChildWithName(llvm::StringRef name,
+ bool omit_empty_base_classes) const;
/// Lookup a child member given a name. This function will match member names
/// only and will descend into "clang_type" children in search for the first
diff --git a/lldb/include/lldb/Symbol/TypeSystem.h b/lldb/include/lldb/Symbol/TypeSystem.h
index 59fb066e087d3..0881c47cbaa1a 100644
--- a/lldb/include/lldb/Symbol/TypeSystem.h
+++ b/lldb/include/lldb/Symbol/TypeSystem.h
@@ -375,9 +375,10 @@ class TypeSystem : public PluginInterface,
// Lookup a child given a name. This function will match base class names and
// member member names in "clang_type" only, not descendants.
- virtual uint32_t GetIndexOfChildWithName(lldb::opaque_compiler_type_t type,
- llvm::StringRef name,
- bool omit_empty_base_classes) = 0;
+ virtual llvm::Expected<uint32_t>
+ GetIndexOfChildWithName(lldb::opaque_compiler_type_t type,
+ llvm::StringRef name,
+ bool omit_empty_base_classes) = 0;
// Lookup a child member given a name. This function will match member names
// only and will descend into "clang_type" children in search for the first
diff --git a/lldb/include/lldb/ValueObject/ValueObject.h b/lldb/include/lldb/ValueObject/ValueObject.h
index 06d2589002ed0..0add8ebeccdc8 100644
--- a/lldb/include/lldb/ValueObject/ValueObject.h
+++ b/lldb/include/lldb/ValueObject/ValueObject.h
@@ -498,7 +498,7 @@ class ValueObject {
virtual lldb::ValueObjectSP GetChildMemberWithName(llvm::StringRef name,
bool can_create = true);
- virtual size_t GetIndexOfChildWithName(llvm::StringRef name);
+ virtual llvm::Expected<size_t> GetIndexOfChildWithName(llvm::StringRef name);
llvm::Expected<uint32_t> GetNumChildren(uint32_t max = UINT32_MAX);
/// Like \c GetNumChildren but returns 0 on error. You probably
diff --git a/lldb/include/lldb/ValueObject/ValueObjectRegister.h b/lldb/include/lldb/ValueObject/ValueObjectRegister.h
index 0812dc575aaa1..3db4b00bd1b15 100644
--- a/lldb/include/lldb/ValueObject/ValueObjectRegister.h
+++ b/lldb/include/lldb/ValueObject/ValueObjectRegister.h
@@ -52,7 +52,7 @@ class ValueObjectRegisterSet : public ValueObject {
lldb::ValueObjectSP GetChildMemberWithName(llvm::StringRef name,
bool can_create = true) override;
- size_t GetIndexOfChildWithName(llvm::StringRef name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(llvm::StringRef name) override;
protected:
bool UpdateValue() override;
diff --git a/lldb/include/lldb/ValueObject/ValueObjectSyntheticFilter.h b/lldb/include/lldb/ValueObject/ValueObjectSyntheticFilter.h
index df205a258a997..cdb2b1ddc3646 100644
--- a/lldb/include/lldb/ValueObject/ValueObjectSyntheticFilter.h
+++ b/lldb/include/lldb/ValueObject/ValueObjectSyntheticFilter.h
@@ -57,7 +57,7 @@ class ValueObjectSynthetic : public ValueObject {
lldb::ValueObjectSP GetChildMemberWithName(llvm::StringRef name,
bool can_create = true) override;
- size_t GetIndexOfChildWithName(llvm::StringRef name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(llvm::StringRef name) override;
lldb::ValueObjectSP
GetDynamicValue(lldb::DynamicValueType valueType) override;
diff --git a/lldb/source/API/SBValue.cpp b/lldb/source/API/SBValue.cpp
index 6b91120f6427a..7b23484023ab3 100644
--- a/lldb/source/API/SBValue.cpp
+++ b/lldb/source/API/SBValue.cpp
@@ -704,13 +704,17 @@ SBValue SBValue::GetChildAtIndex(uint32_t idx,
uint32_t SBValue::GetIndexOfChildWithName(const char *name) {
LLDB_INSTRUMENT_VA(this, name);
- uint32_t idx = UINT32_MAX;
ValueLocker locker;
lldb::ValueObjectSP value_sp(GetSP(locker));
if (value_sp) {
- idx = value_sp->GetIndexOfChildWithName(name);
+ auto idx_or_err = value_sp->GetIndexOfChildWithName(name);
+ if (!idx_or_err) {
+ llvm::consumeError(idx_or_err.takeError());
+ return UINT32_MAX;
+ }
+ return *idx_or_err;
}
- return idx;
+ return UINT32_MAX;
}
SBValue SBValue::GetChildMemberWithName(const char *name) {
diff --git a/lldb/source/DataFormatters/FormatterBytecode.cpp b/lldb/source/DataFormatters/FormatterBytecode.cpp
index 7f3dbe0dba37d..5d65c3043427f 100644
--- a/lldb/source/DataFormatters/FormatterBytecode.cpp
+++ b/lldb/source/DataFormatters/FormatterBytecode.cpp
@@ -14,6 +14,7 @@
#include "llvm/Support/Format.h"
#include "llvm/Support/FormatProviders.h"
#include "llvm/Support/FormatVariadicDetails.h"
+#include <lldb/ValueObject/ValueObjectConstResult.h>
using namespace lldb;
namespace lldb_private {
@@ -489,7 +490,13 @@ llvm::Error Interpret(std::vector<ControlStackElement> &control,
TYPE_CHECK(Object, String);
auto name = data.Pop<std::string>();
POP_VALOBJ(valobj);
- data.Push((uint64_t)valobj->GetIndexOfChildWithName(name));
+ auto index_or_err = valobj->GetIndexOfChildWithName(name);
+ if (!index_or_err) {
+ data.Push(ValueObjectConstResult::Create(
+ nullptr, Status::FromError(index_or_err.takeError())));
+ break;
+ }
+ data.Push((uint64_t)*index_or_err);
break;
}
case sel_get_type: {
diff --git a/lldb/source/DataFormatters/TypeSynthetic.cpp b/lldb/source/DataFormatters/TypeSynthetic.cpp
index 7aa0670190b25..fb23efedbde3d 100644
--- a/lldb/source/DataFormatters/TypeSynthetic.cpp
+++ b/lldb/source/DataFormatters/TypeSynthetic.cpp
@@ -49,7 +49,7 @@ bool TypeFilterImpl::SetExpressionPathAtIndex(size_t i,
return true;
}
-size_t
+llvm::Expected<size_t>
TypeFilterImpl::FrontEnd::GetIndexOfChildWithName(ConstString name) {
const char *name_cstr = name.GetCString();
if (name_cstr) {
@@ -218,10 +218,11 @@ bool ScriptedSyntheticChildren::FrontEnd::MightHaveChildren() {
return m_interpreter->MightHaveChildrenSynthProviderInstance(m_wrapper_sp);
}
-size_t ScriptedSyntheticChildren::FrontEnd::GetIndexOfChildWithName(
- ConstString name) {
+llvm::Expected<size_t>
+ScriptedSyntheticChildren::FrontEnd::GetIndexOfChildWithName(ConstString name) {
if (!m_wrapper_sp || m_interpreter == nullptr)
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
return m_interpreter->GetIndexOfChildWithName(m_wrapper_sp,
name.GetCString());
}
diff --git a/lldb/source/DataFormatters/VectorType.cpp b/lldb/source/DataFormatters/VectorType.cpp
index 162b075ec87d2..2ddd6e9b006fb 100644
--- a/lldb/source/DataFormatters/VectorType.cpp
+++ b/lldb/source/DataFormatters/VectorType.cpp
@@ -269,11 +269,12 @@ class VectorTypeSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
return lldb::ChildCacheState::eRefetch;
}
- size_t GetIndexOfChildWithName(ConstString name) override {
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override {
const char *item_name = name.GetCString();
uint32_t idx = ExtractIndexFromString(item_name);
if (idx < UINT32_MAX && idx >= CalculateNumChildrenIgnoringErrors())
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
return idx;
}
diff --git a/lldb/source/Plugins/Language/CPlusPlus/BlockPointer.cpp b/lldb/source/Plugins/Language/CPlusPlus/BlockPointer.cpp
index 6a22501c98aab..6731c96341ac8 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/BlockPointer.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/BlockPointer.cpp
@@ -144,9 +144,10 @@ class BlockPointerSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
return lldb::ChildCacheState::eRefetch;
}
- size_t GetIndexOfChildWithName(ConstString name) override {
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override {
if (!m_block_struct_type.IsValid())
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
const bool omit_empty_base_classes = false;
return m_block_struct_type.GetIndexOfChildWithName(name.AsCString(),
@@ -172,8 +173,15 @@ bool lldb_private::formatters::BlockPointerSummaryProvider(
static const ConstString s_FuncPtr_name("__FuncPtr");
- lldb::ValueObjectSP child_sp = synthetic_children->GetChildAtIndex(
- synthetic_children->GetIndexOfChildWithName(s_FuncPtr_name));
+ auto index_or_err =
+ synthetic_children->GetIndexOfChildWithName(s_FuncPtr_name);
+
+ if (!index_or_err) {
+ return false;
+ }
+
+ lldb::ValueObjectSP child_sp =
+ synthetic_children->GetChildAtIndex(*index_or_err);
if (!child_sp) {
return false;
diff --git a/lldb/source/Plugins/Language/CPlusPlus/Coroutines.cpp b/lldb/source/Plugins/Language/CPlusPlus/Coroutines.cpp
index 76a10d2393782..0d68b1f4eda1b 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/Coroutines.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/Coroutines.cpp
@@ -199,10 +199,12 @@ lldb_private::formatters::StdlibCoroutineHandleSyntheticFrontEnd::Update() {
return lldb::ChildCacheState::eRefetch;
}
-size_t StdlibCoroutineHandleSyntheticFrontEnd::GetIndexOfChildWithName(
+llvm::Expected<size_t>
+StdlibCoroutineHandleSyntheticFrontEnd::GetIndexOfChildWithName(
ConstString name) {
if (!m_resume_ptr_sp || !m_destroy_ptr_sp)
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
if (name == ConstString("resume"))
return 0;
@@ -211,7 +213,8 @@ size_t StdlibCoroutineHandleSyntheticFrontEnd::GetIndexOfChildWithName(
if (name == ConstString("promise_ptr") && m_promise_ptr_sp)
return 2;
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
}
SyntheticChildrenFrontEnd *
diff --git a/lldb/source/Plugins/Language/CPlusPlus/Coroutines.h b/lldb/source/Plugins/Language/CPlusPlus/Coroutines.h
index c33c82bd2fc45..fd9445d46e6a0 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/Coroutines.h
+++ b/lldb/source/Plugins/Language/CPlusPlus/Coroutines.h
@@ -40,7 +40,7 @@ class StdlibCoroutineHandleSyntheticFrontEnd
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
private:
lldb::ValueObjectSP m_resume_ptr_sp;
diff --git a/lldb/source/Plugins/Language/CPlusPlus/GenericBitset.cpp b/lldb/source/Plugins/Language/CPlusPlus/GenericBitset.cpp
index 03671c3efed6f..49c51835d1ed6 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/GenericBitset.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/GenericBitset.cpp
@@ -28,7 +28,7 @@ class GenericBitsetFrontEnd : public SyntheticChildrenFrontEnd {
GenericBitsetFrontEnd(ValueObject &valobj, StdLib stdlib);
- size_t GetIndexOfChildWithName(ConstString name) override {
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override {
return formatters::ExtractIndexFromString(name.GetCString());
}
diff --git a/lldb/source/Plugins/Language/CPlusPlus/GenericOptional.cpp b/lldb/source/Plugins/Language/CPlusPlus/GenericOptional.cpp
index b224d3e859c84..c6b3c3344ef3a 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/GenericOptional.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/GenericOptional.cpp
@@ -36,7 +36,7 @@ class GenericOptionalFrontend : public SyntheticChildrenFrontEnd {
GenericOptionalFrontend(ValueObject &valobj, StdLib stdlib);
- size_t GetIndexOfChildWithName(ConstString name) override {
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override {
if (name == "$$dereference$$")
return 0;
return formatters::ExtractIndexFromString(name.GetCString());
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp
index 63620c6bf0ddd..04487f86719ba 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp
@@ -309,13 +309,15 @@ lldb_private::formatters::LibcxxSharedPtrSyntheticFrontEnd::Update() {
return lldb::ChildCacheState::eRefetch;
}
-size_t lldb_private::formatters::LibcxxSharedPtrSyntheticFrontEnd::
+llvm::Expected<size_t>
+lldb_private::formatters::LibcxxSharedPtrSyntheticFrontEnd::
GetIndexOfChildWithName(ConstString name) {
if (name == "__ptr_")
return 0;
if (name == "$$dereference$$")
return 1;
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
}
lldb_private::formatters::LibcxxSharedPtrSyntheticFrontEnd::
@@ -407,7 +409,8 @@ lldb_private::formatters::LibcxxUniquePtrSyntheticFrontEnd::Update() {
return lldb::ChildCacheState::eRefetch;
}
-size_t lldb_private::formatters::LibcxxUniquePtrSyntheticFrontEnd::
+llvm::Expected<size_t>
+lldb_private::formatters::LibcxxUniquePtrSyntheticFrontEnd::
GetIndexOfChildWithName(ConstString name) {
if (name == "pointer")
return 0;
@@ -415,7 +418,8 @@ size_t lldb_private::formatters::LibcxxUniquePtrSyntheticFrontEnd::
return 1;
if (name == "$$dereference$$")
return 2;
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
}
bool lldb_private::formatters::LibcxxContainerSummaryProvider(
@@ -456,7 +460,7 @@ ExtractLibcxxStringInfo(ValueObject &valobj) {
if (!l)
return {};
- StringLayout layout = l->GetIndexOfChildWithName("__data_") == 0
+ StringLayout layout = l->GetIndexOfChildWithName("__data_").get() == 0
? StringLayout::DSC
: StringLayout::CSD;
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxx.h b/lldb/source/Plugins/Language/CPlusPlus/LibCxx.h
index 21fbb361eb934..56501302d116f 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibCxx.h
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxx.h
@@ -102,7 +102,7 @@ class LibcxxSharedPtrSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
~LibcxxSharedPtrSyntheticFrontEnd() override;
@@ -120,7 +120,7 @@ class LibcxxUniquePtrSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
~LibcxxUniquePtrSyntheticFrontEnd() override;
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxAtomic.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxAtomic.cpp
index 3104f33ee80b3..87962d4f33cbd 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxAtomic.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxAtomic.cpp
@@ -96,7 +96,7 @@ class LibcxxStdAtomicSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
private:
ValueObject *m_real_child = nullptr;
@@ -130,9 +130,14 @@ lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::GetChildAtIndex(
return nullptr;
}
-size_t lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::
+llvm::Expected<size_t>
+lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::
GetIndexOfChildWithName(ConstString name) {
- return name == "Value" ? 0 : UINT32_MAX;
+ if (name == "Value") {
+ return 0;
+ }
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
}
SyntheticChildrenF...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/136693
More information about the lldb-commits
mailing list