From: Yannick Moy Date: Wed, 19 Jan 2022 10:19:50 +0000 (+0100) Subject: [Ada] Suggest use of First_Valid/Last_Valid on type with static predicate X-Git-Tag: basepoints/gcc-14~7005 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=655ca5aaa970bb5e6727a72be6c3ba9d9f9d5f09;p=thirdparty%2Fgcc.git [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. --- diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index 1fc2c617afa..d76b5d93511 100644 --- 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.