(j3.2006) badly worded semantics for the IMPORT statement
Robert Corbett
Robert.Corbett
Mon Dec 3 23:31:01 EST 2007
Bill Long wrote:
> I think this is what was meant: If you have an entity that satisfies two
> conditions:
>
> 1) it is available in an interface by being imported, and
> 2) it is defined in the host scoping unit,
>
> then it is also required to be explicitly declared prior to the
> interface body. This makes sense in the case of a named constant,
> which is a common thing to be imported. It does seem to be defective in
> the case of a type name, which is the other common case, A type is
> defined, but never "declared", so I'd argue that the "declared" is the
> faulty part of the sentence. A less common case would be to import the
> name of a variable which is not initialized. It could be used as the
> argument to a KIND() reference as part of a declaration in the
> interface, for example. The current wording does not require that this
> variable be declared before the interface (the sentence does not apply),
> whereas your suggested change would impose this requirement. It think
> such a change would require an interp.
>
> I'd note that essentially the same statement appears twice, at [260:4-5]
> and [260:11-12], but with different sentence structure. My wording
> above follows more closely the second sentence in the standard. Maybe
> it would be clearer, and more consistent, to use the same sentence form
> in both places.
>
> Cheers,
> Bill
>
>
> Robert Corbett wrote:
>
>>Someone here at Sun recently asked why it made a difference whether
>>a variable named in an IMPORT statement was assigned a value. He
>>pointed out that Section 12.3.2.1 of the Fortran 2003 standard states
>>
>> An entity that is imported in this manner and is defined
>> ^^^^^^^
>> in the host scoping unit shall be explicitly declared
>> prior to the interface body.
>>
>>Perhaps it would be better to say "declared" instead of "defined."
>>
>>Bob Corbett
>>_______________________________________________
>>J3 mailing list
>>J3 at j3-fortran.org
>>http://j3-fortran.org/mailman/listinfo/j3
Consider the module
MODULE MOD
INTERFACE
SUBROUTINE SUBR(A)
IMPORT
DIMENSION A(N)
END SUBROUTINE
END INTERFACE
INTEGER, PARAMETER :: I = BIT_SIZE(N)
END MODULE
Applying the definition of "definition" given in Section 2.5.5
literally, this module is standard conforming unless the module
variable N is assigned a value. That is clearly not what was
intended, but it is what the standard says. I would prefer for
the standard to say what it means and means what it says.
Bob Corbett
More information about the J3
mailing list