[Ada] Fix bogus error on conversion from Float to 128-bit unsigned

gcc/ada/

	* checks.adb (Apply_Float_Conversion_Check): Saturate the bounds
	of the check to those of the base type of the expression.
This commit is contained in:
Eric Botcazou 2020-08-19 21:54:21 +02:00 committed by Pierre-Marie de Rodat
parent d7e2013065
commit 46e5478350
1 changed files with 18 additions and 0 deletions

View File

@ -2149,6 +2149,15 @@ package body Checks is
Lo_OK := (Lo >= UR_From_Uint (Ifirst));
end if;
-- Saturate the lower bound to that of the expression's type, because
-- we do not want to create an out-of-range value but we still need to
-- do a comparison to catch NaNs.
if Lo < Expr_Value_R (Type_Low_Bound (Expr_Type)) then
Lo := Expr_Value_R (Type_Low_Bound (Expr_Type));
Lo_OK := True;
end if;
if Lo_OK then
-- Lo_Chk := (X >= Lo)
@ -2183,6 +2192,15 @@ package body Checks is
Hi_OK := (Hi <= UR_From_Uint (Ilast));
end if;
-- Saturate the higher bound to that of the expression's type, because
-- we do not want to create an out-of-range value but we still need to
-- do a comparison to catch NaNs.
if Hi > Expr_Value_R (Type_High_Bound (Expr_Type)) then
Hi := Expr_Value_R (Type_High_Bound (Expr_Type));
Hi_OK := True;
end if;
if Hi_OK then
-- Hi_Chk := (X <= Hi)