(j3.2006) badly worded semantics for the IMPORT statement

Bill Long longb
Tue Dec 4 14:40:09 EST 2007



Robert Corbett wrote:
>
>> 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
>>>
>>>       
> 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
>
>   
I assume you think this module should not be standard conforming.  I can 
agree with that.  How about the same module except where the INTEGER 
statement is before the INTERFACE block?  If the intent of the standard 
is to relieve compilers from having to look ahead for declarations or 
definitions, then the modified module would seem OK.

If the only issue is look ahead, then it would seem like the sentence 
could be reworded something like:

"An entity that is imported in this manner shall be declared or defined 
prior to the interface body."

Note that this also drops the "explicitly" to allow for implicit 
declaration, as in your module.  Is this what you think the standard 
means (or should mean)?  I agree that the current wording is muddled, 
combining "defined" (applies to variables and types) with "declared" 
(does not apply to types).  However, I think the proposed alternative 
above really does say something different.  I think an interp would be 
required for such a change.

Cheers,
Bill



-- 
Bill Long                                   longb at cray.com
Fortran Technical Support    &              voice: 651-605-9024
Bioinformatics Software Development         fax:   651-605-9142
Cray Inc., 1340 Mendota Heights Rd., Mendota Heights, MN, 55120

            




More information about the J3 mailing list