>From Reinhold Bader at http://j3-fortran.org/pipermail/j3/2010-July/003653.html
The following program is rejected with: call move_alloc(extd(i1), i1) 1 Error: 'from' argument of 'move_alloc' intrinsic at (1) must be a variable The standard does not say anything about "variable": "FROM may be of any type and rank. It shall be allocatable. It is an INTENT (INOUT) argument." The check is done at gfc_check_move_alloc. It might be sufficient to replace: if (variable_check (from, 0) == FAILURE) return FAILURE; by if (from->expr_type != EXPR_VARIABLE && ... != EXPR_FUNCTION) { gfc_error ...; return FAILURE } The rest (e.g. gfc_variable_attr) can deal with it. program mvall_01 implicit none integer, parameter :: n1 = 100, n2 = 2*n1 integer, allocatable :: i1(:) allocate(i1(n1)) i1 = 1 call move_alloc(extd(i1), i1) print *, i1(1), size(i1) if (i1(1) /= 2 .or. size(i1) /= 200) call abort() contains function extd(in) result(out) integer, allocatable :: out(:) integer, intent(in) :: in(:) allocate(out(2*size(in))) out = 2 end function end program -- Summary: MOVE_ALLOC rejects FROM= which is a function result Product: gcc Version: 4.6.0 Status: UNCONFIRMED Keywords: rejects-valid Severity: normal Priority: P3 Component: fortran AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: burnus at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44879