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.