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.

Reply via email to