[J3] Passing an element of an assumed shape array to an assumed size dummy array
Van Snyder
van.snyder at sbcglobal.net
Sun May 11 19:22:15 UTC 2025
On Sat, 2025-05-10 at 21:07 -0700, Robert Corbett via J3 wrote:
> There is no incompatibility with FORTRAN 66 or FORTRAN 77. The
> restriction on passing a scalar actual argument to an array dummy
> arguments applies only to assumed-shape, pointer, or polymorphic
> arrays (see the first dotted item in paragraph 14 of Subclause
> 15.5.2.5). Therefore, the only incompatibility with FORTRAN 66 or
> FORTRAN 77 codes is with FORTRAN 66 or FORTRAN 77 codes that include
> assumed-shape, pointer, or polymorphic arrays.
Would it be useful to carve out an exception to use an element of a
contiguous assumed-shape array (or pointer) as the start of a sequence
association?
Probably not, because the actual argument is necessarily in a scope
using stuff from Fortran 90 onward so there's no excuse not to write
x(10:).
>
> Bob Corbett
>
> > On May 10, 2025, at 11:16 AM, Van Snyder via J3 <j3 at mailman.j3-
> > fortran.org> wrote:
> >
> >
> > On Sat, 2025-05-10 at 11:35 +0000, Pierre Hugonnet via J3 wrote:
> > > Hello,
> > >
> > > I encountered the following compilation error:
> > >
> > > !============================
> > > program foobar
> > > implicit none
> > >
> > > integer :: x(100)
> > > x = 1
> > > call foo(x)
> > >
> > > contains
> > >
> > > subroutine foo(x)
> > > integer, contiguous :: x(:)
> > > call bar( x(10) ) ! compilation error here
> >
> >
> > In FORTRAN 66 and FORTRAN 77, this actually meant
> >
> > call bar ( x(10:))
> >
> > in modern syntax. Did we explicitly remove this sequence
> > association without remarking about an incompatibility?
> >
> > > end subroutine
> > >
> > > subroutine bar(x)
> > > integer :: x(*)
> > > print*, x(1)
> > > end subroutine
> > >
> > > end
> > > !============================
> > >
> > > The error message says : "If the actual argument is scalar, the
> > > dummy argument shall be scalar unless the actual argument is of
> > > type character or is an element of an array that is not assumed
> > > shape, pointer, or polymorphic."
> > >
> > > This is indeed consistent with the standard, which says in
> > > 15.5.2.5:
> > > "If the actual argument is a noncoindexed scalar, the
> > > corresponding dummy argument shall be scalar unless
> > > • the actual argument is default character, of type character
> > > with the C character kind (18.2.2), or is an element or substring
> > > of an element of an array that is not an assumed-shape, pointer,
> > > or polymorphic array,
> > > • the dummy argument has assumed-rank, or
> > > • the dummy argument is an assumed-type assumed-size array."
> > >
> > > Excluding the case where the element belongs to an assumed-shape
> > > or pointer array makes sense, as these are potentially non-
> > > contiguous, which means that sequence association cannot apply.
> > > However I think that this restriction should be removed in the
> > > cases where the assumed-shape or pointer array is declared as
> > > `contiguous`.
> > >
> > > What do you think ?
> > >
> > > Pierre
> > >
> > >
> > >
> >
> >
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.j3-fortran.org/pipermail/j3/attachments/20250511/2a5d78aa/attachment.htm>
More information about the J3
mailing list