https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118478
Bug ID: 118478
Summary: [OpenMP][5.0] Use defined assignment for FIRSTPRIVATE
etc., if available
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Keywords: openmp, wrong-code
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: burnus at gcc dot gnu.org
Target Milestone: ---
While OpenMP 4.5 has:
"2.15.3.4 firstprivate Clause"
...
"If the original list item does not have the POINTER attribute,
initialization of the new list items occurs as if by intrinsic
assignment, unless the original list item has the allocation
status of not currently allocated, in which case the new list
items will have the same status."
OpenMP 5.0 changed it to, e.g.,
"2.19.6.1 copyin Clause"
...
"If the original list item does not have the POINTER attribute, each copy
becomes defined with the value of the copy of the master thread as if by
intrinsic assignment unless the list item has a type bound procedure as a
defined assignment. If the original list item that does not have the
POINTER attribute has the allocation status of unallocated, each copy will
have the same status."
Thus, if there is a defined assignment, use it for data-sharing clauses like
copyin, firstprivate etc.
Cross ref: For 6.1, some wording discussions are done in OpenMP Issue #4371 but
it mostly boils down to
"type bound procedure as a defined assignment" → "defined assignment"