https://gcc.gnu.org/g:f656344f5fad97f67bd12797a37bb5922021fd5c

commit r16-5473-gf656344f5fad97f67bd12797a37bb5922021fd5c
Author: Javier Miranda <[email protected]>
Date:   Tue Nov 11 19:00:22 2025 +0000

    ada: No extra formals on anonymous access types of C subprograms
    
    Extra formals must not be added to anonymous access to subprogram
    types defined in the profile of imported C subprograms.
    
    gcc/ada/ChangeLog:
    
            * sem_ch6.adb (Create_Extra_Formals): Do not add extra formals to
            anonymous access to subprogram types defined in the profile of
            subprograms that have foreign convention.

Diff:
---
 gcc/ada/sem_ch6.adb | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb
index 0629dda91a91..1235ea453b6a 100644
--- a/gcc/ada/sem_ch6.adb
+++ b/gcc/ada/sem_ch6.adb
@@ -9077,6 +9077,17 @@ package body Sem_Ch6 is
       then
          Freeze_Extra_Formals (E);
          return;
+
+      elsif Ekind (Ref_E) in E_Subprogram_Type
+        and then Is_Itype (Ref_E)
+        and then Nkind (Associated_Node_For_Itype (Ref_E)) in
+                   N_Function_Specification
+                 | N_Procedure_Specification
+        and then Has_Foreign_Convention
+                   (Defining_Entity (Associated_Node_For_Itype (Ref_E)))
+      then
+         Freeze_Extra_Formals (E);
+         return;
       end if;
 
       --  If the subprogram is a predefined dispatching subprogram then don't

Reply via email to