2005-07-04 Ed Schonberg <schonberg@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 4 Jul 2005 13:27:32 +0000 (13:27 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 4 Jul 2005 13:27:32 +0000 (13:27 +0000)
* exp_attr.adb (Mod): Evaluate condition expression with checks off,
to prevent spurious warnings.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@101577 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ada/exp_attr.adb

index e80a15d..0c43d59 100644 (file)
@@ -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;
 
       -----------