[Tensor] Handle copy edge case
authorJihoon Lee <jhoon.it.lee@samsung.com>
Tue, 26 Jan 2021 10:16:38 +0000 (19:16 +0900)
committerJijoong Moon <jijoong.moon@samsung.com>
Mon, 1 Feb 2021 07:52:18 +0000 (16:52 +0900)
When copying uninitialized tensor to another unintialized tensor,
tensor::copy tried to reshape uninitialized dimension.

This patch fixes the issue.

**Self evaluation:**
1. Build test: [X]Passed [ ]Failed [ ]Skipped
2. Run test: [X]Passed [ ]Failed [ ]Skipped

Signed-off-by: Jihoon Lee <jhoon.it.lee@samsung.com>
nntrainer/tensor/tensor.cpp
test/unittest/unittest_nntrainer_layers.cpp

index 9fa00395fd7a4f8e5c8a76ba0df8e6fc2e72747b..feab5bae0c06664393575d6ef3f708a4bfd040f0 100644 (file)
@@ -852,7 +852,7 @@ void Tensor::copy(const Tensor &from) {
     throw std::runtime_error("Cannot copy non-contiguous tensor");
   }
 
-  if (length() == from.length()) {
+  if (from.length() != 0 && length() == from.length()) {
     reshape(from.getDim());
     copy(from.getData());
   } else {
index 811b120e57d592be3be74a682904d84cdb6531c5..6c3f71fc399719562b775b35a4762d60cf4a56ae 100644 (file)
@@ -2118,27 +2118,6 @@ TEST_F(nntrainer_AdditionLayer, setProperty_02_n) {
   EXPECT_EQ(status, ML_ERROR_INVALID_PARAMETER);
 }
 
-TEST_F(nntrainer_AdditionLayer, forwarding_01_n) {
-  setProperty("num_inputs=1");
-
-  sharedTensor input = std::shared_ptr<nntrainer::Tensor>(
-    new nntrainer::Tensor[1], std::default_delete<nntrainer::Tensor[]>());
-  nntrainer::Tensor &in = *input;
-
-  in = nntrainer::Tensor();
-
-  nntrainer::Manager manager;
-  manager.setInferenceInOutMemoryOptimization(false);
-  layer.setInputBuffers(manager.trackLayerInputs(
-    layer.getType(), layer.getName(), layer.getInputDimension()));
-  layer.setOutputBuffers(manager.trackLayerOutputs(
-    layer.getType(), layer.getName(), layer.getOutputDimension()));
-
-  manager.initializeTensors(true);
-
-  EXPECT_THROW(layer.forwarding_with_val({input}), std::invalid_argument);
-}
-
 /*
  *Disabled until input_layer keyward is enabled.
  */