aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEd Schonberg <schonberg@adacore.com>2020-05-28 17:09:32 -0400
committerGiuliano Belinassi <giuliano.belinassi@usp.br>2020-08-17 13:17:13 -0300
commit2c4b1e59192981d476fb8a345a7438890deab788 (patch)
tree58e5cca4d7ed44959f858d8fa0c3bc1ade3a252e /gcc
parente6ab530389319cd1d9345ad53cc32fd81cc20cab (diff)
downloadgcc-2c4b1e59192981d476fb8a345a7438890deab788.zip
gcc-2c4b1e59192981d476fb8a345a7438890deab788.tar.gz
gcc-2c4b1e59192981d476fb8a345a7438890deab788.tar.bz2
[Ada] Spurious error on parameterless acccess_to_subprogram
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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/exp_ch3.adb2
-rw-r--r--gcc/ada/exp_ch6.adb9
2 files changed, 9 insertions, 2 deletions
diff --git a/gcc/ada/exp_ch3.adb b/gcc/ada/exp_ch3.adb
index 3402a08..705da58 100644
--- a/gcc/ada/exp_ch3.adb
+++ b/gcc/ada/exp_ch3.adb
@@ -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 :=
diff --git a/gcc/ada/exp_ch6.adb b/gcc/ada/exp_ch6.adb
index 076bbba..a42bd25 100644
--- a/gcc/ada/exp_ch6.adb
+++ b/gcc/ada/exp_ch6.adb
@@ -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,