------- Comment #6 from pault at gcc dot gnu dot org  2007-05-11 12:09 -------
This gives the correct result:

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


So I suspect that the problem lies in the interfacing around
gfc_conv_function_call but I just don't see it yet.

Paul


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31867

Reply via email to