(j3.2006) IMPLICIT NONE in BLOCK

Robert Corbett rpcorbett
Fri Feb 23 06:56:23 EST 2018


We discussed programs like the one you show in your e-mail at the October 2017 meeting.  We decided that they were not intended to be standard conforming.

A similar issue comes up for IMPORT, ALL in interface procedures.  In our scoping model, the name of an interface procedure in the host scope identifies a different procedure entity from the entity declared with the same name in the interface procedure.  The procedure entities are distinct even though they are associated.  I think a strict reading of the DIS is that that is a constraint violation.  I do not know if our intent was to allow INTENT, ALL in interface procedures, but I think the DIS does not.  I do not care much one way or the other, because IMPORT, ALL does add not much that is useful beyond just IMPORT in the case of interface procedures.

Robert Corbett

> On Feb 23, 2018, at 1:45 AM, Van Snyder <van.snyder at jpl.nasa.gov> wrote:
> 
> On Fri, 2018-02-23 at 17:33 +0900, Malcolm Cohen wrote:
> 
>>> Either way, the variable X clearly is implicitly typed as real. The
>>> processors disagree whether X has inclusive scope,
>> 
>> The standard explicitly states that local variables have inclusive
>> scope.
>> 
>> Lacking an explicit declaration, it is not a construct entity.
> 
> The message to which I replied said
> 
>> NOTHING is implicitly type inside a BLOCK construct.
> 
> The little program appears to have created an implicitly-typed variable,
> which contradicts that assertion.  Maybe instead of the words that
> appeared I should have read "Anything that is implicitly typed and
> springs into existence in a BLOCK construct without a declaration is not
> a construct entity, even if it appears nowhere else.  It's still
> implicitly typed; it's just not a construct entity."
> 
> Probably I don't understand the objection to allowing IMPLICIT NONE in a
> BLOCK construct.  I would expect it to mean that an implicitly-typed
> variable is not allowed to spring into existence in a BLOCK construct.
> I understand that if it were to spring into existence in a BLOCK
> construct without being declared, it would become a local entity instead
> of a construct entity.  That's what I would hope to prevent.  Is the
> problem that IMPLICIT NONE in a BLOCK construct couldn't really have an
> effect, because an entity that is not declared in the construct is a
> local entity?  That is, it doesn't spring into existence where one hoped
> to prevent it from springing into existence without a declaration, it
> springs into existence in the inclusive scope, where the IMPLICIT NONE
> in the BLOCK construct that one hoped to use to prevent its existence
> doesn't apply.
> 
> If IMPORT,NONE (or IMPORT,ONLY) appears in a BLOCK construct, and a
> variable springs into existence therein without a declaration, it
> becomes a local entity, not a construct entity, and is therefore not
> accessible in the BLOCK construct (because of IMPORT,whatever), even
> though it doesn't appear anywhere else.  If so, that has the effect of
> IMPLICIT NONE, in a weird perverse contorted way that needs a bit of ink
> in textbooks and deserves a note in the standard.  Being a local entity
> instead of a construct entity, it would be accessible in other BLOCK
> constructs, if they don't have IMPORT,whatever.  But then the program is
> invalid because it's not accessible where it sprang into existence.
> Weird.
> 
> 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
> 
> because none of the ones I have allow IMPORT in BLOCK yet.  Is this a
> valid program?  Or is it invalid because X is a local entity, not a
> construct entity, and can't be accessed at the only place where it
> appears because of IMPORT, NONE?  If so, this is precisely what I would
> want from IMPLICIT NONE in a BLOCK construct.  But it's a weird way to
> get it.  Some ink, and the "slippery road" sign from the TeXBook, would
> be helpful.
> 
> 
> _______________________________________________
> J3 mailing list
> J3 at mailman.j3-fortran.org
> http://mailman.j3-fortran.org/mailman/listinfo/j3




More information about the J3 mailing list