]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[Ada] Fix for a static Leading_Part attribute raising constraint error
authorPiotr Trojanek <trojanek@adacore.com>
Tue, 31 Aug 2021 17:13:29 +0000 (19:13 +0200)
committerPierre-Marie de Rodat <derodat@adacore.com>
Mon, 4 Oct 2021 08:45:08 +0000 (08:45 +0000)
gcc/ada/

* sem_attr.adb (Eval_Attribute): Evaluation of attribute
Leading_Part with illegal second parameter is now similar to
evaluation of Remainder with its second parameter being zero.

gcc/ada/sem_attr.adb

index 4265df6b8c025ed2828b1db8490de26ef972b2b2..180210c25bae0464c95e8754c30dffa5e4397146 100644 (file)
@@ -9135,12 +9135,26 @@ package body Sem_Attr is
       -- Leading_Part --
       ------------------
 
-      when Attribute_Leading_Part =>
+      when Attribute_Leading_Part => Leading_Part : declare
+         Radix_Digits : constant Uint := Expr_Value (E2);
+
+      begin
+         if UI_Le (Radix_Digits, Uint_0) then
+            Apply_Compile_Time_Constraint_Error
+              (N, "Radix_Digits in Leading_Part is zero or negative",
+               CE_Explicit_Raise,
+               Warn => not Static);
+
+            Check_Expressions;
+            return;
+         end if;
+
          Fold_Ureal
            (N,
             Eval_Fat.Leading_Part
-              (P_Base_Type, Expr_Value_R (E1), Expr_Value (E2)),
+              (P_Base_Type, Expr_Value_R (E1), Radix_Digits),
             Static);
+      end Leading_Part;
 
       ------------
       -- Length --