[J3] [EXTERNAL] Re: Allocatation upon assignment of a dummy argument in an interoperable procedure
Van Snyder
Van.Snyder at jpl.nasa.gov
Mon Oct 7 19:30:06 EDT 2019
On Mon, 2019-10-07 at 21:02 +0000, Bill Long via J3 wrote:
> The statement
>
> foo = 42
>
> and the statements
>
> allocate( foo ); foo = 42
>
> should do the same thing, since the INTENT(OUT) will (should) ensure
> that the argument is deallocated on entry. So, while it is possible
> that the descriptor is messed up somehow, that would not be a
> sufficient explanation of why one works and the other does not. If
> the descriptor is bad, both versions should fail in the Fortran
> allocate routine.
>
> It would be useful to see the C code that sets up the descriptor.
It would also be interesting to know which Fortran processor "fails,"
and whether others "fail" as well. I.e., is there a problem with a
(specific) Fortran processor, or is the descriptor damaged?
> Also, as an aside, it is usually considered poor programming style to
> use the same name for a dummy argument and the binding label for the
> routine.
>
> Cheers,
> Bill
>
>
>
> > On Oct 7, 2019, at 3:53 PM, Robert Corbett via J3 <j3 at mailman.j3-fortran.org> wrote:
> >
> > How does it fail?
> >
> > Was the C descriptor initialized by CFI_establish and then passed changed to the interoperable subroutine, or was the C descriptor changed after it was established?
> >
> > Bob Corbett
> >
> >> On Oct 7, 2019, at 11:09 AM, Vipul Parekh via J3 <j3 at mailman.j3-fortran.org> wrote:
> >>
> >> Is the following code conforming?
> >>
> >> subroutine sub(foo) bind(C, name="foo")
> >> !.. Argument list
> >> integer(c_int), allocatable, intent(out) :: foo
> >> foo = 42 !<-- fails
> >> !allocate( foo ); foo = 42 !<-- works
> >> end subroutine
> >>
> >> When foo is invoked from a companion C processor with a successfully
> >> established C descriptor with the right attributes, the use of
> >> ALLOCATE statement followed by the assignment works as I expect.
> >> However allocation upon assignment, as shown above, fails.
> >>
> >> Thank you,
> >> Vipul Parekh
> >
>
> Bill Long longb at cray.com
> Principal Engineer, Fortran Technical Support & voice: 651-605-9024
> Bioinformatics Software Development fax: 651-605-9143
> Cray, a Hewlett Packard Enterprise company/ 2131 Lindau Lane/ Suite 1000/ Bloomington, MN 55425
>
>
>
More information about the J3
mailing list