I recently built the master branch of Iain's fork of gcc in order to test the support for locality specifiers. I have verified that the branch I built contains the commit mentioned in this email thread 20b8500cfa522ebe0fcf756d5b32816da7f904dd. The code below isn't designed to do anything useful -- just to make sure the syntax works. Could someone tell me why the second error message indicates that LOCAL is not supported yet? Also, the first error message is really interesting because if I'm really not allowed to have anything allocatable inside LOCAL(), then I'm going to have to go back to the drawing board regarding my intended use case. Any advice?
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)) do concurrent (pair = 1:mini_batch_size) local(a) reduce(+: dcdb) a = 0. dcdb = 0. end do end program % gfortran locality.f90 *locality.f90:8:50:* 8 | do concurrent (pair = 1:mini_batch_size) local(a) reduce(+: dcdb) | *1* *Error:* ALLOCATABLE attribute not permitted for ‘*a*’ in LOCAL locality-spec at *(1)* *locality.f90:8:67:* 8 | 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. On Mon, Jan 13, 2025 at 5:41 PM Jerry D <jvdelis...@gmail.com> wrote: > Committed as: > > commit 20b8500cfa522ebe0fcf756d5b32816da7f904dd (HEAD -> master, > origin/master, origin/HEAD) > Author: Anuj Mohite <anujmohite...@gmail.com> > Date: Mon Jan 13 16:28:57 2025 -0800 > > Fortran: Add LOCALITY support for DO_CONCURRENT > > This patch provided by Anuj Mohite as part of the GSoC > project. > It is modified slightly by Jerry DeLisle for minor formatting. > The patch provides front-end parsing of the LOCALITY specs in > DO_CONCURRENT and adds numerous test cases. > > gcc/fortran/ChangeLog: > > * dump-parse-tree.cc (show_code_node): Updated to use > c->ext.concur.forall_iterator instead of > c->ext.forall_iterator. > * frontend-passes.cc (index_interchange): Updated to > use c->ext.concur.forall_iterator instead of > c->ext.forall_iterator. > (gfc_code_walker): Likewise. > * gfortran.h (enum locality_type): Added new enum for > locality types > in DO CONCURRENT constructs. > * match.cc (match_simple_forall): Updated to use > new_st.ext.concur.forall_iterator instead of > new_st.ext.forall_iterator. > (gfc_match_forall): Likewise. > (gfc_match_do): Implemented support for matching DO > CONCURRENT locality > specifiers (LOCAL, LOCAL_INIT, SHARED, DEFAULT(NONE), and > REDUCE). > * parse.cc (parse_do_block): Updated to use > new_st.ext.concur.forall_iterator instead of > new_st.ext.forall_iterator. > * resolve.cc (struct check_default_none_data): Added struct > check_default_none_data. > (do_concur_locality_specs_f2023): New function to check > compliance > with F2023's C1133 constraint for DO CONCURRENT. > (check_default_none_expr): New function to check DEFAULT(NONE) > compliance. > (resolve_locality_spec): New function to resolve locality > specs. > (gfc_count_forall_iterators): Updated to use > code->ext.concur.forall_iterator. > (gfc_resolve_forall): Updated to use > code->ext.concur.forall_iterator. > * st.cc (gfc_free_statement): Updated to free locality > specifications > and use p->ext.concur.forall_iterator. > * trans-stmt.cc (gfc_trans_forall_1): Updated to use > code->ext.concur.forall_iterator. > > gcc/testsuite/ChangeLog: > > * gfortran.dg/do_concurrent_10.f90: New test. > * gfortran.dg/do_concurrent_8_f2018.f90: New test. > * gfortran.dg/do_concurrent_8_f2023.f90: New test. > * gfortran.dg/do_concurrent_9.f90: New test. > * gfortran.dg/do_concurrent_all_clauses.f90: New test. > * gfortran.dg/do_concurrent_basic.f90: New test. > * gfortran.dg/do_concurrent_constraints.f90: New test. > * gfortran.dg/do_concurrent_local_init.f90: New test. > * gfortran.dg/do_concurrent_locality_specs.f90: New test. > * gfortran.dg/do_concurrent_multiple_reduce.f90: New test. > * gfortran.dg/do_concurrent_nested.f90: New test. > * gfortran.dg/do_concurrent_parser.f90: New test. > * gfortran.dg/do_concurrent_reduce_max.f90: New test. > * gfortran.dg/do_concurrent_reduce_sum.f90: New test. > * gfortran.dg/do_concurrent_shared.f90: New test. > > Signed-off-by: Anuj <anujmohite...@gmail.com> > >