Compiler intrinsic default() function: failing inside function and procedure parameters with: Error: Compilation raised exception internally
Summary
When compiling code that has default values to function parameters set via the compiler intrinsic default() function, the compiler raises an exception internally.
System Information
- Operating system: Linux, AlmaLinux 9.2, x86_64
- Processor architecture: x86-64
- Compiler version: 3.3.1-13810-g1bcf4a5a
- Device: Computer
Steps to reproduce
Given the following source code file named defaulting.pas:
{$mode objfpc}
{$h+}
{$codepage utf8}
program defaulting;
var
a: integer = 0;
b: integer = default(integer);
function c (d: integer = 0): integer;
begin
result := d;
end;
procedure g (h: integer = 0);
var
i: integer = default(integer);
begin
writeln(h, i);
end;
procedure j (k: integer = default(integer));
var
l: integer = default(integer);
begin
writeln(k, l);
end;
function e (f: integer = default(integer)): integer;
begin
result := f;
end;
function m (n: string = default(string)): string;
var
o: string = '1';
p: string = default(string);
q: string = '';
r: string = '2';
begin
result := n + o + p + q + r;
end;
begin
writeln(a, b, c);
g;
j;
writeln(m);
end.
When compiled, the following occurs:
$ fpc defaulting.pas
Free Pascal Compiler version 3.3.1 [2023/08/24] for x86_64
Copyright (c) 1993-2023 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling defaulting.pas
defaulting.pas(23,27) Error: Compilation raised exception internally
Fatal: Compilation aborted
An unhandled exception occurred at $00000000005541DF:
EAccessViolation: Access violation
$00000000005541DF
The code in question the compiler is failing at is:
16 procedure g (h: integer = 0);
17 var
18 i: integer = default(integer);
19 begin |
20 writeln(h, i); |
21 end; \|/
22 V
--->23 procedure j (k: integer = default(integer));
24 var
25 l: integer = default(integer);
26 begin
27 writeln(k, l);
28 end;
29
30 function e (f: integer = default(integer)): integer;
31 begin
32 result := f;
Example Project
See steps to reproduce.
What is the current bug behavior?
See steps to reproduce.
What is the expected (correct) behavior?
When compiled with the released FPC, the code compiles and runs as expected.
$ fpc defaulting
Free Pascal Compiler version 3.2.2 [2022/08/17] for x86_64
Copyright (c) 1993-2021 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling defaulting.pas
Linking defaulting
51 lines compiled, 0.1 sec
$ ./defaulting
000
00
00
12
Relevant logs and/or screenshots
See steps to reproduce.
Possible fixes
None known.
Edited by bogen85