From 0d8ca4437751e4a7cb79257a8f82a11cb717ac96 Mon Sep 17 00:00:00 2001 From: Chen Feiyue <69809761+chenfeiyue-cfy@users.noreply.github.com> Date: Thu, 11 Jan 2024 15:58:29 +0800 Subject: [PATCH] Fixed layout infer bug when some op is not in op_vector_ (#676) Backgroud: instance_norm models run crash after latest lay out code refine Reason: erase() function will delete the last element if the param is vector.end() Solution: Check iterator validtion before erase. Type: Bug Fix Issue: 37449 Signed-off-by: Feiyue Chen --- src/tim/transform/mean_stddev_normalize_fusion.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/tim/transform/mean_stddev_normalize_fusion.cc b/src/tim/transform/mean_stddev_normalize_fusion.cc index eeb55df..3227a34 100644 --- a/src/tim/transform/mean_stddev_normalize_fusion.cc +++ b/src/tim/transform/mean_stddev_normalize_fusion.cc @@ -109,12 +109,14 @@ void RemoveTensorsAndOps( std::shared_ptr& graph, const std::vector>& norm_ops) { for (uint32_t i = 0; i < norm_ops.size(); i++) { - auto it = + auto it = std::remove_if(graph->OpVector().begin(), graph->OpVector().end(), [norm_ops, i](std::shared_ptr oper) { return oper == norm_ops[i]; }); - graph->OpVector().erase(it); //Remove current op from op_vector_ + if (it != graph->OpVector().end()) { + graph->OpVector().erase(it); + } // Remove current op from op_vector_ auto input_tensors = norm_ops[i]->impl()->InputsTensor(); auto output_tensors = norm_ops[i]->impl()->OutputsTensor();