From 509a32195401171b132019a57c0e01d26fea939b Mon Sep 17 00:00:00 2001 From: Ed Schonberg Date: Fri, 9 Dec 2005 18:21:49 +0100 Subject: [PATCH] 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 * 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 --- gcc/ada/sem_ch9.adb | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/gcc/ada/sem_ch9.adb b/gcc/ada/sem_ch9.adb index c49bed34cbf..dc34ada80d8 100644 --- a/gcc/ada/sem_ch9.adb +++ b/gcc/ada/sem_ch9.adb @@ -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;