| ! { 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 |