From 94eefd2ef77020f87a7787c294b6b01c3e67450a Mon Sep 17 00:00:00 2001 From: Robert Dewar Date: Mon, 4 Aug 2008 20:50:33 +0200 Subject: [PATCH] exp_ch4.adb (Expand_N_In): Suppress range warnings in instances 2008-08-04 Robert Dewar * exp_ch4.adb (Expand_N_In): Suppress range warnings in instances From-SVN: r138649 --- gcc/ada/exp_ch4.adb | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb index 6b395ac6898..d0b60f313f7 100644 --- a/gcc/ada/exp_ch4.adb +++ b/gcc/ada/exp_ch4.adb @@ -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;