Jeffrey A Law wrote:

So, if we have an object with the range based on its type of
[0, 0x7fffffff] and we add 1 to that object, the resulting range
should be [1, 0x7fffffff].   ie, 0x80000000 is not a valid value
for the type.  Right?

The actual rule in Ada works like this:

    type X is range 0 .. 16#7fff_ffff#;

    Y : X;

    Y := (Y + 1) - 1;

If Y is X'Last, then the addition of 1 must either raise an
overflow exception or "work". Works means give its proper
mathematical value.

So this assignment can either raise CE, or leave Y unchanged.
Either is OK.

If checks are off, then it is probably better to just let
the addition wrap (in fact it seems pretty clear that Ada
would be better off enabling -fwrapv)

Reply via email to