[Bug fortran/49110] Deferred-length character result triggers (false positive) error for pure procedures
kargl at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sun May 22 19:08:00 GMT 2011
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49110
--- Comment #8 from kargl at gcc dot gnu.org 2011-05-22 18:35:37 UTC ---
I think the subject line is incorrect. The following testcase
that gets rid of the C interop garbage, works for an input
array of characters with an explicit-shape, but fails with
an assumed-shape array.
program foo
implicit none
character s(5)
s = ['a', 'b', 'c', 'd', 'e']
print *, bar(s)
contains
pure function bar(s) result(a)
! character, intent(in) :: s(5) ! Compiles and runs
character, intent(in) :: s(:) ! Compiles and segfaults
character(len=:), allocatable :: a
integer i
a = repeat('a', size(s))
do i = 1, size(s)
a(i:i) = s(i)
end do
end function bar
end program foo
The following workaround allows the original code to compile and
run.
function c2fstring(cbuffer) result(string)
character(:), allocatable :: string
character(KIND = C_CHAR), intent(IN) :: cbuffer(255)
character(len=255) s
integer :: i
s = ''
do i = 1, SIZE(cbuffer)
if (cbuffer(i) == C_NULL_CHAR) exit
s(i:i) = cbuffer(i)
end do
string = TRIM(s)
end function
More information about the Gcc-bugs
mailing list