This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug fortran/31867] function result with character LEN computed at run time
- From: "pault at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 11 May 2007 11:09:38 -0000
- Subject: [Bug fortran/31867] function result with character LEN computed at run time
- References: <bug-31867-14444@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- 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