https://gcc.gnu.org/g:584ade0b82339d95463bc91c9fdd77579b16426a
commit r15-568-g584ade0b82339d95463bc91c9fdd77579b16426a Author: Steve Baird <ba...@adacore.com> Date: Tue Feb 27 12:11:47 2024 -0800 ada: Redundant validity checks 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. Diff: --- gcc/ada/checks.adb | 3 +++ gcc/ada/exp_util.adb | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/gcc/ada/checks.adb b/gcc/ada/checks.adb index 6af392eeda8a..bada3dffcbfc 100644 --- a/gcc/ada/checks.adb +++ b/gcc/ada/checks.adb @@ -6839,6 +6839,9 @@ package body Checks is 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. diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb index 057cf3ebc480..b71f7739481d 100644 --- a/gcc/ada/exp_util.adb +++ b/gcc/ada/exp_util.adb @@ -416,6 +416,11 @@ package body Exp_Util is 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;