[Ada] Crash on improper use of GNAT attribute Type_Key

gcc/ada/

	* sem_attr.adb (Analyze_Attribute, case Type_Key): Attribute can
	be applied to a formal type.
	* sem_ch5.adb (Analyze_Case_Statement): If Extensions_Allowed is
	not enabled, verify that the type of the expression is discrete.
This commit is contained in:
Ed Schonberg 2021-08-12 10:39:21 -04:00 committed by Pierre-Marie de Rodat
parent 10ca293141
commit 1c37d1960a
2 changed files with 10 additions and 1 deletions

View file

@ -6643,7 +6643,9 @@ package body Sem_Attr is
Initialize (CRC);
Compute_Type_Key (Entity (P));
if not Is_Frozen (Entity (P)) then
if not Is_Frozen (Entity (P))
and then not Is_Generic_Type (Entity (P))
then
Error_Msg_N ("premature usage of Type_Key?", N);
end if;

View file

@ -1681,6 +1681,13 @@ package body Sem_Ch5 is
Error_Msg_N
("(Ada 83) case expression cannot be of a generic type", Exp);
return;
elsif not Extensions_Allowed
and then not Is_Discrete_Type (Exp_Type)
then
Error_Msg_N
("expression in case statement must be of a discrete_Type", Exp);
return;
end if;
-- If the case expression is a formal object of mode in out, then treat