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

Reply via email to