Index: exp_attr.adb =================================================================== RCS file: /cvs/gcc/gcc/gcc/ada/exp_attr.adb,v retrieving revision 1.21 diff -u -p -r1.21 exp_attr.adb --- exp_attr.adb 1 Jul 2005 01:23:33 -0000 1.21 +++ exp_attr.adb 4 Jul 2005 13:18:23 -0000 @@ -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; -----------