(j3.2006) Did we intend to prohibit this?

Clune, Thomas L. GSFC-6101 thomas.l.clune
Fri Mar 10 16:47:01 EST 2017


> On Mar 10, 2017, at 2:09 PM, Van Snyder <Van.Snyder at jpl.nasa.gov> wrote:
> 
> On Fri, 2017-03-10 at 16:13 +0900, Cohen Malcolm wrote:
>> 
>>> So how does it get deallocated?
>> 
>> "it" is not a variable, so does not get deallocated (in the Fortran
>> language sense of "deallocated").
>> 
>> You know what the function result variable is, and it is not the value
>> that is returned by the function, nor has it ever been.  The result
>> variable is what gets deallocated.
> 
> So what does 9.7.3.2p4 mean?
> 
>        "If an executable construct references a function whose result
>        is allocatable or has an allocatable subobject, and the function
>        reference is executed, an allocatable result and any allocated
>        allocatable subobject of the result is deallocated after
>        execution of the innermost executable construct containing the
>        reference."
> 
> If the result variable is in fact what gets deallocated, even though the
> word "variable" does not appear in 9.7.3.2p4, then the result variable
> of F(X) in
> 
>  call move_alloc ( f(x), v )
> 
> IS a variable, right?  So what's the problem with executing it?

The result variable of F(X) is not in the expression you provide.   Outside of F all you can ?see" is the result _value_.

I think that what you probably want in this situation is:

allocate(v, source=f(x))

Cheers,

- Tom



> 
> 
> _______________________________________________
> J3 mailing list
> J3 at mailman.j3-fortran.org
> http://mailman.j3-fortran.org/mailman/listinfo/j3




More information about the J3 mailing list