3. VIOLATIONS OF THE STANDARD
We know only thre ways in which our Fortran system violates the new standard:
3.1. Double Precision Alignment
-
The Fortran standards (both 1966 and 1977)
permit
common
or
equivalence
statements to force a double precision quantity onto an odd word boundary,
as in the following example:
-
real a(4)
double precision b,c
equivalence (a(1),b), (a(4),c)
Some machines (e.g., Honeywell 6000, IBM 360) require that double precision quantities be on double word boundaries;
other machines (e.g., IBM 370), run inefficiently if this alignment rule is not observed.
It is possible to tell which equivalenced and common variables suffer from a forced odd
alignment, but every double precision argument would have to be assumed on a bad boundary.
To load such a quantity on some machines,
it would be necessary to use separate operations to move the upper and lower halves
into the halves of an aligned temporary, then to load that double precision temporary; the reverse would be
needed to store a result.
We have chosen to require that all double precision real and complex quantities
fall on even word boundaries on machines with corresponding hardware requirements,
and to issue a diagnostic if the source code demands a violation of the rule.
3.2. Dummy Procedure Arguments
-
If any argument of a procedure is of type character,
all dummy procedure arguments of that procedure must be declared
in an
external
statement.
This requirement arises as a subtle corollary of the way we represent character string arguments
and of the one-pass nature of the compiler.
A warning is printed if a dummy procedure is not declared
external.
Code is correct if there are no
character
arguments.
3.3. T and TL Formats
-
The implementation of the
t
(absolute tab)
and
tl
(leftward tab)
format codes
is defective.
These codes allow rereading or rewriting part of the
record which has already been processed.
(Section 6.3.2 in the Appendix.)
The implementation uses seeks,
so if the unit is not one which allows seeks,
such as a terminal,
the program is in error.
(People who can make a case for using
tl
should let us know.)
A benefit of the implementation chosen is
that there is no upper limit on the length of
a record,
nor is it necessary to predeclare any record
lengths except where specifically required
by Fortran or the operating system.