diff --git a/src/plugins/intel_cpu/src/nodes/mkldnn_concat_node.cpp b/src/plugins/intel_cpu/src/nodes/mkldnn_concat_node.cpp index 76f98b6a49d..a1e3c393646 100644 --- a/src/plugins/intel_cpu/src/nodes/mkldnn_concat_node.cpp +++ b/src/plugins/intel_cpu/src/nodes/mkldnn_concat_node.cpp @@ -55,13 +55,16 @@ MKLDNNConcatNode::MKLDNNConcatNode(const std::shared_ptr& op, cons IE_THROW(NotImplemented) << errorMessage; } + const auto inRank = getInputShapeAtPort(0).getRank(); auto concatOp = ngraph::as_type_ptr(op); auto axis = concatOp->get_axis(); if (axis < 0) { - this->axis = concatOp->get_input_shape(0).size() + axis; - } else { - this->axis = axis; + axis += inRank; } + if (axis >= inRank || axis < 0) { + IE_THROW() << "Concat node with name '" << getName() << "' has invalid value of axis parameter: " << axis; + } + this->axis = axis; } void MKLDNNConcatNode::getSupportedDescriptors() { diff --git a/src/tests/functional/plugin/cpu/single_layer_tests/concat.cpp b/src/tests/functional/plugin/cpu/single_layer_tests/concat.cpp index f4787d039c4..b7845adfdbd 100644 --- a/src/tests/functional/plugin/cpu/single_layer_tests/concat.cpp +++ b/src/tests/functional/plugin/cpu/single_layer_tests/concat.cpp @@ -126,7 +126,7 @@ const std::vector netPrecisions = { INSTANTIATE_TEST_SUITE_P(smoke_Concat4D_CPU_Block8_static, ConcatLayerCPUTest, ::testing::Combine( - ::testing::Values(1, 2, 3), + ::testing::Values(1, -2, 3), ::testing::Values(static_shapes_to_test_representation({{2, 16, 3, 5}, {2, 16, 3, 5}})), ::testing::ValuesIn(netPrecisions), ::testing::Values(planar_4D_ref, planarChannels_4D, blocked8_4D_ref)), @@ -134,7 +134,7 @@ INSTANTIATE_TEST_SUITE_P(smoke_Concat4D_CPU_Block8_static, ConcatLayerCPUTest, INSTANTIATE_TEST_SUITE_P(smoke_Concat4D_CPU_Block16_static, ConcatLayerCPUTest, ::testing::Combine( - ::testing::Values(1, 2, 3), + ::testing::Values(1, 2, -1), ::testing::Values(static_shapes_to_test_representation({{3, 32, 3, 5}, {3, 32, 3, 5}})), ::testing::ValuesIn(netPrecisions), ::testing::Values(blocked16_4D_ref)), @@ -156,7 +156,7 @@ const std::vector> inputShapes4D_Block_axis1 = { INSTANTIATE_TEST_SUITE_P(smoke_Concat4D_CPU_Block_dynamic_axis_1, ConcatLayerCPUTest, ::testing::Combine( - ::testing::Values(1), + ::testing::Values(1, -3), ::testing::ValuesIn(inputShapes4D_Block_axis1), ::testing::ValuesIn(netPrecisions), ::testing::Values(blocked8_4D_ref, blocked16_4D_ref)), @@ -229,7 +229,7 @@ const std::vector> inputShapes4D_axis2 = { INSTANTIATE_TEST_SUITE_P(smoke_Concat4D_CPU_dynamic_axis_2, ConcatLayerCPUTest, ::testing::Combine( - ::testing::Values(2), + ::testing::Values(2, -2), ::testing::ValuesIn(inputShapes4D_axis2), ::testing::ValuesIn(netPrecisions), ::testing::Values(planar_4D_ref, planarChannels_4D)), @@ -271,7 +271,7 @@ const std::vector> inputShapes4D_axis3 = { INSTANTIATE_TEST_SUITE_P(smoke_Concat4D_CPU_dynamic_axis_3, ConcatLayerCPUTest, ::testing::Combine( - ::testing::Values(3), + ::testing::Values(3, -1), ::testing::ValuesIn(inputShapes4D_axis3), ::testing::ValuesIn(netPrecisions), ::testing::Values(planar_4D_ref, planarChannels_4D)), @@ -279,7 +279,7 @@ INSTANTIATE_TEST_SUITE_P(smoke_Concat4D_CPU_dynamic_axis_3, ConcatLayerCPUTest, INSTANTIATE_TEST_SUITE_P(smoke_Concat5D_CPU_Block8_static, ConcatLayerCPUTest, ::testing::Combine( - ::testing::Values(2, 3, 4), + ::testing::Values(2, 3, -2), ::testing::Values(static_shapes_to_test_representation({{2, 16, 3, 5, 7}, {2, 16, 3, 5, 7}})), ::testing::ValuesIn(netPrecisions), ::testing::Values(planar_5D_ref, planarChannels_5D, blocked8_5D_ref)), @@ -350,7 +350,7 @@ const std::vector> inputShapes5D_Block_axis2 = { INSTANTIATE_TEST_SUITE_P(smoke_Concat5D_CPU_Block_dynamic_axis_2, ConcatLayerCPUTest, ::testing::Combine( - ::testing::Values(2), + ::testing::Values(-3), ::testing::ValuesIn(inputShapes5D_Block_axis2), ::testing::ValuesIn(netPrecisions), ::testing::Values(blocked8_5D_ref, blocked16_5D_ref)), @@ -645,7 +645,7 @@ INSTANTIATE_TEST_SUITE_P(smoke_Concat5D_CPU_Block16inPlace, ConcatLayerCPUTest, INSTANTIATE_TEST_SUITE_P(smoke_Concat_inPlace, ConcatLayerCPUTest, ::testing::Combine( - ::testing::Values(0, 1, 2), + ::testing::Values(0, 1, 2, -1), ::testing::ValuesIn(std::vector>{ static_shapes_to_test_representation({{1, 1, 1, 10}, {1, 1, 1, 10}}), static_shapes_to_test_representation({{1, 1, 5}, {1, 1, 5}})}),