Changing a value in an inline routine
Summary
Compiler lets the value change if the routine and the caller of it are both inline.
System Information
Lazarus 2.3.0 (rev main-2_3-1764-ge7f787f78d) FPC 3.3.1 x86_64-win64-win32/win64
Example Project
program project1;
procedure Test1Inner(V: Integer); inline;
begin
V := 0;
end;
procedure Test1; inline;
var
V: Integer;
begin
V := 1;
WriteLn('Before: ', V); //1
Test1Inner(V);
WriteLn('After: ', V); //0
end;
procedure Test2Inner(V: Integer);
begin
V := 0;
end;
procedure Test2; inline;
var
V: Integer;
begin
V := 1;
WriteLn('Before: ', V); //1
Test2Inner(V);
WriteLn('After: ', V); //1
end;
procedure Test3Inner(V: Integer); inline;
begin
V := 0;
end;
procedure Test3;
var
V: Integer;
begin
V := 1;
WriteLn('Before: ', V); //1
Test3Inner(V);
WriteLn('After: ', V); //1
end;
begin
Test1;
Test2;
Test3;
ReadLn;
end.
What is the current bug behavior?
In Test1, the value will change.
What is the expected (correct) behavior?
Like Test2 and Test3, the value must not change.