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.