From fb246154cdeb518b8e8a584032afbda4d381a03b Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Mon, 25 Jan 2021 19:22:39 +0100 Subject: [PATCH] [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. --- gcc/ada/libgnat/s-fatgen.adb | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/gcc/ada/libgnat/s-fatgen.adb b/gcc/ada/libgnat/s-fatgen.adb index ec376e7..e591cca 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 -- 2.7.4