From: Eric Botcazou Date: Fri, 27 Nov 2020 08:21:17 +0000 (+0100) Subject: [Ada] Another small adjustment to System.Value_R X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=94117322e68f29677f5a7088fc83f57e824ca8a7;p=gcc.git [Ada] Another small adjustment to System.Value_R gcc/ada/ * libgnat/s-valuer.adb (Scan_Decimal_Digits): Tweak overflow test. (Scan_Integral_Digits): Likewise. --- diff --git a/gcc/ada/libgnat/s-valuer.adb b/gcc/ada/libgnat/s-valuer.adb index 9c126cc3622..65a0d509e5a 100644 --- a/gcc/ada/libgnat/s-valuer.adb +++ b/gcc/ada/libgnat/s-valuer.adb @@ -236,12 +236,15 @@ package body System.Value_R is Temp := Value * Uns (Base) + Uns (Digit); -- Check if Temp is larger than Precision_Limit, taking into - -- account that Temp may have wrapped around. + -- account that Temp may wrap around when Precision_Limit is + -- equal to the largest integer. if Value <= Umax or else (Value <= UmaxB - and then Temp <= Precision_Limit - and then Temp >= Uns (Base)) + and then ((Precision_Limit < Uns'Last + and then Temp <= Precision_Limit) + or else (Precision_Limit = Uns'Last + and then Temp >= Uns (Base)))) then Value := Temp; Scale := Scale - 1; @@ -386,12 +389,15 @@ package body System.Value_R is Temp := Value * Uns (Base) + Uns (Digit); -- Check if Temp is larger than Precision_Limit, taking into - -- account that Temp may have wrapped around. + -- account that Temp may wrap around when Precision_Limit is + -- equal to the largest integer. if Value <= Umax or else (Value <= UmaxB - and then Temp <= Precision_Limit - and then Temp >= Uns (Base)) + and then ((Precision_Limit < Uns'Last + and then Temp <= Precision_Limit) + or else (Precision_Limit = Uns'Last + and then Temp >= Uns (Base)))) then Value := Temp;