From ec02bc4dbdac56b580122497224be2ea2ec877e8 Mon Sep 17 00:00:00 2001 From: Maxim Andronov Date: Mon, 23 Nov 2020 17:08:54 +0300 Subject: [PATCH] Fixed static analysis issues (transformations) (#3276) --- .../convert_sequences_to_sequences_ie.cpp | 15 ++++++++++++--- .../src/low_precision_transformations/src/concat.cpp | 2 +- .../common_optimizations/nop_elimination.cpp | 4 ++++ .../src/transformations/convert_precision.cpp | 2 ++ .../op_conversions/convert_ti_to_sequences.cpp | 6 ++++++ .../op_conversions/log_softmax_decomposition.cpp | 2 +- 6 files changed, 26 insertions(+), 5 deletions(-) diff --git a/inference-engine/src/legacy_api/src/transformations/convert_opset1_to_legacy/convert_sequences_to_sequences_ie.cpp b/inference-engine/src/legacy_api/src/transformations/convert_opset1_to_legacy/convert_sequences_to_sequences_ie.cpp index 4255aba..7aa5ebd 100644 --- a/inference-engine/src/legacy_api/src/transformations/convert_opset1_to_legacy/convert_sequences_to_sequences_ie.cpp +++ b/inference-engine/src/legacy_api/src/transformations/convert_opset1_to_legacy/convert_sequences_to_sequences_ie.cpp @@ -112,7 +112,10 @@ ngraph::pass::ConvertLSTMSequenceMatcher::ConvertLSTMSequenceMatcher() { if (seq_axis == 1) { ngraph::replace_node(lstm_sequence, {unsqueeze_1->output(0), unsqueeze_2->output(0), unsqueeze_3->output(0)}); } else { - auto transpose_after = lstm_sequence->output(0).get_target_inputs().begin()->get_node()->shared_from_this(); + const auto &lstm_target_inputs = lstm_sequence->output(0).get_target_inputs(); + if (lstm_target_inputs.empty()) + return false; + auto transpose_after = lstm_target_inputs.begin()->get_node()->shared_from_this(); ngraph::replace_node(transpose_after, unsqueeze_1); ngraph::replace_node(lstm_sequence, {lstm_sequence_ie->output(0), unsqueeze_2->output(0), unsqueeze_3->output(0)}); } @@ -179,7 +182,10 @@ ngraph::pass::ConvertGRUSequenceMatcher::ConvertGRUSequenceMatcher() { if (seq_axis == 1) { ngraph::replace_node(gru_sequence, {unsqueeze_1->output(0), unsqueeze_2->output(0)}); } else { - auto transpose_after = gru_sequence->output(0).get_target_inputs().begin()->get_node()->shared_from_this(); + const auto &gru_target_inputs = gru_sequence->output(0).get_target_inputs(); + if (gru_target_inputs.empty()) + return false; + auto transpose_after = gru_target_inputs.begin()->get_node()->shared_from_this(); ngraph::replace_node(transpose_after, unsqueeze_1); ngraph::replace_node(gru_sequence, {gru_sequence_ie->output(0), unsqueeze_2->output(0)}); } @@ -247,7 +253,10 @@ ngraph::pass::ConvertRNNSequenceMatcher::ConvertRNNSequenceMatcher() { if (seq_axis == 1) { ngraph::replace_node(rnn_sequence, {unsqueeze_1->output(0), unsqueeze_2->output(0)}); } else { - auto transpose_after = rnn_sequence->output(0).get_target_inputs().begin()->get_node()->shared_from_this(); + const auto &rnn_target_inputs = rnn_sequence->output(0).get_target_inputs(); + if (rnn_target_inputs.empty()) + return false; + auto transpose_after = rnn_target_inputs.begin()->get_node()->shared_from_this(); ngraph::replace_node(transpose_after, unsqueeze_1); ngraph::replace_node(rnn_sequence, {rnn_sequence_ie->output(0), unsqueeze_2->output(0)}); } diff --git a/inference-engine/src/low_precision_transformations/src/concat.cpp b/inference-engine/src/low_precision_transformations/src/concat.cpp index b2c0b33..a7adb0a 100644 --- a/inference-engine/src/low_precision_transformations/src/concat.cpp +++ b/inference-engine/src/low_precision_transformations/src/concat.cpp @@ -214,7 +214,7 @@ bool ConcatTransformation::isPrecisionPreserved(std::shared_ptr) const noe bool ConcatTransformation::canBeTransformed(const TransformationContext& context, std::shared_ptr layer) const { std::shared_ptr concat = as_type_ptr(layer); - return concat->get_axis() == 1ul; + return concat && concat->get_axis() == 1ul; } diff --git a/inference-engine/src/transformations/src/transformations/common_optimizations/nop_elimination.cpp b/inference-engine/src/transformations/src/transformations/common_optimizations/nop_elimination.cpp index 828d124..64fd1d1 100644 --- a/inference-engine/src/transformations/src/transformations/common_optimizations/nop_elimination.cpp +++ b/inference-engine/src/transformations/src/transformations/common_optimizations/nop_elimination.cpp @@ -194,6 +194,8 @@ static bool eliminate_unsqueeze(const std::shared_ptr& node) { } auto unsqueeze = as_type_ptr(node); + if (unsqueeze == nullptr) + return false; auto input = unsqueeze->input_value(0).get_node_shared_ptr(); auto squeeze = as_type_ptr(input); auto replace_unsqueeze_only = [&](const vector& axes) { @@ -260,6 +262,8 @@ static bool eliminate_squeeze(const std::shared_ptr& node) { } auto squeeze = as_type_ptr(node); + if (squeeze == nullptr) + return false; auto input = squeeze->input_value(0).get_node_shared_ptr(); auto replace_squeeze_only = [&](const vector& axes) { auto axes_const = opset3::Constant::create(element::i64, Shape{axes.size()}, axes); diff --git a/inference-engine/src/transformations/src/transformations/convert_precision.cpp b/inference-engine/src/transformations/src/transformations/convert_precision.cpp index c08fe61..6c754c5 100644 --- a/inference-engine/src/transformations/src/transformations/convert_precision.cpp +++ b/inference-engine/src/transformations/src/transformations/convert_precision.cpp @@ -349,6 +349,8 @@ static std::shared_ptr change_constant_precision(std::shared_ptr(PREC_TO, constant->get_shape()); auto * dst_data = const_cast(reinterpret_cast(new_constant->get_data_ptr())); + if (dst_data == nullptr) + throw ngraph_error("Can't get destination data pointer"); std::vector final_data; for (size_t i = 0; i < size; ++i) { diff --git a/inference-engine/src/transformations/src/transformations/op_conversions/convert_ti_to_sequences.cpp b/inference-engine/src/transformations/src/transformations/op_conversions/convert_ti_to_sequences.cpp index e439f27..a77ad63 100644 --- a/inference-engine/src/transformations/src/transformations/op_conversions/convert_ti_to_sequences.cpp +++ b/inference-engine/src/transformations/src/transformations/op_conversions/convert_ti_to_sequences.cpp @@ -132,6 +132,8 @@ ngraph::pass::ConvertTensorIteratorToLSTMSequence::ConvertTensorIteratorToLSTMSe auto seq_lengths = ngraph::opset5::Constant::create(element::i32, Shape{batch_size}, {ti->get_num_iterations()}); const auto& lstm_cell = std::dynamic_pointer_cast(found_cell); + if (lstm_cell == nullptr) + return false; auto in_0 = ti->input_values()[ordered_in_descs[0]->m_input_index]; if (slice_axis == 0) { auto order = ngraph::opset5::Constant::create(ngraph::element::i64, ngraph::Shape{3}, {1, 0, 2}); @@ -283,6 +285,8 @@ ngraph::pass::ConvertTensorIteratorToRNNSequence::ConvertTensorIteratorToRNNSequ } const auto& rnn_cell = std::dynamic_pointer_cast(pattern_map[cell]); + if (rnn_cell == nullptr) + return false; auto in_0 = ti->input_values()[ordered_in_descs[0]->m_input_index]; if (slice_axis == 0) { @@ -434,6 +438,8 @@ ngraph::pass::ConvertTensorIteratorToGRUSequence::ConvertTensorIteratorToGRUSequ } const auto& rnn_cell = std::dynamic_pointer_cast(pattern_map[cell]); + if (rnn_cell == nullptr) + return false; auto in_0 = ti->input_values()[ordered_in_descs[0]->m_input_index]; if (slice_axis == 0) { diff --git a/inference-engine/src/transformations/src/transformations/op_conversions/log_softmax_decomposition.cpp b/inference-engine/src/transformations/src/transformations/op_conversions/log_softmax_decomposition.cpp index 12c4d25..f89c4c2 100644 --- a/inference-engine/src/transformations/src/transformations/op_conversions/log_softmax_decomposition.cpp +++ b/inference-engine/src/transformations/src/transformations/op_conversions/log_softmax_decomposition.cpp @@ -20,7 +20,7 @@ ngraph::pass::LogSoftmaxDecomposition::LogSoftmaxDecomposition() { auto& pattern_to_output = m.get_pattern_value_map(); auto log_softmax_node = std::dynamic_pointer_cast(pattern_to_output.at(log_softmax).get_node_shared_ptr()); - if (m_transformation_callback(log_softmax_node)) { + if (log_softmax_node == nullptr || m_transformation_callback(log_softmax_node)) { return false; } -- 2.7.4