Array element actual argument & assumed size dummy

It works. But there are some cases where passing an array element (i.e. an address and nothing else) is really what is needed (the toy example here is too simplistic to illustrate the cases where it’s needed)

EDIT: the usage case is mainly when calling a C or a legacy F77 routine. For instance a FFT routine, and imagine you want to perform 1D FTTs along the 3rd dimension of a cube. You would write something like:

interface 
   subroutine cfft( buf, len, nvect, inc, incv )
   complex :: buf(*)
   integer :: len     ! fft length
   integer :: nvect   ! number of vectors to transform
   integer :: inc     ! increment between 2 adjacent elements of a vector
   integer :: incv    ! increment between the first elements of 2 adjacent vectors
   end subroutine
end interface

complex :: x(:,:,:)   ! the shape is [n1,n2,n3]

do i2 = 1, n2
   call cfft( x(1,i2,1), n3, n1, n1*n2, 1 )
   ! this could be alternatively:
   ! call cfft( x(:,i2,:), n3, n1, n1, 1 )
   ! but copy-in/copy-out would occur
end do