mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2026-01-05 23:10:57 +01:00
finally blocks
* fixed the handling of function results of inlined functions with
exit statements
+ test for the above two issues and for bug fixed in r8091
* copy may_be_in_reg field inside ttempcreatenode.dogetcopy (allows
some more temps which were needlessly forced into memory to be in
registers)
git-svn-id: trunk@8108 -
64 lines
657 B
ObjectPascal
64 lines
657 B
ObjectPascal
{$ifdef fpc}
|
|
{$mode objfpc}
|
|
{$inline on}
|
|
{$endif}
|
|
|
|
uses
|
|
sysutils;
|
|
|
|
var a: longint;
|
|
|
|
function f(l: longint): longint; inline;
|
|
var
|
|
l1,l2,l3: longint;
|
|
begin
|
|
result:=123456;
|
|
if (l > 10) then
|
|
exit;
|
|
result:=30;
|
|
for l1 := 1 to 10 do
|
|
for l2 := 1 to 100 do
|
|
;
|
|
result := 40;
|
|
for l3 := 1 to 10 do;
|
|
end;
|
|
|
|
|
|
procedure test;
|
|
var
|
|
l: longint;
|
|
begin
|
|
l:= f(a);
|
|
if (l<>123456) then
|
|
halt(1);
|
|
end;
|
|
|
|
|
|
procedure test2;
|
|
var
|
|
l: longint;
|
|
begin
|
|
try
|
|
finally
|
|
l:= f(a);
|
|
if (l<>123456) then
|
|
halt(1);
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure inl2; inline;
|
|
begin
|
|
try
|
|
except on exception do ;
|
|
end
|
|
end;
|
|
|
|
|
|
begin
|
|
a:=20;
|
|
test;
|
|
test2;
|
|
inl2
|
|
end.
|