https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114612
Dominik Gronkiewicz <gronki at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |gronki at gmail dot com
--- Comment #1 from Dominik Gronkiewicz <gronki at gmail dot com> ---
Still persists in gfortran 14.
Minimal working example. Shows that copy is not performed correctly, but only
if the derived type is recursive with itself.
** Expected output: **
gfortran-14 test.f90 && ./a.out
a % child % val = 1
b % child % val = 2
now deallocating
** Actual output: **
gfortran-14 -g test.f90 && ./a.out
a % child % val = 2
b % child % val = 2
now deallocating
Program received signal SIGSEGV: Segmentation fault - invalid memory reference.
Backtrace for this error:
#0 0x7fb4cf24157f in ???
#1 0x40123b in __testmod_MOD___deallocate_testmod_Mytype
at /tmp/tmp.FUJSIzk4k0/test.f90:10
#2 0x4012a7 in __testmod_MOD___deallocate_testmod_Mytype
at /tmp/tmp.FUJSIzk4k0/test.f90:10
#3 0x401bc9 in testprog
at /tmp/tmp.FUJSIzk4k0/test.f90:31
#4 0x401c23 in main
at /tmp/tmp.FUJSIzk4k0/test.f90:13
** Source starts here until the end **
module testmod
type :: mytype
! change anothertype->mytype to triger an error
type(anothertype), allocatable :: child
integer :: val
end type
type :: anothertype
integer :: val
end type
end module
program testprog
use testmod
type(mytype), allocatable :: a, b
allocate(a)
allocate(a % child)
a % child % val = 1
allocate(b, source=a)
! note: intrinsic assignment b = a
! causes the same problem as allocate/source
b % child % val = 2
print *, "a % child % val = ", a % child % val
print *, "b % child % val = ", b % child % val
print *, "now deallocating"
deallocate(b)
deallocate(a)
end program