(j3.2006) IMPLICIT NONE in BLOCK

Robert Corbett rpcorbett
Fri Feb 23 16:17:59 EST 2018


Please read the note added to page 124 in paper 17-253.  It covers this specific case.

Robert Corbett

> On Feb 23, 2018, at 12:54 PM, Van Snyder <van.snyder at jpl.nasa.gov> wrote:
> 
>> On Fri, 2018-02-23 at 20:26 +0000, Steidel, Jon L wrote:
>> Van wrote:  
>>   I haven't been able to ask any processors what they think about
>> 
>>    program foo
>>       block
>>            import, none
>>            x = 42
>>            print *, x
>>       end block  
>>    end program foo
>> 
>> 
>> one implementation I have access to treats this as a valid code; it
>> compiles without error and prints 42.00000.  If an IMPLICIT NONE is
>> inserted after the PROGRAM statement, the first use of X triggers an
>> error from  the compiler for an undeclared variable.  If an inner
>> BLOCK is nested inside the block construct, X is accessible there, but
>> is not accessible outside the outer block construct. 
> 
> My understanding of inclusive scope, about which Malcolm might correct
> me, is that X is a local entity of the program, not a construct entity,
> and is therefore not accessible within the BLOCK construct because of
> the IMPORT, NONE statement.  Seems weirdly unintuitive because X doesn't
> appear anywhere else.  If this interpretation is correct, some ink in
> textbooks and a note in the standard would be helpful.
> 
> We shouldn't have done inclusive scope.  We did it for labels.  We
> should have used host association for BLOCK constructs, and made labels
> accessible by host association, but only in constructs, not internal
> procedures.  Labels in BLOCK constructs ought not to be accessible
> outwith the constructs.  We should undo it while the damage of undoing
> it is minimal.  Variables that appear only in blocks ought to be
> construct entities of those blocks, not local entities of the inclusive
> scope.  Ones with the same identifier that appear in several blocks
> ought to be different construct entities.  Programs that depend upon
> such variables being local entities, and ones that refer from outwith
> the block to labels of format statements that appear in blocks are the
> only ones that would need attention if we changed to host association.
> 
> Since BLOCK doesn't use host association to access the local scope,
> perhaps IMPORT,NONE shouldn't have been done for BLOCK, or at least
> spelt differently.
> 
> 
> _______________________________________________
> J3 mailing list
> J3 at mailman.j3-fortran.org
> http://mailman.j3-fortran.org/mailman/listinfo/j3




More information about the J3 mailing list