https://gcc.gnu.org/g:2fb7db82783c51009d57deffd405ef501ef9aa9a

commit r15-10066-g2fb7db82783c51009d57deffd405ef501ef9aa9a
Author: Bob Duff <d...@adacore.com>
Date:   Wed Jul 16 10:29:01 2025 -0400

    ada: Bug in Indefinite_Holders instance passed to formal package
    
    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.

Diff:
---
 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 02c7c3696e82..e00f5140588d 100644
--- a/gcc/ada/sem_ch12.adb
+++ b/gcc/ada/sem_ch12.adb
@@ -7542,6 +7542,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;

Reply via email to