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