aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/exp_ch8.adb
diff options
context:
space:
mode:
authorPiotr Trojanek <trojanek@adacore.com>2021-10-27 20:43:24 +0200
committerPierre-Marie de Rodat <derodat@adacore.com>2021-11-09 09:44:48 +0000
commitb064f139e3edfc7d9ed294ee8feccda2330d2ccb (patch)
tree432950f09a2e73fd5d3f43b9749470cbadecd87f /gcc/ada/exp_ch8.adb
parentb5f17bffea261a5fdd7b9a7bd334f21d528d3cfa (diff)
downloadgcc-b064f139e3edfc7d9ed294ee8feccda2330d2ccb.zip
gcc-b064f139e3edfc7d9ed294ee8feccda2330d2ccb.tar.gz
gcc-b064f139e3edfc7d9ed294ee8feccda2330d2ccb.tar.bz2
[Ada] Cleanup building of renamed equality
gcc/ada/ * exp_ch8.adb (Build_Body_For_Renaming): Remove unnecessary calls to Sloc; set Handled_Statement_Sequence when building subprogram body; whitespace cleanup.
Diffstat (limited to 'gcc/ada/exp_ch8.adb')
-rw-r--r--gcc/ada/exp_ch8.adb39
1 files changed, 22 insertions, 17 deletions
diff --git a/gcc/ada/exp_ch8.adb b/gcc/ada/exp_ch8.adb
index dba21ed..aa2c360 100644
--- a/gcc/ada/exp_ch8.adb
+++ b/gcc/ada/exp_ch8.adb
@@ -288,6 +288,7 @@ package body Exp_Ch8 is
function Build_Body_For_Renaming (Typ : Entity_Id) return Node_Id is
Left : constant Entity_Id := First_Formal (Id);
Right : constant Entity_Id := Next_Formal (Left);
+ Bodies : List_Id;
Body_Id : Entity_Id;
Decl : Node_Id;
@@ -295,11 +296,11 @@ package body Exp_Ch8 is
Set_Alias (Id, Empty);
Set_Has_Completion (Id, False);
Rewrite (N,
- Make_Subprogram_Declaration (Sloc (N),
+ Make_Subprogram_Declaration (Loc,
Specification => Specification (N)));
Set_Has_Delayed_Freeze (Id);
- Body_Id := Make_Defining_Identifier (Sloc (N), Chars (Id));
+ Body_Id := Make_Defining_Identifier (Loc, Chars (Id));
Set_Debug_Info_Needed (Body_Id);
if Has_Variant_Part (Typ) then
@@ -317,6 +318,12 @@ package body Exp_Ch8 is
-- subprogram.
else
+ -- While expanding record equality we might create auxiliary
+ -- subprograms that will be placed in the declaration list of the
+ -- equality subprogram itself.
+
+ Bodies := Empty_List;
+
Decl :=
Make_Subprogram_Body (Loc,
Specification =>
@@ -325,20 +332,18 @@ package body Exp_Ch8 is
Parameter_Specifications => Copy_Parameter_List (Id),
Result_Definition =>
New_Occurrence_Of (Standard_Boolean, Loc)),
- Declarations => Empty_List,
- Handled_Statement_Sequence => Empty);
-
- Set_Handled_Statement_Sequence (Decl,
- Make_Handled_Sequence_Of_Statements (Loc,
- Statements => New_List (
- Make_Simple_Return_Statement (Loc,
- Expression =>
- Expand_Record_Equality
- (Id,
- Typ => Typ,
- Lhs => Make_Identifier (Loc, Chars (Left)),
- Rhs => Make_Identifier (Loc, Chars (Right)),
- Bodies => Declarations (Decl))))));
+ Declarations => Bodies,
+ Handled_Statement_Sequence =>
+ Make_Handled_Sequence_Of_Statements (Loc,
+ Statements => New_List (
+ Make_Simple_Return_Statement (Loc,
+ Expression =>
+ Expand_Record_Equality
+ (Id,
+ Typ => Typ,
+ Lhs => Make_Identifier (Loc, Chars (Left)),
+ Rhs => Make_Identifier (Loc, Chars (Right)),
+ Bodies => Bodies)))));
end if;
return Decl;
@@ -375,7 +380,7 @@ package body Exp_Ch8 is
and then Scope (Entity (Nam)) = Standard_Standard
then
declare
- Typ : constant Entity_Id := Etype (First_Formal (Id));
+ Typ : constant Entity_Id := Etype (First_Formal (Id));
begin
-- Check whether this is a renaming of a predefined equality on an