OpenMP requires that the number of dispatch 'interop' clauses (ninterop)
is less or equal to the number of declare variant 'append_args' interop
objects (nappend).
While 'nappend < ninterop' was diagnosed as error, the processing continues,
which lead to an invalid out-of-bounds memory access. Solution: only
process the first nappend 'interop' clauses.
gcc/ChangeLog:
PR middle-end/119541
* gimplify.cc (modify_call_for_omp_dispatch): Limit interop claues
processing by the number of append_args arguments.
(cherry picked from commit
f3899e0fd3f9aa6b579a21e87b50c61ea5c448df)
+2025-03-31 Tobias Burnus <tburnus@baylibre.com>
+
+ Backported from master:
+ 2025-03-31 Tobias Burnus <tburnus@baylibre.com>
+
+ PR middle-end/119541
+ * gimplify.cc (modify_call_for_omp_dispatch): Limit interop claues
+ processing by the number of append_args arguments.
+
2025-03-27 Tobias Burnus <tburnus@baylibre.com>
Backported from master:
: DECL_SOURCE_LOCATION (fndecl),
"%<declare variant%> candidate %qD declared here",
fndecl);
+ ninterop = nappend;
}
}
if (dispatch_interop && !dispatch_device_num)
buffer[i] = CALL_EXPR_ARG (expr, i);
}
int j = ninterop;
- for (tree t = dispatch_interop; t; t = TREE_CHAIN (t))
+ for (tree t = dispatch_interop; t && j > 0; t = TREE_CHAIN (t))
if (OMP_CLAUSE_CODE (t) == OMP_CLAUSE_INTEROP)
buffer[i + --j] = OMP_CLAUSE_DECL (t);
gcc_checking_assert (j == 0);
+2025-03-30 Tobias Burnus <tburnus@baylibre.com>
+
+ Backported from master:
+ 2025-03-30 Tobias Burnus <tburnus@baylibre.com>
+
+ * g++.dg/gomp/append-args-8.C: Remove bogus '3' after \.\[0-9\]+
+ pattern.
+
2025-03-27 Tobias Burnus <tburnus@baylibre.com>
Backported from master: