From: Steve Kargl Date: Mon, 3 Nov 2025 19:47:54 +0000 (-0800) Subject: Fortran: Fix check on locality spec DO CONCURRENT X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ffe538c831daeb72d935fb7fd796b6ce4a13c820;p=thirdparty%2Fgcc.git 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