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;

Reply via email to