[Bug fortran/86115] New: move_alloc for class(*) containing value of type character(len=*) looses data
mscfd at gmx dot net
gcc-bugzilla@gcc.gnu.org
Tue Jun 12 07:17:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86115
Bug ID: 86115
Summary: move_alloc for class(*) containing value of type
character(len=*) looses data
Product: gcc
Version: 8.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: mscfd at gmx dot net
Target Milestone: ---
related: bug 72790
Applying move_alloc(x,y) for x and y both declared as class(*) and x currently
containing a string (character(len=...)) fails. The type seems to be
transfered, but the value is empty.
Test case, which shows that for integer variables move_alloc works as expected,
but which fails for strings:
program movealloc
class(*), allocatable :: x, y, s, t
allocate(x, source=1234)
allocate(s, source='5678')
call p(x)
call p(y)
call p(s)
call p(t)
call move_alloc(x, y)
call move_alloc(s, t)
print *,'---'
call p(x)
call p(y)
call p(s)
call p(t)
contains
subroutine p(z)
class(*), allocatable, intent(in) :: z
if (allocated(z)) then
select type(z)
type is (character(len=*))
print *, 'string: ', z
type is (integer)
print *, 'integer: ', z
class default
print *, 'unknown type'
end select
else
print *, 'not allocated'
end if
end subroutine p
end program
expected output (confirmed with ifort):
integer: 1234
not allocated
string: 5678
not allocated
---
not allocated
integer: 1234
not allocated
string: 5678
gfortran output:
integer: 1234
not allocated
string: 5678
not allocated
---
not allocated
integer: 1234
not allocated
string:
(not that it does not report 'unknown type')
More information about the Gcc-bugs
mailing list