diff --git a/src/core/CL/kernels/CLComparisonKernel.cpp b/src/core/CL/kernels/CLComparisonKernel.cpp
index 628f9f1..5570ecf 100644
--- a/src/core/CL/kernels/CLComparisonKernel.cpp
+++ b/src/core/CL/kernels/CLComparisonKernel.cpp
@@ -210,8 +210,8 @@
 
         enqueue(queue, *this, slice, lws_hint());
 
-        collapsed.slide_window_slice_3D(slice_input1);
-        collapsed.slide_window_slice_3D(slice_input2);
+        ARM_COMPUTE_UNUSED(collapsed.slide_window_slice_3D(slice_input1));
+        ARM_COMPUTE_UNUSED(collapsed.slide_window_slice_3D(slice_input2));
     }
     while(collapsed.slide_window_slice_3D(slice));
 }
diff --git a/src/core/CL/kernels/CLElementwiseOperationKernel.cpp b/src/core/CL/kernels/CLElementwiseOperationKernel.cpp
index 4c191de..a69e84a 100644
--- a/src/core/CL/kernels/CLElementwiseOperationKernel.cpp
+++ b/src/core/CL/kernels/CLElementwiseOperationKernel.cpp
@@ -300,8 +300,8 @@
 
         enqueue(queue, *this, slice, lws_hint());
 
-        collapsed.slide_window_slice_3D(slice_input1);
-        collapsed.slide_window_slice_3D(slice_input2);
+        ARM_COMPUTE_UNUSED(collapsed.slide_window_slice_3D(slice_input1));
+        ARM_COMPUTE_UNUSED(collapsed.slide_window_slice_3D(slice_input2));
     }
     while(collapsed.slide_window_slice_3D(slice));
 }
diff --git a/src/core/CL/kernels/CLPixelWiseMultiplicationKernel.cpp b/src/core/CL/kernels/CLPixelWiseMultiplicationKernel.cpp
index 5b00fd1..76403d1 100644
--- a/src/core/CL/kernels/CLPixelWiseMultiplicationKernel.cpp
+++ b/src/core/CL/kernels/CLPixelWiseMultiplicationKernel.cpp
@@ -276,8 +276,8 @@
         add_3D_tensor_argument(idx, _output, slice);
         enqueue(queue, *this, slice);
 
-        collapsed.slide_window_slice_3D(slice_input1);
-        collapsed.slide_window_slice_3D(slice_input2);
+        ARM_COMPUTE_UNUSED(collapsed.slide_window_slice_3D(slice_input1));
+        ARM_COMPUTE_UNUSED(collapsed.slide_window_slice_3D(slice_input2));
     }
     while(collapsed.slide_window_slice_3D(slice));
 }
@@ -411,8 +411,8 @@
         add_3D_tensor_argument(idx, _output, slice);
         enqueue(queue, *this, slice);
 
-        collapsed.slide_window_slice_3D(slice_input1);
-        collapsed.slide_window_slice_3D(slice_input2);
+        ARM_COMPUTE_UNUSED(collapsed.slide_window_slice_3D(slice_input1));
+        ARM_COMPUTE_UNUSED(collapsed.slide_window_slice_3D(slice_input2));
     }
     while(collapsed.slide_window_slice_3D(slice));
 }
diff --git a/src/core/CL/kernels/CLWeightsReshapeKernel.cpp b/src/core/CL/kernels/CLWeightsReshapeKernel.cpp
index 7639a48..590af4d 100644
--- a/src/core/CL/kernels/CLWeightsReshapeKernel.cpp
+++ b/src/core/CL/kernels/CLWeightsReshapeKernel.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017-2018 ARM Limited.
+ * Copyright (c) 2017-2019 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -152,7 +152,7 @@
         if(_biases != nullptr)
         {
             add_1D_tensor_argument(idx, _biases, biases_slice);
-            biases_window.slide_window_slice_1D(biases_slice);
+            ARM_COMPUTE_UNUSED(biases_window.slide_window_slice_1D(biases_slice));
         }
 
         // Run kernel
diff --git a/src/core/NEON/kernels/NECannyEdgeKernel.cpp b/src/core/NEON/kernels/NECannyEdgeKernel.cpp
index 8d822bd..094b778 100644
--- a/src/core/NEON/kernels/NECannyEdgeKernel.cpp
+++ b/src/core/NEON/kernels/NECannyEdgeKernel.cpp
@@ -931,7 +931,7 @@
     AccessWindowHorizontal mag_access(_magnitude->info(), 0, num_elems_processed_per_iteration);
     AccessWindowHorizontal phase_access(_phase->info(), 0, num_elems_processed_per_iteration);
 
-    update_window_and_padding(win, gx_access, gy_access, mag_access, phase_access);
+    ARM_COMPUTE_UNUSED(update_window_and_padding(win, gx_access, gy_access, mag_access, phase_access));
 
     mag_access.set_valid_region(win, _gx->info()->valid_region());
     phase_access.set_valid_region(win, _gx->info()->valid_region());
diff --git a/src/core/NEON/kernels/NEPixelWiseMultiplicationKernel.cpp b/src/core/NEON/kernels/NEPixelWiseMultiplicationKernel.cpp
index 6aaac81..711bde3 100644
--- a/src/core/NEON/kernels/NEPixelWiseMultiplicationKernel.cpp
+++ b/src/core/NEON/kernels/NEPixelWiseMultiplicationKernel.cpp
@@ -124,7 +124,7 @@
 
     // Auto initialize output if not initialized
     {
-        set_shape_if_empty(*output, input1->tensor_shape());
+        ARM_COMPUTE_UNUSED(set_shape_if_empty(*output, input1->tensor_shape()));
 
         if(input1->data_type() == DataType::S16 || input2->data_type() == DataType::S16)
         {
@@ -711,8 +711,8 @@
         {
             (*_func_quantized)(input1.ptr(), input2.ptr(), output.ptr(), _scale,
                                _input1->info()->quantization_info().uniform(), _input2->info()->quantization_info().uniform(), _output->info()->quantization_info().uniform());
-            collapsed.slide_window_slice_3D(slice_input1);
-            collapsed.slide_window_slice_3D(slice_input2);
+            ARM_COMPUTE_UNUSED(collapsed.slide_window_slice_3D(slice_input1));
+            ARM_COMPUTE_UNUSED(collapsed.slide_window_slice_3D(slice_input2));
         },
         input1, input2, output);
     }
@@ -721,8 +721,8 @@
         execute_window_loop(collapsed, [&](const Coordinates &)
         {
             (*_func_int)(input1.ptr(), input2.ptr(), output.ptr(), _scale_exponent);
-            collapsed.slide_window_slice_3D(slice_input1);
-            collapsed.slide_window_slice_3D(slice_input2);
+            ARM_COMPUTE_UNUSED(collapsed.slide_window_slice_3D(slice_input1));
+            ARM_COMPUTE_UNUSED(collapsed.slide_window_slice_3D(slice_input2));
         },
         input1, input2, output);
     }
@@ -732,8 +732,8 @@
         execute_window_loop(collapsed, [&](const Coordinates &)
         {
             (*_func_float)(input1.ptr(), input2.ptr(), output.ptr(), _scale);
-            collapsed.slide_window_slice_3D(slice_input1);
-            collapsed.slide_window_slice_3D(slice_input2);
+            ARM_COMPUTE_UNUSED(collapsed.slide_window_slice_3D(slice_input1));
+            ARM_COMPUTE_UNUSED(collapsed.slide_window_slice_3D(slice_input2));
         },
         input1, input2, output);
     }
diff --git a/src/core/NEON/kernels/NEROIPoolingLayerKernel.cpp b/src/core/NEON/kernels/NEROIPoolingLayerKernel.cpp
index b8d20f6..708420c 100644
--- a/src/core/NEON/kernels/NEROIPoolingLayerKernel.cpp
+++ b/src/core/NEON/kernels/NEROIPoolingLayerKernel.cpp
@@ -89,7 +89,7 @@
                                     input->info()->valid_region().end(1));
     AccessWindowStatic output_access(output->info(), 0, 0, pool_info.pooled_width(), pool_info.pooled_height());
 
-    update_window_and_padding(window, input_access, output_access);
+    ARM_COMPUTE_UNUSED(update_window_and_padding(window, input_access, output_access));
     output_access.set_valid_region(window, ValidRegion(Coordinates(), output->info()->tensor_shape()));
     INEKernel::configure(window);
 }
diff --git a/src/core/NEON/kernels/NESelectKernel.cpp b/src/core/NEON/kernels/NESelectKernel.cpp
index c03e5f0..72afe4f 100644
--- a/src/core/NEON/kernels/NESelectKernel.cpp
+++ b/src/core/NEON/kernels/NESelectKernel.cpp
@@ -87,7 +87,7 @@
     const auto window_start_x = static_cast<int>(window.x().start());
     const auto window_end_x   = static_cast<int>(window.x().end());
 
-    select_op<ScalarType, VectorType>(cond, in1, in2, out, window, window_step_x, window_start_x, window_end_x, window_end_x - window_step_x, [](const uint8_t *condition_ptr)
+    select_op<ScalarType, VectorType>(cond, in1, in2, out, window, window_step_x, window_start_x, window_end_x, window_end_x - window_step_x, [](const uint8_t *condition_ptr) -> VectorType
     {
         static const auto zero = wrapper::vdup_n(static_cast<uint8_t>(0), arm_compute::wrapper::traits::vector_128_tag());
         return wrapper::vcgt(wrapper::vloadq(condition_ptr), zero);
@@ -101,7 +101,7 @@
     const auto window_start_x = static_cast<int>(window.x().start());
     const auto window_end_x   = static_cast<int>(window.x().end());
 
-    select_op<ScalarType, VectorType>(cond, in1, in2, out, window, window_step_x, window_start_x, window_end_x, window_end_x - window_step_x, [](const uint8_t *condition_ptr)
+    select_op<ScalarType, VectorType>(cond, in1, in2, out, window, window_step_x, window_start_x, window_end_x, window_end_x - window_step_x, [](const uint8_t *condition_ptr) -> VectorType
     {
         static const auto zero = wrapper::vdup_n(static_cast<uint16_t>(0), arm_compute::wrapper::traits::vector_128_tag());
         return wrapper::vcgt(wrapper::vmovl(wrapper::vload(condition_ptr)), zero);
@@ -115,7 +115,7 @@
     const auto window_start_x = static_cast<int>(window.x().start());
     const auto window_end_x   = static_cast<int>(window.x().end());
 
-    select_op<ScalarType, VectorType>(cond, in1, in2, out, window, window_step_x, window_start_x, window_end_x, window_end_x - window_step_x, [](const uint8_t *condition_ptr)
+    select_op<ScalarType, VectorType>(cond, in1, in2, out, window, window_step_x, window_start_x, window_end_x, window_end_x - window_step_x, [](const uint8_t *condition_ptr) -> VectorType
     {
         static const auto zero = wrapper::vdup_n(static_cast<uint32_t>(0), arm_compute::wrapper::traits::vector_128_tag());
         return wrapper::vcgt(wrapper::vmovl(wrapper::vgetlow(wrapper::vmovl(wrapper::vload(condition_ptr)))), zero);
