From 5868413caf802bbd7f1dc0762b402988258d61d9 Mon Sep 17 00:00:00 2001 From: ytaous <4484531+ytaous@users.noreply.github.com> Date: Tue, 29 Mar 2022 14:12:45 -0700 Subject: [PATCH] fix seg fault (#11038) Co-authored-by: Ethan Tao --- onnxruntime/core/optimizer/noop_elimination.cc | 4 ++++ .../test/optimizer/graph_transform_test.cc | 2 +- .../test/testdata/transform/noop-add.onnx | Bin 688 -> 845 bytes onnxruntime/test/testdata/transform/noop-add.py | 8 ++++++++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/onnxruntime/core/optimizer/noop_elimination.cc b/onnxruntime/core/optimizer/noop_elimination.cc index 1421ea7416..c01bdc42bf 100644 --- a/onnxruntime/core/optimizer/noop_elimination.cc +++ b/onnxruntime/core/optimizer/noop_elimination.cc @@ -55,6 +55,10 @@ bool NoopElimination::SatisfyCondition(const Graph& graph, const Node& node, con if (add_init.size() > 1) { return false; } + // handle edge case where the total size of the initializer is 0 + if (add_init.size() == 0) { + return true; + } switch (data_type) { case ONNX_NAMESPACE::TensorProto_DataType_FLOAT: if (*add_init.data() != 0.f) { diff --git a/onnxruntime/test/optimizer/graph_transform_test.cc b/onnxruntime/test/optimizer/graph_transform_test.cc index 3cfc34492d..70256732ba 100644 --- a/onnxruntime/test/optimizer/graph_transform_test.cc +++ b/onnxruntime/test/optimizer/graph_transform_test.cc @@ -195,7 +195,7 @@ TEST_F(GraphTransformationTests, NoopElimination) { ASSERT_STATUS_OK(Model::Load(model_uri, model, nullptr, *logger_)); Graph& graph = model->MainGraph(); std::map op_to_count = CountOpsInGraph(graph); - ASSERT_TRUE(op_to_count["Add"] == 4); + ASSERT_TRUE(op_to_count["Add"] == 5); auto rule_transformer_L1 = std::make_unique("RuleTransformer1"); ASSERT_STATUS_OK(rule_transformer_L1->Register(std::make_unique())); diff --git a/onnxruntime/test/testdata/transform/noop-add.onnx b/onnxruntime/test/testdata/transform/noop-add.onnx index e5793f5fda7c9369fee47503468d775900f02380..b10a87283ad6a517cbaa8e0f821eba8afdcb2adc 100644 GIT binary patch delta 188 zcmdnMdX|lqgTrb)+eX$h#t<$kE~W@mA(qUPcuOfTsl?%#lA2eNSyIWR#KoSLlb=`; zZ^Q+b5@JnENr^X=f>27#jwvZzGF%Xz5K|;j0%(k(!Q?{5Bwj6E4h8{6Cx`))FES?a zM2Uf|65!(FV4SSZRA86{6o@nx0t*OnaWM-q`ho~=Cl)RS0UjqoF5cw)T)o`Pqgcx#>qDsBPKgAB~0GIlp^WG!o?uK<0Qz%o1CAkmz$YflwX{m IRwBR%0D|!ji2wiq diff --git a/onnxruntime/test/testdata/transform/noop-add.py b/onnxruntime/test/testdata/transform/noop-add.py index 0d1bb9801b..3e996d42e6 100644 --- a/onnxruntime/test/testdata/transform/noop-add.py +++ b/onnxruntime/test/testdata/transform/noop-add.py @@ -34,6 +34,10 @@ def GenerateModel(model_name): helper.make_node("Identity", ["X4"], ["id_7"], "id_7"), helper.make_node("Add", ["id_7", "int64_2"], ["add_4"], "add_4"), helper.make_node("Identity", ["add_4"], ["Y4"], "id_8"), + #float + helper.make_node("Identity", ["X5"], ["id_9"], "id_9"), + helper.make_node("Add", ["float_2", "id_9"], ["add_5"], "add_5"), + helper.make_node("Identity", ["add_5"], ["Y5"], "id_10"), ] inputs = [ # inputs @@ -41,6 +45,7 @@ def GenerateModel(model_name): helper.make_tensor_value_info('X2', TensorProto.FLOAT16, ['M', 'K']), helper.make_tensor_value_info('X3', TensorProto.INT64, ['M', 'K']), helper.make_tensor_value_info('X4', TensorProto.INT64, ['M', 'K']), + helper.make_tensor_value_info('X5', TensorProto.FLOAT, ['M', 'K']), ] initializers = [ @@ -50,6 +55,8 @@ def GenerateModel(model_name): helper.make_tensor('int64_1', TensorProto.INT64, (), [0]), # higher rank helper.make_tensor('int64_2', TensorProto.INT64, [1,1,1], [0]), + #float - set initializer size = 0 + helper.make_tensor('float_2', TensorProto.FLOAT, [0], []), ] graph = helper.make_graph( @@ -61,6 +68,7 @@ def GenerateModel(model_name): helper.make_tensor_value_info('Y2', TensorProto.FLOAT16, ['M', 'K']), helper.make_tensor_value_info('Y3', TensorProto.INT64, ['M', 'K']), helper.make_tensor_value_info('Y4', TensorProto.INT64, ['M', 'K', 1]), + helper.make_tensor_value_info('Y5', TensorProto.FLOAT, ['M', 'K']), ], initializers)