Attribute Leading_Part, when its second parameter is zero or negative,
is now raising a constraint error when evaluated at compilation time
just like it did when evaluated at run time.
Tested on x86_64-pc-linux-gnu, committed on trunk
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.
diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb
--- a/gcc/ada/sem_attr.adb
+++ b/gcc/ada/sem_attr.adb
@@ -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 --