]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
exp_ch4.adb (Expand_N_In): Suppress range warnings in instances
authorRobert Dewar <dewar@adacore.com>
Mon, 4 Aug 2008 18:50:33 +0000 (20:50 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Mon, 4 Aug 2008 18:50:33 +0000 (20:50 +0200)
2008-08-04  Robert Dewar  <dewar@adacore.com>

* exp_ch4.adb (Expand_N_In): Suppress range warnings in instances

From-SVN: r138649

gcc/ada/exp_ch4.adb

index 6b395ac689866d913320e3f44e25369aa6b4769f..d0b60f313f7c88a99397fc25376125f499816ea4 100644 (file)
@@ -3873,6 +3873,12 @@ package body Exp_Ch4 is
               and then Compile_Time_Known_Value (Hi)
               and then Expr_Value (Type_High_Bound (Ltyp)) = Expr_Value (Hi)
               and then Expr_Value (Type_Low_Bound  (Ltyp)) = Expr_Value (Lo)
+
+               --  Kill warnings in instances, since they may be cases where we
+               --  have a test in the generic that makes sense with some types
+               --  and not with other types.
+
+              and then not In_Instance
             then
                Substitute_Valid_Check;
                return;
@@ -3886,7 +3892,7 @@ package body Exp_Ch4 is
             --  legality checks, because we are constant-folding beyond RM 4.9.
 
             if Lcheck = LT or else Ucheck = GT then
-               if Warn1 then
+               if Warn1 and then not In_Instance then
                   Error_Msg_N ("?range test optimized away", N);
                   Error_Msg_N ("\?value is known to be out of range", N);
                end if;
@@ -3902,7 +3908,7 @@ package body Exp_Ch4 is
             --  since we know we are in range.
 
             elsif Lcheck in Compare_GE and then Ucheck in Compare_LE then
-               if Warn1 then
+               if Warn1 and then not In_Instance then
                   Error_Msg_N ("?range test optimized away", N);
                   Error_Msg_N ("\?value is known to be in range", N);
                end if;
@@ -3919,7 +3925,7 @@ package body Exp_Ch4 is
             --  a comparison against the upper bound.
 
             elsif Lcheck in Compare_GE then
-               if Warn2 then
+               if Warn2 and then not In_Instance then
                   Error_Msg_N ("?lower bound test optimized away", Lo);
                   Error_Msg_N ("\?value is known to be in range", Lo);
                end if;
@@ -3937,7 +3943,7 @@ package body Exp_Ch4 is
             --  a comparison against the lower bound.
 
             elsif Ucheck in Compare_LE then
-               if Warn2 then
+               if Warn2 and then not In_Instance then
                   Error_Msg_N ("?upper bound test optimized away", Hi);
                   Error_Msg_N ("\?value is known to be in range", Hi);
                end if;