[Bug tree-optimization/30911] VRP fails to eliminate range checks in Ada code
baldrick at free dot fr
gcc-bugzilla@gcc.gnu.org
Sun Mar 30 16:03:00 GMT 2008
------- Comment #64 from baldrick at free dot fr 2008-03-30 16:02 -------
Subject: Re: VRP fails to eliminate range checks in Ada code
> > But there are no checks on the array access. It looks like the f-e
> > doesn't generate them in the first place (as opposed to fold or gigi
> > making a mistake).
>
> This is as documented in the GNAT manual, section 3.2.4 Validity Checking.
> You need to pass -gnatVs to have them.
Consider the following test case:
procedure Overflow (X : Positive) return Integer is
A : array (Positive) of Integer;
pragma Import (Ada, A);
begin
A (X) := X;
end;
(for which no checks are generated). In the user guide
GNAT GPL User's Guide
The GNAT Ada Compiler
GNAT GPL Edition, Version 2007
Document revision level 1.422
Date: 2007/03/30 03:28:29
in section 3.2.4 it says:
In GNAT, the result of such an evaluation in normal default mode is to
either use the value unmodified, or to raise Constraint_Error in those
cases where use of the unmodified value would cause erroneous execution.
The cases where unmodified values might lead to erroneous execution are
case statements (where a wild jump might result from an invalid value),
and subscripts on the left hand side (where memory corruption could occur
as a result of an invalid value).
This testcase is a clear example of erroneous execution, being of the type
explicitly mentioned. So according to section 3.2.4 Constraint_Error should
be raised "in normal default mode". Yet this is not the case.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30911
More information about the Gcc-bugs
mailing list