https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117861
Eric Botcazou <ebotcazou at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Summary|pragma Suppress |internal error on
|(Overflow_check) is ignored |range/overflow check
|and overflow fails at |suppression for static
|compilation rather than |expression
|throwing an exception |
Status|UNCONFIRMED |NEW
CC| |ebotcazou at gcc dot gnu.org
Ever confirmed|0 |1
Last reconfirmed| |2024-12-03
--- Comment #2 from Eric Botcazou <ebotcazou at gcc dot gnu.org> ---
> While a table is unlikely to have Positive'Last as an index, it could be
> indexed with Boolean, so the last iteration of the loop WILL necessarily
> causes overflow. It should normally trigger a Constraint_Error, that I can
> catch, but I want to suppress the check instead. But `A := Integer'Succ
> (A);` is straight up refused.
No, that's a C-like reasoning, idiomatic loops in Ada never overflow their
index and, therefore, people should never fiddle with overflow checks:
procedure P is
type Arr is array (Positive) of Boolean;
Table : Arr;
begin
for J in Table'Range loop
Table (J) := True;
end loop;
end;
works just fine. That being said, the compiler should accept the code.