From: Javier Miranda <[email protected]>

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.

Tested on x86_64-pc-linux-gnu, committed on master.

---
 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 0629dda91a9..1235ea453b6 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
-- 
2.51.0

Reply via email to