https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71047
Bug ID: 71047
Summary: Allocatable component of INTENT(OUT) dummy not set
correctly
Product: gcc
Version: 7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: mrestelli at gmail dot com
Target Milestone: ---
When compiled with gfortran, the attached code, which is correct as
far as I can tell, produces an error at runtime:
$ ./test
At line 20 of file test.f90
Fortran runtime error: Attempting to allocate already allocated variable 'y'
$ gfortran --version
GNU Fortran (GCC) 7.0.0 20160510 (experimental)
Notice that the dummy argument "y" of "set" has intent(out), so that
its component "f" can not be allocated regardless of the state of the
actual argument.
I think that the code was working with an older version of the
gfortran trunk (some weeks ago?) - or, at least, the code I derived
this example from was working correctly.
module m
implicit none
type, abstract :: c_abstr
integer :: i = 0
end type c_abstr
type, extends(c_abstr) :: t_a
class(c_abstr), allocatable :: f
end type t_a
type, extends(c_abstr) :: t_b
end type t_b
contains
subroutine set(y,x)
class(c_abstr), intent(in) :: x
type(t_a), intent(out) :: y
allocate( y%f , source=x )
end subroutine set
end module m
program p
use m
implicit none
type(t_a) :: res
type(t_b) :: var
call set( res , var )
write(*,*) res%i
end program p