The attached patch from Steve fixes this.
Regression tested on x86_64.
OK for trunk?
Regards,
Jerry
commit e7096708b2e4c8ca40c50537f1d227e15a89bc2d
Author: Steve Kargl <[email protected]>
Date: Mon Nov 3 11:47:54 2025 -0800
Fortran: Fix check on locality spec DO CONCURRENT
PR fortran/122513
gcc/fortran/ChangeLog:
* resolve.cc (check_default_none_expr): Do not allow an
iterator in a locality spec. Allow a named constant to be
used within the loop.
gcc/testsuite/ChangeLog:
* gfortran.dg/pr122513.f90: New test.diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc
index 03e26f00084..5fa408ec48c 100644
--- a/gcc/fortran/resolve.cc
+++ b/gcc/fortran/resolve.cc
@@ -8461,7 +8461,20 @@ check_default_none_expr (gfc_expr **e, int *, void *data)
break;
ns2 = ns2->parent;
}
- if (ns2 != NULL)
+
+ /* A DO CONCURRENT iterator cannot appear in a locality spec. */
+ if (sym->ns->code->ext.concur.forall_iterator)
+ {
+ gfc_forall_iterator *iter
+ = sym->ns->code->ext.concur.forall_iterator;
+ for (; iter; iter = iter->next)
+ if (iter->var->symtree
+ && strcmp(sym->name, iter->var->symtree->name) == 0)
+ return 0;
+ }
+
+ /* A named constant is not a variable, so skip test. */
+ if (ns2 != NULL && sym->attr.flavor != FL_PARAMETER)
{
gfc_error ("Variable %qs at %L not specified in a locality spec "
"of DO CONCURRENT at %L but required due to "
diff --git a/gcc/testsuite/gfortran.dg/pr122513.f90 b/gcc/testsuite/gfortran.dg/pr122513.f90
new file mode 100644
index 00000000000..9e12ab159a6
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr122513.f90
@@ -0,0 +1,13 @@
+! { dg-do compile }
+! PR122513 do concurrent default (none) fails on parameter arrays
+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