(j3.2006) GOTO label - with label in BLOCK and in inclusive scope
Rasmussen, Craig E
rasmussn
Thu Aug 18 13:07:59 EDT 2011
Bill's answer is the way I would hope the code would work also.
-craig
On Aug 18, 2011, at 10:23 AM, Bill Long wrote:
>
>
> On 8/18/11 7:35 AM, Tobias Burnus wrote:
>> Dear all,
>>
>> I was wondering whether the following program is valid - and, if so, to
>> which label jumps the goto?
>>
>> block
>> goto 1
>> stop "one"
>> 1 continue
>> stop "two"
>> end block
>> 1 continue
>> stop "three"
>> end
>>
>
> The code compiles for me and executes as
>
>> ./a.out
> STOP two
>
> which indicates that the "local" label 1 wins as the target of the goto.
> But it sure LOOKS confusing in a small program like this. All sorts
> of obfuscated Fortran opportunities come to mind... On the other hand,
> the point of BLOCK constructs is to write code with localized variables
> that is non-disruptive to the surrounding environment. In a larger
> code, the ability to have non-colliding statement labels would be valuable.
>
> Cheers,
> Bill
>
>
>>
>> The programs seems to be valid as the following is fulfilled:
>>
>> "The same statement label shall not be given to more than one statement
>> in its scope." (F2008, "3.2.5 Statement labels")
>>
>> And BLOCK is a scoping unit of its own: "1.3.124 scoping unit. BLOCK
>> construct, derived-type definition, interface body, program unit, or
>> subprogram, excluding all nested scoping units in it."
>>
>> And "8.2 Branching" tells me:
>> "A branch causes a transfer of control from one statement to a labeled
>> branch target statement in the same inclusive scope."
>>
>> Plus for GOTO (R851):
>> "C846 (R851) The label shall be the statement label of a branch target
>> statement that appears in the same inclusive scope as the goto-stmt."
>>
>> with
>>
>> "1.3.87 inclusive scope. nonblock scoping unit plus every block
>> scoping unit whose host is that scoping unit or that is nested within
>> such a block scoping unit
>> NOTE 1.5
>> That is, inclusive scope is the scope as if BLOCK constructs were not
>> scoping units."
>>
>>
>> Thus, also the GOTO seems to be valid. However, to which label does the
>> GOTO jump to?
>>
>> Tobias
>> _______________________________________________
>> J3 mailing list
>> J3 at j3-fortran.org
>> http://j3-fortran.org/mailman/listinfo/j3
>
> --
> Bill Long longb at cray.com
> Fortran Technical Support & voice: 651-605-9024
> Bioinformatics Software Development fax: 651-605-9142
> Cray Inc./Cray Plaza, Suite 210/380 Jackson St./St. Paul, MN 55101
>
>
> _______________________________________________
> J3 mailing list
> J3 at j3-fortran.org
> http://j3-fortran.org/mailman/listinfo/j3
More information about the J3
mailing list