Hello!

This short program compiles without a warning, but crashes at execution. The compiler is FPC 2.2 on the win32 platform.

program Crashes(input,output);

function B(l:integer):boolean;
begin
        B:=true;
end;

procedure Q(j:integer;function A(l:integer):boolean);

        function E(l:integer):boolean;
        begin
                E := false
        end;

  begin
        if A(j) then
            Q(200,E);
  end;

begin
        Q(100,B);
end.

This is the compiler command:
$ gpc --classic-pascal -g -Wall crashes.p

Here are the stack frames from gdb:

Loaded symbols for /cygdrive/c/WINDOWS/system32/ntdll.dll
Loaded symbols for /cygdrive/c/WINDOWS/system32/kernel32.dll
Loaded symbols for /usr/bin/cygwin1.dll
Loaded symbols for /cygdrive/c/WINDOWS/system32/advapi32.dll
Loaded symbols for /cygdrive/c/WINDOWS/system32/rpcrt4.dll
Loaded symbols for /cygdrive/c/WINDOWS/system32/secur32.dll

Program received signal SIGSEGV, Segmentation fault.
0x0022cc20 in ?? ()
(gdb) bt
#0  0x0022cc20 in ?? ()
#1  0x004010a9 in _p__M0_S1_Q (J=200, A=@0x22cc20) at crashes.p:16
#2  0x004010c6 in _p__M0_S1_Q (J=100, A=@0x401050) at crashes.p:16
#3  0x004010e2 in _p__M0_main_program () at crashes.p:20
#4  0x0040115b in main (argc=1, argv=0x6927b0, envp=0x690090)
    at <implicit code>:22

I am pretty sure that this is a compiler bug, because this program used to run on MacPascal with no error.

-- Regis Cridlig
cridlig@gmail.com