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