! { dg-do compile } ! ! PR fortran/40873 ! ! Failed to compile (segfault) with -fwhole-file. ! Cf. PR 40873 comment 24; test case taken from ! PR fortran/31867 comment 6. ! pure integer function lensum (words, sep) character (len=*), intent(in) :: words(:), sep lensum = (size (words)-1) * len (sep) + sum (len_trim (words)) end function module util_mod implicit none interface pure integer function lensum (words, sep) character (len=*), intent(in) :: words(:), sep end function end interface contains function join (words, sep) result(str) ! trim and concatenate a vector of character variables, ! inserting sep between them character (len=*), intent(in) :: words(:), sep character (len=lensum (words, sep)) :: str integer :: i, nw nw = size (words) str = "" if (nw < 1) then return else str = words(1) end if do i=2,nw str = trim (str) // sep // words(i) end do end function join end module util_mod ! program xjoin use util_mod, only: join implicit none character (len=5) :: words(2) = (/"two ","three"/) write (*,"(1x,'words = ',a)") "'"//join (words, "&")//"'" end program xjoin