https://gcc.gnu.org/g:089ef1ab2bee926df0d61cb8add44f45ec2e51e5

commit r17-4790-g089ef1ab2bee926df0d61cb8add44f45ec2e51e5
Author: Paul-Antoine Arras <[email protected]>
Date:   Tue Sep 29 18:54:01 2026 +0200

    openmp: fix ICE for map iterator with non-constant bound
    
    An iterator whose trip count isn't known at compile time already hits
    a sorry diagnostic in build_omp_iterators_loops. But elems remained 
NULL_TREE
    which segfaulted a few lines below.
    
    Fix by unsetting OMP_CLAUSE_ITERATORS.
    
    gcc/ChangeLog:
    
            * gimplify.cc (build_omp_iterators_loops): Clear
            OMP_CLAUSE_ITERATORS after sorry.
    
    gcc/testsuite/ChangeLog:
    
            * c-c++-common/gomp/target-update-iterators-5.c: New test.

Diff:
---
 gcc/gimplify.cc                                       |  2 ++
 .../c-c++-common/gomp/target-update-iterators-5.c     | 19 +++++++++++++++++++
 2 files changed, 21 insertions(+)

diff --git a/gcc/gimplify.cc b/gcc/gimplify.cc
index 19cabec33a81..f452e8b4cbd6 100644
--- a/gcc/gimplify.cc
+++ b/gcc/gimplify.cc
@@ -10154,6 +10154,8 @@ build_omp_iterators_loops (tree *list_p, gimple_seq 
*loops_seq_p)
        {
          /* Handle dynamic sizes.  */
          sorry ("dynamic iterator sizes not implemented yet");
+         OMP_CLAUSE_ITERATORS (c) = NULL_TREE;
+         continue;
        }
 
       /* BEFORE LOOP:  */
diff --git a/gcc/testsuite/c-c++-common/gomp/target-update-iterators-5.c 
b/gcc/testsuite/c-c++-common/gomp/target-update-iterators-5.c
new file mode 100644
index 000000000000..d1bf6664ea89
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/gomp/target-update-iterators-5.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+
+/* Check that an iterator whose trip count is not known at compile time does 
not
+   ICE.  */
+
+void f (int n, int *arr)
+{
+  #pragma omp target update to(iterator(i=0:n): arr[i]) /* { dg-message 
"sorry, unimplemented: dynamic iterator sizes not implemented yet" } */
+}
+
+void f1 (int s, int *arr)
+{
+  #pragma omp target update to(iterator(i=0:9:s): arr[i]) /* { dg-message 
"sorry, unimplemented: dynamic iterator sizes not implemented yet" } */
+}
+
+void f2 (int n, int *arr)
+{
+  #pragma omp target update from(iterator(i=0:n): arr[i]) /* { dg-message 
"sorry, unimplemented: dynamic iterator sizes not implemented yet" } */
+}

Reply via email to