https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64120
Bug ID: 64120
Summary: [F03] Wrong handling of allocatable character string
Product: gcc
Version: 5.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: fxcoudert at gcc dot gnu.org
The following code shows allocatable character does not work as it should:
call g(1)
contains
subroutine g(x)
integer :: x
character(len=x), allocatable :: s
allocate(s)
write(*,*) x, len(s)
end subroutine
end
It should output "1 1" but outputs "1 0". The tree dump shows that the argument
x is never used in the string allocation.
A longer testcase, including SAVE (which seems also mishandled, but it is
probably linked to this issue):
program test
logical :: L
L = g(1)
write(*,*) L
L = g(2)
write(*,*) L
contains
logical function g(x)
integer :: x
character(len=x), allocatable :: s
save
if(.NOT.allocated(s)) then
allocate(s)
g = .FALSE.
else
g = .TRUE.
end if
write(*,*) len(s)
end function g
end