定数パラメーターでメンバー変数の値が壊れる

Delphiのバージョンは12.1です。

はまったのでメモ

以下のようにメンバー変数を定数パラメーターに指定して、呼び出し先で自身へ代入すると値がおかしくなります。

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    FValue: String;
    procedure Foo(const Value: String);
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  FValue := 'init';
  Foo(FValue);
  SHowMessage('[' + FValue + ']');
  SHowMessage('[' + FValue + ']');
end;

procedure TForm1.Foo(const Value: String);
begin
  FValue := 'foo';
  FValue := Value;
end;