From: Eric Botcazou Date: Mon, 25 Jan 2021 18:22:39 +0000 (+0100) Subject: [Ada] Raise Constraint_Error for Compose and Scaling if Machine_Overflows X-Git-Tag: basepoints/gcc-13~7725 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fb246154cdeb518b8e8a584032afbda4d381a03b;p=thirdparty%2Fgcc.git [Ada] Raise Constraint_Error for Compose and Scaling if Machine_Overflows gcc/ada/ * libgnat/s-fatgen.adb (Scaling): Raise Constraint_Error in the overflow case when T'Machine_Overflows is True. --- diff --git a/gcc/ada/libgnat/s-fatgen.adb b/gcc/ada/libgnat/s-fatgen.adb index ec376e73e45d..e591ccad6c4b 100644 --- a/gcc/ada/libgnat/s-fatgen.adb +++ b/gcc/ada/libgnat/s-fatgen.adb @@ -771,12 +771,19 @@ package body System.Fat_Gen is -- Check for overflow if Adjustment > IEEE_Emax - Exp then - XX := 0.0; - return (if Minus then -1.0 / XX else 1.0 / XX); - pragma Annotate - (CodePeer, Intentional, "overflow check", "Infinity produced"); - pragma Annotate - (CodePeer, Intentional, "divide by zero", "Infinity produced"); + -- Optionally raise Constraint_Error as per RM A.5.3(29) + + if T'Machine_Overflows then + raise Constraint_Error with "Too large exponent"; + + else + XX := 0.0; + return (if Minus then -1.0 / XX else 1.0 / XX); + pragma Annotate (CodePeer, Intentional, "overflow check", + "Infinity produced"); + pragma Annotate (CodePeer, Intentional, "divide by zero", + "Infinity produced"); + end if; -- Check for underflow