diff options
author | Ed Schonberg <schonberg@adacore.com> | 2005-12-09 18:21:49 +0100 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2005-12-09 18:21:49 +0100 |
commit | 509a32195401171b132019a57c0e01d26fea939b (patch) | |
tree | 903a3305e202c430772e5d80e5bb9187e2bb0db0 /gcc | |
parent | 39edfb4572286b82d9bad3785a7ecaf8d49470a2 (diff) | |
download | gcc-509a32195401171b132019a57c0e01d26fea939b.zip gcc-509a32195401171b132019a57c0e01d26fea939b.tar.gz gcc-509a32195401171b132019a57c0e01d26fea939b.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/sem_ch9.adb | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/gcc/ada/sem_ch9.adb b/gcc/ada/sem_ch9.adb index c49bed3..dc34ada 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; |