aboutsummaryrefslogtreecommitdiff
path: root/src/backends
diff options
context:
space:
mode:
Diffstat (limited to 'src/backends')
-rw-r--r--src/backends/backendsCommon/TensorHandle.cpp35
-rw-r--r--src/backends/backendsCommon/WorkloadUtils.cpp20
-rw-r--r--src/backends/backendsCommon/test/layerTests/ReverseV2TestImpl.cpp17
-rw-r--r--src/backends/reference/RefTensorHandle.cpp26
-rw-r--r--src/backends/reference/workloads/Slice.cpp67
-rw-r--r--src/backends/reference/workloads/StridedSlice.cpp9
-rw-r--r--src/backends/tosaReference/TosaRefTensorHandle.cpp26
7 files changed, 167 insertions, 33 deletions
diff --git a/src/backends/backendsCommon/TensorHandle.cpp b/src/backends/backendsCommon/TensorHandle.cpp
index d55fca24d4..bc221adbe3 100644
--- a/src/backends/backendsCommon/TensorHandle.cpp
+++ b/src/backends/backendsCommon/TensorHandle.cpp
@@ -103,12 +103,30 @@ void ScopedTensorHandle::Allocate()
void ScopedTensorHandle::CopyOutTo(void* memory) const
{
- memcpy(memory, GetTensor<void>(), GetTensorInfo().GetNumBytes());
+ const void* src = GetTensor<void>();
+ if (src == nullptr)
+ {
+ throw NullPointerException("TensorHandle::CopyOutTo called with a null src pointer");
+ }
+ if (memory == nullptr)
+ {
+ throw NullPointerException("TensorHandle::CopyOutTo called with a null dest pointer");
+ }
+ memcpy(memory, src, GetTensorInfo().GetNumBytes());
}
void ScopedTensorHandle::CopyInFrom(const void* memory)
{
- memcpy(GetTensor<void>(), memory, GetTensorInfo().GetNumBytes());
+ void* dest = GetTensor<void>();
+ if (dest == nullptr)
+ {
+ throw NullPointerException("TensorHandle::CopyInFrom called with a null dest pointer");
+ }
+ if (memory == nullptr)
+ {
+ throw NullPointerException("TensorHandle::CopyInFrom called with a null src pointer");
+ }
+ memcpy(dest, memory, GetTensorInfo().GetNumBytes());
}
void ScopedTensorHandle::CopyFrom(const ScopedTensorHandle& other)
@@ -118,8 +136,17 @@ void ScopedTensorHandle::CopyFrom(const ScopedTensorHandle& other)
void ScopedTensorHandle::CopyFrom(const void* srcMemory, unsigned int numBytes)
{
- ARMNN_ASSERT(GetTensor<void>() == nullptr);
- ARMNN_ASSERT(GetTensorInfo().GetNumBytes() == numBytes);
+ if (GetTensor<void>() != nullptr)
+ {
+ throw NullPointerException("TensorHandle::CopyFrom called on an already allocated TensorHandle");
+ }
+ if (GetTensorInfo().GetNumBytes() != numBytes)
+ {
+ std::stringstream msg;
+ msg << "TensorHandle:CopyFrom: Number of bytes in the tensor info (" << GetTensorInfo().GetNumBytes() <<
+ ") does not match the number of bytes being copied (" << numBytes << ")";
+ throw armnn::Exception(msg.str());
+ }
if (srcMemory)
{
diff --git a/src/backends/backendsCommon/WorkloadUtils.cpp b/src/backends/backendsCommon/WorkloadUtils.cpp
index 3aea667bfe..28d01ec127 100644
--- a/src/backends/backendsCommon/WorkloadUtils.cpp
+++ b/src/backends/backendsCommon/WorkloadUtils.cpp
@@ -18,8 +18,14 @@ namespace armnn
armnn::ConstTensor PermuteTensor(const ConstTensorHandle* tensor,
const PermutationVector& permutationVector, void* permuteBuffer)
{
- ARMNN_ASSERT_MSG(tensor, "Invalid input tensor");
- ARMNN_ASSERT_MSG(permuteBuffer, "Invalid permute buffer");
+ if (tensor == nullptr)
+ {
+ throw armnn::InvalidArgumentException("WorkloadUtils: PermuteTensor: Null input tensor pointer");
+ }
+ if (permuteBuffer == nullptr)
+ {
+ throw armnn::InvalidArgumentException("WorkloadUtils: PermuteTensor: Null permute buffer pointer");
+ }
TensorInfo tensorInfo = tensor->GetTensorInfo();
@@ -231,8 +237,14 @@ armnn::ConstTensor ConvertWeightTensorFromArmnnToAcl(const ConstTensorHandle* we
DataLayout dataLayout,
void* permuteBuffer)
{
- ARMNN_ASSERT_MSG(weightTensor, "Invalid input tensor");
- ARMNN_ASSERT_MSG(permuteBuffer, "Invalid permute buffer");
+ if (weightTensor == nullptr)
+ {
+ throw armnn::InvalidArgumentException("WorkloadUtils: PermuteTensor: Null input tensor pointer");
+ }
+ if (permuteBuffer == nullptr)
+ {
+ throw armnn::InvalidArgumentException("WorkloadUtils: PermuteTensor: Null permute buffer pointer");
+ }
auto multiplier = weightTensor->GetTensorInfo().GetShape()[0];
auto inputChannels = weightTensor->GetTensorInfo().GetShape()[1];
diff --git a/src/backends/backendsCommon/test/layerTests/ReverseV2TestImpl.cpp b/src/backends/backendsCommon/test/layerTests/ReverseV2TestImpl.cpp
index 3cfd614336..f2774037bd 100644
--- a/src/backends/backendsCommon/test/layerTests/ReverseV2TestImpl.cpp
+++ b/src/backends/backendsCommon/test/layerTests/ReverseV2TestImpl.cpp
@@ -63,13 +63,22 @@ namespace
axisHandle->Allocate();
outputHandle->Allocate();
- CopyDataToITensorHandle(inputHandle.get(), input.data());
- CopyDataToITensorHandle(axisHandle.get(), axis.data());
+ if (input.data() != nullptr)
+ {
+ CopyDataToITensorHandle(inputHandle.get(), input.data());
+ }
+ if (axis.data() != nullptr)
+ {
+ CopyDataToITensorHandle(axisHandle.get(), axis.data());
+ }
workload->PostAllocationConfigure();
ExecuteWorkload(*workload, memoryManager);
- CopyDataFromITensorHandle(outputActual.data(), outputHandle.get());
+ if (outputActual.data() != nullptr)
+ {
+ CopyDataFromITensorHandle(outputActual.data(), outputHandle.get());
+ }
return LayerTestResult<T, NumDims>(outputActual,
outputExpected,
@@ -98,7 +107,7 @@ LayerTestResult<T, 2> ReverseV2SimpleTestEmptyAxis(
3, 4
}, qScale, qOffset);
- std::vector<int> axis = armnnUtils::QuantizedVector<int>({}, qScale, qOffset);
+ std::vector<int> axis = armnnUtils::QuantizedVector<int>({1, 1}, qScale, qOffset);
std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
1, 2,
diff --git a/src/backends/reference/RefTensorHandle.cpp b/src/backends/reference/RefTensorHandle.cpp
index cce992c947..07f497c54e 100644
--- a/src/backends/reference/RefTensorHandle.cpp
+++ b/src/backends/reference/RefTensorHandle.cpp
@@ -101,16 +101,30 @@ void* RefTensorHandle::GetPointer() const
void RefTensorHandle::CopyOutTo(void* dest) const
{
- const void *src = GetPointer();
- ARMNN_ASSERT(src);
- memcpy(dest, src, m_TensorInfo.GetNumBytes());
+ const void* src = GetPointer();
+ if (src == nullptr)
+ {
+ throw NullPointerException("TensorHandle::CopyOutTo called with a null src pointer");
+ }
+ if (dest == nullptr)
+ {
+ throw NullPointerException("TensorHandle::CopyOutTo called with a null dest pointer");
+ }
+ memcpy(dest, src, GetTensorInfo().GetNumBytes());
}
void RefTensorHandle::CopyInFrom(const void* src)
{
- void *dest = GetPointer();
- ARMNN_ASSERT(dest);
- memcpy(dest, src, m_TensorInfo.GetNumBytes());
+ void* dest = GetPointer();
+ if (dest == nullptr)
+ {
+ throw NullPointerException("RefTensorHandle::CopyInFrom called with a null dest pointer");
+ }
+ if (src == nullptr)
+ {
+ throw NullPointerException("RefTensorHandle::CopyInFrom called with a null src pointer");
+ }
+ memcpy(dest, src, GetTensorInfo().GetNumBytes());
}
MemorySourceFlags RefTensorHandle::GetImportFlags() const
diff --git a/src/backends/reference/workloads/Slice.cpp b/src/backends/reference/workloads/Slice.cpp
index d6836c6933..534a063ed5 100644
--- a/src/backends/reference/workloads/Slice.cpp
+++ b/src/backends/reference/workloads/Slice.cpp
@@ -20,11 +20,28 @@ void Slice(const TensorInfo& inputInfo,
const TensorShape& inputShape = inputInfo.GetShape();
const unsigned int numDims = inputShape.GetNumDimensions();
- ARMNN_ASSERT(descriptor.m_Begin.size() == numDims);
- ARMNN_ASSERT(descriptor.m_Size.size() == numDims);
-
constexpr unsigned int maxNumDims = 4;
- ARMNN_ASSERT(numDims <= maxNumDims);
+ if (descriptor.m_Begin.size() != numDims)
+ {
+ std::stringstream msg;
+ msg << "Slice: Number of dimensions (" << numDims <<
+ ") does not match the Begin vector in the descriptor (" << descriptor.m_Begin.size() << ")";
+ throw InvalidArgumentException(msg.str());
+ }
+ if (descriptor.m_Size.size() != numDims)
+ {
+ std::stringstream msg;
+ msg << "Slice: Number of dimensions (" << numDims <<
+ ") does not match the Size vector in the descriptor (" << descriptor.m_Size.size() << ")";
+ throw InvalidArgumentException(msg.str());
+ }
+ if (numDims > maxNumDims)
+ {
+ std::stringstream msg;
+ msg << "Slice: Number of dimensions (" << numDims <<
+ ") is greater than the maximum supported (" << maxNumDims << ")";
+ throw InvalidArgumentException(msg.str());
+ }
std::vector<unsigned int> paddedInput(4);
std::vector<unsigned int> paddedBegin(4);
@@ -63,15 +80,47 @@ void Slice(const TensorInfo& inputInfo,
unsigned int size2 = paddedSize[2];
unsigned int size3 = paddedSize[3];
- ARMNN_ASSERT(begin0 + size0 <= dim0);
- ARMNN_ASSERT(begin1 + size1 <= dim1);
- ARMNN_ASSERT(begin2 + size2 <= dim2);
- ARMNN_ASSERT(begin3 + size3 <= dim3);
+ if (begin0 + size0 > dim0)
+ {
+ std::stringstream msg;
+ msg << "Slice: begin0 + size0 (" << (begin0 + size0) <<
+ ") exceeds dim0 (" << dim0 << ")";
+ throw InvalidArgumentException(msg.str());
+ }
+ if (begin1 + size1 > dim1)
+ {
+ std::stringstream msg;
+ msg << "Slice: begin1 + size1 (" << (begin1 + size1) <<
+ ") exceeds dim2 (" << dim1 << ")";
+ throw InvalidArgumentException(msg.str());
+ }
+ if (begin2 + size2 > dim2)
+ {
+ std::stringstream msg;
+ msg << "Slice: begin2 + size2 (" << (begin2 + size2) <<
+ ") exceeds dim2 (" << dim2 << ")";
+ throw InvalidArgumentException(msg.str());
+ }
+ if (begin3 + size3 > dim3)
+ {
+ std::stringstream msg;
+ msg << "Slice: begin3 + size3 (" << (begin3 + size3) <<
+ ") exceeds dim3 (" << dim3 << ")";
+ throw InvalidArgumentException(msg.str());
+ }
+
+ if (inputData == nullptr)
+ {
+ throw armnn::NullPointerException("Slice: Null inputData pointer");
+ }
+ if (outputData == nullptr)
+ {
+ throw armnn::NullPointerException("Slice: Null outputData pointer");
+ }
const unsigned char* input = reinterpret_cast<const unsigned char*>(inputData);
unsigned char* output = reinterpret_cast<unsigned char*>(outputData);
- IgnoreUnused(dim0);
for (unsigned int idx0 = begin0; idx0 < begin0 + size0; ++idx0)
{
for (unsigned int idx1 = begin1; idx1 < begin1 + size1; ++idx1)
diff --git a/src/backends/reference/workloads/StridedSlice.cpp b/src/backends/reference/workloads/StridedSlice.cpp
index c5fb121cb3..68600c9a95 100644
--- a/src/backends/reference/workloads/StridedSlice.cpp
+++ b/src/backends/reference/workloads/StridedSlice.cpp
@@ -93,6 +93,15 @@ void StridedSlice(const TensorInfo& inputInfo,
void* outputData,
unsigned int dataTypeSize)
{
+ if (inputData == nullptr)
+ {
+ throw armnn::InvalidArgumentException("Slice: Null inputData pointer");
+ }
+ if (outputData == nullptr)
+ {
+ throw armnn::InvalidArgumentException("Slice: Null outputData pointer");
+ }
+
const unsigned char* input = reinterpret_cast<const unsigned char*>(inputData);
unsigned char* output = reinterpret_cast<unsigned char*>(outputData);
diff --git a/src/backends/tosaReference/TosaRefTensorHandle.cpp b/src/backends/tosaReference/TosaRefTensorHandle.cpp
index 38d02f1bb6..aaffc8ab6c 100644
--- a/src/backends/tosaReference/TosaRefTensorHandle.cpp
+++ b/src/backends/tosaReference/TosaRefTensorHandle.cpp
@@ -100,16 +100,30 @@ void* TosaRefTensorHandle::GetPointer() const
void TosaRefTensorHandle::CopyOutTo(void* dest) const
{
- const void *src = GetPointer();
- ARMNN_ASSERT(src);
- memcpy(dest, src, m_TensorInfo.GetNumBytes());
+ const void* src = GetPointer();
+ if (src == nullptr)
+ {
+ throw NullPointerException("TosaRefTensorHandle::CopyOutTo called with a null src pointer");
+ }
+ if (dest == nullptr)
+ {
+ throw NullPointerException("TosaRefTensorHandle::CopyOutTo called with a null dest pointer");
+ }
+ memcpy(dest, src, GetTensorInfo().GetNumBytes());
}
void TosaRefTensorHandle::CopyInFrom(const void* src)
{
- void *dest = GetPointer();
- ARMNN_ASSERT(dest);
- memcpy(dest, src, m_TensorInfo.GetNumBytes());
+ void* dest = GetPointer();
+ if (dest == nullptr)
+ {
+ throw NullPointerException("TosaRefTensorHandle::CopyInFrom called with a null dest pointer");
+ }
+ if (src == nullptr)
+ {
+ throw NullPointerException("TosaRefTensorHandle::CopyInFrom called with a null src pointer");
+ }
+ memcpy(dest, src, GetTensorInfo().GetNumBytes());
}
bool TosaRefTensorHandle::Import(void* memory, MemorySource source)