aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEd Schonberg <schonberg@adacore.com>2005-12-09 18:21:49 +0100
committerArnaud Charlet <charlet@gcc.gnu.org>2005-12-09 18:21:49 +0100
commit509a32195401171b132019a57c0e01d26fea939b (patch)
tree903a3305e202c430772e5d80e5bb9187e2bb0db0 /gcc
parent39edfb4572286b82d9bad3785a7ecaf8d49470a2 (diff)
downloadgcc-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.adb15
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;