(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