<html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Do you happen to have a link to a bot with the failures? Or can you send me the output in case it's an internal bot?<div class=""><br class=""></div><div class="">thanks,</div><div class="">adrian<br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Jul 27, 2020, at 9:54 AM, Eric Christopher <<a href="mailto:echristo@gmail.com" class="">echristo@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="auto" class="">No problem, thanks! :)</div><br class=""><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Jul 27, 2020, 9:26 AM Adrian Prantl <<a href="mailto:aprantl@apple.com" class="">aprantl@apple.com</a>> wrote:<br class=""></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word;line-break:after-white-space" class="">Thanks, Eric! Sorry for not paying attention after landing this.<div class=""><br class=""></div><div class="">-- adrian<br class=""><div class=""><br class=""><blockquote type="cite" class=""><div class="">On Jul 25, 2020, at 6:43 PM, Eric Christopher <<a href="mailto:echristo@gmail.com" target="_blank" rel="noreferrer" class="">echristo@gmail.com</a>> wrote:</div><br class=""><div class=""><div dir="ltr" class="">Hi Adrian,<div class=""><br class=""></div><div class="">I'm really sorry, but I've just reverted this. I'm not sure what's up, but it's causing massive test failures in lldb on linux. Happy to help sync up with you.</div><div class=""><br class=""></div><div class="">echristo@athyra ~/s/llvm-project> git push<br class="">To <a href="http://github.com/" target="_blank" rel="noreferrer" class="">github.com</a>:llvm/llvm-project.git<br class="">   18975762c19..4b14ef33e81  master -> master<br class=""></div><div class=""><br class=""></div><div class="">Thanks!</div><div class=""><br class=""></div><div class="">-eric</div></div><br class=""><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Jul 25, 2020 at 8:28 AM Adrian Prantl via lldb-commits <<a href="mailto:lldb-commits@lists.llvm.org" target="_blank" rel="noreferrer" class="">lldb-commits@lists.llvm.org</a>> wrote:<br class=""></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br class="">
Author: Adrian Prantl<br class="">
Date: 2020-07-25T08:27:21-07:00<br class="">
New Revision: 1d9b860fb6a85df33fd52fcacc6a5efb421621bd<br class="">
<br class="">
URL: <a href="https://github.com/llvm/llvm-project/commit/1d9b860fb6a85df33fd52fcacc6a5efb421621bd" rel="noreferrer noreferrer" target="_blank" class="">https://github.com/llvm/llvm-project/commit/1d9b860fb6a85df33fd52fcacc6a5efb421621bd</a><br class="">
DIFF: <a href="https://github.com/llvm/llvm-project/commit/1d9b860fb6a85df33fd52fcacc6a5efb421621bd.diff" rel="noreferrer noreferrer" target="_blank" class="">https://github.com/llvm/llvm-project/commit/1d9b860fb6a85df33fd52fcacc6a5efb421621bd.diff</a><br class="">
<br class="">
LOG: Unify the return value of GetByteSize to an llvm::Optional<uint64_t> (NFC-ish)<br class="">
<br class="">
This cleanup patch unifies all methods called GetByteSize() in the<br class="">
ValueObject hierarchy to return an optional, like the methods in<br class="">
CompilerType do. This means fewer magic 0 values, which could fix bugs<br class="">
down the road in languages where types can have a size of zero, such<br class="">
as Swift and C (but not C++).<br class="">
<br class="">
Differential Revision: <a href="https://reviews.llvm.org/D84285" rel="noreferrer noreferrer" target="_blank" class="">https://reviews.llvm.org/D84285</a><br class="">
<br class="">
Added: <br class="">
<br class="">
<br class="">
Modified: <br class="">
    lldb/include/lldb/Core/ValueObject.h<br class="">
    lldb/include/lldb/Core/ValueObjectCast.h<br class="">
    lldb/include/lldb/Core/ValueObjectChild.h<br class="">
    lldb/include/lldb/Core/ValueObjectConstResult.h<br class="">
    lldb/include/lldb/Core/ValueObjectDynamicValue.h<br class="">
    lldb/include/lldb/Core/ValueObjectMemory.h<br class="">
    lldb/include/lldb/Core/ValueObjectRegister.h<br class="">
    lldb/include/lldb/Core/ValueObjectSyntheticFilter.h<br class="">
    lldb/include/lldb/Core/ValueObjectVariable.h<br class="">
    lldb/include/lldb/Expression/ExpressionVariable.h<br class="">
    lldb/include/lldb/Target/StackFrameRecognizer.h<br class="">
    lldb/source/API/SBValue.cpp<br class="">
    lldb/source/Commands/CommandObjectWatchpoint.cpp<br class="">
    lldb/source/Core/ValueObject.cpp<br class="">
    lldb/source/Core/ValueObjectCast.cpp<br class="">
    lldb/source/Core/ValueObjectConstResult.cpp<br class="">
    lldb/source/Core/ValueObjectDynamicValue.cpp<br class="">
    lldb/source/Core/ValueObjectMemory.cpp<br class="">
    lldb/source/Core/ValueObjectRegister.cpp<br class="">
    lldb/source/Core/ValueObjectSyntheticFilter.cpp<br class="">
    lldb/source/Core/ValueObjectVariable.cpp<br class="">
    lldb/source/Expression/ExpressionVariable.cpp<br class="">
    lldb/source/Expression/Materializer.cpp<br class="">
    lldb/source/Target/StackFrame.cpp<br class="">
<br class="">
Removed: <br class="">
<br class="">
<br class="">
<br class="">
################################################################################<br class="">
diff  --git a/lldb/include/lldb/Core/ValueObject.h b/lldb/include/lldb/Core/ValueObject.h<br class="">
index 0080368fd996..a557d69f3ae3 100644<br class="">
--- a/lldb/include/lldb/Core/ValueObject.h<br class="">
+++ b/lldb/include/lldb/Core/ValueObject.h<br class="">
@@ -358,7 +358,7 @@ class ValueObject : public UserID {<br class="">
   virtual bool CanProvideValue();<br class="">
<br class="">
   // Subclasses must implement the functions below.<br class="">
-  virtual uint64_t GetByteSize() = 0;<br class="">
+  virtual llvm::Optional<uint64_t> GetByteSize() = 0;<br class="">
<br class="">
   virtual lldb::ValueType GetValueType() const = 0;<br class="">
<br class="">
<br class="">
diff  --git a/lldb/include/lldb/Core/ValueObjectCast.h b/lldb/include/lldb/Core/ValueObjectCast.h<br class="">
index d91ca6a92be8..342803f8ca63 100644<br class="">
--- a/lldb/include/lldb/Core/ValueObjectCast.h<br class="">
+++ b/lldb/include/lldb/Core/ValueObjectCast.h<br class="">
@@ -30,7 +30,7 @@ class ValueObjectCast : public ValueObject {<br class="">
                                     ConstString name,<br class="">
                                     const CompilerType &cast_type);<br class="">
<br class="">
-  uint64_t GetByteSize() override;<br class="">
+  llvm::Optional<uint64_t> GetByteSize() override;<br class="">
<br class="">
   size_t CalculateNumChildren(uint32_t max) override;<br class="">
<br class="">
<br class="">
diff  --git a/lldb/include/lldb/Core/ValueObjectChild.h b/lldb/include/lldb/Core/ValueObjectChild.h<br class="">
index c6f44a29b059..9a9fd9294261 100644<br class="">
--- a/lldb/include/lldb/Core/ValueObjectChild.h<br class="">
+++ b/lldb/include/lldb/Core/ValueObjectChild.h<br class="">
@@ -30,7 +30,7 @@ class ValueObjectChild : public ValueObject {<br class="">
 public:<br class="">
   ~ValueObjectChild() override;<br class="">
<br class="">
-  uint64_t GetByteSize() override { return m_byte_size; }<br class="">
+  llvm::Optional<uint64_t> GetByteSize() override { return m_byte_size; }<br class="">
<br class="">
   lldb::offset_t GetByteOffset() override { return m_byte_offset; }<br class="">
<br class="">
<br class="">
diff  --git a/lldb/include/lldb/Core/ValueObjectConstResult.h b/lldb/include/lldb/Core/ValueObjectConstResult.h<br class="">
index 0e868c687e93..8d823baa0b7b 100644<br class="">
--- a/lldb/include/lldb/Core/ValueObjectConstResult.h<br class="">
+++ b/lldb/include/lldb/Core/ValueObjectConstResult.h<br class="">
@@ -62,7 +62,7 @@ class ValueObjectConstResult : public ValueObject {<br class="">
   static lldb::ValueObjectSP Create(ExecutionContextScope *exe_scope,<br class="">
                                     const Status &error);<br class="">
<br class="">
-  uint64_t GetByteSize() override;<br class="">
+  llvm::Optional<uint64_t> GetByteSize() override;<br class="">
<br class="">
   lldb::ValueType GetValueType() const override;<br class="">
<br class="">
@@ -113,7 +113,7 @@ class ValueObjectConstResult : public ValueObject {<br class="">
   CompilerType GetCompilerTypeImpl() override;<br class="">
<br class="">
   ConstString m_type_name;<br class="">
-  uint64_t m_byte_size;<br class="">
+  llvm::Optional<uint64_t> m_byte_size;<br class="">
<br class="">
   ValueObjectConstResultImpl m_impl;<br class="">
<br class="">
<br class="">
diff  --git a/lldb/include/lldb/Core/ValueObjectDynamicValue.h b/lldb/include/lldb/Core/ValueObjectDynamicValue.h<br class="">
index 9f5304b55e93..2806857339ef 100644<br class="">
--- a/lldb/include/lldb/Core/ValueObjectDynamicValue.h<br class="">
+++ b/lldb/include/lldb/Core/ValueObjectDynamicValue.h<br class="">
@@ -34,7 +34,7 @@ class ValueObjectDynamicValue : public ValueObject {<br class="">
 public:<br class="">
   ~ValueObjectDynamicValue() override;<br class="">
<br class="">
-  uint64_t GetByteSize() override;<br class="">
+  llvm::Optional<uint64_t> GetByteSize() override;<br class="">
<br class="">
   ConstString GetTypeName() override;<br class="">
<br class="">
<br class="">
diff  --git a/lldb/include/lldb/Core/ValueObjectMemory.h b/lldb/include/lldb/Core/ValueObjectMemory.h<br class="">
index d1cd6ae41445..b5d5e6ecf4c0 100644<br class="">
--- a/lldb/include/lldb/Core/ValueObjectMemory.h<br class="">
+++ b/lldb/include/lldb/Core/ValueObjectMemory.h<br class="">
@@ -40,7 +40,7 @@ class ValueObjectMemory : public ValueObject {<br class="">
                                     const Address &address,<br class="">
                                     const CompilerType &ast_type);<br class="">
<br class="">
-  uint64_t GetByteSize() override;<br class="">
+  llvm::Optional<uint64_t> GetByteSize() override;<br class="">
<br class="">
   ConstString GetTypeName() override;<br class="">
<br class="">
<br class="">
diff  --git a/lldb/include/lldb/Core/ValueObjectRegister.h b/lldb/include/lldb/Core/ValueObjectRegister.h<br class="">
index 41051d93b707..3968584ad518 100644<br class="">
--- a/lldb/include/lldb/Core/ValueObjectRegister.h<br class="">
+++ b/lldb/include/lldb/Core/ValueObjectRegister.h<br class="">
@@ -36,7 +36,7 @@ class ValueObjectRegisterSet : public ValueObject {<br class="">
                                     lldb::RegisterContextSP &reg_ctx_sp,<br class="">
                                     uint32_t set_idx);<br class="">
<br class="">
-  uint64_t GetByteSize() override;<br class="">
+  llvm::Optional<uint64_t> GetByteSize() override;<br class="">
<br class="">
   lldb::ValueType GetValueType() const override {<br class="">
     return lldb::eValueTypeRegisterSet;<br class="">
@@ -86,7 +86,7 @@ class ValueObjectRegister : public ValueObject {<br class="">
                                     lldb::RegisterContextSP &reg_ctx_sp,<br class="">
                                     uint32_t reg_num);<br class="">
<br class="">
-  uint64_t GetByteSize() override;<br class="">
+  llvm::Optional<uint64_t> GetByteSize() override;<br class="">
<br class="">
   lldb::ValueType GetValueType() const override {<br class="">
     return lldb::eValueTypeRegister;<br class="">
<br class="">
diff  --git a/lldb/include/lldb/Core/ValueObjectSyntheticFilter.h b/lldb/include/lldb/Core/ValueObjectSyntheticFilter.h<br class="">
index cb471657aec9..41c461ce13f0 100644<br class="">
--- a/lldb/include/lldb/Core/ValueObjectSyntheticFilter.h<br class="">
+++ b/lldb/include/lldb/Core/ValueObjectSyntheticFilter.h<br class="">
@@ -36,7 +36,7 @@ class ValueObjectSynthetic : public ValueObject {<br class="">
 public:<br class="">
   ~ValueObjectSynthetic() override;<br class="">
<br class="">
-  uint64_t GetByteSize() override;<br class="">
+  llvm::Optional<uint64_t> GetByteSize() override;<br class="">
<br class="">
   ConstString GetTypeName() override;<br class="">
<br class="">
<br class="">
diff  --git a/lldb/include/lldb/Core/ValueObjectVariable.h b/lldb/include/lldb/Core/ValueObjectVariable.h<br class="">
index b7e262574a14..23fdedbf5a4a 100644<br class="">
--- a/lldb/include/lldb/Core/ValueObjectVariable.h<br class="">
+++ b/lldb/include/lldb/Core/ValueObjectVariable.h<br class="">
@@ -37,7 +37,7 @@ class ValueObjectVariable : public ValueObject {<br class="">
   static lldb::ValueObjectSP Create(ExecutionContextScope *exe_scope,<br class="">
                                     const lldb::VariableSP &var_sp);<br class="">
<br class="">
-  uint64_t GetByteSize() override;<br class="">
+  llvm::Optional<uint64_t> GetByteSize() override;<br class="">
<br class="">
   ConstString GetTypeName() override;<br class="">
<br class="">
<br class="">
diff  --git a/lldb/include/lldb/Expression/ExpressionVariable.h b/lldb/include/lldb/Expression/ExpressionVariable.h<br class="">
index 60062d212bad..4259e6395da4 100644<br class="">
--- a/lldb/include/lldb/Expression/ExpressionVariable.h<br class="">
+++ b/lldb/include/lldb/Expression/ExpressionVariable.h<br class="">
@@ -32,7 +32,7 @@ class ExpressionVariable<br class="">
<br class="">
   virtual ~ExpressionVariable();<br class="">
<br class="">
-  size_t GetByteSize() { return m_frozen_sp->GetByteSize(); }<br class="">
+  llvm::Optional<uint64_t> GetByteSize() { return m_frozen_sp->GetByteSize(); }<br class="">
<br class="">
   ConstString GetName() { return m_frozen_sp->GetName(); }<br class="">
<br class="">
<br class="">
diff  --git a/lldb/include/lldb/Target/StackFrameRecognizer.h b/lldb/include/lldb/Target/StackFrameRecognizer.h<br class="">
index 302b56bec907..baffc890bb06 100644<br class="">
--- a/lldb/include/lldb/Target/StackFrameRecognizer.h<br class="">
+++ b/lldb/include/lldb/Target/StackFrameRecognizer.h<br class="">
@@ -154,7 +154,9 @@ class ValueObjectRecognizerSynthesizedValue : public ValueObject {<br class="">
     SetName(parent.GetName());<br class="">
   }<br class="">
<br class="">
-  uint64_t GetByteSize() override { return m_parent->GetByteSize(); }<br class="">
+  llvm::Optional<uint64_t> GetByteSize() override {<br class="">
+    return m_parent->GetByteSize();<br class="">
+  }<br class="">
   lldb::ValueType GetValueType() const override { return m_type; }<br class="">
   bool UpdateValue() override {<br class="">
     if (!m_parent->UpdateValueIfNeeded()) return false;<br class="">
<br class="">
diff  --git a/lldb/source/API/SBValue.cpp b/lldb/source/API/SBValue.cpp<br class="">
index 7485b0ee1838..686d1f23a75a 100644<br class="">
--- a/lldb/source/API/SBValue.cpp<br class="">
+++ b/lldb/source/API/SBValue.cpp<br class="">
@@ -333,7 +333,7 @@ size_t SBValue::GetByteSize() {<br class="">
   ValueLocker locker;<br class="">
   lldb::ValueObjectSP value_sp(GetSP(locker));<br class="">
   if (value_sp) {<br class="">
-    result = value_sp->GetByteSize();<br class="">
+    result = value_sp->GetByteSize().getValueOr(0);<br class="">
   }<br class="">
<br class="">
   return result;<br class="">
<br class="">
diff  --git a/lldb/source/Commands/CommandObjectWatchpoint.cpp b/lldb/source/Commands/CommandObjectWatchpoint.cpp<br class="">
index ce4662930a7c..c2a008af79d6 100644<br class="">
--- a/lldb/source/Commands/CommandObjectWatchpoint.cpp<br class="">
+++ b/lldb/source/Commands/CommandObjectWatchpoint.cpp<br class="">
@@ -905,7 +905,7 @@ corresponding to the byte size of the data type.");<br class="">
         // We're in business.<br class="">
         // Find out the size of this variable.<br class="">
         size = m_option_watchpoint.watch_size == 0<br class="">
-                   ? valobj_sp->GetByteSize()<br class="">
+                   ? valobj_sp->GetByteSize().getValueOr(0)<br class="">
                    : m_option_watchpoint.watch_size;<br class="">
       }<br class="">
       compiler_type = valobj_sp->GetCompilerType();<br class="">
<br class="">
diff  --git a/lldb/source/Core/ValueObject.cpp b/lldb/source/Core/ValueObject.cpp<br class="">
index 3a775b07e5e1..aedefd0cf0fd 100644<br class="">
--- a/lldb/source/Core/ValueObject.cpp<br class="">
+++ b/lldb/source/Core/ValueObject.cpp<br class="">
@@ -849,7 +849,7 @@ bool ValueObject::SetData(DataExtractor &data, Status &error) {<br class="">
   uint64_t count = 0;<br class="">
   const Encoding encoding = GetCompilerType().GetEncoding(count);<br class="">
<br class="">
-  const size_t byte_size = GetByteSize();<br class="">
+  const size_t byte_size = GetByteSize().getValueOr(0);<br class="">
<br class="">
   Value::ValueType value_type = m_value.GetValueType();<br class="">
<br class="">
@@ -1524,7 +1524,7 @@ bool ValueObject::SetValueFromCString(const char *value_str, Status &error) {<br class="">
   uint64_t count = 0;<br class="">
   const Encoding encoding = GetCompilerType().GetEncoding(count);<br class="">
<br class="">
-  const size_t byte_size = GetByteSize();<br class="">
+  const size_t byte_size = GetByteSize().getValueOr(0);<br class="">
<br class="">
   Value::ValueType value_type = m_value.GetValueType();<br class="">
<br class="">
@@ -1741,13 +1741,13 @@ ValueObjectSP ValueObject::GetSyntheticBitFieldChild(uint32_t from, uint32_t to,<br class="">
       uint32_t bit_field_offset = from;<br class="">
       if (GetDataExtractor().GetByteOrder() == eByteOrderBig)<br class="">
         bit_field_offset =<br class="">
-            GetByteSize() * 8 - bit_field_size - bit_field_offset;<br class="">
+            GetByteSize().getValueOr(0) * 8 - bit_field_size - bit_field_offset;<br class="">
       // We haven't made a synthetic array member for INDEX yet, so lets make<br class="">
       // one and cache it for any future reference.<br class="">
       ValueObjectChild *synthetic_child = new ValueObjectChild(<br class="">
-          *this, GetCompilerType(), index_const_str, GetByteSize(), 0,<br class="">
-          bit_field_size, bit_field_offset, false, false, eAddressTypeInvalid,<br class="">
-          0);<br class="">
+          *this, GetCompilerType(), index_const_str,<br class="">
+          GetByteSize().getValueOr(0), 0, bit_field_size, bit_field_offset,<br class="">
+          false, false, eAddressTypeInvalid, 0);<br class="">
<br class="">
       // Cache the value if we got one back...<br class="">
       if (synthetic_child) {<br class="">
<br class="">
diff  --git a/lldb/source/Core/ValueObjectCast.cpp b/lldb/source/Core/ValueObjectCast.cpp<br class="">
index 22e856be539b..7b6d3591faf4 100644<br class="">
--- a/lldb/source/Core/ValueObjectCast.cpp<br class="">
+++ b/lldb/source/Core/ValueObjectCast.cpp<br class="">
@@ -47,7 +47,7 @@ size_t ValueObjectCast::CalculateNumChildren(uint32_t max) {<br class="">
   return children_count <= max ? children_count : max;<br class="">
 }<br class="">
<br class="">
-uint64_t ValueObjectCast::GetByteSize() {<br class="">
+llvm::Optional<uint64_t> ValueObjectCast::GetByteSize() {<br class="">
   ExecutionContext exe_ctx(GetExecutionContextRef());<br class="">
   return m_value.GetValueByteSize(nullptr, &exe_ctx);<br class="">
 }<br class="">
<br class="">
diff  --git a/lldb/source/Core/ValueObjectConstResult.cpp b/lldb/source/Core/ValueObjectConstResult.cpp<br class="">
index 8d84f8e62ccc..fd31ddc676b4 100644<br class="">
--- a/lldb/source/Core/ValueObjectConstResult.cpp<br class="">
+++ b/lldb/source/Core/ValueObjectConstResult.cpp<br class="">
@@ -179,8 +179,7 @@ ValueObjectSP ValueObjectConstResult::Create(ExecutionContextScope *exe_scope,<br class="">
 ValueObjectConstResult::ValueObjectConstResult(ExecutionContextScope *exe_scope,<br class="">
                                                ValueObjectManager &manager,<br class="">
                                                const Status &error)<br class="">
-    : ValueObject(exe_scope, manager), m_type_name(), m_byte_size(0),<br class="">
-      m_impl(this) {<br class="">
+    : ValueObject(exe_scope, manager), m_impl(this) {<br class="">
   m_error = error;<br class="">
   SetIsConstant();<br class="">
 }<br class="">
@@ -189,8 +188,7 @@ ValueObjectConstResult::ValueObjectConstResult(ExecutionContextScope *exe_scope,<br class="">
                                                ValueObjectManager &manager,<br class="">
                                                const Value &value,<br class="">
                                                ConstString name, Module *module)<br class="">
-    : ValueObject(exe_scope, manager), m_type_name(), m_byte_size(0),<br class="">
-      m_impl(this) {<br class="">
+    : ValueObject(exe_scope, manager), m_impl(this) {<br class="">
   m_value = value;<br class="">
   m_name = name;<br class="">
   ExecutionContext exe_ctx;<br class="">
@@ -208,9 +206,9 @@ lldb::ValueType ValueObjectConstResult::GetValueType() const {<br class="">
   return eValueTypeConstResult;<br class="">
 }<br class="">
<br class="">
-uint64_t ValueObjectConstResult::GetByteSize() {<br class="">
+llvm::Optional<uint64_t> ValueObjectConstResult::GetByteSize() {<br class="">
   ExecutionContext exe_ctx(GetExecutionContextRef());<br class="">
-  if (m_byte_size == 0) {<br class="">
+  if (!m_byte_size) {<br class="">
     if (auto size =<br class="">
         GetCompilerType().GetByteSize(exe_ctx.GetBestExecutionContextScope()))<br class="">
       SetByteSize(*size);<br class="">
<br class="">
diff  --git a/lldb/source/Core/ValueObjectDynamicValue.cpp b/lldb/source/Core/ValueObjectDynamicValue.cpp<br class="">
index ca66740cb55d..1c25b8c85a05 100644<br class="">
--- a/lldb/source/Core/ValueObjectDynamicValue.cpp<br class="">
+++ b/lldb/source/Core/ValueObjectDynamicValue.cpp<br class="">
@@ -98,7 +98,7 @@ size_t ValueObjectDynamicValue::CalculateNumChildren(uint32_t max) {<br class="">
     return m_parent->GetNumChildren(max);<br class="">
 }<br class="">
<br class="">
-uint64_t ValueObjectDynamicValue::GetByteSize() {<br class="">
+llvm::Optional<uint64_t> ValueObjectDynamicValue::GetByteSize() {<br class="">
   const bool success = UpdateValueIfNeeded(false);<br class="">
   if (success && m_dynamic_type_info.HasType()) {<br class="">
     ExecutionContext exe_ctx(GetExecutionContextRef());<br class="">
<br class="">
diff  --git a/lldb/source/Core/ValueObjectMemory.cpp b/lldb/source/Core/ValueObjectMemory.cpp<br class="">
index 8e7d3ebc93f6..17fade9e5fdc 100644<br class="">
--- a/lldb/source/Core/ValueObjectMemory.cpp<br class="">
+++ b/lldb/source/Core/ValueObjectMemory.cpp<br class="">
@@ -139,13 +139,11 @@ size_t ValueObjectMemory::CalculateNumChildren(uint32_t max) {<br class="">
   return child_count <= max ? child_count : max;<br class="">
 }<br class="">
<br class="">
-uint64_t ValueObjectMemory::GetByteSize() {<br class="">
+llvm::Optional<uint64_t> ValueObjectMemory::GetByteSize() {<br class="">
   ExecutionContext exe_ctx(GetExecutionContextRef());<br class="">
   if (m_type_sp)<br class="">
-    return m_type_sp->GetByteSize(exe_ctx.GetBestExecutionContextScope())<br class="">
-        .getValueOr(0);<br class="">
-  return m_compiler_type.GetByteSize(exe_ctx.GetBestExecutionContextScope())<br class="">
-      .getValueOr(0);<br class="">
+    return m_type_sp->GetByteSize(exe_ctx.GetBestExecutionContextScope());<br class="">
+  return m_compiler_type.GetByteSize(exe_ctx.GetBestExecutionContextScope());<br class="">
 }<br class="">
<br class="">
 lldb::ValueType ValueObjectMemory::GetValueType() const {<br class="">
<br class="">
diff  --git a/lldb/source/Core/ValueObjectRegister.cpp b/lldb/source/Core/ValueObjectRegister.cpp<br class="">
index ec87c38fb367..27461e9cebc4 100644<br class="">
--- a/lldb/source/Core/ValueObjectRegister.cpp<br class="">
+++ b/lldb/source/Core/ValueObjectRegister.cpp<br class="">
@@ -81,7 +81,7 @@ size_t ValueObjectRegisterSet::CalculateNumChildren(uint32_t max) {<br class="">
   return 0;<br class="">
 }<br class="">
<br class="">
-uint64_t ValueObjectRegisterSet::GetByteSize() { return 0; }<br class="">
+llvm::Optional<uint64_t> ValueObjectRegisterSet::GetByteSize() { return 0; }<br class="">
<br class="">
 bool ValueObjectRegisterSet::UpdateValue() {<br class="">
   m_error.Clear();<br class="">
@@ -229,7 +229,9 @@ size_t ValueObjectRegister::CalculateNumChildren(uint32_t max) {<br class="">
   return children_count <= max ? children_count : max;<br class="">
 }<br class="">
<br class="">
-uint64_t ValueObjectRegister::GetByteSize() { return m_reg_info.byte_size; }<br class="">
+llvm::Optional<uint64_t> ValueObjectRegister::GetByteSize() {<br class="">
+  return m_reg_info.byte_size;<br class="">
+}<br class="">
<br class="">
 bool ValueObjectRegister::UpdateValue() {<br class="">
   m_error.Clear();<br class="">
<br class="">
diff  --git a/lldb/source/Core/ValueObjectSyntheticFilter.cpp b/lldb/source/Core/ValueObjectSyntheticFilter.cpp<br class="">
index 32d1e6ab8368..fb2d32e602ce 100644<br class="">
--- a/lldb/source/Core/ValueObjectSyntheticFilter.cpp<br class="">
+++ b/lldb/source/Core/ValueObjectSyntheticFilter.cpp<br class="">
@@ -121,7 +121,9 @@ bool ValueObjectSynthetic::MightHaveChildren() {<br class="">
   return (m_might_have_children != eLazyBoolNo);<br class="">
 }<br class="">
<br class="">
-uint64_t ValueObjectSynthetic::GetByteSize() { return m_parent->GetByteSize(); }<br class="">
+llvm::Optional<uint64_t> ValueObjectSynthetic::GetByteSize() {<br class="">
+  return m_parent->GetByteSize();<br class="">
+}<br class="">
<br class="">
 lldb::ValueType ValueObjectSynthetic::GetValueType() const {<br class="">
   return m_parent->GetValueType();<br class="">
<br class="">
diff  --git a/lldb/source/Core/ValueObjectVariable.cpp b/lldb/source/Core/ValueObjectVariable.cpp<br class="">
index 0d1e7b047a0a..ab67e3038cf0 100644<br class="">
--- a/lldb/source/Core/ValueObjectVariable.cpp<br class="">
+++ b/lldb/source/Core/ValueObjectVariable.cpp<br class="">
@@ -105,15 +105,15 @@ size_t ValueObjectVariable::CalculateNumChildren(uint32_t max) {<br class="">
   return child_count <= max ? child_count : max;<br class="">
 }<br class="">
<br class="">
-uint64_t ValueObjectVariable::GetByteSize() {<br class="">
+llvm::Optional<uint64_t> ValueObjectVariable::GetByteSize() {<br class="">
   ExecutionContext exe_ctx(GetExecutionContextRef());<br class="">
<br class="">
   CompilerType type(GetCompilerType());<br class="">
<br class="">
   if (!type.IsValid())<br class="">
-    return 0;<br class="">
+    return {};<br class="">
<br class="">
-  return type.GetByteSize(exe_ctx.GetBestExecutionContextScope()).getValueOr(0);<br class="">
+  return type.GetByteSize(exe_ctx.GetBestExecutionContextScope());<br class="">
 }<br class="">
<br class="">
 lldb::ValueType ValueObjectVariable::GetValueType() const {<br class="">
<br class="">
diff  --git a/lldb/source/Expression/ExpressionVariable.cpp b/lldb/source/Expression/ExpressionVariable.cpp<br class="">
index d95f0745cf4b..8b3dda7b2fe1 100644<br class="">
--- a/lldb/source/Expression/ExpressionVariable.cpp<br class="">
+++ b/lldb/source/Expression/ExpressionVariable.cpp<br class="">
@@ -16,10 +16,10 @@ using namespace lldb_private;<br class="">
 ExpressionVariable::~ExpressionVariable() {}<br class="">
<br class="">
 uint8_t *ExpressionVariable::GetValueBytes() {<br class="">
-  const size_t byte_size = m_frozen_sp->GetByteSize();<br class="">
-  if (byte_size > 0) {<br class="">
-    if (m_frozen_sp->GetDataExtractor().GetByteSize() < byte_size) {<br class="">
-      m_frozen_sp->GetValue().ResizeData(byte_size);<br class="">
+  llvm::Optional<uint64_t> byte_size = m_frozen_sp->GetByteSize();<br class="">
+  if (byte_size && *byte_size) {<br class="">
+    if (m_frozen_sp->GetDataExtractor().GetByteSize() < *byte_size) {<br class="">
+      m_frozen_sp->GetValue().ResizeData(*byte_size);<br class="">
       m_frozen_sp->GetValue().GetData(m_frozen_sp->GetDataExtractor());<br class="">
     }<br class="">
     return const_cast<uint8_t *>(<br class="">
<br class="">
diff  --git a/lldb/source/Expression/Materializer.cpp b/lldb/source/Expression/Materializer.cpp<br class="">
index 6f8d9b154570..327e15a26266 100644<br class="">
--- a/lldb/source/Expression/Materializer.cpp<br class="">
+++ b/lldb/source/Expression/Materializer.cpp<br class="">
@@ -67,7 +67,7 @@ class EntityPersistentVariable : public Materializer::Entity {<br class="">
     const bool zero_memory = false;<br class="">
<br class="">
     lldb::addr_t mem = map.Malloc(<br class="">
-        m_persistent_variable_sp->GetByteSize(), 8,<br class="">
+        m_persistent_variable_sp->GetByteSize().getValueOr(0), 8,<br class="">
         lldb::ePermissionsReadable | lldb::ePermissionsWritable,<br class="">
         IRMemoryMap::eAllocationPolicyMirror, zero_memory, allocate_error);<br class="">
<br class="">
@@ -106,7 +106,8 @@ class EntityPersistentVariable : public Materializer::Entity {<br class="">
     Status write_error;<br class="">
<br class="">
     map.WriteMemory(mem, m_persistent_variable_sp->GetValueBytes(),<br class="">
-                    m_persistent_variable_sp->GetByteSize(), write_error);<br class="">
+                    m_persistent_variable_sp->GetByteSize().getValueOr(0),<br class="">
+                    write_error);<br class="">
<br class="">
     if (!write_error.Success()) {<br class="">
       err.SetErrorStringWithFormat(<br class="">
@@ -234,7 +235,7 @@ class EntityPersistentVariable : public Materializer::Entity {<br class="">
             map.GetBestExecutionContextScope(),<br class="">
             m_persistent_variable_sp.get()->GetCompilerType(),<br class="">
             m_persistent_variable_sp->GetName(), location, eAddressTypeLoad,<br class="">
-            m_persistent_variable_sp->GetByteSize());<br class="">
+            m_persistent_variable_sp->GetByteSize().getValueOr(0));<br class="">
<br class="">
         if (frame_top != LLDB_INVALID_ADDRESS &&<br class="">
             frame_bottom != LLDB_INVALID_ADDRESS && location >= frame_bottom &&<br class="">
@@ -279,7 +280,8 @@ class EntityPersistentVariable : public Materializer::Entity {<br class="">
         LLDB_LOGF(log, "Dematerializing %s from 0x%" PRIx64 " (size = %llu)",<br class="">
                   m_persistent_variable_sp->GetName().GetCString(),<br class="">
                   (uint64_t)mem,<br class="">
-                  (unsigned long long)m_persistent_variable_sp->GetByteSize());<br class="">
+                  (unsigned long long)m_persistent_variable_sp->GetByteSize()<br class="">
+                      .getValueOr(0));<br class="">
<br class="">
         // Read the contents of the spare memory area<br class="">
<br class="">
@@ -288,7 +290,7 @@ class EntityPersistentVariable : public Materializer::Entity {<br class="">
         Status read_error;<br class="">
<br class="">
         map.ReadMemory(m_persistent_variable_sp->GetValueBytes(), mem,<br class="">
-                       m_persistent_variable_sp->GetByteSize(), read_error);<br class="">
+                       m_persistent_variable_sp->GetByteSize().getValueOr(0), read_error);<br class="">
<br class="">
         if (!read_error.Success()) {<br class="">
           err.SetErrorStringWithFormat(<br class="">
@@ -369,10 +371,11 @@ class EntityPersistentVariable : public Materializer::Entity {<br class="">
       if (!err.Success()) {<br class="">
         dump_stream.Printf("  <could not be read>\n");<br class="">
       } else {<br class="">
-        DataBufferHeap data(m_persistent_variable_sp->GetByteSize(), 0);<br class="">
+        DataBufferHeap data(<br class="">
+            m_persistent_variable_sp->GetByteSize().getValueOr(0), 0);<br class="">
<br class="">
         map.ReadMemory(data.GetBytes(), target_address,<br class="">
-                       m_persistent_variable_sp->GetByteSize(), err);<br class="">
+                       m_persistent_variable_sp->GetByteSize().getValueOr(0), err);<br class="">
<br class="">
         if (!err.Success()) {<br class="">
           dump_stream.Printf("  <could not be read>\n");<br class="">
@@ -621,8 +624,8 @@ class EntityVariable : public Materializer::Entity {<br class="">
<br class="">
       Status extract_error;<br class="">
<br class="">
-      map.GetMemoryData(data, m_temporary_allocation, valobj_sp->GetByteSize(),<br class="">
-                        extract_error);<br class="">
+      map.GetMemoryData(data, m_temporary_allocation,<br class="">
+                        valobj_sp->GetByteSize().getValueOr(0), extract_error);<br class="">
<br class="">
       if (!extract_error.Success()) {<br class="">
         err.SetErrorStringWithFormat("couldn't get the data for variable %s",<br class="">
@@ -919,7 +922,7 @@ class EntityResultVariable : public Materializer::Entity {<br class="">
<br class="">
     ret->ValueUpdated();<br class="">
<br class="">
-    const size_t pvar_byte_size = ret->GetByteSize();<br class="">
+    const size_t pvar_byte_size = ret->GetByteSize().getValueOr(0);<br class="">
     uint8_t *pvar_data = ret->GetValueBytes();<br class="">
<br class="">
     map.ReadMemory(pvar_data, address, pvar_byte_size, read_error);<br class="">
<br class="">
diff  --git a/lldb/source/Target/StackFrame.cpp b/lldb/source/Target/StackFrame.cpp<br class="">
index 098aed9cd812..22bca52d7f98 100644<br class="">
--- a/lldb/source/Target/StackFrame.cpp<br class="">
+++ b/lldb/source/Target/StackFrame.cpp<br class="">
@@ -1408,7 +1408,7 @@ ValueObjectSP GetValueForOffset(StackFrame &frame, ValueObjectSP &parent,<br class="">
     }<br class="">
<br class="">
     int64_t child_offset = child_sp->GetByteOffset();<br class="">
-    int64_t child_size = child_sp->GetByteSize();<br class="">
+    int64_t child_size = child_sp->GetByteSize().getValueOr(0);<br class="">
<br class="">
     if (offset >= child_offset && offset < (child_offset + child_size)) {<br class="">
       return GetValueForOffset(frame, child_sp, offset - child_offset);<br class="">
@@ -1441,8 +1441,8 @@ ValueObjectSP GetValueForDereferincingOffset(StackFrame &frame,<br class="">
   }<br class="">
<br class="">
   if (offset >= 0 && uint64_t(offset) >= pointee->GetByteSize()) {<br class="">
-    int64_t index = offset / pointee->GetByteSize();<br class="">
-    offset = offset % pointee->GetByteSize();<br class="">
+    int64_t index = offset / pointee->GetByteSize().getValueOr(1);<br class="">
+    offset = offset % pointee->GetByteSize().getValueOr(1);<br class="">
     const bool can_create = true;<br class="">
     pointee = base->GetSyntheticArrayMember(index, can_create);<br class="">
   }<br class="">
<br class="">
<br class="">
<br class="">
_______________________________________________<br class="">
lldb-commits mailing list<br class="">
<a href="mailto:lldb-commits@lists.llvm.org" target="_blank" rel="noreferrer" class="">lldb-commits@lists.llvm.org</a><br class="">
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits" rel="noreferrer noreferrer" target="_blank" class="">https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits</a><br class="">
</blockquote></div>
</div></blockquote></div><br class=""></div></div></blockquote></div>
</div></blockquote></div><br class=""></div></body></html>