[net.unix-wizards] CALL NASTY

FIRTH@TL-20B.ARPA (01/07/85)

This note addresses the issue of fortran

	CALL NASTY(0.0)

where the body of NASTY promptly assigns 1.0 to 0.0!

I don't know which Fortran the programmer thought he was
writing, but certainly in Fortran 77 the compiler was right
and the user was wrong:

	"Actual arguments may be constants, function
	 references, expressions involving operators,
	 and expressions enclosed in parentheses if
	 and only if the associated dummy argument is 
	 a variable that is not defined during execution
	 of the referenced procedure"

	[ANSI-X3.9-1978, Para 15.9.2]

In other words, a program that passes a constant as actual
to a subroutine that assigs to the corresponding formal is
not legal Fortran, and the compiler is entitled (if it feels
sufficiently unfriendly) to mangle the non-program appropriately.

In passing: most programming languages contain restrictions
that are specifically intended to make optimisations safe, by
declaring illegal the "pathological" cases in which they are
unsafe.  Another example is the "no aliasing" rules of Fortran
[op cit, 15.9.3.6] and Ada [Mil-Std-1815 A, Ch 6.2 para 13]

Robert Firth
-------