From 94117322e68f29677f5a7088fc83f57e824ca8a7 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Fri, 27 Nov 2020 09:21:17 +0100 Subject: [PATCH] [Ada] Another small adjustment to System.Value_R gcc/ada/ * libgnat/s-valuer.adb (Scan_Decimal_Digits): Tweak overflow test. (Scan_Integral_Digits): Likewise. --- gcc/ada/libgnat/s-valuer.adb | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) 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; -- 2.30.2