The first error message in my previous email led me to the following
constraint:

“*C1130*  A *variable-name *that appears in a LOCAL or LOCAL_INIT
*locality-spec *shall not have the ALLOCATABLE, INTENT (IN), or OPTIONAL
attribute, shall not be of finalizable type, shall not have an allocatable
ultimate component,...”

My first thought was, "Holy guacamole. That seems like such
a severe limitation that the feature seems almost useless."  Fortuitously,
however, it turns out that the code I sent a little while ago was missing
one important feature from my intended use case: associate.  As shown
below, using associate eliminates the first error, but I'm still confused
by the remaining error message.  Are locality specifiers actually supported
yet?

Damian

% cat locality.f90

program main

  implicit none

  integer pair

  integer :: mini_batch_size=1


  real, allocatable, dimension(:,:) :: a, dcdb



  allocate(a(1,1))

  allocate(dcdb(1,1))


  associate(a_ => a, dcdb_ => dcdb)

    do concurrent (pair = 1:mini_batch_size) local(a_) reduce(+: dcdb_)

      a_ = 0.

      dcdb_ = 0.

    end do

  end associate


end program


% gfortran locality.f90

*locality.f90:12:71:*


   12 |     do concurrent (pair = 1:mini_batch_size) local(a_) reduce(+:
dcdb_)

      |
  *1*

*Error:* Sorry, LOCAL and LOCAL_INIT are not yet supported for ‘*do
concurrent*’ constructs at *(1)*


% gfortran --version

GNU Fortran (GCC) 15.0.1 20250119 (experimental)

Copyright (C) 2025 Free Software Foundation, Inc.

This is free software; see the source for copying conditions.  There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Reply via email to