https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63205
Dominique d'Humieres <dominiq at lps dot ens.fr> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2014-09-12 Ever confirmed|0 |1 --- Comment #1 from Dominique d'Humieres <dominiq at lps dot ens.fr> --- I see two issues with the test assign_11.f90: (1) an ICE, reduced test program test implicit none type t integer :: ii end type t type(t) :: y(3) y = func2() contains function func2() result(res) class(t), allocatable :: res(:) end function func2 end program test [Book15] f90/bug% gfc49 pr63205_red.f90 pr63205_red.f90: In function 'test': pr63205_red.f90:8:0: internal compiler error: in gfc_trans_arrayfunc_assign, at fortran/trans-expr.c:7369 y = func2() ^ (2) a wrong code, reduced test module m implicit none type t integer :: ii = 55 end type t contains subroutine sub (from, from2) class(t) :: from, from2(:) type(t) :: to, to2(3) if (from%ii /= 43) call abort() if (size (from2) /= 3) call abort() if (any (from2(:)%ii /= [11,22,33])) call abort() to = from ! TYPE = CLASS to2 = from2 ! TYPE = CLASS print *, to%ii ! if (to%ii /= 43) call abort() if (any (to2(:)%ii /= [11,22,33])) call abort() end subroutine sub end module m program test use m implicit none type(t), target :: x type(t), target :: y(3) x%ii = 43 y(:)%ii = [11,22,33] call sub(x,y) x = func1() print *, x ! if (x%ii /= 123) call abort() y = func1() print *, y ! if (any (y(:)%ii /= 123)) call abort() contains function func1() class(t), allocatable :: func1 allocate(func1) func1%ii = 123 end function func1 end program test [Book15] f90/bug% gfc49 pr63205_red_1.f90 [Book15] f90/bug% a.out 167182484 586153984 586154000 586154000 586154000 Any objection that I open a new PR for the ICE? > However, only "type => class" is handled. Still missing is "type = class", > where CLASS is a (coarray) scalar or (coarray) array variable, function or > an array constructor. See also PR 57530 comment 3. AFAICT the assignment works for array variable, at least in the to2 context.