Siamo sicuri che sia un bug di Lazarus/freepascal e non un bug nel codice dell'utente? Dico questo perché la funzione filesize restituisce un intero a 64 bit.
Ad esempio, a me questo codice funziona benissimo su Lazarus 0.9.30 stabile:
procedure TForm1.Button1Click(Sender: TObject);
var
i: int64;
begin
i:=filesize('C:\dummyfile');
edit1.Text := IntToStr(i);
end;
dove dummyfile è un file di più di 4,5 GB. Se proviamo a cambiare la variabile i in un semplice integer (intero a 32 bit) si ottiene un valore vicino ai 600 MB, come lamentato da Fabio
In effetti la funzione IntToStr ha tre varianti:
function IntToStr(Value: integer): string;
function IntToStr(Value: Int64): string;
function IntToStr(Value: QWord): string;
Il compilatore è abbastanza "furbo" da scegliere quella adeguata al tipo di dato passato come parametro ;)