diff --git a/gcc/ada/sem_ch5.adb b/gcc/ada/sem_ch5.adb index e6766c75685..0dfd8b4a52e 100644 --- a/gcc/ada/sem_ch5.adb +++ b/gcc/ada/sem_ch5.adb @@ -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. diff --git a/gcc/ada/sem_ch8.adb b/gcc/ada/sem_ch8.adb index 4d9b5ba08b6..79099efc29c 100644 --- a/gcc/ada/sem_ch8.adb +++ b/gcc/ada/sem_ch8.adb @@ -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