J3/09-277 To: J3 From: Van Snyder Subject: Schizophrenia about given, declared, specified, for EXTERNAL Date: 2009 August 02 References: 09-007r2 1. Introduction With respect to the EXTERNAL attribute, the standard sometimes uses the term "given," sometimes uses "declared," and sometimes uses "specified." The title of Subclause 5.4 is "Attribute specification statements" so it seems that attributes are "specified" while names are "declared" to have certain attributes. 2. Edits [23:37 1.4.5p4]--------------------------------------------------------- Editor: Replace "given" by "specified to have". [96:40+ 5.3.9p3+]------------------------------------------------------- Editor: Insert a paragraph (not a Note because this will be used later): "The EXTERNAL attribute may be specified in a type declaration statement, by an interface body (12.4.3.2), by an EXTERNAL statement (12.4.3.5), or by a procedure declaration statement (12.4.3.6)." and a note "NOTE 5.12a If a procedure is referenced but its name is not established (12.5.5.4) to be either generic or specific, its name does not have the EXTERNAL attribute." [298:22 12.5.2.9p7]----------------------------------------------------- Editor: Replace "declared" by "specified". [446:6-7 16.5.1.4p2]---------------------------------------------------- This overlooks the possibility of a name having the EXTERNAL attribute declared in its type declarartion. Editor: Replace "declared ... " by "specified to have the EXTERNAL attribute (5.3.9)" (5.3.9 is a better place to specify it completely, instead of specifying part of it here). 3. Does this need an interp, or can we just do it? 7.2.2.2 C730 says that a that is a "shall be the name of an external procedure." The standard doesn't specify that the EXTERNAL attribute is conferred implicitly by reference to an external procedure that isn't explicitly specified to have it. So did we intend to allow the following? procedure, pointer :: p procedure(real), pointer :: q p => x call x q => y print *, y(5) or worse procedure, pointer :: p p => x end subroutine x end (which can't be checked so ought not to be in a constraint), or did we intend to require that X and Y are explicitly specified to have the EXTERNAL attribute? If the latter: [159:3-4 7.2.2.2 C730]-------------------------------------------------- Editor: Replace "be the name of an external," by "shall be a name that is specified to have the EXTERNAL attribute, the name of an". Insert "the name of" before "a specific".