08-226
To: J3
From: Michael Ingrassia
Subject: Public Comment J32012
Date: 2008 July 08
----------------------------------------------------------------------
Commenter's Subject was "attributes"
The Fortran 2008 draft states that attributes are
properties of entities. That definition does not
precisely cover all uses of attributes. Attributes
are properties of names. The attributes of a name
usually reflect properties of the entity named by
the name, but not always.
Consider the following program:
REAL FUNCTION F()
F = 1.0
END
MODULE MOD
EXTERNAL F
REAL F
END
SUBROUTINE SUBR(F)
EXTERNAL F
END
PROGRAM MAIN
USE MOD, G => F
X = F(X)
CALL SUBR(F) ! not standard conforming
CALL SUBR(G)
END
In the main program, the name F is known to be the
name of an external function, but it does not have
an explicit interface and it is not declared to have
the EXTERNAL attribute. The name G is declared to
have the EXTERNAL attribute, and so it can be used
as an actual argument. Both F and G name the same
function, but only G is declared to have the
EXTERNAL attribute. Therefore, the EXTERNAL
attribute must be a property of the name, not the
function.
The attributes ASYNCHRONOUS and VOLATILE also are
attributes of names that do not specify properties
of the entities names.
----------------------------------------------------------------------