https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122513
Bug ID: 122513
Summary: do concurrent default (none) fails on parameter arrays
Product: gcc
Version: 15.2.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: alex.heger at gmail dot com
Target Milestone: ---
If I have a an parameter array, e.g.,
integer, dimension(2,3), parameter :: ii = reshape((/2, 3/), (/ 1,2,3,4,5,6 /))
and use this inside a do concurrent loop with default (none)
integer :: i
do concurrent (i=1:2) default (none)
print*,ii(i,:)
end do
the compiler complains about invalid sharing for ii
Error: Variable ‘ii’ at (1) not specified in a locality spec of DO CONCURRENT
at (2) but required due to DEFAULT (NONE)
I have a small test program for which the error message makes even less sense
program test
implicit none
integer :: i
do concurrent (i=1:2) default (none)
block
integer, dimension(2,3), parameter :: &
ii = reshape((/ 1,2,3,4,5,6 /), (/2, 3/))
print*,ii(i,:)
end block
end do
end program test
4 | do concurrent (i=1:2) default (none)
| 2
......
8 | print*,ii(i,:)
| 1
Error: Variable ‘i’ at (1) not specified in a locality spec of DO CONCURRENT at
(2) but required due to DEFAULT (NONE)
But if I (incorrectly) add i, I get another error message
4 | do concurrent (i=1:2) default (none) local(i)
| 1
Error: Index variable ‘i’ at (1) cannot be specified in a locality-spec
It seems specifying locallity for concurrent loops is problematic in many ways.