[Ada] Suggest use of First_Valid/Last_Valid on type with static predicate

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.

gcc/ada/

	* sem_util.adb (Bad_Predicated_Subtype_Use): Add continuation
	message.
This commit is contained in:
Yannick Moy 2022-01-19 11:19:50 +01:00 committed by Pierre-Marie de Rodat
parent c329830825
commit 655ca5aaa9

View file

@ -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.