RFA: Revamp fortran array types
Toon Moene
toon@moene.org
Wed Aug 19 18:00:00 GMT 2009
Tobias Burnus wrote:
> On 08/19/2009 03:01 PM, Michael Matz wrote:
>> On Wed, 19 Aug 2009, Toon Moene wrote:
>>> Two names must not refer to the same or overlapping storage unless you,
>>> the programmer, indicate that they do (by either using EQUIVALENCE or
>>> designating the storage with the TARGET attribute).
> I agree about TARGET, but I do not fully agree about EQUIVALENCE.
> Equivalenced variables share the same memory location, but only under
> certain restrictions on may make use of it. (Though the expectations of
> the users is probably more than what the standard guarantees.)
Ah, sorry. The alias rules I tried to condense into a single sentence
are about what you, the programmer can/not do *in case of writes*.
The following code is perfectly OK:
DIMENSION A(10)
A = 10.0
CALL SUB(A,A)
END
SUBROUTINE SUB(A,B)
REAL, INTENT(IN) :: A(:), B(:)
...
END
Likewise, the following is OK, although its *meaning* is not specified
by the Standard (i.e., the value of X is undefined):
EQUIVALENCE(I,X)
X = 10.0
I = 10
PRINT*,X
END
There's no doubt, however, that setting I destroys the previous value of
X (and that's the only interesting property of this code from the point
of alias analysis, which, e.g., can't change the order of the assignment
to X and I).
--
Toon Moene - e-mail: toon@moene.org - phone: +31 346 214290
Saturnushof 14, 3738 XG Maartensdijk, The Netherlands
At home: http://moene.org/~toon/
Progress of GNU Fortran: http://gcc.gnu.org/gcc-4.5/changes.html
More information about the Gcc-patches
mailing list