From d73cd8783ca930724def3e9909fc484ec15404f5 Mon Sep 17 00:00:00 2001 From: benniaobufeijiushiji Date: Mon, 19 Dec 2022 11:48:12 +0800 Subject: [PATCH 1/3] [loop-distribution] Bugfix for loop-distribution Add exception in function BUILD_QUEUE when there is a null pointer in grouped_loads. --- gcc/tree-loop-distribution.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/gcc/tree-loop-distribution.c b/gcc/tree-loop-distribution.c index 88b56379c..b68b9c7eb 100644 --- a/gcc/tree-loop-distribution.c +++ b/gcc/tree-loop-distribution.c @@ -3208,16 +3208,31 @@ build_queue (loop_vec_info vinfo, unsigned vf, { unsigned group_size = stmt_info->size; stmt_vec_info c_stmt_info = stmt_info; + bool succ = true; while (group_size >= vf) { vec_alloc (worklist, vf); for (unsigned j = 0; j < vf; ++j) { + if (c_stmt_info == NULL) + { + succ = false; + break; + } ginfo = new _group_info (); ginfo->stmt = c_stmt_info->stmt; worklist->safe_push (ginfo); c_stmt_info = c_stmt_info->next_element; } + if (!succ) + { + unsigned k = 0; + ginfo = NULL; + FOR_EACH_VEC_ELT (*worklist, k, ginfo) + delete ginfo; + vec_free (worklist); + break; + } worklists.safe_push (worklist); group_size -= vf; } @@ -3711,6 +3726,7 @@ free_ginfos (vec *> &worklists) unsigned j = 0; FOR_EACH_VEC_ELT (*worklist, j, ginfo) delete ginfo; + vec_free (worklist); } } -- 2.27.0.windows.1