@@ -394,9 +394,12 @@ Result<bool> ETDumpGen::log_intermediate_output_delegate_helper(
394394
395395 // Check the type of `output` then call the corresponding logging functions
396396 if constexpr (std::is_same<T, Tensor>::value) {
397- long offset = write_tensor_or_raise_error (output);
397+ Result<long > offset = write_tensor_or_return_error (output);
398+ ET_CHECK_MSG (
399+ offset.ok (),
400+ " write_tensor_or_return_error() failed to write tensor to debug buffer" );
398401 Result<etdump_Tensor_ref_t> tensor_ref =
399- add_tensor_entry (builder_, output, offset);
402+ add_tensor_entry (builder_, output, offset. get () );
400403 if (!tensor_ref.ok ()) {
401404 return tensor_ref.error ();
402405 }
@@ -408,9 +411,12 @@ Result<bool> ETDumpGen::log_intermediate_output_delegate_helper(
408411 } else if constexpr (std::is_same<T, ArrayRef<Tensor>>::value) {
409412 etdump_Tensor_vec_start (builder_);
410413 for (size_t i = 0 ; i < output.size (); ++i) {
411- long offset = write_tensor_or_raise_error (output[i]);
414+ Result<long > offset = write_tensor_or_return_error (output[i]);
415+ ET_CHECK_MSG (
416+ offset.ok (),
417+ " write_tensor_or_return_error() failed to write tensor to debug buffer" );
412418 Result<etdump_Tensor_ref_t> tensor_ref =
413- add_tensor_entry (builder_, output[i], offset);
419+ add_tensor_entry (builder_, output[i], offset. get () );
414420 if (!tensor_ref.ok ()) {
415421 return tensor_ref.error ();
416422 }
@@ -566,9 +572,12 @@ Result<bool> ETDumpGen::log_evalue(
566572 switch (evalue.tag ) {
567573 case Tag::Tensor: {
568574 executorch::aten::Tensor tensor = evalue.toTensor ();
569- long offset = write_tensor_or_raise_error (tensor);
575+ Result<long > offset = write_tensor_or_return_error (tensor);
576+ ET_CHECK_MSG (
577+ offset.ok (),
578+ " write_tensor_or_return_error() failed to write tensor to debug buffer" );
570579 Result<etdump_Tensor_ref_t> tensor_ref =
571- add_tensor_entry (builder_, tensor, offset);
580+ add_tensor_entry (builder_, tensor, offset. get () );
572581 if (!tensor_ref.ok ()) {
573582 return tensor_ref.error ();
574583 }
@@ -591,9 +600,12 @@ Result<bool> ETDumpGen::log_evalue(
591600 evalue.toTensorList ();
592601 etdump_Tensor_vec_start (builder_);
593602 for (size_t i = 0 ; i < tensors.size (); ++i) {
594- long offset = write_tensor_or_raise_error (tensors[i]);
603+ Result<long > offset = write_tensor_or_return_error (tensors[i]);
604+ ET_CHECK_MSG (
605+ offset.ok (),
606+ " write_tensor_or_return_error() failed to write tensor to debug buffer" );
595607 Result<etdump_Tensor_ref_t> tensor_ref =
596- add_tensor_entry (builder_, tensors[i], offset);
608+ add_tensor_entry (builder_, tensors[i], offset. get () );
597609 if (!tensor_ref.ok ()) {
598610 return tensor_ref.error ();
599611 }
@@ -689,7 +701,7 @@ void ETDumpGen::set_delegation_intermediate_output_filter(
689701 filter_ = filter;
690702}
691703
692- long ETDumpGen::write_tensor_or_raise_error (Tensor tensor) {
704+ Result< long > ETDumpGen::write_tensor_or_return_error (Tensor tensor) {
693705 // Previously, the function copy_tensor_to_debug_buffer returned 0xFF..F when
694706 // given an empty tensor, which is an invalid offset for most buffers. In our
695707 // data sink, we will return the current debug_buffer_offset for better
@@ -702,14 +714,14 @@ long ETDumpGen::write_tensor_or_raise_error(Tensor tensor) {
702714 return static_cast <size_t >(-1 );
703715 }
704716
705- ET_CHECK_MSG (
706- data_sink_, " Must set data sink before writing tensor-like data" );
717+ if (!data_sink_) {
718+ return Error::InvalidArgument;
719+ }
707720 Result<size_t > ret =
708721 data_sink_->write (tensor.const_data_ptr (), tensor.nbytes ());
709- ET_CHECK_MSG (
710- ret.ok (),
711- " Failed to write tensor with error 0x%" PRIx32,
712- static_cast <uint32_t >(ret.error ()));
722+ if (!ret.ok ()) {
723+ return ret.error ();
724+ }
713725 return static_cast <long >(ret.get ());
714726}
715727
0 commit comments