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

Reply via email to