sem_ch9.adb (Analyze_Delay_Alternative, [...]): Use the first subtype of the type of the expression to verify that it is a...

2005-12-05  Ed Schonberg  <schonberg@adacore.com>

	* sem_ch9.adb (Analyze_Delay_Alternative, Analyze_Delay_Until): Use the
	first subtype of the type of the expression to verify that it is a
	legal Time type.

From-SVN: r108305
This commit is contained in:
Ed Schonberg 2005-12-09 18:21:49 +01:00 committed by Arnaud Charlet
parent 39edfb4572
commit 509a321954

View file

@ -525,6 +525,7 @@ package body Sem_Ch9 is
procedure Analyze_Delay_Alternative (N : Node_Id) is
Expr : Node_Id;
Typ : Entity_Id;
begin
Tasking_Used := True;
@ -549,9 +550,11 @@ package body Sem_Ch9 is
Pre_Analyze_And_Resolve (Expr);
end if;
Typ := First_Subtype (Etype (Expr));
if Nkind (Delay_Statement (N)) = N_Delay_Until_Statement
and then not Is_RTE (Base_Type (Etype (Expr)), RO_CA_Time)
and then not Is_RTE (Base_Type (Etype (Expr)), RO_RT_Time)
and then not Is_RTE (Typ, RO_CA_Time)
and then not Is_RTE (Typ, RO_RT_Time)
then
Error_Msg_N ("expect Time types for `DELAY UNTIL`", Expr);
end if;
@ -592,16 +595,18 @@ package body Sem_Ch9 is
-------------------------
procedure Analyze_Delay_Until (N : Node_Id) is
E : constant Node_Id := Expression (N);
E : constant Node_Id := Expression (N);
Typ : Entity_Id;
begin
Tasking_Used := True;
Check_Restriction (No_Delay, N);
Check_Potentially_Blocking_Operation (N);
Analyze (E);
Typ := First_Subtype (Etype (E));
if not Is_RTE (Base_Type (Etype (E)), RO_CA_Time) and then
not Is_RTE (Base_Type (Etype (E)), RO_RT_Time)
if not Is_RTE (Typ, RO_CA_Time) and then
not Is_RTE (Typ, RO_RT_Time)
then
Error_Msg_N ("expect Time types for `DELAY UNTIL`", E);
end if;