with Ada.Text_IO, Tasks;
use Ada.Text_IO, Tasks;

procedure Demo is
    --As a special note, GNAT will correctly handle this. They do the right thing, and violates 3.5.7 and B.2, in favor of IEEE 754.
    --Clauses in violation are as follows:
    --  3.5.7-17 - Per 17.a, there is explicit implementation guidelines from the ARG that IEEE floats should be in Interfaces, compliant with B.2, not in Standard.
    --  B.2-10 - Floating point types "fully supported by the hardware" are to belong in Interfaces, and 10.a further elaborates that this specifically includes IEEE floats.
    --I strongly disagree with the ARG and feel GNAT handles this correctly. Execution of this program by a fully conforming processor will crash and demonstrate exactly why the ARG is wrong.

    L : Logger; --This will start a task which periodically writes to the console. It's just useful for demonstrating things.
    S : Sensor; --This will eventually divide by zero, causing the problem.
begin
    null;
exception
    when others =>
        Put_Line("I just crashed");
end Demo;