Skip to content

crash (stack-overflow) in compiler 3.3.1 - assigning pointers with recursive type definition - compare_defs_ext -> equal_defs -> compare_defs_ext ...

Tested with 3.3.1 f50e6dfe

Compiling the below code crashes fpc.

program Project1;
{$mode objfpc}{$H+}
type
  TRecursePtrA1 = ^TRecursePtrA2;
  TRecursePtrA2 = ^TRecursePtrA1;
var
 RecursePtrA1:  TRecursePtrA1;
 RecursePtrA2:  TRecursePtrA2;
begin
  RecursePtrA2 := RecursePtrA1;
end.

This should probably be an "incompatible types" error?

I discovered this due to a typo. The code was meant to be RecursePtrA2 := @RecursePtrA1;. And with the @ it compiles just fine.

Free Pascal Compiler version 3.3.1 [2022/03/23] for x86_64
Copyright (c) 1993-2022 by Florian Klaempfl and others
(1002) Target OS: Win64 for x64
(3104) Compiling C:\Users\martin\AppData\Local\Temp\project1.lpr
C:\Users\martin\AppData\Local\Temp\project1.lpr(10,19) Warning: (5037) Variable "RecursePtrA1" does not seem to be initialized
C:\Users\martin\AppData\Local\Temp\project1.lpr(10,16) Error: (1026) Compilation raised exception internally
Fatal: (1018) Compilation aborted
An unhandled exception occurred at $000000010009CEBC:
EStackOverflow: Stack overflow or stack misalignment
  $000000010009CEBC  compare_defs_ext,  line 268 of defcmp.pas
  $00000001000A0108  equal_defs,  line 2108 of defcmp.pas
  $000000010009F393  compare_defs_ext,  line 1588 of defcmp.pas
  $00000001000A0108  equal_defs,  line 2108 of defcmp.pas
  $000000010009F393  compare_defs_ext,  line 1588 of defcmp.pas
  $00000001000A0108  equal_defs,  line 2108 of defcmp.pas
  $000000010009F393  compare_defs_ext,  line 1588 of defcmp.pas
  $00000001000A0108  equal_defs,  line 2108 of defcmp.pas
  $000000010009F393  compare_defs_ext,  line 1588 of defcmp.pas
  $00000001000A0108  equal_defs,  line 2108 of defcmp.pas
  $000000010009F393  compare_defs_ext,  line 1588 of defcmp.pas
  $00000001000A0108  equal_defs,  line 2108 of defcmp.pas
  $000000010009F393  compare_defs_ext,  line 1588 of defcmp.pas
  $00000001000A0108  equal_defs,  line 2108 of defcmp.pas
  $000000010009F393  compare_defs_ext,  line 1588 of defcmp.pas
  $00000001000A0108  equal_defs,  line 2108 of defcmp.pas
  $000000010009F393  compare_defs_ext,  line 1588 of defcmp.pas
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information