(j3.2006) Question on MOVE_ALLOC

Bill Long longb
Tue Aug 23 13:30:30 EDT 2016


On Aug 23, 2016, at 11:33 AM, Bader, Reinhold <Reinhold.Bader at lrz.de> wrote:

> Hello Bill, 
> 
> I agree that Y in effect appears in a variable definition context (and X in a variable undefinition context). Unfortunately the list in 16.6.7 does
> not include the FROM or TO arguments of MOVE_ALLOC. The nearest it comes is that item (9) says "allocate-object", but this is not referenced
> In the description of MOVE_ALLOC. 

You need item (10). Actual arguments corresponding to INTENT(OUT) dummy arguments are not allowed, but the second argument to MOVE_ALLOC is INTENT(OUT).  It doesn?t really matter what MOVE_ALLOC does internally, only that it has an explicit interface (as all intrinsics do). 

Cheers,
Bill



> 
> All compilers I tried (including yours) happily compile and run the code, by the way.
> 
> Cheers
> Reinhold
> 
> -----Urspr?ngliche Nachricht-----
> Von: j3-bounces at mailman.j3-fortran.org [mailto:j3-bounces at mailman.j3-fortran.org] Im Auftrag von Bill Long
> Gesendet: Dienstag, 23. August 2016 16:22
> An: fortran standards email list for J3 <j3 at mailman.j3-fortran.org>
> Betreff: Re: (j3.2006) Question on MOVE_ALLOC
> 
> Hi Reinhold,
> 
> You have a host-associated variable Y that appears in a variable definition context (corresponds to an INTENT(OUT) argument), which is not allowed in a PURE procedure.   C1295 in 16-007r1.  MOVE_ALLOC is PURE as long as the arguments are local variables. 
> 
> Cheers,
> Bill
> 
> 
> On Aug 23, 2016, at 8:43 AM, Bader, Reinhold <Reinhold.Bader at lrz.de> wrote:
> 
>> Dear J3,
>> 
>> consider the following program:
>> 
>> module m02
>>  implicit none
>>  real, allocatable :: x(:), y(:)
>> contains
>>  pure subroutine p(i)
>>    integer, intent(inout) :: i
>>    if (i == 1) call move_alloc(x, y)
>>    i = 2
>>  end subroutine
>> end module
>> program q
>>  use m02
>>  implicit none
>>  integer :: i
>>  i = 1
>>  allocate(x(2))
>>  call p(i)
>>  if (i==2) then
>>    write(*,*) 'Computation OK'
>>  end if
>> end program
>> 
>> Because MOVE_ALLOC is pure, it can be invoked inside the PURE 
>> subroutine. On the other hand it appears that we have a side effect here, not with respect to the data, but to the allocation status of module variables.
>> Was it a mistake to make MOVE_ALLOC pure, or is there something 
>> missing in the PURE constraint list of chapter
>> 12.7 (16-007r1)?
>> 
>> Cheers
>> Reinhold
>> 
>> _______________________________________________
>> J3 mailing list
>> J3 at mailman.j3-fortran.org
>> http://mailman.j3-fortran.org/mailman/listinfo/j3
> 
> Bill Long                                                                       longb at cray.com
> Fortran Technical Support  &                                  voice:  651-605-9024
> Bioinformatics Software Development                     fax:  651-605-9142
> Cray Inc./ Cray Plaza, Suite 210/ 380 Jackson St./ St. Paul, MN 55101
> 
> 
> _______________________________________________
> J3 mailing list
> J3 at mailman.j3-fortran.org
> http://mailman.j3-fortran.org/mailman/listinfo/j3
> _______________________________________________
> J3 mailing list
> J3 at mailman.j3-fortran.org
> http://mailman.j3-fortran.org/mailman/listinfo/j3

Bill Long                                                                       longb at cray.com
Fortran Technical Support  &                                  voice:  651-605-9024
Bioinformatics Software Development                     fax:  651-605-9142
Cray Inc./ Cray Plaza, Suite 210/ 380 Jackson St./ St. Paul, MN 55101





More information about the J3 mailing list