(j3.2006) TS 29113: INTENT(out) and TYPE(*)

Bader, Reinhold Reinhold.Bader
Wed Mar 7 09:07:14 EST 2012



> -----Urspr?ngliche Nachricht-----
> Von: j3-bounces at j3-fortran.org [mailto:j3-bounces at j3-fortran.org] Im
> Auftrag von Bill Long
> Gesendet: Mittwoch, 7. M?rz 2012 14:48
> An: fortran standards email list for J3
> Betreff: Re: (j3.2006) TS 29113: INTENT(out) and TYPE(*)
> 
> 
> 
> On 3/7/12 3:18 AM, Tobias Burnus wrote:
> > Dear all,
> >
> > after re-thinking the issue, I think using TYPE(*) with INTENT(OUT) is
> > possible. However, one needs to pass to Fortran procedures [those
> > without BIND(C)] not only the address of the data but the same meta
> > information as with CLASS(*). That information is needed to do
> > deallocation and default initialization.
> 
> Deallocation is not a problem since ALLOCATABLE is not allowed for assumed-
> type (C407a).  Default initialization is a problem, though.

However, you might have a noninteroperable actual argument which is of a type with
allocatable (or pointer) type components (corresponding to CFI_type_other, but this
is of course not visiblein the called routine in this case). 

> 
> >
> > That's possible, but then NOTE 5.1 is highly misleading as it states:
> > "An assumed-type object that is not assumed-shape and not assumed-
> rank is
> >   intended to be passed as the C address of the object."
> >
> > I think that should state that this only applies to BIND(C) procedures.
> > (Or INTENT(OUT) should be disallowed for TYPE(*).)
> >
> 
> Adding INTENT(OUT) to the list of disallowed attributes for assumed type in
> C407a would solve the problem, though a bit of overkill.  More narrowly, we
> could prohibit INTENT(OUT) with TYPE(*) if the actual type
> has (sub)components with default-initialization.   That would have to be
> a non-constraint requirement.
> 
> >
> > As the full type information has to be available, the restriction in
> > 6.3 does not seem to be required:
> >
> > "An assumed-type dummy argument shall not correspond to an actual
> argument
> >   that is of a derived type that has type parameters, type-bound
> procedures,
> >   or final procedures."
> >
> > (I wonder whether it would apply to allocatable components; I think even
> >   with that restriction, one needs to finalize them.)
> >
> >   * * *
> >
> > For BIND(C) with TYPE(*) the situation for INTENT(OUT) is simpler as many
> > types are not interoperable. (I think in particular allocatable components
> > are still not allowed, unless I missed some fine print.)
> >
> > However, I think the following part should not only apply to allocatable
> > dummies but also to nonallocatable dummies with default initialization.
> > (That default initialization is allowed, is implied by C516.)
> >
> > "When a C function is invoked from a Fortran procedure via an interface"
> >   with an INTENT(OUT) allocatable dummy argument, and the actual
> argument
> >   in the reference to the C function is an allocated allocatable variable,
> >   the variable is deallocated on invocation (before execution of the C
> >   function begins)."
> >
> > Namely, I expect some wording that the default initialization of the
> > intent(out) dummy is also done in the involking Fortran procedure.
> 
> What about the case of C calling a Fortran procedure with BIND(C)?  The
> Fortran callee would not have enough information to initialize the
> components.
> 
> Cheers,
> Bill
> 
> 
> >
> > Tobias
> >
> >
> > On Mon, Mar 05, 2012 at 10:28:25AM +0100, Tobias Burnus wrote:
> >>    type t
> >>     integer :: a = 5
> >>    end type t
> >>    type(t) :: var
> >>    var%a = 8
> >>    call one(x)
> >>    print *, var%a
> >> contains
> >>    subroutine one(x)
> >>      type(*) :: x
> >>      call two(x)
> >>    end subroutine two
> >>    subroutine two(y) ! optionally with Bind(C).
> >>      type(*), intent(out) :: y
> >>    end subroutine
> >> end
> > _______________________________________________
> > J3 mailing list
> > J3 at j3-fortran.org
> > http://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 j3-fortran.org
> http://j3-fortran.org/mailman/listinfo/j3




More information about the J3 mailing list