[Ada] Diagnose illegal overriding indicators in protected bodies
authorEd Schonberg <schonberg@adacore.com>
Mon, 23 Mar 2020 21:44:29 +0000 (17:44 -0400)
committerPierre-Marie de Rodat <derodat@adacore.com>
Fri, 12 Jun 2020 08:29:23 +0000 (04:29 -0400)
2020-06-12  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_ch6.adb (Check_Overriding_Indicatior): Reject an
overriding indicator on a subprogram declared within a protected
body.

gcc/ada/sem_ch6.adb

index 9fb46d974741ae5885967b50674fe25fe20b7c80..5062f57b7ead66fde6ddd2f8cae61404df190806 100644 (file)
@@ -6515,6 +6515,19 @@ package body Sem_Ch6 is
          return;
       end if;
 
+      --  An overriding indication is illegal on a subprogram declared
+      --  in a protected body, where there is no operation to override.
+
+      if (Must_Override (Spec) or else Must_Not_Override (Spec))
+        and then Is_List_Member (Decl)
+        and then Present (Parent (List_Containing (Decl)))
+        and then Nkind (Parent (List_Containing (Decl))) = N_Protected_Body
+      then
+         Error_Msg_N
+           ("illegal overriding indication in protected body", Decl);
+         return;
+      end if;
+
       --  The overriding operation is type conformant with the overridden one,
       --  but the names of the formals are not required to match. If the names
       --  appear permuted in the overriding operation, this is a possible