(j3.2006) Question on MOVE_ALLOC

Bader, Reinhold Reinhold.Bader
Tue Aug 23 13:54:54 EDT 2016


Answering my own question - INTENT(INOUT) is also covered by item (10) ... 


> -----Urspr?ngliche Nachricht-----
> Von: j3-bounces at mailman.j3-fortran.org [mailto:j3-bounces at mailman.j3-
> fortran.org] Im Auftrag von Bader, Reinhold
> Gesendet: Dienstag, 23. August 2016 19:40
> An: fortran standards email list for J3 <j3 at mailman.j3-fortran.org>
> Betreff: Re: (j3.2006) Question on MOVE_ALLOC
> 
> 
> 
> > -----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 19:31
> > An: fortran standards email list for J3 <j3 at mailman.j3-fortran.org>
> > Betreff: Re: (j3.2006) Question on MOVE_ALLOC
> >
> >
> > 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).
> 
> Ah yes, I only looked at the procedure, not at MOVE_ALLOC itself. So it is the
> compilers that have bugs :-/ Still, this only answers half the question.  If I
> convert Y to a local variable, then there still is X that becomes deallocated.
> 
> >
> > 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
> >
> >
> > _______________________________________________
> > 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



More information about the J3 mailing list