Greetings, Having installed gpc 20060325, based on gcc-3.4.4 in replacement of gpc 20041218, based on gcc-3.3.3 I discovered that some programs which worked on the earlier version don't work on the later one. I narrowed the problem down to changes in the behaviour of goto.
program gototest; label 9999; procedure try; begin goto 9999; end; { try } begin try; 9999: end.
The program gototest.p is compiled by both compilers. The following
program gototest1; label 9999; procedure try; begin goto 9999; end; { try } begin repeat try; 9999: until 0=0; end.
is compiled by gpc 20041218 but the newer compiler gives the following error:
gpc --classic-pascal gototest.p gototest.p: In main program: gototest.p:10: error: invalid target for nonlocal `goto'
I have had a look at the ISO7185 specification, and though I am not an expert in these matters, it seems to me that the newer compiler is behaving incorrectly.
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 gototest.p(14) Fatal: There were 1 errors compiling module, stopping Fatal: Compilation aborted Error: /usr/bin/ppcx64 returned an error exitcode (normal if you did not specify a source file to be compiled)
Are any of the compilers behaving as specified in the ISO7815 standard?
Best wishes,
John O.