Attributes First_Valid/Last_Valid can be used on types with static
predicate, instead of First/Last/Range. Include that suggestion in
the corresponding error message.
Tested on x86_64-pc-linux-gnu, committed on trunk
gcc/ada/
* sem_util.adb (Bad_Predicated_Subtype_Use): Add continuation
message.
diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb
--- a/gcc/ada/sem_util.adb
+++ b/gcc/ada/sem_util.adb
@@ -1719,6 +1719,31 @@ package body Sem_Util is
Error_Msg_FE (Msg, N, Typ);
end if;
+ -- Suggest to use First_Valid/Last_Valid instead of First/Last/Range
+ -- if the predicate is static.
+
+ if not Has_Dynamic_Predicate_Aspect (Typ)
+ and then Has_Static_Predicate (Typ)
+ and then Nkind (N) = N_Attribute_Reference
+ then
+ declare
+ Aname : constant Name_Id := Attribute_Name (N);
+ Attr_Id : constant Attribute_Id := Get_Attribute_Id (Aname);
+ begin
+ case Attr_Id is
+ when Attribute_First =>
+ Error_Msg_F ("\use attribute First_Valid instead", N);
+ when Attribute_Last =>
+ Error_Msg_F ("\use attribute Last_Valid instead", N);
+ when Attribute_Range =>
+ Error_Msg_F ("\use attributes First_Valid and "
+ & "Last_Valid instead", N);
+ when others =>
+ null;
+ end case;
+ end;
+ end if;
+
-- Emit an optional suggestion on how to remedy the error if the
-- context warrants it.