]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
openmp: Bugfix in omp_expand_metadirective for same blocks/edges to be deleted.
authorMarcel Vollweiler <marcel@codesourcery.com>
Tue, 1 Nov 2022 13:05:18 +0000 (13:05 +0000)
committerMarcel Vollweiler <marcel@codesourcery.com>
Tue, 1 Nov 2022 13:10:10 +0000 (06:10 -0700)
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.

gcc/ChangeLog.omp
gcc/omp-expand-metadirective.cc
gcc/testsuite/ChangeLog.omp
gcc/testsuite/c-c++-common/gomp/metadirective-8.c [new file with mode: 0644]

index f8d5af30ca5080a844fc7d86b79861487222d524..b636fa5baf492e286d5088d9f4ad386a4fdb28cb 100644 (file)
@@ -1,3 +1,8 @@
+2022-11-01  Marcel Vollweiler  <marcel@codesourcery.com>
+
+       * 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  <ams@codesourcery.com>
 
        Backport from mainline:
index aaf048a699a70bd53bde2ec89f06c344350ef26f..0e885e985925d2427ded7a7e8493933bc6a66610 100644 (file)
@@ -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);
        }
     }
 
index ef76bf2bbb3a37ac731d98b8ae7605acf35b2f2b..3ae2869462463f612b85e403a4cc549545eb2376 100644 (file)
@@ -1,3 +1,7 @@
+2022-11-01  Marcel Vollweiler  <marcel@codesourcery.com>
+
+       * c-c++-common/gomp/metadirective-8.c: New test.
+
 2022-10-28  Tobias Burnus  <tobias@codesourcery.com>
 
        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 (file)
index 0000000..c7d9c31
--- /dev/null
@@ -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;
+}