Preserving non-default array bounds in dummy arguments

@nshaffer,

Not sure if this is something you’ve considered and dismissed, but a programming approach you can consider is to “parametrize” your code with named constants toward the lbound(s) and sizes of your array(s):

program test
   implicit none

   integer, parameter :: lbd_a = -3
   integer, parameter :: size_a = 10
   integer :: a( lbd_a : size_a+lbd_a-1 )

   print *, lbound(a, 1), ubound(a, 1)  ! -3, 6
   print *, bnds(a)                     ! -3, 6 now; default 1, 10

contains

   function bnds(x)
      integer, intent(in) :: x(lbd_a:)
      integer :: bnds(2)
      bnds(1) = lbound(x, 1)
      bnds(2) = ubound(x, 1)
   end function bnds

end program test