program strarray_4 character(len=5), dimension(2) :: c c(1) = "Hello" c(2) = "World" call foo1(c) call foo2(c, 2) call foo3(c, 5, 2) contains subroutine foo1(a) implicit none character(len=5), dimension(2) :: a character(len=5), dimension(2) :: b b = a; if ((b(1) .ne. "Hello") .or. (b(2) .ne. "World")) call abort end subroutine subroutine foo2(a, m) implicit none integer m character(len=5), dimension(m) :: a character(len=5), dimension(m) :: b b = a if ((b(1) .ne. "Hello") .or. (b(2) .ne. "World")) call abort end subroutine subroutine foo3(a, n, m) implicit none integer n, m character(len=n), dimension(m) :: a character(len=n), dimension(m) :: b b = a if ((b(1) .ne. "Hello") .or. (b(2) .ne. "World")) call abort end subroutine end program