From: Bob Duff <d...@adacore.com> Fix bug when an instance of Indefinite_Holders with a class-wide type is passed as a generic formal package; Program_Error was raised when dealing with the implicit "=" function.
The fix is to disable legality checks in formal packages when the entity is an E_Subprogram_Body, because these are implicitly generated for class-wide predefined functions when passed to generics. gcc/ada/ChangeLog: * sem_ch12.adb (Check_Formal_Package_Instance): Do nothing in case of E_Subprogram_Body. Tested on x86_64-pc-linux-gnu, committed on master. --- gcc/ada/sem_ch12.adb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb index 1cb9d115cc5..b5c9e88adbb 100644 --- a/gcc/ada/sem_ch12.adb +++ b/gcc/ada/sem_ch12.adb @@ -7574,6 +7574,12 @@ package body Sem_Ch12 is or else not Same_Instantiated_Function (E1, E2)); end if; + -- No check is needed if this is the body of a subprogram that is + -- implicitly created in the case of class-wide predefined functions. + + elsif Ekind (E1) = E_Subprogram_Body then + null; + else raise Program_Error; end if; -- 2.43.0