aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Baird <baird@adacore.com>2024-02-27 12:11:47 -0800
committerMarc Poulhiès <poulhies@adacore.com>2024-05-16 10:49:34 +0200
commit584ade0b82339d95463bc91c9fdd77579b16426a (patch)
treecab2746a663a6f4cea3010e6c6db374bbe409caa
parent9ec20f1f84ad19bb8e2020657ee4c851ba5cd7b0 (diff)
downloadgcc-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.
-rw-r--r--gcc/ada/checks.adb3
-rw-r--r--gcc/ada/exp_util.adb5
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;