[Ada] AI12-0204 Renaming of a prefixed view
authorArnaud Charlet <charlet@adacore.com>
Mon, 24 Feb 2020 10:41:00 +0000 (05:41 -0500)
committerPierre-Marie de Rodat <derodat@adacore.com>
Mon, 8 Jun 2020 07:51:15 +0000 (03:51 -0400)
2020-06-08  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

* sem_ch5.adb: Fix typo.
* sem_ch8.adb (Analyze_Renamed_Primitive_Operation): Check that
the prefix of a prefixed view must be renamable as an object.

gcc/ada/sem_ch5.adb
gcc/ada/sem_ch8.adb

index e6766c756852c5e51a00d9a819952280040e8e62..0dfd8b4a52edd1950dd08d54619402c6c764168b 100644 (file)
@@ -2390,7 +2390,7 @@ package body Sem_Ch5 is
             --  AI12-0047 stipulates that the domain (array or container)
             --  cannot be a component that depends on a discriminant if the
             --  enclosing object is mutable, to prevent a modification of the
-            --  dowmain of iteration in the course of an iteration.
+            --  domain of iteration in the course of an iteration.
 
             --  If the object is an expression it has been captured in a
             --  temporary, so examine original node.
index 4d9b5ba08b6cf18cbe945999686acedc341dacd1..79099efc29cbeb43b14bcd116cf8db2cf987f42f 100644 (file)
@@ -1826,6 +1826,7 @@ package body Sem_Ch8 is
       Is_Body : Boolean)
    is
       Old_S : Entity_Id;
+      Nam   : Entity_Id;
 
       function Conforms
         (Subp : Entity_Id;
@@ -1902,7 +1903,7 @@ package body Sem_Ch8 is
       end if;
 
       if Old_S = Any_Id then
-         Error_Msg_N (" no subprogram or entry matches specification",  N);
+         Error_Msg_N ("no subprogram or entry matches specification",  N);
 
       else
          if Is_Body then
@@ -1920,6 +1921,21 @@ package body Sem_Ch8 is
                Error_Msg_N ("mode conformance error in renaming", N);
             end if;
 
+            --  AI12-0204: The prefix of a prefixed view that is renamed or
+            --  passed as a formal subprogram must be renamable as an object.
+
+            Nam := Prefix (Name (N));
+
+            if Is_Object_Reference (Nam) then
+               if Is_Dependent_Component_Of_Mutable_Object (Nam) then
+                  Error_Msg_N
+                    ("illegal renaming of discriminant-dependent component",
+                     Nam);
+               end if;
+            else
+               Error_Msg_N ("expect object name in renaming", Nam);
+            end if;
+
             --  Enforce the rule given in (RM 6.3.1 (10.1/2)): a prefixed
             --  view of a subprogram is intrinsic, because the compiler has
             --  to generate a wrapper for any call to it. If the name in a