[Ada] Spurious error on parameterless acccess_to_subprogram
authorEd Schonberg <schonberg@adacore.com>
Thu, 28 May 2020 21:09:32 +0000 (17:09 -0400)
committerPierre-Marie de Rodat <derodat@adacore.com>
Fri, 10 Jul 2020 09:16:22 +0000 (05:16 -0400)
gcc/ada/

* exp_ch3.adb (Build_Access_Subprogram_Wrapper_Body): Create a
proper signature when the access type denotes a parameterless
subprogram.
* exp_ch6.adb (Expand_Call): Handle properly a  parameterless
indirect call when the corresponding access type has contracts.

gcc/ada/exp_ch3.adb
gcc/ada/exp_ch6.adb

index 3402a08..705da58 100644 (file)
@@ -547,10 +547,10 @@ package body Exp_Ch3 is
       Act := First (Parameter_Specifications (Spec_Node));
 
       while Present (Act) loop
+         exit when Act = Last (Parameter_Specifications (Spec_Node));
          Append_To (Actuals,
            Make_Identifier (Loc, Chars (Defining_Identifier (Act))));
          Next (Act);
-         exit when Act = Last (Parameter_Specifications (Spec_Node));
       end loop;
 
       Ptr :=
index 076bbba..a42bd25 100644 (file)
@@ -2686,9 +2686,10 @@ package body Exp_Ch6 is
               Access_Subprogram_Wrapper (Etype (Name (N)));
             Ptr      : constant Node_Id   := Prefix (Name (N));
             Ptr_Type : constant Entity_Id := Etype (Ptr);
-            Parms    : constant List_Id   := Parameter_Associations (N);
             Typ      : constant Entity_Id := Etype (N);
+
             New_N    : Node_Id;
+            Parms    : List_Id   := Parameter_Associations (N);
             Ptr_Act  : Node_Id;
 
          begin
@@ -2711,6 +2712,12 @@ package body Exp_Ch6 is
                Ptr_Act := Ptr;
             end if;
 
+            --  Handle parameterless subprogram.
+
+            if No (Parms) then
+               Parms := New_List;
+            end if;
+
             Append
              (Make_Parameter_Association (Loc,
                 Selector_Name => Make_Identifier (Loc,