FPC uses st(0) and st(1) for addtion of floating point numbers.
But some LCL method seemes to destroy FPU registers.
For example, the following program raises exception class 'External SIGFPE'.
Tested on Windows XP(32bit), using lazarus 0.9.28.2.
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, SynEdit;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
SynEdit1: TSynEdit;
procedure Button1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{ TForm1 }
function f(x:double):double;
begin
result:=x;
end;
function g(x:double):double;
begin
result:=x;
Form1.SynEdit1.seltext:='ABC'; // :'(This might destroy FPU registers
end;
procedure TForm1.Button1Click(Sender: TObject);
var
x:double;
begin
x:=f(1)+g(2);
end;
initialization
{$I unit1.lrs}
end.