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 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits