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" } */ +}
