[PATCH 09/10] fortran: Support clobbering of variable subreferences [PR88364]

Thomas Koenig tkoenig@netcologne.de
Tue Sep 20 06:54:39 GMT 2022


On 19.09.22 22:50, Mikael Morin wrote:
> Le 19/09/2022 à 21:46, Harald Anlauf a écrit :
>> Am 18.09.22 um 22:55 schrieb Mikael Morin:
>>> Le 18/09/2022 à 20:32, Harald Anlauf a écrit :
>>>>
>>>> Assumed shape will be on the easy side,
>>>> while assumed size likely needs to be excluded for clobbering.
>>>>
>>> Isn’t it the converse that is true?
>>> Assumed shape can be non-contiguous so have to be excluded, but assumed
>>> size are contiguous, so valid candidates for clobbering. No?
>>
>> I really was referring here to *dummies*, as in the following example:
>>
>> program p
>>    integer :: a(4)
>>    a = 1
>>    call sub (a(1), 2)
>>    print *, a
>> contains
>>    subroutine sub (b, k)
>>      integer, intent(in)  :: k
>>      integer, intent(out) :: b(*)
>> !   integer, intent(out) :: b(k)
>>      if (k > 2) b(k) = k
>>    end subroutine sub
>> end program p
>>
>> Assumed size (*) is just a contiguous hunk of memory of possibly
>> unknown size, which can be zero.  So you couldn't set a clobber
>> for the a(1) actual argument.
>>
> Couldn't you clobber A entirely?  If no element of B is initialized in 
> SUB, well, A has undefined values on return from SUB.  That's how 
> INTENT(OUT) works.

Yes, I think so - you are passing the starting element of an array
to an assumed-size array via storage association rules.

It has to be an explicit interface, of course, otherwise it is
unclear if an array or an array element is passed.

Best regards

	Thomas


More information about the Fortran mailing list