Compiler differences

John Gordon Ollason john at houseofdeer.co.uk
Fri Dec 11 15:06:28 CET 2009


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.





More information about the Gpc mailing list