diff options
author | Steve Baird <baird@adacore.com> | 2024-02-27 12:11:47 -0800 |
---|---|---|
committer | Marc Poulhiès <poulhies@adacore.com> | 2024-05-16 10:49:34 +0200 |
commit | 584ade0b82339d95463bc91c9fdd77579b16426a (patch) | |
tree | cab2746a663a6f4cea3010e6c6db374bbe409caa /gcc | |
parent | 9ec20f1f84ad19bb8e2020657ee4c851ba5cd7b0 (diff) | |
download | gcc-584ade0b82339d95463bc91c9fdd77579b16426a.zip gcc-584ade0b82339d95463bc91c9fdd77579b16426a.tar.gz gcc-584ade0b82339d95463bc91c9fdd77579b16426a.tar.bz2 |
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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/checks.adb | 3 | ||||
-rw-r--r-- | gcc/ada/exp_util.adb | 5 |
2 files changed, 8 insertions, 0 deletions
diff --git a/gcc/ada/checks.adb b/gcc/ada/checks.adb index 6af392e..bada3df 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 057cf3e..b71f773 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; |