diff options
author | Ed Schonberg <schonberg@adacore.com> | 2005-07-04 15:27:32 +0200 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2005-07-04 15:27:32 +0200 |
commit | 3b641023b36ac88164d64851ee5e45fc365937cc (patch) | |
tree | 101f3dee509d9d4f866608dbae64b745e938791a | |
parent | d9e0a58787285a0753791dd83a5d831bbbc92117 (diff) | |
download | gcc-3b641023b36ac88164d64851ee5e45fc365937cc.zip gcc-3b641023b36ac88164d64851ee5e45fc365937cc.tar.gz gcc-3b641023b36ac88164d64851ee5e45fc365937cc.tar.bz2 |
exp_attr.adb (Mod): Evaluate condition expression with checks off, to prevent spurious warnings.
2005-07-04 Ed Schonberg <schonberg@adacore.com>
* exp_attr.adb (Mod): Evaluate condition expression with checks off,
to prevent spurious warnings.
From-SVN: r101577
-rw-r--r-- | gcc/ada/exp_attr.adb | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/gcc/ada/exp_attr.adb b/gcc/ada/exp_attr.adb index e80a15d..0c43d59 100644 --- a/gcc/ada/exp_attr.adb +++ b/gcc/ada/exp_attr.adb @@ -2372,7 +2372,7 @@ package body Exp_Attr is Right_Opnd => Make_Integer_Literal (Loc, Modv)))); -- Here we know that the modulus is larger than type'Last of the - -- integer type. There are three possible cases to consider: + -- integer type. There are two cases to consider: -- a) The integer value is non-negative. In this case, it is -- returned as the result (since it is less than the modulus). @@ -2393,6 +2393,10 @@ package body Exp_Attr is -- Furthermore, (-value - 1) can be expressed as -(value + 1) -- which we can compute using the integer base type. + -- Once this is done we analyze the conditional expression without + -- range checks, because we know everything is in range, and we + -- want to prevent spurious warnings on either branch. + else Rewrite (N, Make_Conditional_Expression (Loc, @@ -2420,7 +2424,7 @@ package body Exp_Attr is end if; - Analyze_And_Resolve (N, Btyp); + Analyze_And_Resolve (N, Btyp, All_Checks); end Mod_Case; ----------- |