http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48351
Rich Townsend <townsend at astro dot wisc.edu> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |townsend at astro dot | |wisc.edu --- Comment #3 from Rich Townsend <townsend at astro dot wisc.edu> 2011-07-07 02:34:41 UTC --- (In reply to comment #0) > http://groups.google.com/group/comp.lang.fortran/browse_thread/thread/b7a36eba5ef7f68b > by Nasser M. Abbasi > > In the following program "%u" is allocatable. For > > this%u = u > > the LHS should be allocated, but this only happens if "this" is a TYPE and not > a CLASS - but that should be completely unrelated to (re)alloc on assignment. > > The program works with ifort 11.1. > > > module foo > implicit none > type :: foo_t > ! private > DOUBLE PRECISION , ALLOCATABLE :: u(:) > contains > PROCEDURE :: make ! or procedure, pass, same effect > end type foo_t > > contains > subroutine make(this,u) > implicit none > CLASS(foo_t) :: this > DOUBLE PRECISION, intent(in) :: u(:) ! must be CLASS > ! allocate(this%u(size(u))) ! Must allocate now, else crash > this%u = u > end subroutine make > end module foo > > program main2 > use foo > implicit none > TYPE(foo_t) :: o > DOUBLE PRECISION , ALLOCATABLE :: u(:) > > u=[1,2,3,4] > CALL o%make(u) > print *, o%u > end program main2 I've run into what appears to be this bug with 4.7 (Mac OS 10.6). My sample code is as follows: module realloc_lhs_m implicit none type mytype real, allocatable :: a(:) contains procedure :: set_a end type mytype contains subroutine set_a (this, a) class(mytype), intent(out) :: this real, intent(in) :: a(:) this%a = a end subroutine set_a end module realloc_lhs_m program realloc_lhs use realloc_lhs_m implicit none real, allocatable :: a(:) type(mytype) :: m a = [1.,2.,3.,4.,5.] call m%set_a(a) print *, m%a end program realloc_lhs This can be easily worked around -- but of course should nevertheless be fixed. cheers, Rich