summaryrefslogtreecommitdiff
path: root/gcc/ada/sem_ch13.adb
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/ada/sem_ch13.adb')
-rw-r--r--gcc/ada/sem_ch13.adb18
1 files changed, 18 insertions, 0 deletions
diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb
index 8afc5429e48..54cc886a6a5 100644
--- a/gcc/ada/sem_ch13.adb
+++ b/gcc/ada/sem_ch13.adb
@@ -3129,6 +3129,24 @@ package body Sem_Ch13 is
Pname := Name_Postcondition;
end if;
+ -- Check that the class-wide predicate cannot be applied to
+ -- an operation of a synchronized type that is not a tagged
+ -- type. Other legality checks are performed when analyzing
+ -- the contract of the operation.
+
+ if Class_Present (Aspect)
+ and then Is_Concurrent_Type (Current_Scope)
+ and then not Is_Tagged_Type (Current_Scope)
+ and then Ekind_In (E, E_Entry, E_Function, E_Procedure)
+ then
+ Error_Msg_Name_1 := Original_Aspect_Pragma_Name (Aspect);
+ Error_Msg_N
+ ("aspect % can only be specified for a primitive "
+ & "operation of a tagged type", Aspect);
+
+ goto Continue;
+ end if;
+
-- If the expressions is of the form A and then B, then
-- we generate separate Pre/Post aspects for the separate
-- clauses. Since we allow multiple pragmas, there is no