@@ -158,7 +158,13 @@ class EntityREPLResultVariable : public Materializer::Entity {
158158 ret->ValueUpdated ();
159159
160160 if (variable) {
161- const size_t pvar_byte_size = ret->GetByteSize ().value_or (0 );
161+ auto pvar_byte_size_or_err = ret->GetByteSize ();
162+ if (!pvar_byte_size_or_err) {
163+ err = Status::FromError (pvar_byte_size_or_err.takeError ());
164+ return ;
165+ }
166+
167+ const uint64_t pvar_byte_size = *pvar_byte_size_or_err;
162168 uint8_t *pvar_data = ret->GetValueBytes ();
163169
164170 Status read_error;
@@ -226,9 +232,13 @@ class EntityREPLResultVariable : public Materializer::Entity {
226232 demangle_ctx.clear ();
227233 }
228234
229- std::optional< uint64_t > size =
235+ auto size_or_err =
230236 m_type.GetByteSize (execution_unit->GetBestExecutionContextScope ());
231- if (size && *size == 0 ) {
237+ if (!size_or_err) {
238+ err = Status::FromError (size_or_err.takeError ());
239+ return ;
240+ }
241+ if (*size_or_err == 0 ) {
232242 MakeREPLResult (*execution_unit, err, nullptr );
233243 return ;
234244 }
@@ -413,10 +423,15 @@ class EntityREPLPersistentVariable : public Materializer::Entity {
413423 FixupResilientGlobal (var_addr, compiler_type, *execution_unit,
414424 exe_scope->CalculateProcess (), read_error);
415425
426+ auto size_or_err = m_persistent_variable_sp->GetByteSize ();
427+ if (!size_or_err) {
428+ err = Status::FromError (size_or_err.takeError ());
429+ return ;
430+ }
431+
416432 // FIXME: This may not work if the value is not bitwise-takable.
417- execution_unit->ReadMemory (
418- m_persistent_variable_sp->GetValueBytes (), var_addr,
419- m_persistent_variable_sp->GetByteSize ().value_or (0 ), read_error);
433+ execution_unit->ReadMemory (m_persistent_variable_sp->GetValueBytes (),
434+ var_addr, *size_or_err, read_error);
420435
421436 if (!read_error.Success ()) {
422437 err = Status::FromErrorStringWithFormatv (
@@ -477,12 +492,13 @@ class EntityREPLPersistentVariable : public Materializer::Entity {
477492 if (!err.Success ()) {
478493 dump_stream.Printf (" <could not be read>\n " );
479494 } else {
480- DataBufferHeap data (m_persistent_variable_sp->GetByteSize ().value_or (0 ),
481- 0 );
495+ uint64_t size =
496+ llvm::expectedToOptional (m_persistent_variable_sp->GetByteSize ())
497+ .value_or (0 );
498+
499+ DataBufferHeap data (size, 0 );
482500
483- map.ReadMemory (data.GetBytes (), target_address,
484- m_persistent_variable_sp->GetByteSize ().value_or (0 ),
485- err);
501+ map.ReadMemory (data.GetBytes (), target_address, size, err);
486502
487503 if (!err.Success ()) {
488504 dump_stream.Printf (" <could not be read>\n " );
0 commit comments