From e01ad12cdc4ca2ab2b6cd548e5e3635cdba6ba7c Mon Sep 17 00:00:00 2001 From: Margaret_wangrui Date: Tue, 8 Jun 2021 16:05:48 +0800 Subject: [PATCH] code self check --- .../operator/composite/do_signature.cc | 5 ++--- .../ccsrc/pipeline/jit/parse/function_block.cc | 18 +++++++++++++++--- mindspore/ccsrc/pipeline/jit/parse/parse.cc | 3 +-- mindspore/ccsrc/pipeline/jit/parse/resolve.cc | 2 ++ mindspore/ccsrc/pipeline/jit/pass.cc | 4 ++++ mindspore/ccsrc/pipeline/jit/pipeline.cc | 13 +++++++++---- .../ccsrc/pipeline/jit/prim_bprop_optimizer.cc | 8 ++++++-- .../pipeline/jit/static_analysis/auto_monad.cc | 2 ++ .../pipeline/jit/static_analysis/evaluator.cc | 14 ++++++++++---- .../jit/static_analysis/order_enforce.cc | 5 +++++ .../ccsrc/pipeline/jit/static_analysis/prim.cc | 5 +++++ .../jit/static_analysis/program_specialize.cc | 4 +++- .../jit/static_analysis/stack_frame.cc | 1 + .../jit/static_analysis/static_analysis.cc | 6 ++++++ mindspore/ccsrc/pybind_api/ir/signature_py.cc | 4 ++-- 15 files changed, 73 insertions(+), 21 deletions(-) diff --git a/mindspore/ccsrc/frontend/operator/composite/do_signature.cc b/mindspore/ccsrc/frontend/operator/composite/do_signature.cc index aafc60f70ad..b21a201a73d 100644 --- a/mindspore/ccsrc/frontend/operator/composite/do_signature.cc +++ b/mindspore/ccsrc/frontend/operator/composite/do_signature.cc @@ -150,8 +150,7 @@ TypeId GetMaxTypeId(const std::vector &input_types, std::vector // Get the largest type of index in the same SignatureEnumDType of arguments. using MaxTypeMap = std::map; -MaxTypeMap GetMaxDtype(const std::vector &dtypes, const std::vector &input_types, - const std::set &write_indices) { +MaxTypeMap GetMaxDtype(const std::vector &dtypes, const std::vector &input_types) { // record index for signature.dtypes of the same type // eg. [T, T1, T, T2, T, T1, T3] -> {{T:(0,2,4)}, {T1:(1,5)}, {T2:(3)}, {T3:(6)}} std::map> type_indices; @@ -207,7 +206,7 @@ void DoAutoCast(const std::string &func_name, const std::vector &sign return; } // Stat the index of the arguments with the largest type in the same SignatureEnumDType. - std::map dst_type = GetMaxDtype(dtypes, input_types, write_indices); + std::map dst_type = GetMaxDtype(dtypes, input_types); // Identify which arg requires auto cast for (size_t i = 0; i < input_types.size(); ++i) { auto it = dst_type.find(dtypes[i]); diff --git a/mindspore/ccsrc/pipeline/jit/parse/function_block.cc b/mindspore/ccsrc/pipeline/jit/parse/function_block.cc index b92791707bd..9707f52746c 100644 --- a/mindspore/ccsrc/pipeline/jit/parse/function_block.cc +++ b/mindspore/ccsrc/pipeline/jit/parse/function_block.cc @@ -169,15 +169,19 @@ AnfNodePtr FunctionBlock::MakeResolveSymbol(const std::string &value) { return MakeResolveClassMember(bits_str); } py::tuple namespace_info = parser_.ast()->CallParserObjMethod(PYTHON_PARSE_GET_NAMESPACE_SYMBOL, value); + const size_t namespace_info_size = 2; // If namespace is None, the symbol is an undefined name or an unsupported builtin function. if (namespace_info[0].is_none()) { // If the size of namespace_var is greater than or equal to 3, the error information is stored in namespace_var[2]. - if (namespace_info.size() >= 3) { - MS_EXCEPTION(NameError) << namespace_info[2].cast(); + if (namespace_info.size() > namespace_info_size) { + MS_EXCEPTION(NameError) << namespace_info[namespace_info_size].cast(); } // If the size of namespace_var is less than 3, the default error information is used. MS_EXCEPTION(NameError) << "The name \'" << value << "\' is not defined."; } + if (namespace_info.size() < namespace_info_size) { + MS_EXCEPTION(NameError) << "namespace_info is less than 2"; + } NameSpacePtr name_space = std::make_shared(RESOLVE_NAMESPACE_NAME_SYMBOL_STR, namespace_info[0]); SymbolPtr symbol = std::make_shared(namespace_info[1].cast()); @@ -186,6 +190,10 @@ AnfNodePtr FunctionBlock::MakeResolveSymbol(const std::string &value) { AnfNodePtr FunctionBlock::MakeResolveOperation(const std::string &value) { py::tuple namespace_var = parser_.ast()->CallParseModFunction(PYTHON_PARSE_GET_OPERATION_NAMESPACE_SYMBOL, value); + const size_t namespace_var_size = 2; + if (namespace_var.size() < namespace_var_size) { + MS_EXCEPTION(NameError) << "namespace_var is less than 2"; + } NameSpacePtr name_space = std::make_shared(RESOLVE_NAMESPACE_NAME_COMMON_OPS, namespace_var[0]); SymbolPtr symbol = std::make_shared(namespace_var[1].cast()); return MakeResolve(name_space, symbol); @@ -216,6 +224,7 @@ void FunctionBlock::SetPhiArgument(const ParameterPtr &phi) { MS_LOG(DEBUG) << "graph " << func_graph_->ToString() << " pred_blocks_ " << pred->func_graph_->ToString(); AnfNodePtr arg_node = pred->ReadVariable(var); CNodePtr jump = pred->jumps_[this]; + MS_EXCEPTION_IF_NULL(jump); jump->add_input(arg_node); } } @@ -225,6 +234,7 @@ AnfNodePtr FunctionBlock::SearchReplaceNode(const std::string &var, const Parame for (auto &prev : prev_blocks_) { MS_EXCEPTION_IF_NULL(prev); AnfNodePtr temp_node = prev->ReadVariable(var); + MS_EXCEPTION_IF_NULL(temp_node); MS_LOG(DEBUG) << "graph " << prev->func_graph_->ToString() << " phi " << phi->ToString() << " for var " << var << " is " << temp_node->DebugString(); if (temp_node != phi) { @@ -448,7 +458,8 @@ void FunctionBlock::AttachIsolatedNodesBeforeReturn() { AnfNodePtr old_output = nullptr; auto return_node = func_graph()->get_return(); if (return_node) { - if (return_node->inputs().empty()) { + const size_t return_input_size = 2; + if (return_node->inputs().size() < return_input_size) { MS_LOG(EXCEPTION) << "Length of inputs of output node is less than 2"; } old_output = return_node->input(1); @@ -460,6 +471,7 @@ void FunctionBlock::AttachIsolatedNodesBeforeReturn() { // We add this attribute for @constexpr use scene, since we must infer them before other nodes. // That means isolated nodes will be evaluated first. It's not complete, but works in most scenes. depend_node->AddAttr(kAttrTopoSortRhsFirst, MakeValue(true)); + MS_EXCEPTION_IF_NULL(state); MS_LOG(INFO) << "Attached for side-effect nodes, depend_node: " << depend_node->DebugString() << ", state: " << state->DebugString(2); func_graph()->set_output(depend_node, true); diff --git a/mindspore/ccsrc/pipeline/jit/parse/parse.cc b/mindspore/ccsrc/pipeline/jit/parse/parse.cc index de5738cc257..749dadeefdc 100644 --- a/mindspore/ccsrc/pipeline/jit/parse/parse.cc +++ b/mindspore/ccsrc/pipeline/jit/parse/parse.cc @@ -1655,7 +1655,6 @@ void Parser::RemoveUnnecessaryPhis() { if (removable_phis.empty()) { return; } - auto fg_name = func_graph_->ToString(); auto mng = Manage(func_graph_, false); // Replace the nodes // Remove from inside to outside @@ -1680,7 +1679,7 @@ void Parser::RemoveUnnecessaryPhis() { }); // Shrink container to new size - new_parameters.resize(std::distance(new_parameters.begin(), it)); + new_parameters.resize(static_cast(std::distance(new_parameters.begin(), it))); func_graph->set_parameters(new_parameters); } } diff --git a/mindspore/ccsrc/pipeline/jit/parse/resolve.cc b/mindspore/ccsrc/pipeline/jit/parse/resolve.cc index 207ca6317b2..5234dd72415 100644 --- a/mindspore/ccsrc/pipeline/jit/parse/resolve.cc +++ b/mindspore/ccsrc/pipeline/jit/parse/resolve.cc @@ -203,6 +203,7 @@ bool IsAllFuncInValueSequence(const std::vector &value_vec) { return false; } for (auto &elem : value_vec) { + MS_EXCEPTION_IF_NULL(elem); if (elem->isa() || elem->isa()) { const auto &vec = GetValue(elem); auto is_graph = IsAllFuncInValueSequence(vec); @@ -221,6 +222,7 @@ AnfNodePtr TransformToMakeTupleNodes(const FuncGraphManagerPtr &manager, const F std::vector nodes; nodes.emplace_back(NewValueNode(prim::kPrimMakeTuple)); for (auto &elem : value_vec) { + MS_EXCEPTION_IF_NULL(elem); AnfNodePtr node = nullptr; if (elem->isa() || elem->isa()) { const auto &vec = GetValue>(elem); diff --git a/mindspore/ccsrc/pipeline/jit/pass.cc b/mindspore/ccsrc/pipeline/jit/pass.cc index 02bc1650641..64b9151c4e2 100644 --- a/mindspore/ccsrc/pipeline/jit/pass.cc +++ b/mindspore/ccsrc/pipeline/jit/pass.cc @@ -109,6 +109,7 @@ bool CleanAfterOptAPass(const ResourcePtr &res) { } FuncGraphPtr PrimBpOptPassStep1(const opt::irpass::OptimizeIRPassLib &irpass, const ResourcePtr &res) { + MS_EXCEPTION_IF_NULL(res->func_graph()); opt::OptPassConfig pynative_eliminate = opt::OptPassConfig({ irpass.pynative_eliminate_, }); @@ -146,6 +147,7 @@ FuncGraphPtr PrimBpOptPassStep1(const opt::irpass::OptimizeIRPassLib &irpass, co } FuncGraphPtr PrimBpOptPassStep2(const opt::irpass::OptimizeIRPassLib &irpass, const ResourcePtr &res) { + MS_EXCEPTION_IF_NULL(res->func_graph()); opt::OptPassConfig special_op_simplify = opt::OptPassConfig({ irpass.switch_simplify_, irpass.reduce_eliminate_, @@ -175,6 +177,7 @@ FuncGraphPtr PrimBpOptPassStep2(const opt::irpass::OptimizeIRPassLib &irpass, co FuncGraphPtr BpropGraphFinalOptPass(const ResourcePtr &res) { MS_EXCEPTION_IF_NULL(res); + MS_EXCEPTION_IF_NULL(res->func_graph()); if (!TransformTopGraphPass(res)) { MS_LOG(EXCEPTION) << "Run TransformTopGraphPass failed"; } @@ -601,6 +604,7 @@ void UpdateFuncGraphParameter(const FuncGraphPtr &func_graph) { continue; } AbstractBasePtr par_abs = param_node->abstract(); + MS_EXCEPTION_IF_NULL(par_abs); if (par_abs->isa() || (MsContext::GetInstance()->get_param(MS_CTX_GRAD_FOR_SCALAR) && par_abs->BuildType() != nullptr && par_abs->BuildType()->isa())) { diff --git a/mindspore/ccsrc/pipeline/jit/pipeline.cc b/mindspore/ccsrc/pipeline/jit/pipeline.cc index be5fb139c01..7f03559d93a 100644 --- a/mindspore/ccsrc/pipeline/jit/pipeline.cc +++ b/mindspore/ccsrc/pipeline/jit/pipeline.cc @@ -452,6 +452,7 @@ void ExecutorPy::GetWeightInfo(const CNodePtr &root_node, const AnfNodePtr &weig std::map> *fake_quant_table) { std::string weight_name; auto x = root_node->input(1); + MS_EXCEPTION_IF_NULL(x); if (IsPrimitiveCNode(weight_node, prim::kPrimLoad)) { weight_name = weight_node->cast()->input(1)->cast()->name(); } else { @@ -489,7 +490,8 @@ void ExecutorPy::GetWeightInfo(const CNodePtr &root_node, const AnfNodePtr &weig if (cnode == nullptr || IsPrimitiveCNode(cnode, prim::kPrimLoad) || cnode->size() != 4) { return; } - auto fakequant_min_node = cnode->input(2); + const size_t fakequant_index = 2; + auto fakequant_min_node = cnode->input(fakequant_index); if (!fakequant_min_node->isa() && !IsPrimitiveCNode(fakequant_min_node, prim::kPrimLoad)) { return; } @@ -524,13 +526,14 @@ std::map> ExecutorPy: IsPrimitiveCNode(node, prim::kPrimFakeLearnedScaleQuantPerLayer) || IsPrimitiveCNode(node, prim::kPrimFakeLearnedScaleQuantPerChannel); }; + const size_t root_node_size = 3; + const size_t weight_index = 2; for (const auto &node : nodes) { auto root_node = node->cast(); - const size_t root_node_size = 3; if (root_node == nullptr || root_node->size() != root_node_size) { continue; } - auto weight = root_node->input(2); + auto weight = root_node->input(weight_index); if (!is_quant_cnode(weight)) { auto tuple_node = weight->cast(); if (tuple_node != nullptr) { @@ -544,7 +547,8 @@ std::map> ExecutorPy: } // get parameter weight's name auto cnode = weight->cast(); - auto weight_node = cnode->input(2); + MS_EXCEPTION_IF_NULL(cnode); + auto weight_node = cnode->input(weight_index); if (!weight_node->isa() && !IsPrimitiveCNode(weight_node, prim::kPrimLoad)) { continue; } @@ -879,6 +883,7 @@ void ProcessVmArgInner(const py::tuple &args, const ResourcePtr &res, VectorRef for (std::size_t i = (*arg_list).size(); i < graph_params_size; i++) { MS_EXCEPTION_IF_NULL(graph_params[i]); auto param_ptr = (graph_params[i])->cast(); + MS_EXCEPTION_IF_NULL(param_ptr); if (!param_ptr->has_default()) { MS_LOG(EXCEPTION) << "Parameter[" << i << "] has no default param"; } diff --git a/mindspore/ccsrc/pipeline/jit/prim_bprop_optimizer.cc b/mindspore/ccsrc/pipeline/jit/prim_bprop_optimizer.cc index 3020512c360..a8221245bfc 100644 --- a/mindspore/ccsrc/pipeline/jit/prim_bprop_optimizer.cc +++ b/mindspore/ccsrc/pipeline/jit/prim_bprop_optimizer.cc @@ -75,6 +75,7 @@ void PrimBpropOptGraphLevel2Info::AnalysisArgUsingInfo(const FuncGraphManagerPtr void PrimBpropOptGraphLevel2Info::AnalysisNodeUsingInfo(const NodeUsersMap &node_users, const std::shared_ptr ¶m, ParamUsingInfo *arg_info) const { + MS_EXCEPTION_IF_NULL(arg_info); auto iter = node_users.find(param); if (iter == node_users.end()) { @@ -108,11 +109,13 @@ void PrimBpropOptGraphLevel2Info::AalysisForTupleGetItem(const NodeUsersMap &nod ParamUsingInfo *arg_info, const AnfNodePtr &user_node) const { MS_EXCEPTION_IF_NULL(arg_info); auto cnode = user_node->cast(); - if (cnode->size() != 3) { + const size_t tuple_get_item_size = 3; + const size_t index = 2; + if (cnode->size() != tuple_get_item_size) { MS_LOG(EXCEPTION) << "TupleGetItem Node:" << user_node->ToString() << " of bp_graph:" << opt_func_graph_->ToString() << "input size is:" << cnode->size(); } - auto idx_node = cnode->input(2); + auto idx_node = cnode->input(index); if (!idx_node->isa()) { MS_LOG(EXCEPTION) << "tuple :" << param->ToString() << " of bp_graph:" << opt_func_graph_->ToString() << " unexpected used by node:" << user_node->ToString() @@ -140,6 +143,7 @@ void PrimBpropOptGraphLevel2Info::ArgInfoRefresh(const std::shared_ptr ParamUsingInfo *arg_info) const { MS_EXCEPTION_IF_NULL(arg_info); auto abs = param->abstract(); + MS_EXCEPTION_IF_NULL(abs); if (abs->isa()) { arg_info->tuple_flg_ = false; MS_LOG(DEBUG) << "param abstract:" << param->ToString() << " is a AbstractTensor"; diff --git a/mindspore/ccsrc/pipeline/jit/static_analysis/auto_monad.cc b/mindspore/ccsrc/pipeline/jit/static_analysis/auto_monad.cc index 9861ed0f5c1..4dc94cb002d 100644 --- a/mindspore/ccsrc/pipeline/jit/static_analysis/auto_monad.cc +++ b/mindspore/ccsrc/pipeline/jit/static_analysis/auto_monad.cc @@ -346,6 +346,7 @@ class SideEffectFinder { static void PushToOrderList(const FuncGraphPtr &fg, const CNodePtr &cnode, OrderedSet *new_order_list) { MS_EXCEPTION_IF_NULL(cnode); + MS_EXCEPTION_IF_NULL(new_order_list); if (new_order_list->contains(cnode)) { return; } @@ -554,6 +555,7 @@ class SideEffectFinder { } EffectInfo TraceTupleCNodeEffectInfo(const CNodePtr &cnode, std::stack *tuple_indexes) { + MS_EXCEPTION_IF_NULL(tuple_indexes); auto prim = GetPrimitive(cnode); // Trace MakeTuple. if (IsPrimitiveEquals(prim, prim::kPrimMakeTuple)) { diff --git a/mindspore/ccsrc/pipeline/jit/static_analysis/evaluator.cc b/mindspore/ccsrc/pipeline/jit/static_analysis/evaluator.cc index f5040406d40..b134c3b74e4 100644 --- a/mindspore/ccsrc/pipeline/jit/static_analysis/evaluator.cc +++ b/mindspore/ccsrc/pipeline/jit/static_analysis/evaluator.cc @@ -297,8 +297,10 @@ AbstractBasePtrList FuncGraphEvaluator::BroadenUndeterminedArgs(const AbstractBa func_graph_->set_flag(FUNC_GRAPH_FLAG_IGNORE_VALUES, true); func_graph_->joined_shapes_.clear(); std::transform(joined_args_spec_list_1.begin(), joined_args_spec_list_1.end(), - std::back_inserter(func_graph_->joined_shapes_), - [](const AbstractBasePtr &arg_spec) { return arg_spec->GetShapeTrack(); }); + std::back_inserter(func_graph_->joined_shapes_), [](const AbstractBasePtr &arg_spec) { + MS_EXCEPTION_IF_NULL(arg_spec); + return arg_spec->GetShapeTrack(); + }); joined_args_spec_list_1 = NormalizeArgs(joined_args_spec_list_1); MS_LOG(DEBUG) << "Set " << func_graph_->ToString() << " with IGNORE_VALUES flag."; } @@ -316,8 +318,10 @@ AbstractBasePtrList FuncGraphEvaluator::BroadenUndeterminedArgs(const AbstractBa func_graph_->set_flag(FUNC_GRAPH_FLAG_IGNORE_VALUES, true); func_graph_->joined_shapes_.clear(); std::transform(joined_args_spec_list_2.begin(), joined_args_spec_list_2.end(), - std::back_inserter(func_graph_->joined_shapes_), - [](const AbstractBasePtr &arg_spec) { return arg_spec->GetShapeTrack(); }); + std::back_inserter(func_graph_->joined_shapes_), [](const AbstractBasePtr &arg_spec) { + MS_EXCEPTION_IF_NULL(arg_spec); + return arg_spec->GetShapeTrack(); + }); joined_args_spec_list_2 = NormalizeArgs(joined_args_spec_list_2); MS_LOG(DEBUG) << "Set " << func_graph_->ToString() << " with IGNORE_VALUES flag."; } @@ -420,6 +424,7 @@ EvalResultPtr TrivialPrimEvaluator::Run(AnalysisEnginePtr engine, const ConfigPt [is_py_eval](const ConfigPtr &conf) -> AbstractBasePtr { MS_EXCEPTION_IF_NULL(conf); auto abstract = conf->ObtainEvalResult()->abstract(); + MS_EXCEPTION_IF_NULL(abstract); // broaden the ref_key, while infer python prim for cache if (is_py_eval && abstract->isa()) { auto abs_ref = abstract->cast(); @@ -518,6 +523,7 @@ EvalResultPtr JEvaluator::Run(AnalysisEnginePtr engine, const ConfigPtrList &arg bool enable_sparse = context->get_param(MS_CTX_ENABLE_SPARSE); (void)std::transform(args_spec_list.begin(), args_spec_list.end(), std::back_inserter(bparams), [&enable_sparse](const AbstractBasePtr &arg_spec) -> AbstractBasePtr { + MS_EXCEPTION_IF_NULL(arg_spec); if (enable_sparse && arg_spec->isa()) { return std::make_shared(); } diff --git a/mindspore/ccsrc/pipeline/jit/static_analysis/order_enforce.cc b/mindspore/ccsrc/pipeline/jit/static_analysis/order_enforce.cc index 1d2387fd545..fe325d291ea 100644 --- a/mindspore/ccsrc/pipeline/jit/static_analysis/order_enforce.cc +++ b/mindspore/ccsrc/pipeline/jit/static_analysis/order_enforce.cc @@ -57,6 +57,11 @@ class OrderEnforcer { return; } auto update_state = node->cast(); + MS_EXCEPTION_IF_NULL(update_state); + const size_t update_state_inputs_size = 3; + if (update_state->inputs().size() < update_state_inputs_size) { + MS_LOG(ERROR) << "UpdateState inputs size is less than 3, node is:" << update_state->DebugString(); + } if (!HasAbstractUMonad(update_state->input(1))) { // Skip UpdateStates for IO. return; diff --git a/mindspore/ccsrc/pipeline/jit/static_analysis/prim.cc b/mindspore/ccsrc/pipeline/jit/static_analysis/prim.cc index 40d9af8ce44..a46aaec971f 100644 --- a/mindspore/ccsrc/pipeline/jit/static_analysis/prim.cc +++ b/mindspore/ccsrc/pipeline/jit/static_analysis/prim.cc @@ -1055,6 +1055,8 @@ class RefToEmbedEvaluator : public SymbolicPrimEvaluator { } std::string name = refkey->tag(); + MS_EXCEPTION_IF_NULL(node_conf->node()); + MS_EXCEPTION_IF_NULL(node_conf->node()->func_graph()); const auto &manager = node_conf->node()->func_graph()->manager(); auto node = FindParameterNodeByString(manager, name); if (node == nullptr) { @@ -1217,6 +1219,8 @@ class PartialEvaluator : public Evaluator { MS_EXCEPTION_IF_NULL(out_conf); MS_EXCEPTION_IF_NULL(out_conf->node()); + MS_EXCEPTION_IF_NULL(args_conf_list[0]); + MS_EXCEPTION_IF_NULL(args_conf_list[0]->ObtainEvalResult()); auto arg0_value = args_conf_list[0]->ObtainEvalResult()->abstract(); AbstractBasePtrList args_spec_list{arg0_value}; // Func in hypermap(partial(Func, arg0), arg1, arg2) may become Poly Node. @@ -1232,6 +1236,7 @@ class PartialEvaluator : public Evaluator { // Sometimes, node[0] in out_conf becomes phi0; if (func->isa()) { auto prim_func = dyn_cast(func); + MS_EXCEPTION_IF_NULL(prim_func->prim()); if (prim_func->prim()->isa()) { prim::DoSignaturePrimitivePtr do_signature_prim = dyn_cast(prim_func->prim()); return HandleDoSignature(engine, do_signature_prim->function(), out_conf); diff --git a/mindspore/ccsrc/pipeline/jit/static_analysis/program_specialize.cc b/mindspore/ccsrc/pipeline/jit/static_analysis/program_specialize.cc index cb96cf97872..9d9d142a714 100644 --- a/mindspore/ccsrc/pipeline/jit/static_analysis/program_specialize.cc +++ b/mindspore/ccsrc/pipeline/jit/static_analysis/program_specialize.cc @@ -553,10 +553,11 @@ void FuncGraphSpecializer::ProcessCNode(const CNodePtr &new_node) { // First element is func so arg start from 1 std::vector args(new_inputs.begin() + 1, new_inputs.end()); // CNode(CNode(Partial, f, arg1), arg2, ...) --> CNode(f, arg1, arg2, ...) + const size_t arg_start_index = 2; while (IsPrimitiveCNode(func, prim::kPrimPartial)) { std::vector inputs = func->cast()->inputs(); // First element is partial, second is func so arg is start from 2 - (void)args.insert(args.begin(), inputs.begin() + 2, inputs.end()); + (void)args.insert(args.begin(), inputs.begin() + arg_start_index, inputs.end()); func = inputs[1]; } new_inputs = args; @@ -738,6 +739,7 @@ AnfNodePtr FuncGraphSpecializer::BuildPossibleValueNode(const AnfNodePtr &origin } else { return nullptr; } + MS_EXCEPTION_IF_NULL(value); if (!value->isa() || value->cast()->parent() == nullptr || (IsValueNode(origin_node) && IsVisible(func_graph_, value->cast()->parent()))) { return BuildValueNode(value, ival); diff --git a/mindspore/ccsrc/pipeline/jit/static_analysis/stack_frame.cc b/mindspore/ccsrc/pipeline/jit/static_analysis/stack_frame.cc index 3c7d2942f21..5cd0c711177 100644 --- a/mindspore/ccsrc/pipeline/jit/static_analysis/stack_frame.cc +++ b/mindspore/ccsrc/pipeline/jit/static_analysis/stack_frame.cc @@ -86,6 +86,7 @@ StackFramePtr StackFrame::DoJump(const AnalysisEnginePtr &engine, const CNodePtr // Find parent context and create new context. AnalysisContextPtr parent_context = GetParentContext(fg_evaluator, graph_func); + MS_EXCEPTION_IF_NULL(parent_context); auto new_context = parent_context->NewFuncGraphContext(fg, args_abs_list); // Evaluate the parameters with new context. diff --git a/mindspore/ccsrc/pipeline/jit/static_analysis/static_analysis.cc b/mindspore/ccsrc/pipeline/jit/static_analysis/static_analysis.cc index 60e9e861965..daaee7d83ff 100644 --- a/mindspore/ccsrc/pipeline/jit/static_analysis/static_analysis.cc +++ b/mindspore/ccsrc/pipeline/jit/static_analysis/static_analysis.cc @@ -210,6 +210,8 @@ void AnalysisEngine::CheckNoStackInSameFuncGraph(const AnfNodeConfigPtr &conf) { return; } auto &previous_stack = list.back(); + MS_EXCEPTION_IF_NULL(previous_stack->node()); + MS_EXCEPTION_IF_NULL(conf->node()); auto previous_cnode_fg = previous_stack->node()->func_graph(); auto current_cnode_fg = conf->node()->func_graph(); if (previous_cnode_fg != current_cnode_fg) { // Normal. @@ -664,6 +666,10 @@ EvalResultPtr AnalysisEngine::ExecuteMultipleEvaluators(const std::vector(*m, "Signature") - .def(py::init([](std::string name, SignatureEnumRW rw, SignatureEnumKind kind, - py::object arg_default, SignatureEnumDType dtype) { + .def(py::init([](const std::string name, SignatureEnumRW rw, SignatureEnumKind kind, + const py::object arg_default, SignatureEnumDType dtype) { auto default_value = PyArgToValue(arg_default); return Signature(name, rw, kind, default_value, dtype); }));