From 8833f142768c41651503e709262d0d0fdd4a196c Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Fri, 18 Dec 2020 18:49:31 +0100 Subject: [PATCH] [Ada] Fix minor issue in Scan_Decimal_Digits gcc/ada/ * libgnat/s-valuer.adb (Scan_Decimal_Digits): Set Extra to zero when the precision limit is reached by means of trailing zeros and prevent it from being overwritten later. --- gcc/ada/libgnat/s-valuer.adb | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/gcc/ada/libgnat/s-valuer.adb b/gcc/ada/libgnat/s-valuer.adb index bd57bfbd88c1..937ef8e9db93 100644 --- a/gcc/ada/libgnat/s-valuer.adb +++ b/gcc/ada/libgnat/s-valuer.adb @@ -261,7 +261,11 @@ package body System.Value_R is Scale := Scale - 1; else + Extra := 0; Precision_Limit_Reached := True; + if Round and then J = Trailing_Zeros then + Round_Extra (Digit, Value, Scale, Extra, Base); + end if; exit; end if; end loop; @@ -274,11 +278,16 @@ package body System.Value_R is Temp := Value * Uns (Base) + Uns (Digit); + -- Precision_Limit_Reached may have been set above + + if Precision_Limit_Reached then + null; + -- Check if Temp is larger than Precision_Limit, taking into -- account that Temp may wrap around when Precision_Limit is -- equal to the largest integer. - if Value <= Umax + elsif Value <= Umax or else (Value <= UmaxB and then ((Precision_Limit < Uns'Last and then Temp <= Precision_Limit) -- 2.47.2