fpc/tests/webtbs/tw40537.pp
2024-02-17 21:33:52 +00:00

63 lines
1.1 KiB
ObjectPascal

type
{$ifdef USE_RECORD}
trec = record
y : longint;
end;
{$else}
{$ifdef USE_PTRINT}
trec = ptrint;
{$else USE_PTRINT}
trec = pointer;
{$endif USE_PTRINT}
{$endif}
prec = ^trec;
const
value_version_used : longint = 0;
var_version_used : longint = 0;
has_error : boolean = false;
function test(p : prec;l : longint; k: dword) : boolean; overload;
begin
test:=(p<>nil);
inc(value_version_used);
end;
function test(var p : trec;l : longint; k: dword) : boolean; overload;
begin
test:=(@p<>nil);
inc(var_version_used);
end;
var
pt : trec;
i : trec;
begin
pt:=i;
test(@pt,23,56);
if (var_version_used>0) then
begin
writeln('call with @pt uses var version, which is wrong');
has_error:=true;
end
else
writeln('call with @pt uses value version');
var_version_used:=0;
value_version_used:=0;
test(pt,678,567890);
if (var_version_used>0) then
writeln('direct call uses var version')
else
writeln('direct call uses value version');
if has_error then
begin
writeln('This test revealed a problem');
halt(1);
end;
end.