Frank,
My mistake was misunderstanding the defintion of a statement-sequence.
Thanks.
John O.
ISO7185 says:
: The label shall be permitted to occur in a goto-statement G (see : 6.8.2.4) if and only if any of the following three conditions is : satisfied. : : a) S contains G. : : b) S is a statement of a statement-sequence containing G. : : c) S is a statement of the statement-sequence of the compound-statement of the : statementpart of a block containing G.
Though this is hardly readable, the "statementpart of a block" means that the target of a non-local goto must be in the outermost scope of the procedure. (To understand that, you have to follow the grammar rules.)
So, the old gpc was too permissive, the new one behaves acoording to ISO.
Incidentally FreePascal gives the following error for both programs:
Free Pascal Compiler version 2.2.2 [2008/10/26] for x86_64 Copyright (c) 1993-2008 by Florian Klaempfl Target OS: Linux for x86-64 Compiling gototest.p gototest.p(5,13) Error: Goto statements aren't allowed between different procedures
Well, Free Pascal doesn't allow non-local gotos at all (and doesn't claim to support ISO Pascal).
Frank