diff --git a/src/core/src/model.cpp b/src/core/src/model.cpp index abc98d46b28..18befbb2520 100644 --- a/src/core/src/model.cpp +++ b/src/core/src/model.cpp @@ -186,6 +186,22 @@ ov::Model::Model(const OutputVector& results, const string& name) : Model(result void ov::Model::prerequirements(bool detect_variables, bool detect_parameters) { OV_ITT_SCOPED_TASK(ov::itt::domains::core, "Model::prerequirements"); + for (const auto& param : m_parameters) { + OPENVINO_ASSERT(param != nullptr, "Model is incorrect! Some Parameter operation equals to nullptr."); + } + + for (const auto& result : m_results) { + OPENVINO_ASSERT(result != nullptr, "Model is incorrect! Some Result operation equals to nullptr."); + } + + for (const auto& sink : m_sinks) { + OPENVINO_ASSERT(sink != nullptr, "Model is incorrect! Some Sink operation equals to nullptr."); + } + + for (const auto& variable : m_variables) { + OPENVINO_ASSERT(variable != nullptr, "Model is incorrect! Some Variable equals to nullptr."); + } + m_shared_rt_info = std::make_shared(); const auto& ordered_ops = get_ordered_ops(); diff --git a/src/core/src/node_input.cpp b/src/core/src/node_input.cpp index a8306d1e464..7c6b8a9ff21 100644 --- a/src/core/src/node_input.cpp +++ b/src/core/src/node_input.cpp @@ -7,7 +7,9 @@ #include "openvino/core/node.hpp" namespace ov { -Input::Input(Node* node, size_t index) : m_node(node), m_index(index) {} +Input::Input(Node* node, size_t index) : m_node(node), m_index(index) { + OPENVINO_ASSERT(m_node, "Cannot create ov::Input from nullptr!"); +} Node* Input::get_node() const { return m_node; @@ -72,7 +74,9 @@ bool Input::operator<=(const Input& other) const { bool Input::operator>=(const Input& other) const { return !(*this < other); } -Input::Input(const Node* node, size_t index) : m_node(node), m_index(index) {} +Input::Input(const Node* node, size_t index) : m_node(node), m_index(index) { + OPENVINO_ASSERT(m_node, "Cannot create ov::Input from nullptr!"); +} RTMap& Input::get_rt_info() { return m_node->m_inputs.at(m_index).get_rt_info(); diff --git a/src/core/src/node_output.cpp b/src/core/src/node_output.cpp index c99915a6c2c..377506ae016 100644 --- a/src/core/src/node_output.cpp +++ b/src/core/src/node_output.cpp @@ -11,7 +11,10 @@ #include "openvino/op/parameter.hpp" namespace ov { -Output::Output(Node* node, size_t index) : m_node(node->shared_from_this()), m_index(index) {} +Output::Output(Node* node, size_t index) : m_index(index) { + OPENVINO_ASSERT(node, "Cannot create ov::Output from nullptr!"); + m_node = node->shared_from_this(); +} Output::Output(const std::shared_ptr& node, size_t index) : m_node(node), m_index(index) {} @@ -144,7 +147,11 @@ bool Output::operator<=(const Output& other) const { bool Output::operator>=(const Output& other) const { return !(*this < other); } -Output::Output(const Node* node, size_t index) : m_node(node->shared_from_this()), m_index(index) {} + +Output::Output(const Node* node, size_t index) : m_index(index) { + OPENVINO_ASSERT(node, "Cannot create ov::Output from nullptr!"); + m_node = node->shared_from_this(); +} Output::Output(const std::shared_ptr& node, size_t index) : m_node(node), m_index(index) {} diff --git a/src/core/tests/model.cpp b/src/core/tests/model.cpp index b9596e3f47f..0bc5766fcf2 100644 --- a/src/core/tests/model.cpp +++ b/src/core/tests/model.cpp @@ -2040,3 +2040,15 @@ TEST(model, set_complex_meta_information) { check_rt_info(f); } + +TEST(model, create_model) { + EXPECT_NO_THROW(ov::Model({}, "")); + EXPECT_THROW(ov::Model(ov::ResultVector{nullptr}, {}, ""), ov::Exception); + EXPECT_NO_THROW(ov::Model(ov::ResultVector{}, ov::ParameterVector{}, "")); + EXPECT_THROW(ov::Model({nullptr}, {nullptr}, {nullptr}, {nullptr}, ""), ov::Exception); + EXPECT_THROW(ov::Model({nullptr}, {}, {}, {}, ""), ov::Exception); + EXPECT_THROW(ov::Model(ov::ResultVector{}, {nullptr}, {}, {}, ""), ov::Exception); + EXPECT_THROW(ov::Model(ov::ResultVector{}, {}, {nullptr}, {}, ""), ov::Exception); + EXPECT_THROW(ov::Model(ov::ResultVector{}, {}, {}, {nullptr}, ""), ov::Exception); + EXPECT_THROW(ov::Model(ov::OutputVector{ov::Output{nullptr, 0}}, {}, {}, {}, ""), ov::Exception); +} diff --git a/src/core/tests/node_input_output.cpp b/src/core/tests/node_input_output.cpp index f4006757878..f3af9f0f21e 100644 --- a/src/core/tests/node_input_output.cpp +++ b/src/core/tests/node_input_output.cpp @@ -143,3 +143,10 @@ TEST(node_input_output, input_set_argument) { EXPECT_EQ(add->input(0).get_shape(), Shape{3}); EXPECT_EQ(add->input(1).get_shape(), Shape{1}); } + +TEST(node_input_output, create_wrong_input_output) { + EXPECT_THROW(ov::Output(nullptr, 0), ov::Exception); + EXPECT_THROW(ov::Output(nullptr, 0), ov::Exception); + EXPECT_THROW(ov::Input(nullptr, 0), ov::Exception); + EXPECT_THROW(ov::Input(nullptr, 0), ov::Exception); +}