In some cases with validity checking enabled via the -gnatVa option,
the compiler generates validity checks that can (obviously) never fail.
These include validity checks for (some) static expressions, and consecutive
identical checks generated for a single read of an object.
gcc/ada/
* checks.adb (Expr_Known_Valid): Return True for a static expression.
* exp_util.adb (Adjust_Condition): No validity check needed for a
condition if it is an expression for which a validity check has
already been generated.
then
return True;
+ elsif Is_Static_Expression (Expr) then
+ return True;
+
-- If the expression is the value of an object that is known to be
-- valid, then clearly the expression value itself is valid.
if Validity_Checks_On
and then
(Validity_Check_Tests or else Is_Hardbool_Type (T))
+
+ -- no check needed here if validity has already been checked
+ and then not
+ (Validity_Check_Operands and then
+ (Nkind (N) in N_Op or else Nkind (Parent (N)) in N_Op))
then
Ensure_Valid (N);
end if;