From: Marcel Vollweiler Date: Tue, 1 Nov 2022 13:05:18 +0000 (+0000) Subject: openmp: Bugfix in omp_expand_metadirective for same blocks/edges to be deleted. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dc2304b3ce7e96094d50fe48bf790be6b4d6f02e;p=thirdparty%2Fgcc.git openmp: Bugfix in omp_expand_metadirective for same blocks/edges to be deleted. This patch handles an ICE that is thrown in omp_expand_metadirective when a basic_block for a metadirective label is tried to be deleted multiple times. To avoid this situation, processed labels are added to the already existing list of labels that are not intended to be deleted. The issue occured in the attached test case. gcc/ChangeLog: * omp-expand-metadirective.cc (omp_expand_metadirective): Add already processed labels to "labels" (the list of labels not to be deleted). gcc/testsuite/ChangeLog: * c-c++-common/gomp/metadirective-8.c: New test. --- diff --git a/gcc/ChangeLog.omp b/gcc/ChangeLog.omp index f8d5af30ca50..b636fa5baf49 100644 --- a/gcc/ChangeLog.omp +++ b/gcc/ChangeLog.omp @@ -1,3 +1,8 @@ +2022-11-01 Marcel Vollweiler + + * omp-expand-metadirective.cc (omp_expand_metadirective): Add already + processed labels to "labels" (the list of labels not to be deleted). + 2022-11-01 Andrew Stubbs Backport from mainline: diff --git a/gcc/omp-expand-metadirective.cc b/gcc/omp-expand-metadirective.cc index aaf048a699a7..0e885e985925 100644 --- a/gcc/omp-expand-metadirective.cc +++ b/gcc/omp-expand-metadirective.cc @@ -65,6 +65,7 @@ omp_expand_metadirective (function *fun, basic_block bb) { edge e = find_edge (bb, label_to_block (fun, label)); remove_edge_and_dominated_blocks (e); + labels.safe_push (label); } } diff --git a/gcc/testsuite/ChangeLog.omp b/gcc/testsuite/ChangeLog.omp index ef76bf2bbb3a..3ae286946246 100644 --- a/gcc/testsuite/ChangeLog.omp +++ b/gcc/testsuite/ChangeLog.omp @@ -1,3 +1,7 @@ +2022-11-01 Marcel Vollweiler + + * c-c++-common/gomp/metadirective-8.c: New test. + 2022-10-28 Tobias Burnus Backport from mainline: diff --git a/gcc/testsuite/c-c++-common/gomp/metadirective-8.c b/gcc/testsuite/c-c++-common/gomp/metadirective-8.c new file mode 100644 index 000000000000..c7d9c31ed73c --- /dev/null +++ b/gcc/testsuite/c-c++-common/gomp/metadirective-8.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ + +#define N 256 + +void f () +{ + int i; + int a[N]; + + #pragma omp metadirective \ + when( device={kind(nohost)}: nothing ) \ + when( device={arch("nvptx")}: nothing) \ + default( parallel for) + for (i = 0; i < N; i++) + a[i] = i; +}