------- Comment #2 from dominiq at lps dot ens dot fr 2007-11-13 15:08 -------
Reduced test case:
module TransferBug
type ByteType
character(len=1) :: singleByte
end type
contains
subroutine BytesToString(bytes, string)
type (ByteType), intent(in) :: bytes(:)
character(len=*), intent(out) :: string
string = 'Hi! '
! print *, len(trim(string)) ! <-- works
print *, len(transfer(bytes, string)) ! <-- gives garbage (crash with
g95)
end subroutine
end module
program main
use TransferBug
character(len=100) :: str
type (ByteType) :: bytes(4)
bytes = (/ByteType('t'), ByteType('e'), ByteType('s'), ByteType('t')/)
call BytesToString( bytes, str )
print *, trim(str) ! This should print 'Hi!'
end program
[karma] f90/bug% gfc -fbounds-check pr34080_red.f90
[karma] f90/bug% a.out
0
0låŨ0l0 ]Q(Ô¿ÿà`á
d
[karma] f90/bug% pgfc -fbounds-check pr34080_red.f90
[karma] f90/bug% a.out
100
Hi!
If I exchange the commented print lines, the code works. So the bug is related
to transfer, but apparently through some memory leak and not due to its result.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34080