mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-05 12:38:29 +02:00
39 lines
1.1 KiB
ObjectPascal
39 lines
1.1 KiB
ObjectPascal
{$mode objfpc}
|
|
program test_raise;
|
|
|
|
uses Math;
|
|
|
|
var
|
|
X, Y: double;
|
|
I: Integer;
|
|
SomeFloat, SomeOtherFloat: Double;
|
|
begin
|
|
X := -10.0;
|
|
|
|
SomeFloat := 1.0; { any value }
|
|
SomeOtherFloat := 1.0; { any value }
|
|
|
|
for I := 0 to 20 do
|
|
begin
|
|
{ This line does *any* valid float operation, just to show that
|
|
floating-point exception (that should be raised, catched and silenced
|
|
by try..except below) somehow arrived here. }
|
|
SomeFloat := I * SomeOtherFloat;
|
|
|
|
try
|
|
{ Any invalid fp operation. Tested on Sqrt(-10.0), Ln(-10.0).
|
|
I use variable X to trick FPC into calculating this at run-time,
|
|
otherwise "Error: Illegal constant passed to internal math function". }
|
|
Y := Sqrt(X);
|
|
ClearExceptions(false);
|
|
except
|
|
Writeln('silenced exception');
|
|
{ Here I silence eventual exception raised by ClearExceptions.
|
|
(Yes, I could just do ClearExceptions(false) do achieve the same,
|
|
but imagine that this is embedded in some complicated code
|
|
where I really want to raise exception to jump outside
|
|
in case of problems.) }
|
|
end;
|
|
end;
|
|
end.
|